如何根据制定范围画平行线
<P> 如:我在屏幕上画一条直线(或者是多段线或弧段或圆),我想在此线的两边平行50米的位置画出两条平行线(如果是圆的话,就是内外50米),应该怎么做?请各位大虾指教,谢谢!!!</P> 可以用offset方法! <P>比如可参照下面的程式:</P><P>(defun c:test ()<BR> (setq obj (vlax-ename->vla-object (car (entsel)))<BR> dis1 50<BR> dis2 (- 0 dis1)<BR> )<BR> (vla-offset obj dis1)<BR> (if (or (eq (vla-get-objectname obj) "AcDbCircle")<BR> (eq (vla-get-objectname obj) "AcDbArc")<BR> )<BR> (if (> (vla-get-radius obj) dis1)<BR> (vla-offset obj dis2)<BR> )<BR> (vla-offset obj dis2)<BR> )<BR>)</P> <A name=36747><FONT color=#000066><B>rongyifei</B></FONT></A>大哥,您的程序非常好用,谢谢。目前的程序一次只能对一个元素,有没有批量的方法,请再赐教了,谢谢!1 如果有多个对象,则需要构造选择集. <P>我写的一个,看看怎么样?</P>
<P>(defun c:test ()<BR> (setq ssets (vla-get-selectionsets<BR> (vla-get-ActiveDocument (vlax-get-acad-object))<BR> )<BR> gpcode (vlax-make-safearray vlax-vbInteger '(0 . 5))<BR> gpvalue (vlax-make-safearray vlax-vbvariant '(0 . 5))<BR> )<BR> (vlax-safearray-put-element gpcode 0 -4)<BR> (vlax-safearray-put-element gpcode 1 0)<BR> (vlax-safearray-put-element gpcode 2 0)<BR> (vlax-safearray-put-element gpcode 3 0)<BR> (vlax-safearray-put-element gpcode 4 0)<BR> (vlax-safearray-put-element gpcode 5 -4)<BR> (vlax-safearray-put-element gpvalue 0 "<OR")<BR> (vlax-safearray-put-element gpvalue 1 "LINE")<BR> (vlax-safearray-put-element gpvalue 2 "CIRCLE")<BR> (vlax-safearray-put-element gpvalue 3 "LWPOLYLINE")<BR> (vlax-safearray-put-element gpvalue 4 "ARC")<BR> (vlax-safearray-put-element gpvalue 5 "OR>")<BR> (setq sset (vla-add ssets "sset"))<BR> (vla-SelectOnScreen sset gpcode gpvalue)<BR> (vlax-for obj sset<BR> (progn (vla-offset obj dis1)<BR> (if (or (eq (vla-get-objectname obj) "AcDbCircle")<BR> (eq (vla-get-objectname obj) "AcDbArc")<BR> )<BR> (if (> (vla-get-radius obj) dis1)<BR> (vla-offset obj dis2)<BR> )<BR> (vla-offset obj dis2)<BR> )<BR> )<BR> )<BR> (vla-Delete sset)<BR>)</P> <P> <A name=36747><FONT color=#000066><B>rongyifei</B></FONT></A>大哥,程序有问题,执行了以后可以选择多个元素,但是选择了元素后敲回车就报错误了:ActiveX服务器返回错误:非选择性的参数。</P>
<P> 难道这个程序要和之前的那个一起用吗?怎么一起用?请指教,谢谢!</P> <P>忘了对变量dis1,dis2赋值!这下可以了!</P>
<P>(defun c:test ()<BR> (setq ssets (vla-get-selectionsets<BR> (vla-get-ActiveDocument (vlax-get-acad-object))<BR> )<BR> gpcode (vlax-make-safearray vlax-vbInteger '(0 . 5))<BR> gpvalue (vlax-make-safearray vlax-vbvariant '(0 . 5))<BR> dis1 50<BR> dis2 (- 0 dis1)<BR> )<BR> (vlax-safearray-put-element gpcode 0 -4)<BR> (vlax-safearray-put-element gpcode 1 0)<BR> (vlax-safearray-put-element gpcode 2 0)<BR> (vlax-safearray-put-element gpcode 3 0)<BR> (vlax-safearray-put-element gpcode 4 0)<BR> (vlax-safearray-put-element gpcode 5 -4)<BR> (vlax-safearray-put-element gpvalue 0 "<OR")<BR> (vlax-safearray-put-element gpvalue 1 "LINE")<BR> (vlax-safearray-put-element gpvalue 2 "CIRCLE")<BR> (vlax-safearray-put-element gpvalue 3 "LWPOLYLINE")<BR> (vlax-safearray-put-element gpvalue 4 "ARC")<BR> (vlax-safearray-put-element gpvalue 5 "OR>")<BR> (setq sset (vla-add ssets "sset"))<BR> (vla-SelectOnScreen sset gpcode gpvalue)<BR> (vlax-for obj sset<BR> (progn (vla-offset obj dis1)<BR> (if (or (eq (vla-get-objectname obj) "AcDbCircle")<BR> (eq (vla-get-objectname obj) "AcDbArc")<BR> )<BR> (if (> (vla-get-radius obj) dis1)<BR> (vla-offset obj dis2)<BR> )<BR> (vla-offset obj dis2)<BR> )<BR> )<BR> )<BR> (vla-Delete sset)<BR>)</P> ghost_mooo发表于2006-10-31 9:53:00static/image/common/back.gif rongyifei大哥,您的程序非常好用,谢谢。目前的程序一次只能对一个元素,有没有批量的方法,请再赐教了,谢谢!1
<p>......................</p>
页:
[1]