whm2216 发表于 2005-3-25 12:01:00

怎样快速的在多义线上增加节点?

大家好!


多义线一般由多条线段或弧线组成。在工作中我常碰到在多义线的某线段上要增加节点,但这过程有点繁琐:PEDIT-->Edit vertex-->多次空格键或回车键(要起始点到目标线段)-->Insert vertex-->Esc键结束


我的想法是:键入快捷键J-->出现选择光标-->点击目标线段结束(要增加节点位置),这样就很省时间了。哪位朋友能帮帮忙写个lisp,在R14实现该功能?谢谢!

ljpnb 发表于 2005-3-25 13:15:00

本帖最后由 作者 于 2005-3-25 13:55:59 编辑 <br /><br /> R2004可以,R14不行(对有圆弧的PL线不支持)



(defun c:test ()<BR>       (setq ent (entsel "\n 选择一条多义线: "))<BR>       (setq p0 (cadr ent))<BR>       (setq p0 (osnap p0 "nea"))<BR>       (setq obj (vlax-ename-&gt;vla-object<BR>                                               (car ent)<BR>                               )<BR>       )<BR>       (setq point (vla-get-Coordinates obj))<BR>       (setq point1 (vlax-safearray-&gt;list (vlax-variant-value point)))<BR>       (setq len (length point1))<BR>       (setq p1 (list (nth 0 point1) (nth 1 point1)))<BR>       (setq i 2 k 0)       <BR>       (repeat (1- (/ len 2))<BR>                       (setq p2 (list (nth i point1) (nth (1+ i) point1)))<BR>                       (setq dis0 (distance p1 p2)<BR>               dis1 (distance p1 p0)<BR>               dis2 (distance p2 p0)<BR>                       )<BR>                       (if        (equal (+ dis1 dis2) dis0 0.00001)<BR>                                       (setq n k)<BR>                       )<BR>                       (setq p1 p2)<BR>                       (setq i (+ i 2) k (1+ k))<BR>       )<BR>       (command "pedit" ent "e") <BR>       (repeat n<BR>                       (command "n")                                       <BR>       )<BR>       (command "i" p0 "x" "") <BR>)<BR>

meflying 发表于 2005-3-25 13:45:00

仅适合没有圆弧的PLINE:(defun c:j( / ent pt ents i n npt item lstNew)
   (setq ent (entsel))
   (setq pt (cadr ent))
   (setq ents (entget (car ent)))
   (setq i 0
npt 0
n (length ents))   
   (while (< i n)
       (setq item (nth i ents))
       (cond
         ((= npt 0)
             (if (= (car item) 10) (setq npt (1+ npt)))
             (setq lstNew (append lstNew (list item)))
         )
         ((= npt 1)
             (if (and (= (car item) 10)
   (equal (angle (cdr (nth (- i 4) ents)) pt)
               (angle pt (cdr item)) 0.1))
   (progn
       (setq lstNew (append lstNew (list (cons 10 pt) '(40 . 0) '(41 . 0) '(42 . 0) item (nth (1+ i) ents) (nth (+ i 2) ents))))
       (setq i (+ i 3))
       (setq npt (1+ npt))
   )
   (setq lstNew (append lstNew (list item)))
             )         
   
         )
         ((= npt 2)
             (setq lstNew (append lstNew (list item)))
         )
       );cond
       (setq i (1+ i))
   );repeat
   (entmod lstNew)
   (princ)
)

whm2216 发表于 2005-3-25 14:53:00

谢谢二位的帮忙!特别是<A name=17817><FONT color=#990000><B>meflying</B></FONT></A>,妙!妙!真是太好了!

efreet 发表于 2011-9-15 17:10:48

学习了楼上可否实现多义线按任意距离增加节点(即像CAD的里“点”按距离平分线段)

jinxiandi 发表于 2011-9-16 22:52:00

用2012就非常简单了,只要鼠标停留在一个节点上就有提示出来了!

yjr111 发表于 2011-9-17 00:47:49

为什么都喜欢停留在很久以前?适应吧,大家伙!要捣鼓程序就去捣鼓2013没有的吧

raimo 发表于 2011-9-20 23:26:50

本帖最后由 raimo 于 2011-9-20 23:27 编辑

这个思路似乎更方便..参见Gu_xl做的这个程序


http://bbs.mjtd.com/forum.php?mo ... 88&page=1#pid482808

lzr_00 发表于 2013-7-30 16:09:51

还是喜欢用低版本的CAD,安装起来方便而且很小

egoroom 发表于 2014-9-4 01:17:43

要是能批量加点就好了
页: [1]
查看完整版本: 怎样快速的在多义线上增加节点?