arrays - Solidworks VBA 跳过空数组
问题描述
我正在创建一个用于渲染solidworks 模型的宏。它旨在呈现程序集中的所有配置。我正在处理的一段代码必须提取所有配置的质量并将其放在渲染名称的末尾。对于大多数配置,这都有效。
只有在装配体中没有模型的情况下,这意味着质量属性中没有可用数据,才会给我一个错误:类型不匹配。代码如下所示(错误的位置用 ** 突出显示:
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”替换它)。
希望你能帮助我。提前致谢!
解决方案
如果质量为零,您似乎需要跳到下一次迭代。要跳到下一个迭代,这里是您在 VBA 中的操作方法。
For i = 1 To 3
If SomeConditionTrue Then
GoTo NextIteration
End If
NextIteration:
Next i
对于 SOLIDWORKS API 资源,我强烈建议以下内容(在 SO 中您不会得到太多):
- SOLIDWORKS API 论坛
- CADSharp.com(他们有专门的 SOLIDWORKS API 和 PDM API 技术支持渠道)
推荐阅读
- android - 如何在 Android Studio 中解决 pubspec 错误
- c++ - ccache 如何提高构建速度?
- javascript - 将函数结果存储在全局变量中
- c++ - 使用 FFT 进行卷积会产生不好的结果
- swift - 如何在快速延迟一段时间后在循环中打印一个值
- javascript - 如何在 DOM 中包含动态 Javascript 文件而不重复相同的文件
- reactjs - React 表单提交触发两次
- android - 是否可以使用闹钟设置特定日期?
- c++ - Eigen 和 glm 产品产生不同的结果
- python - 遵循 python 学习教程,但我的代码没有显示正确的输出,我不知道为什么