wjfling 发表于 2003-11-18 10:01:00

VBA中的,Offset的问题

我在ACD中用Rectangle和pline分加画一个矩形,用VBA中的obj.offset(-10)后,为什么是这样的效果(如图所示),请高手指点。

mccad 发表于 2003-11-18 12:31:00

偏移后判断偏移前后的面积,如果面积小则向内偏移了。
因为多段线为顺时针和逆时针之分,所以有时会向内偏移有时会向外偏移。

wjfling 发表于 2003-11-19 10:59:00

如何判断,多线段的顺逆时针之分?

yuangw1234 发表于 2006-5-11 22:11:00

<P>下面程序你应该满意的,不满意请回復</P>
<P>Public Sub od() <BR>On Error Resume Next<BR>Dim i As Integer, ssetobj As AcadSelectionSet, I1 As Integer, selobj As AcadEntity<BR>Dim str As String, shu As Double, I2 As Integer, Offsetobj As Variant<BR>i = ThisDrawing.SelectionSets.Count<BR>While (i &gt; 0)<BR>&nbsp;&nbsp;&nbsp; If ThisDrawing.SelectionSets.Item(i - 1).Name = "od" Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.SelectionSets.Item(i - 1).Delete<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; i = i - 1<BR>Wend<BR>str = ThisDrawing.Utility.GetString(False, "Please input number you want to offset :")<BR>str1 = Val(str)<BR>Set ssetobj = ThisDrawing.SelectionSets.Add("od")<BR>ssetobj.SelectOnScreen<BR>For I1 = 0 To ssetobj.Count - 1<BR>&nbsp;&nbsp;&nbsp; Set selobj = ssetobj.Item(I1)<BR>&nbsp;&nbsp;&nbsp; Offsetobj = selobj.Offset(str1)<BR>&nbsp;&nbsp;&nbsp; I2 = UBound(Offsetobj)<BR>&nbsp;&nbsp;&nbsp; If Offsetobj(I2).Area &lt; selobj.Area Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Offsetobj(I2).Delete<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Offsetobj = selobj.Offset(-str1)<BR>&nbsp;&nbsp;&nbsp; End If<BR>Next<BR>End Sub<BR></P>

yuangw1234 发表于 2006-5-13 14:52:00

<P>对了错了也不回復,这种人以后不帮算了</P>

crazylsp 发表于 2013-4-23 17:45:20

楼主你的图中偏移后的线的颜色是怎样修改的啊?

zhangxin0298 发表于 2021-9-17 11:53:32

用color属性修改

bluelover 发表于 2021-9-17 15:53:19

2楼老大回复的是对的。
最简单的判断方法是分别取正参数和负参数,然后比较面积,看保留哪个。

还有一个办法就是利用格林公式判断顶点是逆时针还是顺时针排序。
offset的参数为正数时,逆时针是外偏,顺时针是内偏;参数为负数则相反。
页: [1]
查看完整版本: VBA中的,Offset的问题