(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函数之后,什么都没发生
答案 0 :(得分:2)
更改:
(entmod linie)
到
(entmod lineen)
答案 1 :(得分:2)
如用户CAD开发人员所述,您正在调用分配给entmod
变量的原始 DXF数据列表上的linie
,而不是修改的 由subst
函数返回并分配给lineen
变量的em>列表。
但是,请注意,您的代码可能会被压缩,因为不必将每个步骤分配给一个单独的变量,例如:
(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
函数,并且没有不会保持全球性。
我已使用单引号或撇号将新坐标引用为文字列表,这是可能的,因为该列表仅包含文字数据(恒定数值),而没有变量数据-我将在更多内容中讨论这种差异在我的The Apostrophe and the Quote Function教程中有详细介绍。
您当前的功能是假设最后添加到图形数据库中的实体是LINE
实体(或至少是其几何形状由DXF组10定义的实体)。因此,您可能需要包含条件表达式以测试是否存在这种情况并相应地分支,例如:
(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)
)