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

80酷酷网    80kuku.com

  数据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

这两个函数来自动更新。

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: