懂曲线的高手来看看,我又遇到 麻烦了
本帖最后由 邹锋 于 2013-1-14 21:13 编辑;BY ZZXXQQ
(defun c:ttT()
(vl-load-com)
(if (and (setq s1 (entsel "\nselect a polyline ????? :"))
(setq ent (entget (car s1)))
(= (cdr (assoc 1 ent)) "LWPOLYLINE")
(= (cdr (assoc 70 ent)) 1)
)
(progn
(setq objen (car s1))
(setq plst (list))
(foreach n ent
(if (= (car n) 10)
(setq plst (cons (cdr n) plst))
)
)
(setq plst (reverse plst));;;;;;;
(setq ss (ssget "wp" plst '((0 . "CIRCLE"))))
)
)
(if ss (sslength ss)0);取得封闭多义线内的一个圆
(setq na (ssname ss 0))
(setq obj (vlax-ename->vla-object objen))
(setq pt1 (cdr(assoc 10 (entget na))));取得圆心
(setq pt2 (vlax-curve-getClosestPointTo obj pt1));返回点到曲线最近的点
(addpt obj pt2);在多义线上添加刚刚搜索到的点
;写到这里,以下调试失败,不明白是哪出问题了,老是转出来的图变了
;(这里将这条封闭的多线段转成首尾相连的不封闭的线;
(setq pte (getendpt obj 0.0001));返回在距离曲线结束点为0.0001的地方的点
(addpt obj pte);再添加一个点然后将其做成不封闭的,失败了
(setq pte (getendpt obj 0.5));返回在距离曲线结束点为0.5的地方的点
(addpt obj pte);在多义线上添加点也失败了,不知为何了,要么多义线变样了
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;返回曲线距离终点为多久的一个点
(DEFUN getendpt(obj dist / len endpt)
(setq len (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj)))
(setq endpt (vlax-curve-getPointAtDist obj (- len dist)))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;多线段添加点
;;;;;;;;;;;;BY CAO YIN
(defun addpt (Obj Pt / PP)
(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))
)
)
看不明白吗?
我这程序想实现这样的目地
1选择封闭多义线
2求出多义线内的圆心
3算出圆心到多义线最近的点,并在这条多义线添加这个点
4将这条多义线变成首尾相连而不封闭的多义线(就是起始与结束点重合)
5算出距离这条多线段结束点为0.5的的点而且这个点在曲线上,最后 在这条多线段上面添加这个点
还是没搞懂,这个的目的是干啥,有啥用处? 阿霸jun 发表于 2013-1-14 21:17 static/image/common/back.gif
还是没搞懂,这个的目的是干啥,有啥用处?
这只是我写的软件中其中的一点点开始,在这只是做图用 找到原因了,看来楼主还是不够细心啊,犯了个低级错误
(= (cdr (assoc 1 ent)) "LWPOLYLINE")=>
(= (cdr (assoc 0 ent)) "LWPOLYLINE")
改后,用你的测试图,检验通过!
页:
[1]