- 积分
- 14125
- 明经币
- 个
- 注册时间
- 2013-9-7
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2016-7-29 23:53:52
|
显示全部楼层
llsheng_73 发表于 2013-11-3 05:37 
熬了一晚上,总算能计算出来了,至于算法的优化,限于水平,只能期待各位版主大人,各位兄弟姐妹们多提建议 ...
我倒是想要顶点连接的呢,以下是最近点连接的,供参考。
(defun c:test ()
(setvar "osmode" 15359)
(setvar "cmdecho" 0)
(command "undo" "be")
(princ "\n功能:将点选的两条曲线之间的最近端点对连。\n制作者:吴丁运\n")
(vl-load-com)
(while
(progn
(setq ent1 (entsel "\n请点选第一条曲线:\n"))
(not
(if (= ent1 nil)
nil
(wcmatch (cdr (assoc 0 (entget (car ent1))))
"LWPOLYLINE,POLYLINE,SPLINE"
) ;限定只能选取的曲线类型
)
)
)
(princ
"\n提示:选取的不是多段线、样条曲线或未选取任何图元,请重新选取第一条曲线:\n"
)
)
(while
(progn
(setq ent2 (entsel "\n请点选第二条曲线:\n"))
(not
(if (= ent2 nil)
nil
(wcmatch (cdr (assoc 0 (entget (car ent2))))
"LWPOLYLINE,POLYLINE,SPLINE"
) ;限定只能选取的曲线类型
)
)
)
(princ
"\n提示:选取的不是多段线、样条曲线或未选取任何图元,请重新选取第一条曲线:\n"
)
)
(setq entnam1 (car ent1)
obj1 (vlax-ename->vla-object entnam1)
entnam2 (car ent2)
obj2 (vlax-ename->vla-object entnam2)
j -1
n 0
ptlist nil
)
(while (setq ptdd (vlax-curve-getpointatparam obj1 (setq j (1+ j))))
(setq ptlist (cons ptdd ptlist)) ;获取端点坐标,获取顶点坐标
)
(command "color" "Bylayer")
(command "layer" "M" "层-两线端点对连" "C" "1" "层-两线端点对连" "")
(setvar "osmode" 0)
(repeat (length ptlist)
(setq pt1 (nth n ptlist))
(setq pt2 (vlax-curve-getclosestpointto obj2 pt1))
(setq pt2_near
(vlax-curve-getPointAtParam
obj2
(+ (vlax-curve-getParamAtPoint obj2 pt2) 0.5)
)
)
(if (<= (distance pt1 pt2) (distance pt1 pt2_near))
(command "Line" pt1 pt2 "")
(command "Line" pt1 pt2_near "")
)
(setq n (1+ n))
)
(setvar "osmode" 15359)
(command "undo" "e")
(princ)
) |
|