SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1632|回复: 7
打印 上一主题 下一主题

宏代码——创建/转换非多重的实体

  [复制链接]

17

主题

230

帖子

46

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
299
QQ
跳转到指定楼层
楼主
发表于 2009-10-31 00:22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

   经典图书
Create and Convert Non-Manifold Bodies Example (VBA)
This example shows how to create non-manifold bodies, which by default are not allowed in SolidWorks, and then convert the non-manifold bodies to manifold bodies.

'---------------------------------
'
' Preconditions: Model document containing
' tool and target bodies exists.
'
' Postconditions: Non-manifold bodies are created
' and tessellated, and then
' converted to manifold bodies.
'
'---------------------------------
Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModeler As SldWorks.Modeler
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swSelMgr As SldWorks.SelectionMgr
Dim tess As SldWorks.Tessellation
Dim tool As SldWorks.Body2
Dim tgt1 As SldWorks.Body2
Dim tgt0 As SldWorks.Body2
Dim tgtVar As Variant
Dim resMass As Variant
Dim resVar As Variant
Dim resvar2 As Variant
Dim manifVar As Variant
Dim vFacetId As Variant
Dim vFinId As Variant
Dim vVertexId As Variant
Dim vVertex1 As Variant
Dim vVertex2 As Variant
Dim origMassProp As Variant
Dim f As Object
Dim boolstatus As Boolean
Dim bret As Boolean
Dim mass As Double
Dim longstatus As Long
Dim longwarnings As Long
Dim i As Long
Dim j As Long
Dim clr(0 To 1) As Long

Sub DisplayBody(ByVal b As Object, col As Long)
Call b.Display2(swModel, col, swTempBodySelectable)
End Sub

Sub HideBody(ByVal b As Object)
Call b.Hide(swModel)
End Sub

Sub main()

Set swApp = Application.SldWorks
Set swModeler = swApp.GetModeler
bret = swModeler.GeneralTopology
Debug.Print bret


' Open and activate sample part; substitute the path and filename of your document
Set swModel = swApp.OpenDoc6("C:cherylesamplesBodyOperationBodyDisplaybodyBool.sldprt", 1, 0, "", longstatus, longwarnings)
Set swModel = swApp.ActivateDoc2("bodyBool.SLDPRT", False, longstatus)
Set swModelDocExt = swModel.Extension
Set swSelMgr = swModel.SelectionManager

'Make selections of target and tool bodies;
'Extrude1 is larger cuboid, whereas Extrude2[1]
'and Extrude2[2] are one-quarter the size of
'Extrude, so (Extrude - Extrude2[1])-Extrude2[2])
'results in non-manifold bodies; under normal conditions,
'i.e., when non-manifold bodies are not allowed,
'such an operation results in two bodies;
'when creation of non-manifold bodies is allowed,
'then one general body is the result
boolstatus = swModelDocExt.SelectByID2("Extrude1", "SOLIDBODY", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = swModelDocExt.SelectByID2("Extrude2[1]", "SOLIDBODY", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = swModelDocExt.SelectByID2("Extrude2[2]", "SOLIDBODY", 0, 0, 0, True, 0, Nothing, 0)

Set tool = swSelMgr.GetSelectedObject5(1)
Set tgt0 = swSelMgr.GetSelectedObject5(2)
Set tgt1 = swSelMgr.GetSelectedObject5(3)

origMassProp = tool.GetMassProperties(1)
'Fifth element is mass
Debug.Print "Original Mass : " & origMassProp(5)

'Create temporary bodies
Set tool = tool.Copy
Set tgt0 = tgt0.Copy
Set tgt1 = tgt1.Copy

swModel.ClearSelection2 True

'First cut operation : Extrude - Extrude2[1]
Dim errCode As Long
resVar = tool.Operations2(SWBODYCUT, tgt0, errCode)

'IMPORTANT: SolidWorks requires this option
'to be FALSE; thus, switch it back to FALSE
'as soon as your intended operations complete
swModeler.GeneralTopology = True

'Second cut operation: (Extrude - Extrude2[1])- Extrude2[2]
resvar2 = resVar(0).Operations2(SWBODYCUT, tgt1, errCode)

'Reset the option back to True
swModeler.GeneralTopology = False

mass = 0#
clr(0) = RGB(0, 0, 255)
clr(1) = RGB(255, 0, 0)
For i = LBound(resvar2) To UBound(resvar2)
resMass = resvar2(i).GetMassProperties(1)
mass = mass + resMass(5)
Debug.Print "Body " & i; " Face Count: " & resvar2(i).GetFaceCount
Call DisplayBody(resvar2(i), clr(i))
Next i
Debug.Print "Resultant mass : " & mass

'Hide the displayed bodies
For i = LBound(resvar2) To UBound(resvar2)
HideBody (resvar2(i))
Next i

'Try tesselation

'Add sketch for this face
swModel.Insert3DSketch2 False

'Add lines directly to sketch to increase performance
swModel.SetAddToDB True

Set tess = resvar2(0).GetTessellation(Empty)
tess.NeedFaceFacetMap = True
tess.MatchType = swTesselationMatchFacetGeometry
boolstatus = tess.Tessellate
Set f = resvar2(0).GetFirstFace
While Not f Is Nothing
vFacetId = tess.GetFaceFacets(f)
For i = 0 To UBound(vFacetId)
vFinId = tess.GetFacetFins(vFacetId(i))
For j = 0 To 2
'Should always be three fins per facet
vVertexId = tess.GetFinVertices(vFinId(j))

'Should always be two vertices per fin
vVertex1 = tess.GetVertexPoint(vVertexId(0))
vVertex2 = tess.GetVertexPoint(vVertexId(1))

Call swModel.CreateLine2( _
vVertex1(0), vVertex1(1), vVertex1(2), _
vVertex2(0), vVertex2(1), vVertex2(2))
Next j
Next i
Set f = f.GetNextFace
Wend

'Convert non-manifold bodies to manifold bodies
manifVar = swModeler.MakeManifoldBodies(resvar2(0))
For i = LBound(manifVar) To UBound(manifVar)
Call DisplayBody(manifVar(i), RGB(0, 255, 0))
Next i

For i = LBound(manifVar) To UBound(manifVar)
HideBody (manifVar(i))
Next i

End Sub
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享教程|习题|模型|技巧 点赞点赞12872 拍砖拍砖5077
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

12

主题

234

帖子

38

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
294
QQ
沙发
发表于 2009-10-31 00:23:19 | 只看该作者
E文有难度!
学习!!谢了!
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

14

主题

228

帖子

28

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
263
QQ
板凳
发表于 2009-10-31 00:27:26 | 只看该作者

   经典图书
这个运行起来也出错,楼主要调试一下咯~~~
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

6

主题

220

帖子

14

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
244
QQ
地板
发表于 2009-10-31 00:34:39 | 只看该作者
进来学习。。。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

41

帖子

8

金币

天使

Rank: 2Rank: 2

积分
137

最佳新人活跃会员宣传达人

5#
发表于 2019-4-7 08:54:13 | 只看该作者

   经典案例图书
学习了,谢谢!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

678

帖子

983

金币

实习版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
6217

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

6#
发表于 2019-4-11 20:03:59 | 只看该作者
好好学习,天天向上!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

5

主题

582

帖子

201

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2689

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

7#
发表于 2019-4-17 08:04:25 | 只看该作者

   经典案例图书
好好学习,天天向上!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

2

主题

73

帖子

161

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
465

最佳新人活跃会员热心会员宣传达人

8#
发表于 2019-4-18 21:41:30 | 只看该作者
我想知道这个到底有什么好的用处
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

SOLIDWORKS 2023 机械设计从入门到精通

手机版|小黑屋| GMT+8, 2025-5-22 12:00 , Processed in 0.424733 second(s), 24 queries , Memcache On.

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

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