ghost_mooo 发表于 2006-10-30 16:47:00

如何根据制定范围画平行线

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如:我在屏幕上画一条直线(或者是多段线或弧段或圆),我想在此线的两边平行50米的位置画出两条平行线(如果是圆的话,就是内外50米),应该怎么做?请各位大虾指教,谢谢!!!</P>

rongyifei 发表于 2006-10-30 20:21:00

可以用offset方法!

rongyifei 发表于 2006-10-30 20:22:00

<P>比如可参照下面的程式:</P>
<P>(defun c:test ()<BR>&nbsp; (setq&nbsp;obj&nbsp; (vlax-ename-&gt;vla-object (car (entsel)))<BR>&nbsp;dis1 50<BR>&nbsp;dis2 (- 0 dis1)<BR>&nbsp; )<BR>&nbsp; (vla-offset obj dis1)<BR>&nbsp; (if (or (eq (vla-get-objectname obj) "AcDbCircle")<BR>&nbsp;&nbsp; (eq (vla-get-objectname obj) "AcDbArc")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if&nbsp;(&gt; (vla-get-radius obj) dis1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-offset obj dis2)<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (vla-offset obj dis2)<BR>&nbsp; )<BR>)</P>

ghost_mooo 发表于 2006-10-31 09:53:00

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <A name=36747><FONT color=#000066><B>rongyifei</B></FONT></A>大哥,您的程序非常好用,谢谢。目前的程序一次只能对一个元素,有没有批量的方法,请再赐教了,谢谢!1

rongyifei 发表于 2006-10-31 19:57:00

如果有多个对象,则需要构造选择集.

rongyifei 发表于 2006-10-31 21:21:00

<P>我写的一个,看看怎么样?</P>
<P>(defun c:test ()<BR>&nbsp; (setq&nbsp;ssets&nbsp;(vla-get-selectionsets<BR>&nbsp;&nbsp;&nbsp; (vla-get-ActiveDocument (vlax-get-acad-object))<BR>&nbsp;&nbsp;)<BR>&nbsp;gpcode&nbsp;(vlax-make-safearray vlax-vbInteger '(0 . 5))<BR>&nbsp;gpvalue&nbsp;(vlax-make-safearray vlax-vbvariant '(0 . 5))<BR>&nbsp; )<BR>&nbsp; (vlax-safearray-put-element gpcode 0 -4)<BR>&nbsp; (vlax-safearray-put-element gpcode 1 0)<BR>&nbsp; (vlax-safearray-put-element gpcode 2 0)<BR>&nbsp; (vlax-safearray-put-element gpcode 3 0)<BR>&nbsp; (vlax-safearray-put-element gpcode 4 0)<BR>&nbsp; (vlax-safearray-put-element gpcode 5 -4)<BR>&nbsp; (vlax-safearray-put-element gpvalue 0 "&lt;OR")<BR>&nbsp; (vlax-safearray-put-element gpvalue 1 "LINE")<BR>&nbsp; (vlax-safearray-put-element gpvalue 2 "CIRCLE")<BR>&nbsp; (vlax-safearray-put-element gpvalue 3 "LWPOLYLINE")<BR>&nbsp; (vlax-safearray-put-element gpvalue 4 "ARC")<BR>&nbsp; (vlax-safearray-put-element gpvalue 5 "OR&gt;")<BR>&nbsp; (setq sset (vla-add ssets "sset"))<BR>&nbsp; (vla-SelectOnScreen sset gpcode gpvalue)<BR>&nbsp; (vlax-for obj&nbsp;sset<BR>&nbsp;&nbsp;&nbsp; (progn (vla-offset obj dis1)<BR>&nbsp;&nbsp;&nbsp; (if (or (eq (vla-get-objectname obj) "AcDbCircle")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (eq (vla-get-objectname obj) "AcDbArc")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (&gt; (vla-get-radius obj) dis1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-offset obj dis2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-offset obj dis2)<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )<BR>&nbsp; (vla-Delete sset)<BR>)</P>

ghost_mooo 发表于 2006-11-1 09:44:00

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <A name=36747><FONT color=#000066><B>rongyifei</B></FONT></A>大哥,程序有问题,执行了以后可以选择多个元素,但是选择了元素后敲回车就报错误了:ActiveX服务器返回错误:非选择性的参数。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 难道这个程序要和之前的那个一起用吗?怎么一起用?请指教,谢谢!</P>

rongyifei 发表于 2006-11-1 20:51:00

<P>忘了对变量dis1,dis2赋值!这下可以了!</P>
<P>(defun c:test ()<BR>&nbsp; (setq&nbsp;ssets&nbsp;(vla-get-selectionsets<BR>&nbsp;&nbsp;&nbsp; (vla-get-ActiveDocument (vlax-get-acad-object))<BR>&nbsp;&nbsp;)<BR>&nbsp;gpcode&nbsp;(vlax-make-safearray vlax-vbInteger '(0 . 5))<BR>&nbsp;gpvalue&nbsp;(vlax-make-safearray vlax-vbvariant '(0 . 5))<BR>&nbsp;dis1&nbsp;50<BR>&nbsp;dis2&nbsp;(- 0 dis1)<BR>&nbsp; )<BR>&nbsp; (vlax-safearray-put-element gpcode 0 -4)<BR>&nbsp; (vlax-safearray-put-element gpcode 1 0)<BR>&nbsp; (vlax-safearray-put-element gpcode 2 0)<BR>&nbsp; (vlax-safearray-put-element gpcode 3 0)<BR>&nbsp; (vlax-safearray-put-element gpcode 4 0)<BR>&nbsp; (vlax-safearray-put-element gpcode 5 -4)<BR>&nbsp; (vlax-safearray-put-element gpvalue 0 "&lt;OR")<BR>&nbsp; (vlax-safearray-put-element gpvalue 1 "LINE")<BR>&nbsp; (vlax-safearray-put-element gpvalue 2 "CIRCLE")<BR>&nbsp; (vlax-safearray-put-element gpvalue 3 "LWPOLYLINE")<BR>&nbsp; (vlax-safearray-put-element gpvalue 4 "ARC")<BR>&nbsp; (vlax-safearray-put-element gpvalue 5 "OR&gt;")<BR>&nbsp; (setq sset (vla-add ssets "sset"))<BR>&nbsp; (vla-SelectOnScreen sset gpcode gpvalue)<BR>&nbsp; (vlax-for obj&nbsp;sset<BR>&nbsp;&nbsp;&nbsp; (progn (vla-offset obj dis1)<BR>&nbsp;&nbsp;&nbsp; (if (or (eq (vla-get-objectname obj) "AcDbCircle")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (eq (vla-get-objectname obj) "AcDbArc")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (&gt; (vla-get-radius obj) dis1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-offset obj dis2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-offset obj dis2)<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )<BR>&nbsp; (vla-Delete sset)<BR>)</P>

ntyks 发表于 2009-8-29 13:42:00

5061220 发表于 2009-8-29 14:18:00

ghost_mooo发表于2006-10-31 9:53:00static/image/common/back.gif&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rongyifei大哥,您的程序非常好用,谢谢。目前的程序一次只能对一个元素,有没有批量的方法,请再赐教了,谢谢!1

<p>......................</p>
页: [1]
查看完整版本: 如何根据制定范围画平行线