明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2372|回复: 7

VBA中的,Offset的问题

[复制链接]
发表于 2003-11-18 10:01 | 显示全部楼层 |阅读模式
我在ACD中用Rectangle和pline分加画一个矩形,用VBA中的obj.offset(-10)后,为什么是这样的效果(如图所示),请高手指点。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2003-11-18 12:31 | 显示全部楼层
偏移后判断偏移前后的面积,如果面积小则向内偏移了。
因为多段线为顺时针和逆时针之分,所以有时会向内偏移有时会向外偏移。
 楼主| 发表于 2003-11-19 10:59 | 显示全部楼层
如何判断,多线段的顺逆时针之分?
发表于 2006-5-11 22:11 | 显示全部楼层

下面程序你应该满意的,不满意请回復

Public Sub od()
On Error Resume Next
Dim i As Integer, ssetobj As AcadSelectionSet, I1 As Integer, selobj As AcadEntity
Dim str As String, shu As Double, I2 As Integer, Offsetobj As Variant
i = ThisDrawing.SelectionSets.Count
While (i > 0)
    If ThisDrawing.SelectionSets.Item(i - 1).Name = "od" Then
        ThisDrawing.SelectionSets.Item(i - 1).Delete
    End If
    i = i - 1
Wend
str = ThisDrawing.Utility.GetString(False, "Please input number you want to offset :")
str1 = Val(str)
Set ssetobj = ThisDrawing.SelectionSets.Add("od")
ssetobj.SelectOnScreen
For I1 = 0 To ssetobj.Count - 1
    Set selobj = ssetobj.Item(I1)
    Offsetobj = selobj.Offset(str1)
    I2 = UBound(Offsetobj)
    If Offsetobj(I2).Area < selobj.Area Then
        Offsetobj(I2).Delete
        Offsetobj = selobj.Offset(-str1)
    End If
Next
End Sub

发表于 2006-5-13 14:52 | 显示全部楼层

对了错了也不回復,这种人以后不帮算了

发表于 2013-4-23 17:45 | 显示全部楼层
楼主你的图中偏移后的线的颜色是怎样修改的啊?
发表于 2021-9-17 11:53 来自手机 | 显示全部楼层
用color属性修改
发表于 2021-9-17 15:53 | 显示全部楼层
2楼老大回复的是对的。
最简单的判断方法是分别取正参数和负参数,然后比较面积,看保留哪个。

还有一个办法就是利用格林公式判断顶点是逆时针还是顺时针排序。
offset的参数为正数时,逆时针是外偏,顺时针是内偏;参数为负数则相反。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-5 23:55 , Processed in 0.209192 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表