求线段与垂直线的交点
<p>有一图层"凌乱的线段":</p><p>凌乱的线段布满一个大区域!他们都是线段!不存在任何曲线!</p><p>现在我画出n条垂直线!假如是50条</p><p>求出这些线段与我画出的50条垂直线的交点!</p><p></p><p>将交点坐标输出到txt中:</p><p>比如输出为:"交点.txt";则"交点.txt"内容如下</p><p> 第1条 竖直线</p><p> 交点个数:100 </p><p> x y</p><p> 10 20 </p><p> 30 50 </p><p> 60 70 </p><p> 80 -20 </p><p> ..........</p><p> -20 35 </p><p>第2条 竖直线 </p><p> 交点个数:60 </p><p> x y</p><p> 100 -30.02 </p><p> ..........</p><p> 20.2 15.5</p><p>。。。。。。。。。。。</p><p>。。。。。。。。。。。 </p><p></p><p>第n条 竖直线</p><p> 交点个数:120 </p><p> x y</p><p>101.2 103.58</p><p>..............................</p><p>................................</p><p>希望高手帮忙!</p><p></p> 这个程序貌似没什么用 是否必须是垂点?是否必须为实交点?发个示意图看看 线段指什么,单纯的line还是包含pline,对于后面的50条线你打算怎么选择,不会一个个选吧,建议归到一个独立的图层 为何没人理睬了!郁闷呀?!<br/> 谢谢上面的朋友!<br/><br/> 不一定是垂点!实交点虚交点都可以!如果麻烦的话,就只要实交点就行!<br/><br/>线段指什么,单纯的line还是包含pline,对于后面的50条线你打算怎么选择,不会一个个选吧,建议归到一个独立的图层<br/> <br/>线段里面 有line也有pline!<br/><br/>谢谢建议:那么我将50条竖直线就放在"竖直线"层!<br/><br/>还希望大家再帮帮我!<br/><br/><br/><br/><br/><br/> 再次再申请!<br/> (defun c:cs(/ YH_FILE YH_INDEX YH_INDEX1 YH_OBJ YH_OBJ1 YH_OBJ2 YH_OBJS1 YH_OBJS2 YH_PTCOUNT YH_PTS YH_PTS0 YH_SLT YH_TTCOUNT)(vl-load-com)
(prompt "\n指定处理范围: ")
(setq YH_slt (ssget '((0 . "LINE,LWPOLYLINE"))))
(if YH_slt
(progn
(setq YH_objs1 '()
YH_objs2 '()
YH_index 0
)
(repeat (sslength YH_slt)
(setq YH_obj (vlax-ename->vla-object (ssname YH_slt YH_index)))
(if (= (vla-get-layer YH_obj) "竖直线")(setq YH_objs1 (append YH_objs1 (list YH_obj)))(setq YH_objs2 (append YH_objs2 (list YH_obj))))
(setq YH_index (1+ YH_index))
)
(if (and YH_objs1 YH_objs2)
(progn
(setq YH_index 0
YH_file (open "C:\\交点.txt" "W")
YH_ttcount (length YH_objs1)
)
(write-line (strcat "一共处理了" (itoa YH_ttcount) "条竖直线") YH_file)
(write-line "" YH_file)
(repeat YH_ttcount
(setq YH_obj1 (nth YH_index YH_objs1)
YH_pts0 '()
)
(write-line (strcat "第" (itoa (+ YH_index 1)) "条竖直线") YH_file)
(mapcar '(lambda(YH_obj2 / YH_pts)
(setq YH_pts (vlax-variant-value (vla-intersectwith YH_obj1 YH_obj2 acExtendBoth)))
(if (> (vlax-safearray-get-u-bound YH_pts 1) 0)(setq YH_pts0 (append YH_pts0 (vlax-safearray->list YH_pts))))
)
YH_objs2
)
(setq YH_ptcount (/ (length YH_pts0) 3))
(write-line (strcat "交点个数:" (itoa YH_ptcount)) YH_file)
(if (> YH_ptcount 0) (write-line "X Y" YH_file))
(setq YH_index1 0)
(repeat YH_ptcount
(write-line (strcat (rtos (nth YH_index1 YH_pts0) 2 2) " " (rtos (nth (+ YH_index1 1) YH_pts0) 2 2)) YH_file)
(setq YH_index1 (+ YH_index1 3))
)
(write-line "" YH_file)
(setq YH_index (1+ YH_index))
)
(close YH_file)
(startapp "notepad" "C:\\交点.txt")
)
)
)
)
(princ)
)
谢谢!<br/> 你的帮助!我现在如何在Cad才能中使用你的代码呢?<br/> <p>个位朋友:</p><p> 帮忙在CAD中如何使用这个程序;我根本不懂得CAD的程序!</p> <p>加载<br/>把上面的代码复制到记事本中,然后保存成lsp文件,在CAD中运行appload,找到刚才的文件,然后加载就可以了。</p><p>运行<br/>在CAD命令行中输入cs,然后框选一个范围就有结果了</p><p>Goodluck!<br/></p>
页:
[1]
2