yanshengjiang 发表于 2025-9-9 11:39:53

搬运一个外网的代码:标注动态显示多段线的长度和面积

本帖最后由 yanshengjiang 于 2025-9-9 16:44 编辑

第一次见到这种写法,所以搬运过来。多边形变化后 ,regen可以更新注记。
这代码复制粘贴出去多半要报错,附上lsp文件。
https://www.cadtutor.net/forum/topic/19063-object
(defun C:FA(/ acsp adoc cpt elist en ent fld lead_obj lpt mtx oid osm)
(vl-load-com)
(or adoc
   (setq adoc
   (vla-get-activedocument
       (vlax-get-acad-object)
       )
    )
   )
(if (and
(= (getvar "tilemode") 0)
(= (getvar "cvport") 1)
)
   (setq acsp (vla-get-paperspace adoc))
   (setq acsp (vla-get-modelspace adoc))
   )
(setq osm (getvar "osmode"))
(setvar "osmode" 0)

(while
   (setq ent (entsel "\nSelect pline or hit Enter to exit"))
    (setq en (car ent))
    (if (wcmatch (cdr (assoc 0 (setq elist (entget en)))) "*POLYLINE")
      (progn
(setq cpt (trans (cadr ent)1 0)
       lpt (trans (getpoint cpt "\nPick the ending point of leader:") 1 0)
       )

(setq oID (vla-get-objectid (vlax-ename->vla-object en)))
(setq fld
    (strcat
      (strcat "Area = " "%<\\AcObjProp Object(%<\\_ObjId "
          (itoa oID)
          ">%).Area \\f \"%lu2%pr2\">%"
          "\\P")
      (strcat "Perimeter = " "%<\\AcObjProp Object(%<\\_ObjId "
          (itoa oID)
          ">%).Length \\f \"%lu2%pr2\">%"))
       )
(setq mtx (vlax-invoke
         acsp 'AddMText lpt 0.0 fld)
       )
(vlax-put mtx
       'AttachmentPoint
       (cond ((> (car cpt) (car lpt))
          6
          )
         ((< (car cpt) (car lpt))
          4
          )
         (T 4)
         )
       )
(vlax-put mtx 'Height (getvar "textsize"))
(setq lead_obj    (vlax-invoke
          acsp
          'Addleader
          (apply 'append (list cpt lpt))
          mtx
          acLineWithArrow
          )
       )
(vlax-put lead_obj 'VerticalTextPosition 0);1
)
      )
    )
(setvar "osmode" osm)
(princ)
)
(princ "\n Start command with FA ...")
(princ)


[*]

yanshengjiang 发表于 2025-9-9 16:45:24

edata 发表于 2025-9-9 14:30
测试

粘贴掉几个字符

edata 发表于 2025-9-9 14:30:41

测试

(defun C:FA(/ acsp adoc cpt elist en ent fld lead_obj lpt mtx oid osm)
(vl-load-com)
(or adoc
   (setq adoc
   (vla-get-activedocument
       (vlax-get-acad-object)
       )
    )
   )
(if (and
(= (getvar "tilemode") 0)
(= (getvar "cvport") 1)
)
   (setq acsp (vla-get-paperspace adoc))
   (setq acsp (vla-get-modelspace adoc))
   )
(setq osm (getvar "osmode"))
(setvar "osmode" 0)

(while
   (setq ent (entsel "\nSelect pline or hit Enter to exit"))
    (setq en (car ent))
    (if (wcmatch (cdr (assoc 0 (setq elist (entget en)))) "*POLYLINE")
      (progn
(setq cpt (trans (cadr ent)1 0)
       lpt (trans (getpoint cpt "\nPick the ending point of leader:") 1 0)
       )

(setq oID (vla-get-objectid (vlax-ename->vla-object en)))
(setq fld
(strcat
    (strcat "Area = " "%<\\AcObjProp Object(%<\\_ObjId "
      (itoa oID)
      ">%).Area \\f \"%lu2%pr2\">%"
      "\\P")
    (strcat "Perimeter = " "%<\\AcObjProp Object(%<\\_ObjId "
      (itoa oID)
      ">%).Length \\f \"%lu2%pr2\">%"))
       )
(setq mtx (vlax-invoke
       acsp 'AddMText lpt 0.0 fld)
       )
(vlax-put mtx
   'AttachmentPoint
   (cond ((> (car cpt) (car lpt))
      6
      )
   ((< (car cpt) (car lpt))
      4
      )
   (T 4)
   )
   )
(vlax-put mtx 'Height (getvar "textsize"))
(setq lead_obj(vlax-invoke
      acsp
      'Addleader
      (apply 'append (list cpt lpt))
      mtx
      acLineWithArrow
      )
       )
(vlax-put lead_obj 'VerticalTextPosition 0);1
)
      )
    )
(setvar "osmode" osm)
(princ)
)
(princ "\n Start command with FA ...")
(princ)

ynhh 发表于 2025-9-10 00:01:46

yanshengjiang 发表于 2025-9-9 16:45
粘贴掉几个字符

经你这么对比
总算明白了
有些从论坛上复制下来的代码
总是出错
达不到发码人说的效果
可能就是这个原因了
谢谢你的对比提示
不知论坛对这种情况能不能改进一下?

woshilj 发表于 2025-9-10 10:34:49

ynhh 发表于 2025-9-10 00:01
经你这么对比
总算明白了
有些从论坛上复制下来的代码


发帖内含有代码最好是用专门的代码模块
代码模块

guosheyang 发表于 2025-9-9 12:32:09

这代码能运行?

yanshengjiang 发表于 2025-9-9 12:53:56

guosheyang 发表于 2025-9-9 12:32
这代码能运行?

我复制下来居然也报错。奇怪。

yanshengjiang 发表于 2025-9-9 12:58:33

guosheyang 发表于 2025-9-9 12:32
这代码能运行?

应该是论坛粘贴复制出问题了。

guosheyang 发表于 2025-9-9 13:04:25

%lu2%pr2   前后再加上个 "似乎可以

guosheyang 发表于 2025-9-9 13:12:30

应该用的面积周长的字段表达式

guosheyang 发表于 2025-9-9 13:17:05


npcer 发表于 2025-9-9 14:09:30

能运行,但是选取对象然后拉引线时报错:
https://i.imgs.ovh/2025/09/09/77s5G1.jpeg

yanshengjiang 发表于 2025-9-9 16:36:48

guosheyang 发表于 2025-9-9 13:12
应该用的面积周长的字段表达式

应该是,但以前从没见过这个大家都用反应器。
页: [1] 2
查看完整版本: 搬运一个外网的代码:标注动态显示多段线的长度和面积