无需使用Selection,能否设置Curve2D对象的颜色与线型?
批量修改SolidWorks工程图Curve2D对象的颜色与线型(无需Selection)
核心解决方案:直接通过DrawingCurve API修改属性
不需要依赖Selection.Add,可以直接遍历工程图中的IDrawingCurve对象,调用其SetVisProperties方法批量修改颜色、线型和线宽,这是效率最高的方案,完全避免屏幕闪烁和选择操作的性能损耗。
具体实现步骤
- 关闭屏幕更新与选择高亮:先禁用SolidWorks的屏幕更新和选择高亮,大幅提升批量操作的速度,避免界面闪烁。
- 遍历图纸、视图与Curve2D对象:依次遍历工程图的所有图纸、每个图纸的视图,再获取视图中的所有绘制曲线。
- 设置视觉属性:对目标Curve2D(比如自定义绘制的曲线)调用
SetVisProperties直接修改颜色、线型、线宽。
VBA代码示例
Dim swApp As SldWorks.SldWorks Dim swDraw As SldWorks.DrawingDoc Dim swSheet As SldWorks.Sheet Dim swView As SldWorks.View Dim swCurves As Variant Dim swCurve As SldWorks.DrawingCurve Dim targetColor As Long Dim targetLineStyle As Long Dim targetLineWidth As Long Set swApp = Application.SldWorks Set swDraw = swApp.ActiveDoc ' 关闭屏幕更新,禁用选择高亮 swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swScreenUpdating, False swDraw.SelectionManager.EnableHighlighting = False ' 定义目标属性:RGB颜色、线型、线宽 targetColor = RGB(255, 0, 0) ' 红色 targetLineStyle = swLineStyles_e.swLineStyle_Dashed ' 虚线 targetLineWidth = swLineWidth_e.swLineWidth_Medium ' 中等线宽 ' 遍历所有图纸 For Each swSheet In swDraw.GetDrawings swDraw.ActivateSheet swSheet.GetName ' 遍历当前图纸的所有视图 For Each swView In swDraw.GetViews() ' 获取视图中的所有绘制曲线 swCurves = swView.GetDrawingCurves2() If Not IsEmpty(swCurves) Then For Each swCurve In swCurves ' 过滤自定义Curve2D(排除模型投影的曲线,按需调整) If swCurve.GetType = swDrawingCurveType_e.swDrawingCurveType_Custom Then ' 设置视觉属性:最后三个参数为True表示强制覆盖原有样式 swCurve.SetVisProperties targetColor, targetLineStyle, targetLineWidth, True, True, True End If Next swCurve End If Next swView Next swSheet ' 恢复屏幕更新与选择高亮 swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swScreenUpdating, True swDraw.SelectionManager.EnableHighlighting = True MsgBox "Curve2D属性修改完成"
关键说明
- 为什么不用Selection:
Selection.Add会触发界面刷新和选择状态更新,批量操作时性能极低且会导致屏幕闪烁;而直接调用IDrawingCurve.SetVisProperties是底层API操作,无需界面交互,速度提升数倍。 - 样式覆盖:
SetVisProperties的最后三个参数(overrideColor、overrideStyle、overrideWidth)设为True时,会强制覆盖曲线的原有样式,即使曲线关联了模型或图层样式也能生效。 - 过滤曲线类型:通过
swCurve.GetType可以筛选出自定义绘制的Curve2D(swDrawingCurveType_Custom),如果需要修改所有曲线(包括模型投影的),可以去掉这个判断条件。
内容的提问来源于stack exchange,提问作者N.TW12
相关产品推荐
相关产品推荐

