首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solidworks跳过空数组

Solidworks跳过空数组
EN

Stack Overflow用户
提问于 2018-12-07 12:25:21
回答 1查看 428关注 0票数 3

我正在创建一个宏,用于呈现solidworks模型。它用于呈现程序集中的所有配置。我正在编写的一段代码必须提取所有配置的质量,并将其放在呈现名称的末尾。对于大多数配置,这是可行的。

只有在程序集中没有模型的情况下,即在海量属性中没有可用的数据,才会给我一个错误:输入不匹配。代码如下(用**突出显示错误的位置)

代码语言:javascript
复制
Sub RenderAllConfig()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swModelExt As SldWorks.ModelDocExtension
    Dim swModelView As SldWorks.ModelView
    Dim vConfNameArr As Variant
    Dim vMassProp As Variant
    Dim nStatus As Long
    Dim status As Boolean
    Dim weight As Long
    Dim sConfigName As String
    Dim Scene As SldWorks.swScene
    Dim i As Long
    Dim bShowConfig As Boolean
    Dim swRayTraceRenderer As SldWorks.RayTraceRenderer
    Dim swRayTraceRenderOptions As SldWorks.RayTraceRendererOptions
    Dim Part As Object

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc  
    Set swModelExt = swModel.Extension
    Set swModelView = swModel.ActiveView
    vConfNameArr = swModel.GetConfigurationNames

    For i = 0 To UBound(vConfNameArr)

        sConfigName = vConfNameArr(i)
        bShowConfig = swModel.ShowConfiguration2(sConfigName)
        swModelExt.SelectAll
        vMassProp = swModelExt.GetMassProperties2(0, nStatus, True)

        Debug.Print "" & nStatus

        **weight = vMassProp(5)**

        swModel.ClearSelection2 True
        Set Part = swApp.ActiveDoc
        Dim myModelView As Object
        Set myModelView = Part.ActiveView
        myModelView.AddPerspective

        Part.ViewZoomtofit2
        Part.ViewZoomtofit2
        Part.ViewZoomtofit2
        Part.ViewZoomtofit2
        Part.ViewZoomtofit2
        Part.ShowNamedView2 "*Isometric", 7
        Part.ViewZoomtofit2

        Part.ViewDisplayShaded
        Dim activeModelView As Object
        Set activeModelView = Part.ActiveView
        activeModelView.DisplayMode = swViewDisplayMode_e.swViewDisplayMode_ShadedWithEdges
        Part.ClearSelection2 True
        boolstatus = Part.Extension.SketchBoxSelect("0.000000", "0.000000", "0.000000", "0.000000", "0.000000", "0.000000")
        Part.ViewDisplayShaded

        ' Access PhotoView 360
        Set swRayTraceRenderer = swApp.GetRayTraceRenderer(swPhotoView)
        ' Get and set rendering options
        Set swRayTraceRenderOptions = swRayTraceRenderer.RayTraceRendererOptions '<-- Geeft hier foutcode als PhotoView 360 NIET is ingeschakeld
        ' Display render window
        Debug.Print "Current rendering values"
        Debug.Print "  ImageHeight          = " & swRayTraceRenderOptions.ImageHeight
        Debug.Print "  ImageWidth           = " & swRayTraceRenderOptions.ImageWidth
        Debug.Print "  ImageFormat          = " & swRayTraceRenderOptions.ImageFormat
        Debug.Print "  PreviewRenderQuality = " & swRayTraceRenderOptions.PreviewRenderQuality
        Debug.Print "  FinalRenderQuality   = " & swRayTraceRenderOptions.FinalRenderQuality
        Debug.Print "  BloomEnabled         = " & swRayTraceRenderOptions.BloomEnabled
        Debug.Print "  BloomThreshold       = " & swRayTraceRenderOptions.BloomThreshold
        Debug.Print "  BloomRadius          = " & swRayTraceRenderOptions.BloomRadius
        Debug.Print "  ContourEnabled       = " & swRayTraceRenderOptions.ContourEnabled
        Debug.Print "  ShadedContour        = " & swRayTraceRenderOptions.ShadedContour
        Debug.Print "  ContourLineThickness = " & swRayTraceRenderOptions.ContourLineThickness
        Debug.Print "  ContourLineColor     = " & swRayTraceRenderOptions.ContourLineColor
        Debug.Print " "

        'Change rendering values
        Debug.Print "New rendering values"
        swRayTraceRenderOptions.ImageHeight = 405
        Debug.Print "  ImageHeight          = " & swRayTraceRenderOptions.ImageHeight
        swRayTraceRenderOptions.ImageWidth = 720
        Debug.Print "  ImageWidth           = " & swRayTraceRenderOptions.ImageWidth
        swRayTraceRenderOptions.ImageFormat = swImageFormat_PNG
        Debug.Print "  ImageFormat          = " & swRayTraceRenderOptions.ImageFormat
        swRayTraceRenderOptions.PreviewRenderQuality = swRenderQuality_Better
        Debug.Print "  PreviewRenderQuality = " & swRayTraceRenderOptions.PreviewRenderQuality
        swRayTraceRenderOptions.FinalRenderQuality = swRenderQuality_Best
        Debug.Print "  FinalRenderQuality   = " & swRayTraceRenderOptions.FinalRenderQuality
        swRayTraceRenderOptions.BloomEnabled = False
        Debug.Print "  BloomEnabled         = " & swRayTraceRenderOptions.BloomEnabled
        swRayTraceRenderOptions.BloomThreshold = 0
        Debug.Print "  BloomThreshold       = " & swRayTraceRenderOptions.BloomThreshold
        swRayTraceRenderOptions.BloomRadius = 0
        Debug.Print "  BloomRadius          = " & swRayTraceRenderOptions.BloomRadius
        swRayTraceRenderOptions.ContourEnabled = False
        Debug.Print "  ContourEnabled       = " & swRayTraceRenderOptions.ContourEnabled
        swRayTraceRenderOptions.ShadedContour = False
        Debug.Print "  ShadedContour        = " & swRayTraceRenderOptions.ShadedContour
        swRayTraceRenderOptions.ContourLineThickness = 0
        Debug.Print "  ContourLineThickness = " & swRayTraceRenderOptions.ContourLineThickness
        swRayTraceRenderOptions.ContourLineColor = 255
        Debug.Print "  ContourLineColor     = " & swRayTraceRenderOptions.ContourLineColor

        Set swConfig = swModel.GetActiveConfiguration
        Set Scene = swConfig.GetScene
        status = Scene.DeleteFloorAppearance()
        Scene.BackgroundType = 0
        Scene.FloorShadows = False
        Scene.FloorReflections = False
        Scene.FloorOffset = 5

        status = swModel.ForceRebuild3(True)
        Part.ViewZoomtofit2

        ' Display the preview window
        status = swRayTraceRenderer.DisplayPreviewWindow
        ' Close render
        status = swRayTraceRenderer.CloseRayTraceRender
        ' Invoke final render window
        status = swRayTraceRenderer.InvokeFinalRender
        ' Abort final render window
        status = swRayTraceRenderer.AbortFinalRender
        ' Render to Windows Bitmap format
        status = swRayTraceRenderer.RenderToFile("renderlocation\" & "150cm\" & "150" & vConfNameArr(i) & "_" & weight & ".png", 0, 0)
        swRayTraceRenderOptions.FinalRenderQuality = swRenderQuality_Good
        ' Render to HDR format (format extension omitted)
        status = swRayTraceRenderer.RenderToFile("renderlocation\" & "150cm\" & "150" & vConfNameArr(i) & "_" & weight, 0, 0)

        Set swRayTraceRenderOptions = Nothing
        ' Close render
        status = swRayTraceRenderer.CloseRayTraceRender

    Next i

End Sub

因此,我想知道是否有可能跳过错误配置的属性提取(如果可能的话,将其替换为呈现名称中的"0“)。

希望你能帮我一把。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-07 21:39:49

看起来,如果质量为零,则需要跳到下一次迭代。为了跳到下一次迭代,下面是在VBA中如何实现它。

代码语言:javascript
复制
For i = 1 To 3 

 If SomeConditionTrue Then 
  GoTo NextIteration
 End If 

 NextIteration:
Next i

对于SOLIDWORKS API资源,我强烈建议如下(在这里您不会得到太多):

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53669516

复制
相关文章

相似问题

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