Как отметил пользователь 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)
)