明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1779|回复: 16

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

[复制链接]
发表于 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)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

 楼主| 发表于 2025-9-9 16:45:24 | 显示全部楼层

粘贴掉几个字符

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 2025-9-9 14:30:41 | 显示全部楼层
测试

  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)

回复 支持 反对

使用道具 举报

发表于 2025-9-10 00:01:46 | 显示全部楼层

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

使用道具 举报

发表于 2025-9-10 10:34:49 | 显示全部楼层
ynhh 发表于 2025-9-10 00:01
经你这么对比
总算明白了
有些从论坛上复制下来的代码

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

使用道具 举报

发表于 2025-9-9 12:32:09 | 显示全部楼层
这代码能运行?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-9 12:53:56 | 显示全部楼层

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-9 12:58:33 | 显示全部楼层

应该是论坛粘贴复制出问题了。
回复 支持 反对

使用道具 举报

发表于 2025-9-9 13:04:25 | 显示全部楼层
%lu2%pr2   前后再加上个 "  似乎可以
回复 支持 反对

使用道具 举报

发表于 2025-9-9 13:12:30 | 显示全部楼层
应该用的面积  周长的字段表达式
回复 支持 反对

使用道具 举报

发表于 2025-9-9 13:17:05 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 2025-9-9 14:09:30 | 显示全部楼层
能运行,但是选取对象然后拉引线时报错:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-9 16:36:48 | 显示全部楼层
guosheyang 发表于 2025-9-9 13:12
应该用的面积  周长的字段表达式

应该是,但以前从没见过这个大家都用反应器。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-12-8 07:31 , Processed in 0.169199 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表