首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Solidworks从文本文件中读取数据

Solidworks从文本文件中读取数据
EN

Stack Overflow用户
提问于 2020-02-11 10:58:55
回答 1查看 1.3K关注 0票数 1

我是Solidworks和VBA的新手。我已经创建了一个文本文件,其中包含了许多多边形(比如200)的顶点坐标,我想从这些数据中绘制简单的3D对象。我在Solidworks中记录了一个五角大楼的宏,我试图在其中放一个反循环来连续绘制我的200个五角大楼。我知道我必须从文本文件中读取一列顶点,并在Part.SketchManager.CreateLine(x1, y1, z1, x2, y2, z2)命令中使用它。但不起作用。发生了许多错误,这意味着有许多事情我不知道运行这段代码,正如我所期望的。

如果你认为我需要告诉更多的细节,请告诉我完成这个问题!

代码语言:javascript
运行
复制
' ******************************************************************************
' 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中创建这样的东西.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-11 12:53:41

首先,不能总是直接使用已记录的宏。它必须在某些时候被清理和纠正。宏记录器无法记录在solidworks中使用的所有精确功能。

这是已记录的宏的清洁版本:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
    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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60167347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档