找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lizhgang.jin

[已解决] 求助论坛高手帮忙编制一个批量标注CAD断面图超欠挖插件

[复制链接]
 楼主| 发表于 2015-1-7 10:09:31 | 显示全部楼层
本帖最后由 lizhgang.jin 于 2015-1-7 10:21 编辑

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2015-1-7 10:24:57 | 显示全部楼层
lizhgang.jin 发表于 2015-1-7 09:08
能否提供个完整的我再试试呢。

需要 XDAPI + xd-lisp-lib.vlx
  1. (defun c:cqw (/ filter ss e1 e2 pActuals pDesigns pVertors pDists h sty)
  2.   (setq        filter '((0 . "LWPOLYLINE")
  3.                  (-4 . "&=")
  4.                  (70 . 0)
  5.                 )
  6.   )
  7.   (if (and (setq e1 (car (xdrx_entsel
  8.                            "\n选择实际开挖线: "
  9.                            (cons '(8 . "实际开挖线") filter)
  10.                          )
  11.                     )
  12.            )
  13.            (setq e2 (car (xdrx_entsel
  14.                            "\n选择设计开挖线: "
  15.                            (cons '(8 . "设计开挖线") filter)
  16.                          )
  17.                     )
  18.            )
  19.            (progn
  20.              (if (not (xdrx_curve_direction e2)) ;_判断逆时针
  21.                (xdrx_curve_reverse e2)
  22.              )
  23.              t
  24.            )
  25.       )
  26.     (progn
  27.       (setq pActuals (xdrx_getpropertyvalue e1 "Vertices") ;_实际开挖点
  28.             pDesigns (mapcar '(lambda (x)
  29.                                 (xdrx_curve_getclosestpoint e2 x)
  30.                               )
  31.                              pActuals
  32.                      ) ;_对应设计点
  33.             pVectors (mapcar
  34.                        '(lambda        (x)
  35.                           (mapcar '+
  36.                                   x
  37.                                   (xdrx_curve_getfirstderiv e2 x)
  38.                           )
  39.                         )
  40.                        pDesigns
  41.                      ) ;_设计线对应点处切线方向
  42.             pDists   (mapcar '(lambda (x y z)
  43.                                 (xdrx_point_dist2line x y z)
  44.                               )
  45.                              pActuals
  46.                              pDesigns
  47.                              pVectors
  48.                      ) ;_距离正负表示在设计线内外
  49.       )
  50.       ;;mapcar 处理
  51.       (setq h        (getvar "textsize")
  52.             sty        (getvar "textstyle")
  53.       )
  54.       (setvar "dimzin" 0)
  55.       (mapcar '(lambda (x y z / str zl p txt an d)
  56.                  (if (not (equal z 0.0 1e-3))
  57.                    (progn
  58.                      (xdrx_circle_make x 0.1)
  59.                      (if (minusp z)
  60.                        (setq str (rtos z 2 3))
  61.                        (setq str (strcat "+" (rtos z 2 3)))
  62.                      )
  63.                      (setq zl (XD::String:ActualWidth str sty h 1.0)
  64.                            d  (1+ (* 0.5 zl))
  65.                      )
  66.                      (if (minusp z)
  67.                        (setq an        (angle x y)
  68.                              p        (polar y an d)
  69.                        )
  70.                        (setq an        (angle y x)
  71.                              p        (polar x an d)
  72.                        )
  73.                      )
  74.                      (setq
  75.                        txt (xdrx_text_make
  76.                              p
  77.                              str
  78.                              h
  79.                              (XD::Geom:AngleFormat an)
  80.                            )
  81.                      )
  82.                      (xdrx_text_sethozmode txt 1)
  83.                      (xdrx_text_setvermode txt 2)
  84.                      (xdrx_text_setalignmentpoint txt p)
  85.                    )
  86.                  )
  87.                )
  88.               pActuals
  89.               pDesigns
  90.               pDists
  91.       )
  92.     )
  93.   )
  94.   (princ)
  95. )

点评

谢谢,能告诉我怎么用吗,还是加载那个晓东插件然后加载这个LSP 就可以了吗。  详情 回复 发表于 2015-1-7 11:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2015-1-7 11:23:40 | 显示全部楼层
st788796 发表于 2015-1-7 10:24
需要 XDAPI + xd-lisp-lib.vlx

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

使用道具 举报

发表于 2015-10-25 18:05:25 | 显示全部楼层

下载试用了一下,2004CAD上不能运行。

点评

运行出现 请输入实际开挖线上标注间隔数(默认为0):2 ; 错误: 参数太多  详情 回复 发表于 2015-10-27 15:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2015-10-27 15:58:41 | 显示全部楼层
本帖最后由 skg123 于 2015-10-27 18:30 编辑
skg123 发表于 2015-10-25 18:05
下载试用了一下,2004CAD上不能运行。

运行出现 错误:  请输入实际开挖线上标注间隔数(默认为0):2 ; 错误: 参数太多


修改后代码
  1. ;文件名:ddd.lsp
  2. ;;功能说明:标注实际开挖线各点与设计开挖线之间的距离
  3. ;;;修改时间:2015-01-07  ss en v-en pc ss1 en1 po-li n p11 pt pt@curve osm

  4. (vl-load-com)
  5. (defun c:ddd(/ )  
  6.   (setq osm (getvar "osmode"))  
  7.   (setvar "cmdecho" 0)
  8.   (setvar "osmode" 0)  

  9.   (while
  10.     (progn
  11.       (prompt "\n请选择设计开挖线:")
  12.       (not(setq ss(ssget ":s" '((0 . "CIRCLE,*POLYLINE")))))
  13.         );end progn
  14.     (prompt "\n<<<<未选择到正确的对象,请重新选择!>>>>")
  15.   );end while

  16.   (setq en(ssname ss 0)
  17.         v-en(vlax-ename->vla-object en)
  18.     )  
  19.   (setq pc(find-centerpoint en));找设计开挖线的型心

  20.   (while(progn(prompt "\n请选择实际开挖线:")
  21.                 (not(setq ss1(ssget ":s" '((0 . "*POLYLINE")))))
  22.         );end progn
  23.     (prompt "\n<<<<未选择到正确的对象,请重新选择!>>>>")
  24.   );end while

  25.   (setq en1(ssname ss1 0))
  26.   (setq po-li (vl-remove-if 'not (mapcar '(lambda (x) (if (= (car x) 10) (cdr x))) (entget en1))));取多段线顶点表

  27.   (initget 6)
  28.   (setq n (getint "\n 请输入实际开挖线上标注间隔数(默认为0):"))
  29.   (if(null n)(setq n 0))

  30.   (if(/= n 0)(setq po-li(get-new-point-list po-li n)));end if

  31.   (foreach pt po-li   
  32.     (setq pt@curve(vlax-curve-getClosestPointTo v-en pt))
  33.    
  34.     (if(> (distance pt pc) (distance pt@curve pc));如果超挖
  35.       (progn
  36.       (setq p11 (polar pt@curve (angle pt@curve pt) (* 2 (distance pt pt@curve))))
  37.       ;(make-dimension pt pt@curve p11 "隧道超挖+")
  38.       (make-dimension pt pt@curve p11)
  39.     ;   (command "_.pline" P11 pc "")
  40.       );end progn
  41.       );end if

  42.     (if(< (distance pt pc) (distance pt@curve pc));如果欠挖
  43.       (progn
  44.       (setq p11(polar pt(angle pt pt@curve ) (* 3 (distance pt pt@curve))))
  45. ;(make-dimension pt@curve pt p11 "隧道欠挖-")
  46. (make-dimension pt@curve pt p11)
  47.      ;  (command "_.pline" Pt p11 "")
  48.       );end progn
  49.       );end if
  50.       
  51.     );end foreach
  52.   
  53.   (setvar "osmode" osm)
  54.   (princ)  
  55.   );end defun

  56. ;;;sub-routine1
  57. (defun find-centerpoint(en / po-li n y pc)
  58.   (setq entda(entget en)
  59.         ename(cdr(assoc 0 entda)))
  60.   (if(= ename "CIRCLE")
  61.     (setq pc(cdr(assoc 10 entda)))
  62.     (progn
  63.       (setq po-li (vl-remove-if 'not (mapcar '(lambda (x) (if (= (car x) 10) (cdr x))) entda)))
  64.       (setq n(length po-li))  
  65.       (setq y(apply 'mapcar (cons '+ po-li)))
  66.       (setq pc(mapcar '/ y (list n n n)))
  67.       );progn
  68.     );end if
  69.   );end defun

  70. ;;;sub-routine2
  71. (defun make-dimension (p13 p14 p11 dimsty)
  72.   (entmake (list '(0 . "DIMENSION")
  73.                  '(100 . "AcDbEntity")
  74.                  '(100 . "AcDbDimension")                 
  75.                   (cons 10 p14)
  76.                   (cons 11 p11)
  77.                  '(70 . 33)
  78.                  '(1 . "")
  79.                   (cons 3 dimsty)
  80.                  '(100 . "AcDbAlignedDimension")
  81.                  (cons 13 p13)
  82.                  (cons 14 p14)
  83.                  )
  84.            );endmake  
  85.   );end defun

  86. ;;;sub-routine3
  87. ;;;间隔N个数取点表
  88. (defun get-new-point-list(li n / s-li i k)
  89.   (setq s-li nil i 0 k (1+ n))

  90.   (while(nth i li)
  91.     (setq s-li(cons (nth i li) s-li))
  92.     (setq i(+ i k))
  93.     );end while
  94.   
  95.   (reverse s-li)
  96.   );end defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2018-2-8 11:33:26 | 显示全部楼层

大师,我用您这个代码运行,在输入间隔点参数之后,没有任何反应是为什么?       ps:本人用的CAD2008
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2018-2-8 11:35:24 | 显示全部楼层

楼主你好,可否把你那个批量标注超欠挖的lsp共享下,我用帖子里的代码,在输入间隔点参数后没反应。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2018-11-19 18:40:17 来自手机 | 显示全部楼层
st788796 发表于 2015-1-7 08:57
上面程序没有写标注部分,不是完整应用,另外需要加载 XDRXAPI

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

使用道具 举报

发表于 2018-11-19 18:58:55 来自手机 | 显示全部楼层
lizhgang.jin 发表于 2015-1-7 10:04
老师您的程序试用了,很好很方便。如果你有空的话还可以有个小改动,就是我标完一个图后,下一个图标的时 ...

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

使用道具 举报

发表于 2020-9-13 16:20:30 | 显示全部楼层
这个帖子还有人嘛,加载之后是这个问题
错误: 读入的 (八进制) 字符不正确: 0
应该怎么解决啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2020-9-13 16:21:44 | 显示全部楼层
这个帖子还有人嘛,加载之后是这个问题
错误: 读入的 (八进制) 字符不正确: 0
应该怎么解决啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 33个

财富等级: 招财进宝

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 08:28 , Processed in 0.267337 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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