花锦绣 发表于 2007-3-24 16:41:00

[求助]帮帮忙,看看这个该怎么做?

<p>今天碰到这个大难题,有上百个类似的图形,要一个一个的标上距离(图上原定的是300.00),大家帮我看看如何用lisp替换文字。</p><p>工作要求是这样的,这批图形中,红线和圆圈是固定不变的,每条红线和曲线只有一个交点(感谢上帝),只是各个图形中的两条闭合曲线有不同变化,要求圆圈上方文字替换为图形中点到外曲线的距离,下方文字替换为中点到内曲线的距离。</p><p>不胜感谢。</p><p>&nbsp;</p>

sailorcwx 发表于 2007-3-25 18:40:00

<p>有几个问题不是很清楚<br/>1.每个图形只有2个闭合曲线?<br/>2.你所说的中点是不是指所有红线汇集的那个点</p>

花锦绣 发表于 2007-3-26 09:03:00

本帖最后由 作者 于 2007-3-26 9:06:19 编辑 <br /><br /> <p>是的,你说的都对。</p><p>为了便于编程,我把图加工了一下,所有红线之间的夹角相等,方向都是从外指向内,这样便于取出第一个的端点。小多边形的距离默认为301,大多边形的距离默认为302,这样易于判断。</p><p>红线可以根据颜色和其它线条区分开来。</p><p>如何判断大小多边形,我想通过面积大小来判断比较方便。</p><p>如何取得要替换的数值,可以根据红线的端点位置框选,依据文字的默认值来替换。</p><p>我现在遇到的问题是不知道autolisp如何取得曲线和直线的交点,我看了论坛上许多贴子,都是用VLISP来选择交点坐标的,我前面还有一大段AUTOLISP程序,这个只是其中的一段。但是我没有接触过VLISP,所以比较为难。</p><p></p><p></p><p>&nbsp;</p>

sailorcwx 发表于 2007-3-26 15:39:00

(defun c:ts(/ YH_DISTANCE1 YH_DISTANCE2 YH_ENT1 YH_ENT2D YH_ENT3D YH_INDEX YH_INTPTS1 YH_INTPTS2 YH_OBJ1 YH_OBJ2 YH_PT0 YH_PT1 YH_PT2 YH_PT3 YH_PT4 YH_PT5 YH_PT6 YH_PT7 YH_PT8 YH_SSGET1 YH_SSGET2 YH_SSGET3 YH_SSGET4 YH_TEXT1 YH_TEXT2)<br/>&nbsp; (setq YH_ssget1 (ssget "X" '((0 . "POLYLINE") (8 . "尺寸")))<br/>&nbsp;YH_ssget2 (ssget "X" '((0 . "LWPOLYLINE") (8 . "0") (62 . 1)))<br/>&nbsp;)<br/>&nbsp; (setq YH_obj1 (vlax-ename-&gt;vla-object (ssname YH_ssget1 0))<br/>&nbsp;YH_obj2 (vlax-ename-&gt;vla-object (ssname YH_ssget1 1))<br/>&nbsp;YH_index 0<br/>&nbsp;YH_osmode (getvar "OSMODE")<br/>&nbsp;)<br/>&nbsp; (setvar "OSMODE" 0)<br/>&nbsp; (repeat (sslength YH_ssget2)<br/>&nbsp;&nbsp;&nbsp; (setq YH_ent1 (ssname YH_ssget2 YH_index)<br/>&nbsp;&nbsp; YH_pt0 (cdr (assoc 10 (reverse (entget YH_ent1))))<br/>&nbsp;&nbsp; YH_pt1 (cdr (assoc 10 (entget YH_ent1)))<br/>&nbsp;&nbsp; YH_intpts1 (vla-intersectwith YH_obj1 (vlax-ename-&gt;vla-object YH_ent1) acextendnone)<br/>&nbsp;&nbsp; YH_intpts1 (vlax-variant-value YH_intpts1)<br/>&nbsp;&nbsp; YH_pt2 (list (vlax-safearray-get-element YH_intpts1 0) (vlax-safearray-get-element YH_intpts1 1) (vlax-safearray-get-element YH_intpts1 2))<br/>&nbsp;&nbsp; YH_distance1 (distance YH_pt0 YH_pt2)<br/>&nbsp;&nbsp; YH_intpts2 (vla-intersectwith YH_obj2 (vlax-ename-&gt;vla-object YH_ent1) acextendnone)<br/>&nbsp;&nbsp; YH_intpts2 (vlax-variant-value YH_intpts2)<br/>&nbsp;&nbsp; YH_pt3 (list (vlax-safearray-get-element YH_intpts2 0) (vlax-safearray-get-element YH_intpts2 1) (vlax-safearray-get-element YH_intpts2 2))<br/>&nbsp;&nbsp; YH_distance2 (distance YH_pt0 YH_pt3)<br/>&nbsp;&nbsp; YH_text1 (rtos (max YH_distance1 YH_distance2) 2 2)<br/>&nbsp;&nbsp; YH_text2 (rtos (min YH_distance1 YH_distance2) 2 2)<br/>&nbsp;&nbsp; YH_pt4 (polar YH_pt1 (angle YH_pt0 YH_pt1) 5)<br/>&nbsp;&nbsp; YH_pt5 (polar YH_pt4 (* pi 0) 5)<br/>&nbsp;&nbsp; YH_pt6 (polar YH_pt4 (* pi 0.5) 5)<br/>&nbsp;&nbsp; YH_pt7 (polar YH_pt4 (* pi 1) 5)<br/>&nbsp;&nbsp; YH_pt8 (polar YH_pt4 (* pi 1.5) 5) <br/>&nbsp;&nbsp; YH_ssget3 (ssget "CP" (list YH_pt5 YH_pt6 YH_pt7) '((0 . "TEXT")))<br/>&nbsp;&nbsp; YH_ent2d (entget (ssname YH_ssget3 0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YH_ent2d (subst (cons 1 YH_text1) (assoc 1 YH_ent2d) YH_ent2d)<br/>&nbsp;&nbsp; YH_ssget4 (ssget "CP" (list YH_pt5 YH_pt7 YH_pt8) '((0 . "TEXT")))<br/>&nbsp;&nbsp; YH_ent3d (entget (ssname YH_ssget4 0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YH_ent3d (subst (cons 1 YH_text2) (assoc 1 YH_ent3d) YH_ent3d)<br/>&nbsp;&nbsp; YH_index (1+ YH_index)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (entmod YH_ent2d)<br/>&nbsp;&nbsp;&nbsp; (entmod YH_ent3d)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; (setvar "OSMODE" YH_osmode)<br/>&nbsp; (princ)<br/>&nbsp; )

花锦绣 发表于 2007-3-26 20:58:00

用了一下,感觉良好,加再前面程序中,也能很好兼容,谢谢啦。
页: [1]
查看完整版本: [求助]帮帮忙,看看这个该怎么做?