明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: raimo

求高手帮忙完成多段线随意加关键点的程序

  [复制链接]
发表于 2012-5-25 19:55 | 显示全部楼层
Gu_xl版主程序很好
发表于 2012-5-29 11:06 | 显示全部楼层
谢谢楼主,学习一下
发表于 2012-5-31 14:47 | 显示全部楼层
能改成一个命令多次加点就好了。
 楼主| 发表于 2012-6-1 21:54 | 显示全部楼层
king3d 发表于 2012-5-31 14:47
能改成一个命令多次加点就好了。

楼上的没有试过吗? 本来就可以多次加点的
发表于 2012-6-26 14:07 | 显示全部楼层
不错啊!谢谢!
发表于 2012-7-23 12:51 | 显示全部楼层
看看G大侠的程序
发表于 2012-7-23 13:09 | 显示全部楼层
本帖最后由 半听可乐 于 2012-7-23 13:10 编辑

个人搜集的:PL1 删除多义线顶点
                     PL2 增加除多义线顶点

;★PL2 多义线添加顶点
(defun C:PL2 (/ BULGE ENAME ENT PT)
  (if (and (setq ENT (entsel))
    (setq ENAME (car ENT))
    (setq PT (vlax-curve-getclosestpointto ENAME (cadr ENT)))
    (setq BULGE 0)
      )
    (ADD_VERTEX ENAME PT BULGE)
  )
)


(defun Add_Vertex (ename pt bulge / obj n dm d1 d2 pcen v plist)
  (setq obj (vlax-ename->vla-object ename))
  (if (vlax-curve-getParamAtPoint obj pt)
    (progn
  (setq n (fix (vlax-curve-getParamAtPoint obj pt)))
  (setq dm (vlax-curve-getDistAtPoint obj pt))
  (setq d1 (vlax-curve-getDistAtParam obj n))
  (setq d2 (vlax-curve-getDistAtParam obj (1+ n)))
  (setq v (vlax-curve-getsecondderiv obj n))
  (if (zerop (vla-getbulge obj n))
    (vla-AddVertex obj (1+ n) (ax:2DPoint pt))
    (progn
      (if (> (vla-getbulge obj n) 0)
    (setq pcen (mapcar '+ (vlax-safearray->list (vlax-variant-value (vla-get-Coordinate obj n))) v))
    (setq pcen (mapcar '- (vlax-safearray->list (vlax-variant-value (vla-get-Coordinate obj n))) v))
      )
      (setq ang2m
        (* 0.25
           (- (angle pcen (vlax-safearray->list (vlax-variant-value(vla-get-Coordinate obj (1+ n)))))
          (angle pcen pt)
           )
        )
        angm1
        (* 0.25
           (- (angle pcen pt)
          (angle pcen (vlax-safearray->list (vlax-variant-value(vla-get-Coordinate obj n))))
           )
        )
      )
      (vla-AddVertex obj (1+ n) (ax:2DPoint pt))
      (vla-SetBulge obj n (/ (sin angm1) (cos angm1)))
      (vla-SetBulge obj (1+ n) (/ (sin ang2m) (cos ang2m)))
    )
  )
  )
  (progn
    (setq plist    (vlax-safearray->list
          (vlax-variant-value
            (vla-get-coordinates obj)
          )
        )
    )
    (vla-AddVertex obj (/ (length plist) 2) (ax:2DPoint pt))
    (vla-SetBulge obj (1- (/ (length plist) 2)) bulge)
    )
  )
  (vla-update obj)
  (princ)
)

(defun ax:2DPoint (pt)
  (vlax-make-variant
    (vlax-safearray-fill
      (vlax-make-safearray vlax-vbdouble '(0 . 1))
      (list (car pt) (cadr pt))
    )
  )
)



;★PL1  多义线删除顶点
(defun c:PL1 ()
(setq p (getpoint "\nPick Point:"))
(setq ents (entget (ssname (ssget p) 0)))
(setq lst (member (list 10 (car p)(cadr p)) ents))
(foreach i (list (assoc 10 lst)(assoc 40 lst)(assoc 41 lst)(assoc 42 lst))
(setq ents (vl-remove i ents))
)
(entmod ents)
)


发表于 2012-7-23 13:14 | 显示全部楼层
Gu_xl 发表于 2011-9-21 22:59
稍加改进,连续加点,并且有夹点显示,可以及时看见所加点!
**** 本内容被作者隐藏 ****

G神,这程序经过测试发现有个bug:如果选择增加点不在线上,PL线则会被断开

点评

可以判断一下,如点选的点不在线上,提示选择LW对象在那一段上增加这个点(不选返回继续加点)  发表于 2012-7-23 16:32
发表于 2012-7-23 13:18 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2012-7-23 16:33 | 显示全部楼层
加上动态就完美了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 21:48 , Processed in 3.032316 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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