明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3828|回复: 33

[提问] 求助:求在已有多义线上接着画的代码

[复制链接]
发表于 2013-9-20 23:45 | 显示全部楼层 |阅读模式
请问,我已经画了一条直线型的多义线,但中途中断了,如何接着画呢?也就 是说接着画是同一条线,而不是两条多义线


发表于 2017-11-2 19:52 | 显示全部楼层

大神程序挺好,能否完善图片中功能

本帖子中包含更多资源

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

x
发表于 2017-11-7 10:16 | 显示全部楼层
不错的资料,谢谢分享啊。
发表于 2017-11-7 12:53 | 显示全部楼层
感谢诸位分享程序!!!!
发表于 2013-9-21 00:48 | 显示全部楼层
可以找到已经画好的pl线的各个顶点,以你想继续画的点为最后点排序,重新调用pline命令画线,画到你希望开始的点就用pause结束,就可以继续画了
 楼主| 发表于 2013-9-21 09:18 | 显示全部楼层
就这样将就解决了这个问题
(defun C:紧接着直线型轻多义线A的后面画A (/ ent PLTYPE obj vtx vtxlst n ptlst)
    (vl-load-com)
    (setq ent (entsel "\n选取多线:\n"))
    (if ent
        (progn
          (setq PLTYPE (cdr (assoc 0 (entget (car ent)))))
          (if (or (= "POLYLINE" PLTYPE) (= "LWPOLYLINE" PLTYPE))
              (progn
                 (setq obj (vlax-ename->vla-object (car ent)))
                 (setq vtx (vla-get-Coordinates obj))
                 (setq vtxlst (vlax-safearray->list (vlax-variant-value vtx)))
                 (setq n 0)
                 (setq ptlst nil)

                (repeat (/ (length vtxlst) 2)
                         (setq ptlst (append ptlst (list (list (nth n vtxlst) (nth (1+ n) vtxlst)))))
                         (setq n (+ n 2))
                 )
                 (if ptlst
(PROGN
(command "erase" ent "")
  (command "_PLINE")
  (mapcar 'command ptlst)
(command PAUSE)
  
  )



                   nil)
             )
             (prompt "\n选取实体不是多义线!")
          );if
       )      
     );if
  )
发表于 2013-9-21 09:19 | 显示全部楼层
但中途中断了
是怎么个中断法,是中断后马上再次执行pl还是中断过程中有过其他操作?
 楼主| 发表于 2013-9-21 09:21 | 显示全部楼层
有其它操作
 楼主| 发表于 2013-9-21 09:24 | 显示全部楼层
我将就型地解决了,解决的代码见上帖。如果能在下面的代码基础上解决,更好


(defun C:TT (/ EN OBJ PT PP)
  (if (and (setq EN (entsel "\n选择多选线: "))
           (setq EN (car EN))
           (sssetfirst nil (ssadd EN))
           (setq OBJ (vlax-ename->vla-object EN))
           (or (= (vla-get-objectname OBJ) "AcDbPolyline")
               (and (princ "\n所选的对象不是多段线。") nil)
           )
      )
    (while (setq PT (getpoint "\n指定新顶点: "))
      (setq PT (trans PT 1 0)
            PP (vlax-curve-getclosestpointto OBJ PT))
      (vlax-invoke
        OBJ
        'ADDVERTEX
        (1+ (fix (vlax-curve-getparamatpoint OBJ PP)))
        (list (car PT) (cadr PT))
      )
    )
  )
  (sssetfirst)
  (princ)
)

发表于 2013-12-27 12:32 | 显示全部楼层
能不能使接着画的多义线的切线方向和选择的那条多义线的点的切线方向一样阿?谢谢?同时,如果选择的那条多义线的弧段能不能不要被修改成直线段阿?谢谢
发表于 2013-12-31 09:27 | 显示全部楼层
dbx511 发表于 2013-12-27 12:32
能不能使接着画的多义线的切线方向和选择的那条多义线的点的切线方向一样阿?谢谢?同时,如果选择的那条多 ...

要想达到你的要求应该好好研究下南方CASS的自由续接命令,如果能想明白它是怎么做的,应该也能做得出来的,不过应该不简单
发表于 2014-1-1 23:10 | 显示全部楼层
这个接着最后一点画线,感觉"像"pl命令。对于闭合线可能不是正确的结果。
  1. (defun C:TT (/ EN OBJ PT PP END_PT N N_PT )
  2.   (defun HH:GetCurveNum (obj)
  3.   (if (vlax-curve-isClosed obj)
  4.     (fix (1- (vlax-curve-getendParam obj)))
  5.     (fix (vlax-curve-getendParam obj))
  6.   )
  7. )
  8.   (if (and (setq EN (entsel "\n选择多选线: "))
  9.            (setq EN (car EN))
  10.            (sssetfirst nil (ssadd EN))
  11.            (setq OBJ (vlax-ename->vla-object EN))
  12.            (or (= (vla-get-objectname OBJ) "AcDbPolyline")
  13.                (and (princ "\n所选的对象不是多段线。") nil)
  14.            )
  15.       )
  16.     (progn
  17.     (setq end_pt(vlax-curve-getEndPoint OBJ))   
  18.     (while (if end_pt (setq PT (getpoint end_pt "\n指定新顶点: ")) (setq PT (getpoint "\n指定新顶点: ")))
  19.       (setq PT (trans PT 1 0)
  20.             ;PP (vlax-curve-getclosestpointto OBJ PT)
  21.             pp (vlax-3d-point pt)
  22.             )
  23.       (setq N(HH:GetCurveNum obj))
  24.       
  25.        (setq n_pt(vlax-safearray-fill
  26.            (vlax-make-safearray vlax-vbdouble '(0 . 1))
  27.            (list(car pt)(cadr pt))
  28.          ))
  29.       (vla-addvertex obj (1+ n) n_pt )
  30.       (setq end_pt(vlax-curve-getEndPoint OBJ))
  31.     )
  32.     )
  33.   )
  34.   (sssetfirst)
  35.   (princ)
  36. )
发表于 2014-1-4 12:05 | 显示全部楼层
清风明月名字 发表于 2013-9-21 09:24
我将就型地解决了,解决的代码见上帖。如果能在下面的代码基础上解决,更好

这一个虽然在接着画上有点问题,但在已有线上加点相当方便
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 06:54 , Processed in 0.196782 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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