找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3274|回复: 19

【已解决】cad里面怎么批量标注文字,字符串,例如“DN300,L1=”

[复制链接]

已领礼包: 50个

财富等级: 招财进宝

发表于 2017-12-26 13:18:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 君是我的泪 于 2017-12-28 16:06 编辑

给定的自定义文字字符串,也可以用晓东工具集吗,不是长度标注,也是lisp吗?
QQ Photo20171226131649.jpg

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-28 12:18:13 | 显示全部楼层



LINE,POLYLINE,LWPOLYLINE,ARC,ELLIPSE,SPLINE,CIRCLE 都支持了。

  1. (defun c:XDTB_PLSegLen (/ _process val)
  2.   (defun _process (e / is2d segs inx g v #angle #length #midpoint p1)
  3.     (if (or (xdrx_object_isa e "AcDbSpline")
  4.             (xdrx_object_isa e "AcDbEllipse")
  5.             (xdrx_object_isa e "AcDbLine")
  6.             (xdrx_object_isa e "AcDbArc")
  7.             (xdrx_object_isa e "AcDbCircle")
  8.         )
  9.       (progn
  10.         (setq #midpoint (xdrx_getpropertyvalue e "midpoint")
  11.               #midpoint (if (xdrx_object_isa e "AcDbCircle")
  12.                           (nth 1 (xdrx_getsamplept e 5))
  13.                           #midpoint)
  14.               #length   (xdrx_getpropertyvalue e "length")
  15.               v         (xdrx_curve_getfirstderiv e #midpoint)
  16.               #angle    (xdrx_vector_angle v)
  17.               #angle    (xd::geom:angleformat #angle)
  18.               p1        (trans (polar #midpoint
  19.                                       (+ #angle (/ pi 2.0))
  20.                                       (/ #txt_height 2.0)
  21.                                )
  22.                                e
  23.                                0
  24.                         )
  25.         )
  26.         (xdrx_text_make p1
  27.                         (strcat "DL300,L1=" (rtos #length 2 #txt_bit))
  28.                         (getvar "textstyle")
  29.                         #txt_height
  30.                         #angle
  31.         )
  32.         (xd::text:setalignment (entlast) p1 "BC")
  33.       )
  34.       (progn
  35.         (if (xdrx_object_isa e "AcDb2dPolyline")
  36.           (progn
  37.             (setq is2d t e (xdrx_entity_copy e))
  38.             (xdrx_polyline_convertfrom e)
  39.           )
  40.         )
  41.         (setq segs (xdrx_polyline_numverts e))
  42.         (setq inx 0)
  43.         (repeat segs
  44.           (if (setq g (xdrx_polyline_getlinesegat e inx t))
  45.             (progn
  46.               (xdge::getpropertyvalue g "length" "midpoint" "angle")
  47.             )
  48.             (progn (setq g (xdrx_polyline_getarcsegat e inx t))
  49.                    (xdge::getpropertyvalue g "length" "midpoint")
  50.                    (setq v      (xdrx_curve_getfirstderiv e #midpoint)
  51.                          #angle (xdrx_vector_angle v)
  52.                    )
  53.             )
  54.           )
  55.           (setq #angle (xd::geom:angleformat #angle)
  56.                 p1     (trans (polar #midpoint
  57.                                      (+ #angle (/ pi 2.0))
  58.                                      (/ #txt_height 2.0)
  59.                               )
  60.                               e
  61.                               0
  62.                        )
  63.           )
  64.           (xdrx_text_make p1
  65.                           (strcat "DL300,L1=" (rtos #length 2 #txt_bit))
  66.                           (getvar "textstyle")
  67.                           #txt_height
  68.                           #angle
  69.           )
  70.           (xd::text:setalignment (entlast) p1 "BC")
  71.           (setq inx (1+ inx))
  72.         )
  73.         (xdge::free g)
  74.         (if is2d
  75.           (xdrx_entity_delete e)
  76.         )
  77.       )
  78.     )
  79.   )
  80.   (if (not #txt_height)
  81.     (setq #txt_height 3.5)
  82.   )
  83.   (if (not #txt_bit)
  84.     (setq #txt_bit 1)
  85.   )
  86.   (if (setq val (getint (xdrx_prompt "\n保留位数<" #txt_bit ">:" t)))
  87.     (setq #txt_bit val)
  88.   )
  89.   (if (setq val (getreal (xdrx_prompt "\n字高<" #txt_height ">:" t)))
  90.     (setq #txt_height val)
  91.   )
  92.   (xdrx_begin)
  93.   (xdrx_sysvar_push '("dimzin" 0))
  94.   (while
  95.     (and (xdrx_initssget "\n选择线、多段线<退出>:")
  96.          (setq ss (xdrx_ssget
  97.                     '((0 . "line,*POLYLINE,ellipse,arc,spline,circle"))
  98.                   )
  99.          )
  100.     )
  101.      (xd::text:init 1)
  102.      (mapcar '(lambda (x) (_process x)) (xdrx_pickset->ents ss))
  103.   )
  104.   (xdrx_sysvar_pop)
  105.   (xdrx_end)
  106.   (princ)
  107. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-27 16:47:13 | 显示全部楼层

LINE也可以了

  1. (defun c:XDTB_PLSegLen (/ _process val)
  2.   (defun _process (e / segs inx g v #angle #length #midpoint p1)
  3.     (if        (xdrx_object_isa e "AcDbLine")
  4.       (progn (setq isLINE t
  5.                    e          (xdrx_polyline_make (xdrx_getsamplept e))
  6.              )
  7.       )
  8.     )
  9.     (setq segs (xdrx_polyline_numverts e))
  10.     (setq inx 0)
  11.     (repeat segs
  12.       (if (setq g (xdrx_polyline_getlinesegat e inx t))
  13.         (progn
  14.           (xdge::getpropertyvalue g "length" "midpoint" "angle")
  15.         )
  16.         (progn (setq g (xdrx_polyline_getarcsegat e inx t))
  17.                (xdge::getpropertyvalue g "length" "midpoint")
  18.                (setq v            (xdrx_curve_getfirstderiv e #midpoint)
  19.                      #angle (xdrx_vector_angle v)
  20.                )
  21.         )
  22.       )
  23.       (setq #angle (xd::geom:angleformat #angle)
  24.             p1           (trans
  25.                      (polar #midpoint (+ #angle (/ pi 2.0)) (/ #txt_height 2.0))
  26.                      e
  27.                      0
  28.                    )
  29.       )
  30.       (xdrx_text_make
  31.         p1
  32.         (strcat "DL300,L1=" (rtos #length 2 #txt_bit))
  33.         (getvar "textstyle")
  34.         #txt_height
  35.         #angle
  36.       )
  37.       (xd::text:setalignment (entlast) p1 "BC")
  38.       (setq inx (1+ inx))
  39.     )
  40.     (xdge::free g)
  41.     (if        isLine
  42.       (xdrx_entity_delete e)
  43.     )
  44.   )
  45.   (if (not #txt_height)
  46.     (setq #txt_height 3.5)
  47.   )
  48.   (if (not #txt_bit)
  49.     (setq #txt_bit 1)
  50.   )
  51.   (if (setq val (getint (xdrx_prompt "\n保留位数<" #txt_bit ">:" t)))
  52.     (setq #txt_bit val)
  53.   )
  54.   (if (setq val (getreal (xdrx_prompt "\n字高<" #txt_height ">:" t)))
  55.     (setq #txt_height val)
  56.   )
  57.   (xdrx_begin)
  58.   (xdrx_sysvar_push '("dimzin" 0))
  59.   (if (and (xdrx_initssget "\n选择线、多段线<退出>:")
  60.            (setq ss (xdrx_ssget '((0 . "line,LWPOLYLINE"))))
  61.       )
  62.     (progn (xd::text:init 1)
  63.            (mapcar '(lambda (x) (_process x)) (xdrx_pickset->ents ss))
  64.     )
  65.   )
  66.   (xdrx_sysvar_pop)
  67.   (xdrx_end)
  68.   (princ)
  69. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-26 13:45:39 | 显示全部楼层

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 50个

财富等级: 招财进宝

 楼主| 发表于 2017-12-26 14:01:25 | 显示全部楼层

这是标注 某一特定的自定文字,不是标注长度
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-26 14:26:57 | 显示全部楼层

都是在多段线上标字,你改下代码里面的标注的内容不就行了,程序框架是一样的。

再说了,你这样发帖,不好帮你,一是你图片看不清,另外你想怎么标,文字和多段线什么关系等等都没有说明。

如果你想要帮你写个,去编程申请论坛,把你的详细条件都说清楚,截图醒目些,然后传个DWG压缩文件供测试。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-12-26 14:38:58 | 显示全部楼层
你  DN300,L1=  等号后面不是还有每段的长度吗?


上面的程序标注出长度,你在程序代码里面找到写文字的部分,前面加上字符串 DN300,L就行了。


你这些文字要是变化的就得改程序了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 50个

财富等级: 招财进宝

 楼主| 发表于 2017-12-27 08:47:39 | 显示全部楼层
怎么改?批量标注Line及Pline各段长度.LSP

(defun c:XDTB_Dimlines (/ ss e pts an dm)
  (defun mkrotate (p1 p2 p3 an / dm)
    (setq dm (xdrx_dimension_makerotate p1 p2 p3 an))
    (mapcar '(lambda (x) (xdrx_setpropertyvalue dm x t))
     '("Dimsd1" "Dimsd2" "Dimse1" "Dimse2")
    )
  )
  (if (setq ss (ssget '((0 . "*polyline,line"))))
    (progn
      (xd::begin)
      (xdrx_setsstodb ss 0)
      (while (setq e (xdrx_getentdata 0))
(if (= (xdrx_getpropertyvalue e "IsA") "AcDbLine")
   (progn (setq pts (xdrx_curve_getpoint e)
         an  (xdrx_getpropertyvalue e "Angle")
   )
   (mkrotate (car pts) (last pts) (cadr pts) an)
   )
   (progn
     (setq pts (xdrx_entity_getstretchpoint e))
     (mapcar
       '(lambda (p1 p2 / d pcen midp)
   (if (zerop (xdrx_polyline_getbulgeat
         e
         (fix (xdrx_curve_getparamatpoint e p1))
       )
       )
     (mkrotate p1 p2 (xdrx_line_midp p1 p2) (angle p1 p2))
     (progn
       (setq d (xdrx_curve_getdistatpoint e p1 p2)
      pcen (cadr
      (xdrx_polyline_getArcSegAt
        e
        (fix (xdrx_curve_getparamatpoint e p1))
      )
    )
      midp (xdrx_curve_getpointatparam
      e
      (/ (+ (xdrx_curve_getparamatpoint e p1)
     (xdrx_curve_getparamatpoint e p2)
         )
         2.
      )
    )
      dm (xdrx_dimension_make2lang
      pcen p1 pcen p2 midp)
       )
       (mapcar '(lambda (x) (setpropertyvalue dm x t))
        '("Dimsd1" "Dimsd2" "Dimse1" "Dimse2")
       )
       (xdrx_setpropertyvalue dm "Dimtext" (rtos d 2 2))
     )
   )
        )
       pts
       (cdr pts)
     )
   )
)
      )
      (xd::end)
    )
  )
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-12-27 09:26:27 | 显示全部楼层

改什么啊? 你说下规则啊,什么字改成什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 50个

财富等级: 招财进宝

 楼主| 发表于 2017-12-27 11:59:25 | 显示全部楼层

每条直线,多段线标注特定“自定义”字符例如:"DN300,L1="修改以上代码,以上代码是标注长度的,能既标注特定字符,又标注长度更好
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-27 12:13:49 | 显示全部楼层

找这行代码

(xdrx_setpropertyvalue dm "Dimtext" (rtos d 2 2))

改成:

(xdrx_setpropertyvalue dm "Dimtext"  (strcat "DN300,L1=" (rtos d 2 2)))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 50个

财富等级: 招财进宝

 楼主| 发表于 2017-12-27 13:41:49 | 显示全部楼层
本帖最后由 君是我的泪 于 2017-12-27 13:50 编辑

不对的,只标注了长度,和原来是一样的,没那么简单吧 Unnamed QQ Screenshot20171227135005.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-27 14:20:40 | 显示全部楼层

你找的代码,并不是最好的

批量标注多段线各段长度(支持弧线)  拿这个改


支持弧线段


搜狗截图20171227141946.png


  1. (defun c:XDTB_PLSegLen (/ _process val)
  2.   (defun _process (e / segs inx g v #angle #length #midpoint p1)
  3.     (setq segs (xdrx_polyline_numverts e))
  4.     (setq inx 0)
  5.     (repeat segs
  6.       (if (setq g (xdrx_polyline_getlinesegat e inx t))
  7.         (progn
  8.           (xdge::getpropertyvalue g "length" "midpoint" "angle")
  9.         )
  10.         (progn
  11.           (setq g (xdrx_polyline_getarcsegat e inx t))
  12.           (xdge::getpropertyvalue g "length" "midpoint")
  13.           (setq v (xdrx_curve_getfirstderiv e #midpoint)
  14.                 #angle (xdrx_vector_angle v))
  15.         )
  16.       )
  17.       (setq #angle (xd::geom:angleformat #angle)
  18.             p1           (trans (polar #midpoint
  19.                                  (+ #angle (/ pi 2.0))
  20.                                  (/ #txt_height 2.0))
  21.                                  e
  22.                                  0
  23.                           )
  24.                    )
  25.       (xdrx_text_make
  26.         p1
  27.         (strcat "DL300,L1=" (rtos #length 2 #txt_bit))
  28.         (getvar "textstyle")
  29.         #txt_height
  30.         #angle
  31.       )
  32.       (xd::text:setalignment (entlast) p1 "BC")
  33.       (setq inx (1+ inx))
  34.     )
  35.     (xdge::free g)
  36.   )
  37.   (if (not #txt_height)
  38.     (setq #txt_height 3.5)
  39.   )
  40.   (if (not #txt_bit)
  41.     (setq #txt_bit 1)
  42.   )
  43.   (if (setq val (getint (xdrx_prompt "\n保留位数<" #txt_bit ">:" t)))
  44.     (setq #txt_bit val)
  45.   )
  46.   (if (setq val (getreal (xdrx_prompt "\n字高<" #txt_height ">:" t)))
  47.     (setq #txt_height val)
  48.   )
  49.   (xdrx_begin)
  50.   (xdrx_sysvar_push '("dimzin" 0))
  51.   (if (and (xdrx_initssget "\n选择多段线<退出>:")
  52.            (setq ss (xdrx_ssget '((0 . "LWPOLYLINE"))))
  53.       )
  54.     (progn
  55.       (xd::text:init 1)
  56.       (mapcar '(lambda (x) (_process x)) (xdrx_pickset->ents ss))
  57.     )
  58.   )
  59.   (xdrx_sysvar_pop)
  60.   (xdrx_end)
  61.   (princ)
  62. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 50个

财富等级: 招财进宝

 楼主| 发表于 2017-12-27 15:12:41 | 显示全部楼层
本帖最后由 君是我的泪 于 2017-12-27 15:15 编辑

貌似只能选择多段线,怎么改一下,能选择直线,还要用pedit合并
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-27 16:38:19 | 显示全部楼层

搜索论坛   线变复线 或者  连接

工具是组合用的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 50个

财富等级: 招财进宝

 楼主| 发表于 2017-12-28 10:54:55 | 显示全部楼层

arc弧线行吗?要pedit,样条曲线spline 可以吗?要转化为多段线?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 01:55 , Processed in 0.512083 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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