solidworks二次开发-04-修改数据

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

这两个函数来自动更新。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus