Изменить строковый объект с помощью entmod - PullRequest
1 голос
/ 30 апреля 2020
(defun C:incercare (/ )
 (setq linie (entget (entlast))
       startp (assoc 10 linie) ; line start point
       lineen (subst (list 10 5.0 5.0 0.0) startp linie))

(entmod linie)
  )

Я пытаюсь изменить начальную точку последней нарисованной линии. После вызова функции incercare ничего не происходит

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Как отметил пользователь CAD Developer, вы вызываете entmod для оригинального DXF-списка данных, назначенного переменной linie, а не для модифицированного списка, возвращаемого subst функция и назначена переменной lineen.

Однако обратите внимание, что ваш код может быть значительно сжат, поскольку каждый шаг не обязательно должен быть назначен отдельной переменной, например:

(defun c:incercare ( / linie )
    (setq linie (entget (entlast)))
    (entmod (subst '(10 5.0 5.0 0.0) (assoc 10 linie) linie))
)

Здесь следует отметить несколько моментов:

  • Обратите внимание, что я объявил символ linie как локальную переменную в выражении defun, так что область действия этого переменная ограничена функцией c:incercare и не остается глобальной.

  • Я процитировал новую координату в виде литерального списка, используя одинарную кавычку или апостроф - это возможно, потому что список содержит только буквальные данные (постоянные числовые значения) и не содержит переменных данных - я расскажу об этой разнице более подробно в моем уроке по Апостроф и функция кавычек .

Ваша текущая функция предполагает, что последняя сущность, добавленная в базу данных чертежей, является сущностью LINE (или, по крайней мере, сущностью, геометрия которой определяется группой 10 DXF). Таким образом, вы можете включить условное выражение, чтобы проверить, так ли это, и ветку соответственно, например:

(defun c:incercare ( / ent enx )
    (if
        (and
            (setq ent (entlast))
            (setq enx (entget ent))
            (= "LINE" (cdr (assoc 0 enx)))
        )
        (entmod (subst '(10 5.0 5.0 0.0) (assoc 10 enx) enx))
        (princ "\nThe last entity was not a line.")
    )
    (princ)
)
1 голос
/ 30 апреля 2020

изменить:

(entmod linie)

на

(entmod lineen)
...