我是Solidworks和VBA的新手。我已经创建了一个文本文件,其中包含了许多多边形(比如200)的顶点坐标,我想从这些数据中绘制简单的3D对象。我在Solidworks中记录了一个五角大楼的宏,我试图在其中放一个反循环来连续绘制我的200个五角大楼。我知道我必须从文本文件中读取一列顶点,并在Part.SketchManager.CreateLine(x1, y1, z1, x2, y2, z2)
命令中使用它。但不起作用。发生了许多错误,这意味着有许多事情我不知道运行这段代码,正如我所期望的。
如果你认为我需要告诉更多的细节,请告诉我完成这个问题!
' ******************************************************************************
' C:\Users\Abbas\AppData\Local\Temp\swx7040\Macro1.swb - macro recorded on 02/11/20 by Abbas
' ******************************************************************************
Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()
Set swApp = _
Application.SldWorks
Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2016\templates\Part.prtdot", 0, 0, 0)
swApp.ActivateDoc2 "Part4", False, longstatus
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("Top Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Dim skSegment As Object
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.043745, 0#, 0#)
Set skSegment = Part.SketchManager.CreateLine(0.043745, 0#, 0#, 0.06038, 0.030036, 0#)
Set skSegment = Part.SketchManager.CreateLine(0.06038, 0.030036, 0#, 0.031422, 0.064231, 0#)
Set skSegment = Part.SketchManager.CreateLine(0.031422, 0.064231, 0#, -0.016327, 0.049752, 0#)
Set skSegment = Part.SketchManager.CreateLine(-0.016327, 0.049752, 0#, 0#, 0#, 0#)
Part.ShowNamedView2 "*Trimetric", 8
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Line5", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
Dim myFeature As Object
Set myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0, 0.001, 0.001, False, False, False, False, 1.74532925199433E-02, 1.74532925199433E-02, False, False, False, False, True, True, True, 0, 0, False)
Part.SelectionManager.EnableContourSelection = False
longstatus = Part.SaveAs3("C:\Users\Abbas\Desktop\Part4.SLDPRT", 0, 2)
Part.ClearSelection2 True
Set Part = Nothing
swApp.CloseDoc "Part4.SLDPRT"
End Sub
我需要在solidworks中创建这样的东西.
发布于 2020-02-11 12:53:41
首先,不能总是直接使用已记录的宏。它必须在某些时候被清理和纠正。宏记录器无法记录在solidworks中使用的所有精确功能。
这是已记录的宏的清洁版本:
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()
Set swApp = Application.SldWorks
Dim Part As ModelDoc2
Set Part = swApp.NewPart ' open new part document (with standard template file defined in system-options)
Set Part = swApp.ActiveDoc
' select front plane
boolstatus = Part.Extension.SelectByID2("Ebene vorne", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
' create new sketch on front plane
Part.SketchManager.InsertSketch (True)
Dim swActiveSketch As Sketch
Set swActiveSketch = Part.SketchManager.ActiveSketch
Dim skSegment As Object
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.043745, 0#, 0#)
Set skSegment = Part.SketchManager.CreateLine(0.043745, 0#, 0#, 0.06038, 0.030036, 0#)
Set skSegment = Part.SketchManager.CreateLine(0.06038, 0.030036, 0#, 0.031422, 0.064231, 0#)
Set skSegment = Part.SketchManager.CreateLine(0.031422, 0.064231, 0#, -0.016327, 0.049752, 0#)
Set skSegment = Part.SketchManager.CreateLine(-0.016327, 0.049752, 0#, 0#, 0#, 0#)
' close active sketch
Part.SketchManager.InsertSketch (True)
Part.ShowNamedView2 "*Trimetric", 8
Part.ClearSelection2 True
boolstatus = swActiveSketch.Select2(False, 0)
Dim myFeature As Object
Set myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0, 0.001, 0.001, False, False, False, False, 1.74532925199433E-02, 1.74532925199433E-02, False, False, False, False, True, True, True, 0, 0, False)
longstatus = Part.SaveAs3("C:\Users\Abbas\Desktop\Part4.SLDPRT", 0, 2)
Part.ClearSelection2 True
swApp.CloseDoc Part.GetTitle
Set Part = Nothing
End Sub
如果你想要自动创建200个点的线,你必须用更多的逻辑来替换一些线。下一个例子是使用示例中的点,这只是为了演示。您必须用文本文件或类似的200个xyz点填充变量vPoints。
Dim p0(2) As Variant
Dim p1(2) As Variant
Dim p2(2) As Variant
Dim p3(2) As Variant
Dim p4(2) As Variant
p0(0) = 0#
p0(1) = 0#
p0(2) = 0#
p1(0) = 0.043745
p1(1) = 0#
p1(2) = 0#
p2(0) = 0.06038
p2(1) = 0.030036
p2(2) = 0#
p3(0) = 0.031422
p3(1) = 0.064231
p3(2) = 0#
p4(0) = -0.016327
p4(1) = 0.049752
p4(2) = 0#
Dim vPoints(4) As Variant
vPoints(0) = p0
vPoints(1) = p1
vPoints(2) = p2
vPoints(3) = p3
vPoints(4) = p4
'vPoints = FillVariantWithPointsFromTextFile() ' or a collection or what else you want to use
Dim i As Integer
For i = 0 To UBound(vPoints)
Dim vPoint As Variant
vPoint = vPoints(i)
If (i + 1 <= UBound(vPoints)) Then
Dim vNextPoint As Variant
vNextPoint = vPoints(i + 1)
' draw a line between current point and next point
Set skSegment = Part.SketchManager.CreateLine(vPoint(0), vPoint(1), vPoint(2), vNextPoint(0), vNextPoint(1), vNextPoint(2))
Else
Dim vFirstPoint As Variant
vFirstPoint = vPoints(0)
' draw a line between current point and first point to close contour
Set skSegment = Part.SketchManager.CreateLine(vPoint(0), vPoint(1), vPoint(2), vFirstPoint(0), vFirstPoint(1), vFirstPoint(2))
End If
Next i
https://stackoverflow.com/questions/60167347
复制相似问题