本帖最后由 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)





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

粘贴掉几个字符


网友答: 测试

  1. (defun C:FA  (/ acsp adoc cpt elist en ent fld lead_obj lpt mtx oid osm)
  2. (vl-load-com)
  3. (or adoc
  4.      (setq adoc
  5.      (vla-get-activedocument
  6.        (vlax-get-acad-object)
  7.        )
  8.     )
  9.      )
  10. (if (and
  11. (= (getvar "tilemode") 0)
  12. (= (getvar "cvport") 1)
  13. )
  14.    (setq acsp (vla-get-paperspace adoc))
  15.    (setq acsp (vla-get-modelspace adoc))
  16.    )
  17. (setq osm (getvar "osmode"))
  18. (setvar "osmode" 0)

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

  27. (setq oID (vla-get-objectid (vlax-ename->vla-object en)))
  28. (setq fld
  29.   (strcat
  30.     (strcat "Area = " "%<\\AcObjProp Object(%<\\_ObjId "
  31.       (itoa oID)
  32.       ">%).Area \\f \"%lu2%pr2\">%"
  33.       "\\P")
  34.     (strcat "Perimeter = " "%<\\AcObjProp Object(%<\\_ObjId "
  35.       (itoa oID)
  36.       ">%).Length \\f \"%lu2%pr2\">%"))
  37.        )
  38. (setq mtx (vlax-invoke
  39.        acsp 'AddMText lpt 0.0 fld)
  40.        )
  41. (vlax-put mtx
  42.      'AttachmentPoint
  43.      (cond ((> (car cpt) (car lpt))
  44.       6
  45.       )
  46.      ((< (car cpt) (car lpt))
  47.       4
  48.       )
  49.      (T 4)
  50.      )
  51.      )
  52. (vlax-put mtx 'Height (getvar "textsize"))
  53. (setq lead_obj  (vlax-invoke
  54.       acsp
  55.       'Addleader
  56.       (apply 'append (list cpt lpt))
  57.       mtx
  58.       acLineWithArrow
  59.       )
  60.        )
  61. (vlax-put lead_obj 'VerticalTextPosition 0);1
  62. )
  63.       )
  64.     )
  65. (setvar "osmode" osm)
  66. (princ)
  67. )
  68. (princ "\n Start command with FA ...")
  69. (princ)



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

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

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

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


网友答: 这代码能运行?

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

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

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

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

网友答: %lu2%pr2   前后再加上个 "  似乎可以

网友答: 应该用的面积  周长的字段表达式

网友答:


网友答: 能运行,但是选取对象然后拉引线时报错:


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

应该是,但以前从没见过这个大家都用反应器。
  • 上一篇:应该怎么将字符串转换点对表?
  • 下一篇:没有了