几何尺寸与公差论坛

 找回密码
 注册
查看: 660|回复: 0

【转帖】declare sw documen

[复制链接]
发表于 2009-4-13 10:13:02 | 显示全部楼层 |阅读模式
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|几何尺寸与公差论坛

GMT+8, 2024-12-24 02:35 , Processed in 0.037626 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表