找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2479|回复: 3

[求助] 标注线长及统计

[复制链接]
发表于 2015-10-20 14:00:19 | 显示全部楼层 |阅读模式
悬赏20D豆未解决
我一直想把论坛里的这两个lsp整合起来,取Free-lancer程序的提取属性信息并以此标识,和st788796程序的提取属性信息并统计制成表格;
论坛里两位老师的程序各有优势:
Free-lancer的程序提取了属性信息并标识,且统计总长;
st788796的程序可提取属性信息统计分类制成表格,但标识用的是标注方法,标注相对平面直线来说可以很好的作为标识分类,但对于空间直线会有误差;
我翻着XDRX API 2015.04.18用户手册看了一周,用飞诗编辑器一边修改一边测试,但小弟水平有限怎么测试就是不成功,貌似两位老师编写思路不大一样。

原帖地址:
标注线长并汇总总长(作者:Free-lancer)——http://www.xdcad.net/forum/forum ... read&tid=671177
杆件长度标注及统计(作者:st788796)——http://bbs.xdcad.net/forum.php?m ... 6orderby%3Ddateline

标注线长并汇总总长

标注线长并汇总总长
    st788796.jpg

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2015-10-20 15:44:18 | 显示全部楼层
各位帮我检查一下是否有优化的办法,我感觉这样拼凑代码的方法实在太暴力了
  1. (defun c:xdtb_BarLength        (/ _mkrotate ss lst p)
  2.   (defun gettextposition (lst)
  3.   (if (listp lst)
  4.     (progn
  5.       (setq an (xd::geom:angleformat (apply
  6.                        'angle
  7.                        lst
  8.                      )
  9.            )
  10.       )
  11.       (polar (apply
  12.            'xdrx_line_midp
  13.            lst
  14.          ) (+ an (* pi 0.5)) 1.
  15.       )
  16.     )
  17.     (xd::geom:angleformat lst)
  18.   )
  19. )
  20. (defun c:xdtb_linelen (/ _mkrotate ss e id pts an p p1 p2 tl l mat txt lst)
  21.   (defun _mkrotate (dim)
  22.    
  23.     (xdrx_setpropertyvalue   ;_xdrx_setpropertyvalue设置对象的属性值
  24.       dim        "DIMBLK1" "None"    "DIMBLK2" "None"        "DIMDEC"
  25.       0                "DIMSAH"  t            "DIMSD1"  t                "DIMSD2"
  26.       t                "DIMSE1"  t            "DIMSE2"  t
  27.      )
  28.   )
  29.   (if (setq ss (ssget '((0 . "*polyline,line"))))
  30.     (progn
  31.       (xdrx_document_ucsoff)
  32.       (xdrx_setsstodb ss 0)
  33.       (setq tl 0.)
  34.       (while (setq e (xdrx_getentdata 0))
  35.     (setq id (xdrx_getpropertyvalue e "ObjectID")
  36.           pts (xdrx_curve_getpoint e)
  37.           typ (xdrx_getentdxf 0)
  38.           l (xdrx_getpropertyvalue e "Length")
  39.     )
  40.     (if (= typ "LINE")
  41.       (setq an (xd::geom:angleformat (angle (car pts) (caddr pts)))
  42.         p (gettextposition (list (car pts) (last pts)))
  43.       )
  44.       (progn
  45.         (setq pam (fix (xdrx_curve_getparamatpoint e (cadr pts)))
  46.           bulge (xdrx_polyline_getbulgeat e pam)
  47.         )
  48.         (if (zerop bulge)
  49.           (setq p1 (xdrx_polyline_getpointat e pam)
  50.             p2 (xdrx_polyline_getpointat e (1+ pam))
  51.             an (xd::geom:angleformat (angle p1 p2))
  52.             p (gettextposition (list (xdrx_polyline_getpointat e pam)
  53.                          (xdrx_polyline_getpointat e (1+ pam))
  54.                        )
  55.               )
  56.           )
  57.           (setq an (gettextposition (xdrx_curve_getfirstderiv e (cadr pts)))
  58.             p (polar (cadr pts) an 1.)
  59.           )
  60.         )
  61.       )
  62.     )
  63.     (setq tl (+ l tl))
  64.     (xdrx_text_make p (rtos l 2 0) 300. an);
  65.       )
  66.       

  67.       (setq lst        (vl-remove-if
  68.                   '(lambda (x) (xdrx_polyline_hasbulges x))   ;_测试POLYLINE是否包含弧段

  69.                   (xdrx_pickset->ents ss)
  70.                 )
  71.             lst        (mapcar        '(lambda (x / pts)
  72.                            (setq pts (xdrx_entity_getstretchpoint x)) ;_获取实体的stretch点

  73.                            (if (= (length pts) 2)
  74.                              (list pts)
  75.                              (if (xdrx_curve_isclosed x) ;_判断两曲线是否共面

  76.                                (xd::list:snakepair (xd::pnts:close pts))
  77.                                (xd::list:snakepair pts)
  78.                              )
  79.                            )
  80.                          )
  81.                         lst
  82.                 )
  83.       )
  84.       (mapcar '(lambda (x)
  85.                  (mapcar '(lambda (a)
  86.                             (_mkrotate a)
  87.                           )
  88.                          x
  89.                  )
  90.                )
  91.               lst
  92.       )
  93.       (if (setq p (getpoint "\nPosition: "))
  94.         (progn
  95.           (setq        lst (apply 'append lst)
  96.                 lst (mapcar '(lambda (x)
  97.                                (list (fix (+ 0.5 (apply 'distance x))) x)
  98.                              )
  99.                             lst
  100.                     )
  101.                 lst (xd::list:groupbyindex lst 0)
  102.                 lst (mapcar '(lambda (x)
  103.                                (list (car x) (length (cdr x)))
  104.                              )
  105.                             lst
  106.                     )
  107.                 lst (append
  108.                       (mapcar '(lambda (x) (mapcar 'itoa x)) lst)
  109.                       (list
  110.                         (list " " (itoa (apply '+ (mapcar 'cadr lst))))
  111.                         (list
  112.                           "线总长"
  113.                           (itoa        (apply
  114.                                   '+
  115.                                   (mapcar '(lambda (x) (apply '* x)) lst)
  116.                                 )
  117.                           )
  118.                         )
  119.                       )
  120.                     )
  121.                 lst (cons '("长度" "数量") lst)
  122.           )
  123.           (xd::table:make lst p 5.0 2.5)
  124.         )
  125.       )
  126.       (xd::end)
  127.     )
  128.   )
  129.   (princ)
  130. )
  131. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

lanbordzl2015 该用户已被删除
发表于 2015-10-23 17:05:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 17:04 , Processed in 0.534716 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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