autolisp如何实现多段线中的圆弧部分用插密多段线来替换
本帖最后由 275437962 于 2013-12-27 22:19 编辑CAD中实现所有图层多段线中的圆弧部分用插密多段线的方式来替换,即多段线中的圆弧部分用普通多段线加点插密的方式逼近, 并保证这些多段线处理后所在的图层与其原来所在的图层一致。
(说明:单独的圆弧对象不做处理)
( 说明: 整个多段线同宽 ) 提问很好,求高手解答 你这么做的用意是什么?直接把圆弧转换成多段线不行? 菜卷鱼 发表于 2013-12-27 14:02 static/image/common/back.gif
你这么做的用意是什么?直接把圆弧转换成多段线不行?
我的这个圆弧不是单独的圆弧对象,而用是多段线中的弧,它是作为多段线的一部分存在的!!! 本帖最后由 masterlong 于 2013-12-27 21:56 编辑
这个程序做起来并不是那么容易
如果整个PL线同宽还好点
如果不同宽就麻烦了
假设同宽
我的思路是这样的
记录宽度
和所有的节点坐标polist
炸碎PL线
获取前一选择集SS
遍历
遇到圆弧
记录起点终点
求弧长计算查密点个数
divide命令
记录新生成的点坐标
并加入到polist
最后删点删SS
画PL线
最近是相当的忙
有空的来试试吧 masterlong 发表于 2013-12-27 21:54 static/image/common/back.gif
这个程序做起来并不是那么容易
如果整个PL线同宽还好点
如果不同宽就麻烦了
可以保证,每一条多段线都是同宽的,你好,还是帮个忙吧!!! masterlong 发表于 2013-12-27 21:54 static/image/common/back.gif
这个程序做起来并不是那么容易
如果整个PL线同宽还好点
如果不同宽就麻烦了
不用这么复杂吧,我也正想写这个。等忙过这段时间写一个。 本帖最后由 自贡黄明儒 于 2014-1-3 11:28 编辑
啊,楼主修改了呀,饭也不请了,悬赏也不见了
;;[通用函数] 带过滤器的entsel
(defun Fsxm-entsel (msg filter)
(setq enp (entsel msg))
(if (or (= (type enp) 'str)
(and enp (ssget (cadr enp) filter))
)
enp
)
)
;;多段线弧用折线代替
(defun C:w2 ()
;;164.3 [功能] 多段线凸度列表
;;示例(get42 (entget(car (entsel))))
(defun get42 (en)
(mapcar 'cdr
(vl-remove-if-not '(lambda (x) (= (car x) 42)) en)
)
)
;;沿多段线取点,弧处按角度加密取点
(defun LP:getpts (E EN / I II J L42 N PT PTLST X)
(setq l42 (get42 en))
(setq j 0)
(repeat (setq n (fix (vlax-curve-getEndParam e)))
(setq x (car l42))
(setq l42 (cdr l42))
(cond ((equal x 0)
(setq pt (vlax-curve-getPointAtParam e j))
(setq ptlst (cons pt ptlst))
(setq j (1+ j))
)
(T
(setq i (fix (/ (* (atan (abs x)) 180) pi))) ;弧取点密度
(setq ii (/ 1.0 i))
(repeat i
(setq pt (vlax-curve-getPointAtParam e j))
(setq ptlst (cons pt ptlst))
(setq j (+ ii j))
)
(setq j (fix (+ 0.5 j)))
)
)
)
ptlst
)
;;164.31 [功能] 点表生成多段线
(defun Make-LWPOLYLINE (lst / PT)
(entmake (append (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 (length lst))
)
(mapcar '(lambda (pt) (cons 10 pt)) lst)
)
)
)
(setq e (Fsxm-entsel "\n 选择剖面的多段线" '((0 . "LWPOLYLINE"))))
(setq pt (cadr e))
(setq e (car e))
(setq en (entget e))
(Make-LWPOLYLINE (LP:getpts E EN))
) 自贡黄明儒 发表于 2013-12-31 16:48 static/image/common/back.gif
啊,楼主修改了呀,饭也不请了,悬赏也不见了
朋友,有问题啊,一个是插密的间距不能人为设置,还有是原来的线没有删除,还有是,不能所有框选,自动对有有弧的多段线进行处理, 只能找到这条线,然后一条一条选 ,去处理!!!!不是太实用!!! 楼主自己改改就好。。。。。。
页:
[1]