用 entmod 修改线实体

Modify line entity with entmod

(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)
  )

我正在尝试修改最后一行的起点drawed.After调用 incercare 函数没有任何反应

变化:

(entmod linie)

(entmod lineen)

正如用户 CAD Developer 所指出的,您正在对分配给 linie 变量的 原始 DXF 数据列表调用 entmod,而不是 修改subst函数返回并分配给lineen变量的列表。

但是请注意,您的代码可以大大压缩,因为每个步骤都不需要分配给单独的变量,例如:

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

这里要注意几点:

  • 注意我在defun表达式中声明了符号linie作为一个局部变量,所以这个变量的范围被限制在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)
)