solidworks二次开发-04-修改数据 上次已经可以访问特征的各参数了,今天我们来修改它:
要修改前面的步骤不能少,当我们已经可以读取一些特征时,我们就可以给他设定一些值。当然有时需要调用特定的参数。solidworks是ole和com的,所以要习惯这样。
在修改完特征后需要调用函数modifydefinition()来实现变化。
我们给一个例子,这个例子比前面的都要全面,它有很好的容错引导机制,可以直接拿来成为一个稳定的宏程序。
This example doubles the length of the base extrude.这个例子将拉伸凸台的长度增加一倍
Dim swApp As SldWorks.SldWorks
Dim Model As ModelDoc2
Dim Component As Component2
Dim CurFeature As feature
Dim isGood As Boolean
' Will become an ExtrudeFeatureData Object
Dim FeatData As Object
Dim Depth As Double
Dim SelMgr As SelectionMgr
Sub doubleBE()
}}-- }}--Set swApp = CreateObject('sldWorks.application')
}}-- }}--Set Model = swApp.ActiveDoc
}}-- }}--' Make sure that the active document is a part
}}-- }}--If Model.GetType <> swDocPART And Model.GetType <> swDocASSEMBLY Then
‘这里的swDocPART 、swDocASSEMBLY 我的环境没有通过。我使用msgbox Model.GetType 的笨办法得到整数为1和2
}}-- }}--Msg = 'Only Allowed on Parts or Assemblies' ' Define message
}}-- }}--Style = vbOKOnly ' OK Button only
}}-- }}--Title = 'Error' ' Define title
}}-- }}--Call MsgBox(Msg, Style, Title) ' Display error message
}}-- }}--Exit Sub ' Exit this program
}}-- }}--End If
}}--
}}--
}}-- }}--' Get the Selection Manager
}}-- }}--Set SelMgr = Model.SelectionManager
}}--
}}--
}}-- }}--' Get the selected object (first in the group if there are more than one)
}}-- }}--' Note that at this point CurFeature is just a Feature Object
}}-- }}--Set CurFeature = SelMgr.GetSelectedObject3(1)
}}-- }}--If CurFeature Is Nothing Then
}}-- }}--' Tell the user that nothing is selected
}}-- }}--swApp.SendMsgToUser2 'Please select the Base-Extrude', swMbWarning, swMbOk
}}-- }}--Exit Sub
}}-- }}--End If
}}-- }}--' Check the feature's type name
}}-- }}--' Make sure it is an extrusion
}}-- }}--If Not CurFeature.GetTypeName = swTnExtrusion Then
’在这里使用swTnExtrusion我的环境没有通过,我改成了Extrusion才ok
}}-- }}--swApp.SendMsgToUser2 'Please select the Base-Extrude', swMbWarning, swMbOk
}}-- }}--Exit Sub
}}-- }}--End If
}}-- }}--' Get the Extrusion's Feature Data
}}-- }}--Set FeatData = CurFeature.GetDefinition
}}--
}}--
}}-- }}--' Get the access selections for the feature data
}}-- }}--' Note that Component is NULL when accessing the selections of a standalone part. }}-- }}--If we were calling AccessSelections from within an assembly, then model would refer to the top-level document in the assembly and component would refer to the actual part.
}}-- }}--isGood = FeatData.AccessSelections(Model, Component)
}}--
}}--
}}-- }}--' Inform the user of an error
}}-- }}--If Not isGood Then
}}-- }}--swApp.SendMsgToUser2 'Unable to obtain access selections', swMbWarning, swMbOk
}}-- }}--Exit Sub
}}-- }}--End If
}}--
}}--
}}-- }}--' Make sure the user has selected the base extrude
}}-- }}--If Not FeatData.IsBaseExtrude Then
}}-- }}--swApp.SendMsgToUser2 'Please select the Base-Extrude', swMbWarning, swMbOk
}}-- }}--FeatData.ReleaseSelectionAccess
}}-- }}--Exit Sub
}}-- }}--End If
}}--
}}--
}}-- }}--' Change the depth of this extrusion to double its previous depth
}}-- }}--Depth = FeatData.GetDepth(True)
}}-- }}--FeatData.SetDepth True, Depth * 2
}}--
}}--
}}-- }}--' Implement the changes to the feature
}}-- }}--isGood = CurFeature.ModifyDefinition(FeatData, Model, Component)
}}--
}}--
}}-- }}--' If the modify definition failed
}}-- }}--If Not isGood Then
}}-- }}--swApp.SendMsgToUser2 'Unable to modify feature data', swMbWarning, swMbOk
}}-- }}--' Release the AccessSelections
}}-- }}--FeatData.ReleaseSelectionAccess
}}-- }}--End If
}}--
}}--
End Sub
如果出现特征出现“退回”状态,我现在还没有找到问题的原因,只能在代码执行到最后调用
Model.Save
Model.Rebuild
这两个函数来自动更新。