【Gu_xl】关于在CAD2004中Vla-offset 函数使用的奇怪问题?
本帖最后由 Gu_xl 于 2013-6-11 10:48 编辑 <br /><br /> 在AutoCAD2004下,使用函数 Vla-offset 对多段线 LWPOLYLINE 进行偏移时,命令代码<br/><div style="MARGIN-TOP: 5px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 5px" 20px? 20px="20px" 5px?>
<div class="smallfont" style="MARGIN-BOTTOM: 2px"><font face="宋体,verdana,arial,helvetica">代码:</div><pre class="alt2" style="BORDER-RIGHT: 1px" inset? 1px="1px" BORDER-BOTTOM: 6px; PADDING-TOP: 99%; WIDTH: inset; BORDER-LEFT: auto; OVERFLOW: 0px; MARGIN: PADDING-BOTTOM: PADDING-LEFT: BORDER-TOP: PADDING-RIGHT: 1px?><font style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva">
(vla-offset (vlax-ename->vla-object (car (entsel))) 0.1)
</font></pre></font></div>
<div></div><br/>当多段线坐标x、y大于10000时,偏移后,原多段线自动被挪到0,0坐标位置,其他曲线没有此现象,我百思不得其解!在2002版本线又运行正常,不知有那位高人能给指点一二!不胜感谢!</font> <p>沉了,自己顶一下,这个问题怎么就没人知道呢!</p> <p>这是BUG。在OFFSET前,先自我复制后,再偏移,再把原对象删除。</p> 哦!谢谢明总!那就没办法喽!有没有解决的办法?还是就只能不用vl-offset命令了? 本帖最后由 Gu_xl 于 2013-3-19 21:23 编辑
终于想到解决办法了,就是自定义一下偏移命令函数
(defun gxl-Offset (obj d / Flag minpoint maxpoint acadver rtn)
(setq acadver (substr (getvar "acadver") 1 2))
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
(setq maxpoint (vlax-safearray->list maxpoint))
(if (or (>= (abs(car maxpoint)) 10000.0)(>= (abs(cadr maxpoint)) 10000.0))
(setq Flag t)
)
(cond ((and flag (= "16" acadver) (= (vla-get-ObjectName obj) "AcDbPolyline"))
(vla-move obj minpoint (vlax-3d-point '(0 0 0)))
(setq rtn (VL-CATCH-ALL-APPLY 'vla-Offset(list obj d)))
(if (not (VL-CATCH-ALL-ERROR-P rtn))
(progn
(vla-move obj (vlax-3d-point '(0 0 0)) minpoint)
(vla-move (vlax-ename->vla-object (entlast)) (vlax-3d-point '(0 0 0)) minpoint)
)
)
rtn
)
(t
(VL-CATCH-ALL-APPLY 'vla-Offset(list obj d))
)
)
)
受教了.谢谢 感谢Gu_xl版主分享程序,学习了! 这个bug很困扰人那
感谢,好像是两年前的帖子哦 向G版主学习。