- 积分
- 652
- 明经币
- 个
- 注册时间
- 2005-4-28
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
有以下代码,根据不同情况实行拉伸实体的操作,可为什么存在拉伸路径的时候,只能够拉伸ExtrudeFace层中的面,而须绘制路径的时候则可以拉伸所有面!
Private Sub CInput_Click() Form2.Hide Dim objlayer As AcadLayer Dim r As Integer Dim t As Integer r = Val(PHeight.Text) t = Val(RThickness.Text) 如果层ExtrudePath不存在,就创建一个明为ExtrudePath的层,如果存在就置为当前层。 On Error Resume Next
If IsNull(ThisDrawing.Layers.Item("ExtrudePath")) Then Set objlayer = ThisDrawing.Layers.Add("ExtrudePath") ThisDrawing.ActiveLayer = objlayer
Else For Each objlayer In ThisDrawing.Layers If objlayer.Name = "ExtrudePath" Then ThisDrawing.ActiveLayer = objlayer Exit For End If Next End If
判断ExtrudePath层中是否存在三维多段线,如果有两条以上,就要求用户选择其中一条做为拉伸路径objline,如果只有一条,就直接作为拉伸路径objline,如果没有的话,就绘制一条拉伸路径objline
Dim objline As Acad3DPolyline Dim tpoint As Variant tpoint(0) = Val(Form2.XPoint.Text) tpoint(1) = Val(Form2.YPoint.Text) tpoint(2) = Val(Form2.ZPoint.Text)
Dim sset As AcadSelectionSet Dim sset1 As AcadSelectionSet
Dim y As Integer
y = ThisDrawing.SelectionSets.Count
While (y > 0) Set sset = ThisDrawing.SelectionSets.Item(y - 1) If sset.Name = "3dPLine" Or "A3dPLine" Then sset.Delete End If y = y - 1 Wend
Set sset = ThisDrawing.SelectionSets.Add("3dPLine") Set sset1 = ThisDrawing.SelectionSets.Add("A3dPLine")
Dim gpcode(1) As Integer Dim datavalue(1) As Variant
gpcode(0) = 0 datavalue(0) = "PolyLine" gpcode(1) = 8 datavalue(1) = "ExtrudePath"
sset.Select acSelectionSetAll, , , gpcode, datavalue If sset.Count > 1 Then
MsgBox "满足条件的拉伸路径存在多条,请选择一条!"
sset1.SelectOnScreen gpcode, datavalue Set objline = sset1.Item(0)
objline.Move objline.Coordinate(0), tpoint
For i = 0 To sset.Count - 1
If Not sset.Item(i).ObjectID = sset1.Item(0).ObjectID Then sset.Item(i).Delete End If
Next i
Else
If sset.Count = 1 Then Set objline = sset.Item(0) objline.Move objline.Coordinate(0), tpoint
Else For Each objlayer In ThisDrawing.Layers If objlayer.Name = "ExtrudePath" Then ThisDrawing.ActiveLayer = objlayer End If Exit For Next
绘制三维多段线,且其起始点已经确定
On Error GoTo errhandle 'Dim p1 As Variant Dim p2 As Variant 'p1 = ThisDrawing.Utility.GetPoint(, vbCr & "请输入第一点:") p2 = ThisDrawing.Utility.GetPoint(, vbCr & "请输入下一点:") Dim pnt(5) As Double pnt(0) = Val(Form2.XPoint.Text): pnt(1) = Val(Form2.YPoint.Text): pnt(2) = Val(Form2.ZPoint.Text) pnt(3) = p2(0): pnt(4) = p2(1): pnt(5) = p2(2)
Set objline = ThisDrawing.ModelSpace.Add3DPoly(pnt) Do While True p2 = ThisDrawing.Utility.GetPoint(p2, vbCr & "请输入下一点:") objline.AppendVertex p2 Loop errhandle: End If
End If
把该三维多段线的起始点做为新建ucs的原点,第二点作为另外一个参数 Dim endpoint1(0 To 2) As Double Dim endpoint2(0 To 2) As Double
Dim coord1 As Variant Dim coord2 As Variant Dim str1 As String Dim str2 As String
'coord1 = objline.Coordinate(0)
'coord2 = objline.Coordinate(1) coord1 = ThisDrawing.Utility.TranslateCoordinates(objline.Coordinate(0), acWorld, acUCS, False) coord2 = ThisDrawing.Utility.TranslateCoordinates(objline.Coordinate(1), acWorld, acUCS, False)
endpoint1(0) = coord1(0): endpoint1(1) = coord1(1): endpoint1(2) = coord1(2) endpoint2(0) = coord2(0): endpoint2(1) = coord2(1): endpoint2(2) = coord2(2)
str1 = endpoint1(0) & "," & endpoint1(1) & "," & endpoint1(2) str2 = endpoint2(0) & "," & endpoint2(1) & "," & endpoint2(2)
ThisDrawing.SendCommand "_ucs " & "N" & vbCr & "za" & vbCr & str1 & vbCr & str2 & vbCr
分别在层extrudeFacel和0层中绘制面
以下的创建面的函数存在于模块中 Call CreateRegion1(100 * Val(Form1.LPbox1.Text), 100 * Val(Form1.MCbox1.Text), 100 * Val(Form1.RPbox1.Text), 100 * Val(Form1.LTbox1.Text), 100 * ValForm1.RTbox1.Text))
建立包含所有ExtrudeFace层中的面的选择集ssetF Dim ssetF As AcadSelectionSet Dim x As Integer x = ThisDrawing.SelectionSets.Count While (x > 0) Set ssetF = ThisDrawing.SelectionSets.Item(x - 1) If ssetF.Name = "ExtrudeFace" Then ssetF.Delete End If x = x - 1 Wend Set ssetF = ThisDrawing.SelectionSets.Add("ExtrudeFace")
gpcode(0) = 0 datavalue(0) = "Region" gpcode(1) = 8 datavalue(1) = "ExtrudeFace" ssetF.Select acSelectionSetAll, , , gpcode, datavalue
拉伸所有ExtrudeFace层中的面创建实体
Dim obj3dPath() As Acad3DSolid For i = 0 To ssetF.Count - 1 ReDim obj3dPath(i)
Set obj3dPath(i) = ThisDrawing.ModelSpace.AddExtrudedSolidAlongPath(ssetF(i), objline) obj3dPath(i).TrueColor = ssetF(i).TrueColor ssetF(i).Delete obj3dPath(i).Layer = "Path" Next i
objline.Layer = "0"
建立包含所有0层中的面的选择集sseth
Dim sseth As AcadSelectionSet i = ThisDrawing.SelectionSets.Count
While (i > 0) Set sseth = ThisDrawing.SelectionSets.Item(i - 1) If sseth.Name = "helpobj" Then sseth.Delete End If i = i - 1 Wend
gpcode(0) = 0 datavalue(0) = "Region" gpcode(1) = 8 datavalue(1) = "0" sseth.Select acSelectionSetAll, , , gpcode, datavalue
拉伸0层中的面 Dim hobj3dPath As Acad3DSolid
Set hobj3dPath = ThisDrawing.ModelSpace.AddExtrudedSolidAlongPath(sseth.Item(0), objline) objline.Delete sseth.Item(0).Delete hobj3dPath.Layer = "0" End If
end sub
|
|