Vous êtes sur la page 1sur 18

Modélisation géométrique par les

Objets SolidWorks frontières (BREP)


Body2

1..n

Face2

0..n

Loop2

1..n

CoEdge

Edge

2 si ouverte, 0 si fermée

Vertex
Accès à la géométrie dans
SolidWorks
Surface NURBS

Courbe NURBS

(x,y,z)
Géométrie : surfaces CAO,
tessellation
Le BREP représente la décomposition de la
surface frontière d’un objet en faces :
• Chaque face est associée à une surface
mathématique: géométrie exacte. Dans
SolidWorks : Face2.GetSurface()
• La tessellation est une triangulation
approximant la face:
– permet la visualisation,
– facilite les calculs : intersection, propriétés de masse,
etc
Géométrie : surfaces CAO,
tessellation
Sphère Cone Cylindre Tore Surface NURBS

r
R
u

Implicite Explicite
Peut aussi représenter
Tessellation les cones, cylindres,
Tessellation sphère, etc
Tessellation
Tessellation
Tessellation associée à une pièce
CAO
Chaque face est associée à une tessellation Les coordonnées 3D des
triangles de la tessellation sont
accessibles par la fonction
SolidWorks
Face2.GetTessTriangles()

Applications : visualisation 3D, calcul des propriétés de masse, de boite


englobante, d’intersections, de distance entre objets
Modélisation par caractéristiques
de forme
Une caractéristique est une opération géométrique qui
génère une forme avec un ensemble de faces :
• Bossage par extrusion, congés/chanfreins, trous, etc
• Basée sur le BREP au moment où la caractéristique est
construite Æ Relations parent/enfant
Pièces et assemblages
Configuration de Visual Studio
Fichier > Nouveau Projet > Visual Basic Windows application
Menu Project > Add Reference
Une fenêtre « Add Reference » s’ouvre
Sélectionnez l’onglet COM (Component Object Model)
Sélectionner « SldWorks 2007 Type Library »

Recommencer avec « SolidWorks 2007 Constant Type Library »


Créer un Addin pour SolidWorks
• Site web : http://www.solidworks.com/api/
• Télécharger et installer Visual Studio 2005 VB.Net Addin Template
• Droits administrateurs
Dans VB le projet Fichier > Nouveau > Visual
Basic puis « SwVBAddin »
Ajouter du code dans le fichier « SwAddin.vb »
Lancer avec Debug -> Start New Instance

Lancez SolidWorks puis :


Menu Outils > Compléments : choisir son addin,
exemple SwAddin1
Structure du code VB
Option Explicit On
Option Strict Off

Module SolidWorks
Public swApp As SldWorks.SldWorks
Public swPart As SldWorks.PartDoc
Public swModel As SldWorks.ModelDoc2
Public swSelMgr As SldWorks.SelectionMgr
Public swSelData As SldWorks.SelectData
Public swAssemblyDoc As SldWorks.AssemblyDoc
Public swAppCreated As Integer

Try
'attachement à une instance de SolidWorks
' (si SolidWorks est déjà lancé)
swApp = GetObject(, "SldWorks.Application")
swAppCreated = 0
Catch ex As Exception
' création d'une instance de SolidWorks
' (si SolidWorks n'est pas lancé)
swApp = CreateObject("SldWorks.Application")
Dim openDocErrors, openDocWarnings As Integer
swApp.OpenDoc6("c:\temp\default.sldprt", SwConst.swDocumentTypes_e.swDocPART, 0, "", openDocErrors, openDocWarnings)
swAppCreated = 1
End Try
' Récupère le document actif
swModel = swApp.ActiveDoc

Try ' Si le document ouvert est une pièce


swPart = swModel
Catch ex As Exception ' Si le document ouvert est un assemblage
swAssemblyDoc = swModel
End Try
swSelMgr = swModel.SelectionManager
swSelData = swSelMgr.CreateSelectData
End Module
Accéder à l’aide
c:\Program Files\SolidWorks\api\apihelp.chm
Ou bien menu ? > Rubriques d’aide API de SolidWorks et Compléments
3 petits programmes SolidWorks
1. Parcours de la structure topologique
BREP d’une pièce ou d’un assemblage
2. Extraction de la tessellation d’une pièce
ou d’un assemblage, et calcul du volume
3. Parcours de la modélisation par
caractéristiques de forme, extraction des
congés et des arrondis à partir des
propriétés des surfaces CAO
' Fonction qui récupère tous les corps volumiques du document actif
1) Parcours de la ' assemblage ou pièce
vBodies = GetAllBodies()

topologie BREP : If Not vBodies Is Nothing Then


' Parcours les corps volumiques
fonction « Sélectionner For iBody = 0 To UBound(vBodies)
swBody = vBodies(iBody)
tout » ' Parcours les faces du corps
swFace = swBody.GetFirstFace
Do While Not swFace Is Nothing
' Sélectionne la face
Dim vBodies As Object swEntity = swFace
Dim swBody As SldWorks.Body2 swEntity.Select4(True, swSelData)
Dim iBody As Integer ' Parcours les boucles de contour de cette face
Dim swFace As SldWorks.Face2 swLoop = swFace.GetFirstLoop
Dim swLoop As SldWorks.Loop2 Do While Not swLoop Is Nothing
Dim swCoEdge As SldWorks.CoEdge ' Parcours les co-aretes de cette boucle de contour
swCoEdge = swLoop.GetFirstCoEdge
Dim swEdge As SldWorks.Edge Dim iCoEdge As Integer
Dim swVertex1 As SldWorks.Vertex For iCoEdge = 0 To swLoop.GetEdgeCount - 1
Dim swVertex2 As SldWorks.Vertex ' Récupère l'arete de la coarete
Dim swEntity As SldWorks.Entity swEdge = swCoEdge.GetEdge
Dim vAssemblyBodies(0) As SldWorks.Body2 ' Sélectionne l'arete
swEntity = swEdge
swEntity.Select4(True, swSelData)

swVertex1 = swEdge.GetStartVertex
If IsNothing(swVertex1) Then
'MsgBox("On a une boucle sans sommet")
Else
' Sélectionne le sommet
swEntity = swVertex1
swEntity.Select4(True, swSelData)
swVertex2 = swEdge.GetEndVertex
' Sélectionne le sommet
swEntity = swVertex2
swEntity.Select4(True, swSelData)
End If

swCoEdge = swCoEdge.GetNext
Next iCoEdge

swLoop = swLoop.GetNext
Loop

swFace = swFace.GetNextFace()
Loop
Next iBody
End If
2) Calcul du volume d’une pièce à partir de
sa tessellation
• Calcule l’intégrale de volume ∫v dx dy dz par une
intégrale de surface (Th. Green-Ostrogradsky)

• Pour une triangulation cette formule se traduit


par :
V = 1/6 ∑(z0 + z1 + z2) * (x0 * (y1 - y2) + x1 * (y2 - y0) + x2 * (y0 - y1))
Où x0 x1 x2 sont les coordonnées des trois sommets d’un triangle
Code et résultat
Dim swFace As SldWorks.Face2
swMassProperties = swModel.GetMassProperties2(swMassPropertiesStatus_e)
' volume du corps
bodyVolume = 0

' Parcours les faces du corps


swFace = swBody.GetFirstFace
Do While Not swFace Is Nothing
Dim tessCoords As Object
Dim i As Integer
tessCoords = swFace.GetTessTriangles(True)
If Not tessCoords Is Nothing Then
For i = 0 To UBound(tessCoords) Step 9
Dim x0, y0, z0 As Double
Dim x1, y1, z1 As Double
Dim x2, y2, z2 As Double

x0 = tessCoords(i + 0)
y0 = tessCoords(i + 1)
z0 = tessCoords(i + 2)
x1 = tessCoords(i + 3)
y1 = tessCoords(i + 4)
z1 = tessCoords(i + 5)
x2 = tessCoords(i + 6)
y2 = tessCoords(i + 7)
z2 = tessCoords(i + 8)

bodyVolume = bodyVolume + _
0.166666667 * (z0 + z1 + z2) * _
(x0 * (y1 - y2) + x1 * (y2 - y0) + x2 * (y0 - y1))
Next i
End If

swFace = swFace.GetNextFace()
Loop
3) Caractéristiques de
forme :
Application aux
congés

Congé (zone
concave) Arrondi (zone
convexe)
Parcours des caractéristiques de forme d’une pièce (SldWorks.PartDoc)
Dim swFeature As SldWorks.Feature
Dim vSuppressed As Object
Dim bSuppressed As Boolean
swFeature = swPart.FirstFeature
Do While Not swFeature Is Nothing
vSuppressed = swFeature.IsSuppressed
bSuppressed = CBool(vSuppressed)
If Not bSuppressed Then ' on vérifie que la fonction n'est pas supprimée
Select Case swFeature.GetTypeName
Case "Fillet" ' fonction de congé
' Traitement des congés ...
Case Else ' n'est pas un feature intéressant...
' rien ...
End If ' fin du if sur la suppression du fonction
swFeature = swFeature.GetNextFeature
Loop
Extraction des paramètres du congé
' Récupere les informations caractéristiques du congé
Dim swFilletFeature As SldWorks.SimpleFilletFeatureData2
swFilletFeature = swFeature.GetDefinition()
' Rayon de congé accessible par swFilletFeature.DefaultRadius

Extraction des surfaces du congé


' Récupere les tangentes, courbures, et normales dans les directions iso-param. UV
' des surfaces au point facePoint
Dim uvFace, vEval2 As Object
uvFace = swSurface.ReverseEvaluate(facePoint(0), facePoint(1), facePoint(2))
vEval2 = swSurface.Evaluate(uvFace(0), uvFace(1), 2, 2)
Caractérisation des congés
Détection de concavité/convexité par
comparaison du vecteur courbure avec
la normale à la surface

' pDirFillet est le vecteur courbure du congé dans la direction


' de l'arrondi
' On projette pDirFillet sur le vecteur normal :
' - si le résultat est négatif : la surface est convexe -> arrondi
' - si le résultat est positif : la surface est concave -> congé
Dim pDirFilletVsNormal As Double
pDirFilletVsNormal = pDirFillet(0) * pNormal(0) + pDirFillet(1) * pNormal(1) +
pDirFillet(2) * pNormal(2)

swEntity = swFace
swEntity.Select4(False, swSelData)
Dim vFaceProp As Object
Dim bRet As Boolean
vFaceProp = swModel.MaterialPropertyValues
If pDirFilletVsNormal < 0 Then
' arrondi
bRet = swModel.SelectedFaceProperties(RGB(255, 0, 0), vFaceProp(3), vFaceProp(4),
vFaceProp(5), vFaceProp(6), vFaceProp(7), vFaceProp(8), False, "")
Else
' congé
bRet = swModel.SelectedFaceProperties(RGB(0, 255, 0), vFaceProp(3), vFaceProp(4),
vFaceProp(5), vFaceProp(6), vFaceProp(7), vFaceProp(8), False, "")
End If

Vous aimerez peut-être aussi