![]() |
【转帖】declare sw documen
declare sw document
i want to write an addin which can be run on both sw part and assembly files how to dim a document for both part and assembly? i guess i don't need to assign 2 object variables, one for partdoc and another for assemblydoc thx, chris solidworks 2007 (office pro.) sp5.0 testing solidworks 2009 (pro) sp0.0 dell precision t3400 2 cpu (8500) 3.16 ghz, 3.25 gb of ram window xp pro sp2 nvidia fx 570 6.14.11.6262 hi chris, it depends on what you are actually trying to do with the part or assembly as both are of object type modeldoc2 which will have common methods and properties however if it is something more specific to a part only or an assembly only then you will need to access the specific methods and properties. below is two sample bits of code that might help. i only write macros as a hobby so the code may not be perfect, but it works. this is how i would normally begin a macro. copy and paste the samples into a new macro in the sw vba ide and step through the code. hope it helps. declan. 'example if you need to do something specific to a document type sub main() dim swapp as sldworks.sldworks dim swmodel as sldworks.modeldoc2 dim swpart as sldworks.partdoc dim swassy as sldworks.assemblydoc set swapp = getobject("", "sldworks.application") set swmodel = swapp.activedoc if not swmodel is nothing then select case swmodel.gettype case swdocdrawing 'do nothing case swdocassembly set swmodel = swassy msgbox "assembly file is loaded!", vbinformation, "solidworks" case swdocpart set swmodel = swpart msgbox "part file is loaded!", vbinformation, "solidworks" end select else msgbox "no model loaded!", vbinformation, "solidworks" end end if set swapp = nothing set swmodel = nothing end sub 'example if you need to do something common to a document type sub main2() dim swapp as sldworks.sldworks dim swmodel as sldworks.modeldoc2 dim swpart as sldworks.partdoc dim swassy as sldworks.assemblydoc set swapp = getobject("", "sldworks.application") set swmodel = swapp.activedoc if not swmodel is nothing then select case swmodel.gettype case swdocdrawing msgbox "please open a solidworks part or assembly!", vbinformation, "solidworks" end case swdocassembly, swdocpart 'do something msgbox "assembly or part file is loaded!", vbinformation, "solidworks" end select else msgbox "no model loaded!", vbinformation, "solidworks" end end if set swapp = nothing set swmodel = nothing end sub thank you for the reply just did some search and it should be modeldoc2 - i wish it can be named something like swdoc because drawingdoc is not really a model? correct me if i'm wrong here? thx, chris solidworks 2007 (office pro.) sp5.0 testing solidworks 2009 (pro) sp0.0 dell precision t3400 2 cpu (8500) 3.16 ghz, 3.25 gb of ram window xp pro sp2 nvidia fx 570 6.14.11.6262 edited: 06/19/2008 at 11:30 am by chris ch a model is a representative form or hypothetical description of a complex entity, so the name is semantically correct, although yes it is a bit deceiving. as for the modeldoc2, drawingdoc, assemblydoc and partdoc problem, vba explicitly converts any object of modeldoc2 to all 4 types when attempting to call any methods, so you could say: dim mod as modeldoc2 mod.edittemplate and it would work fine; however .net languages and most others will not explicitly convert from one to the next so you must implicitly convert them using (type)variable for c#, and ctype(variable, type) for vb.net for example |
所有的时间均为北京时间。 现在的时间是 11:26 PM. |