Accueil > > > CRÉATION MOLÉCULE À PARTIR D'UN FICHIER TEXTE CATIA V5
CRÉATION MOLÉCULE À PARTIR D'UN FICHIER TEXTE CATIA V5
Information sur la source
Description
Cette macro catia va extraire d'un fichier *.CAR (format texte) les positions et types d'atome afin de modéliser une molécule. Les différents points abordé sont la création d'une Part, la création de forme en surfacique puis leur conversion vers le volumique et la modification des propriétés (couleur, visibilité, nom, ...) de certain objets. J'ai fais cette macro dans le cadre de mon stage au laboratoire du CEMES (Centre d'Elaboration des Matériaux et d'Etudes Structurales, www.cemes.fr).
Source
- Option Explicit
-
- Const RayonHydrogene = 1.2
- Const RayonAzote = 1.54
- Const RayonCarbone = 1.85
-
- Const Echelle = 8.405
-
-
- Dim Docs1 As Documents
- Dim PartMolecule As Document
-
-
- Sub CATMain()
-
- Dim objParcourir As Object
- Dim CARFileName As String
- Dim objectFSO 'As New FileSystemObject
- Dim Fichier 'As TextStream
- Dim strLine, NomCorps As String
- Dim x, y, z, rayon As Double
- Dim line, intResult, Rouge, Vert, Bleu As Integer
- Dim Point, Sphere As Object
- Dim myHybridBody, referencebody As Object
- Dim parameters1 As Parameters
- Dim strParam1 As StrParam
- Dim EnsembleCorps As Bodies
- Dim CorpsDePiece As Body
- Dim reference1, reference2 As Reference
- Dim closeSurface1 As CloseSurface
- Dim ObjSelection As Selection
-
- ' On crée et on affiche une boite de dialogue Parcourir en
- ' filtrant le type de fichier affichés
- Set objParcourir = CreateObject("UserAccounts.CommonDialog")
- objParcourir.Filter = "car File|*.car|All Files|*.*"
- 'objParcourir.Flags = &H0200
- objParcourir.FilterIndex = 1
- objParcourir.InitialDir = "C:\"
- intResult = objParcourir.ShowOpen
-
- ' Si on n'a pas choisi de fichier le programme s'arrete.
- If intResult = 0 Then
- Exit Sub
- End If
-
- ' On ouvre le fichier choisi
- CARFileName = objParcourir.FileName
- Set objectFSO = CreateObject("Scripting.FileSystemObject")
- Set Fichier = objectFSO.OpenTextFile(CARFileName, 1, True)
-
- ' On crée un nouveau fichier Part et on le renomme.
- Set Docs1 = CATIA.Documents
- Set PartMolecule = Docs1.add("Part")
- PartMolecule.Product.PartNumber = "Molecule"
-
- ' On veut cacher les trois plans de référence
- Set ObjSelection = PartMolecule.Selection ' On récupère la sélection courante dans notre pièce
- ObjSelection.Clear
- ObjSelection.add PartMolecule.Part.OriginElements.PlaneXY
- ObjSelection.add PartMolecule.Part.OriginElements.PlaneYZ
- ObjSelection.add PartMolecule.Part.OriginElements.PlaneZX
- ObjSelection.VisProperties.SetShow catVisPropertyNoShowAttr
-
- ' On commencera par créer des sphères en surfacique pour ensuite
- ' les transformer en volumique.
- ' Les corps surfaciques sont des HybridBody.
- Set myHybridBody = PartMolecule.Part.HybridBodies.add()
- myHybridBody.Name = "GeometryMol"
-
- ' EnsembleCorps contient l'ensemble des Corps de Pièce de notre Part.
- Set EnsembleCorps = PartMolecule.Part.Bodies
-
- Set reference1 = PartMolecule.Part.CreateReferenceFromName("")
-
- ' Boucle qui va extraire les informations utile du fichier et créer les atomes dans CATIA.
- line = 1
- While Not Fichier.AtEndOfStream
- strLine = Fichier.ReadLine
-
- ' On s'assure que la ligne n'est ni vide ni en commentaire (le !)
- If ((Len(strLine) > 0) And (Not (Left(strLine, 1) = "!"))) Then
- ' On vérifie que la ligne contient bien un nombre en 2eme colonne
- If IsNumeric(Mid(strLine, 2, 5)) Then
-
- 'Récupération des infos
- x = Val(Mid(strLine, 9)) * Echelle
- y = Val(Mid(strLine, 24)) * Echelle
- z = Val(Mid(strLine, 39)) * Echelle
- NomCorps = Left(strLine, 5)
-
- Select Case (Mid(strLine, 72, 1))
- Case "C"
- rayon = RayonCarbone * Echelle
- Rouge = 0
- Vert = 0
- Bleu = 255
- Case "H"
- rayon = RayonHydrogene * Echelle
- Rouge = 255
- Vert = 255
- Bleu = 255
- Case "N"
- rayon = RayonAzote * Echelle
- Rouge = 0
- Vert = 255
- Bleu = 0
- End Select
-
- 'On ajoute un nouveau corps de pièce pour l'atome en cours.
- Set CorpsDePiece = EnsembleCorps.add()
- CorpsDePiece.Name = NomCorps
-
- 'On créé un point à la position indiquée dans le fichier, puis on
- ' s'en sert pour ajouter une sphère au bon rayon.
- Set Point = PartMolecule.Part.HybridShapeFactory.AddNewPointCoord(x, y, z)
- Set Sphere = PartMolecule.Part.HybridShapeFactory.AddNewSphere(Point, Nothing, rayon, -90, 90, 0, 360)
- 'myHybridBody.AppendHybridShape Sphere 'Permet d'ajouter l'objet créé dans le HybridBody
-
- ' Transformation en corps volumique
- Set closeSurface1 = PartMolecule.Part.ShapeFactory.AddNewCloseSurface(reference1)
- Set reference2 = PartMolecule.Part.CreateReferenceFromObject(Sphere)
- closeSurface1.Surface = reference2
-
- ' Technique pour changer la couleur d'un élément.
- Set ObjSelection = PartMolecule.Selection
- ObjSelection.Clear
- ObjSelection.add CorpsDePiece
- ObjSelection.VisProperties.SetRealColor Rouge, Vert, Bleu, 1
-
- 'PartMolecule.Part.Update
-
- line = line + 1
- End If
- End If
- Wend
-
- PartMolecule.Part.Update
-
- End Sub
-
- ' Exemple d'un fichier *.CAR : molécule de toluène
- ' Pensez a enlever l'apostrophe en début de ligne.
- '!BIOSYM archive 3
- 'PBC=OFF
-
- '!DATE Wed Jun 28 11:20:26 2006
- 'C1 -0.000587572 -0.305649638 0.010987936 XXX ND C_R C 0.000
- 'C2 -0.682412148 0.921967447 0.060582917 XXX ND C_R C 0.000
- 'H1 -0.134903491 1.855818629 0.090066366 XXX ND H_ H 0.000
- 'C3 -2.080808878 0.949411213 0.072386093 XXX ND C_R C 0.000
- 'H2 -2.602594376 1.896936655 0.110630915 XXX ND H_ H 0.000
- 'C4 -2.805644512 -0.245127603 0.034861680 XXX ND C_R C 0.000
- 'H3 -3.887702942 -0.221981764 0.044063833 XXX ND H_ H 0.000
- 'C5 -2.133326769 -1.469513297 -0.014543146 XXX ND C_R C 0.000
- 'H4 -2.695469618 -2.393985987 -0.043574754 XXX ND H_ H 0.000
- 'C6 -0.735176623 -1.501351118 -0.026503135 XXX ND C_R C 0.000
- 'H5 -0.224755973 -2.455921650 -0.064914539 XXX ND H_ H 0.000
- 'C7 1.498682141 -0.352547675 -0.002297481 XXX ND C_3 C 0.000
- 'H6 1.938825011 0.666825652 0.031103747 XXX ND H_ H 0.000
- 'H7 1.861794949 -0.921559393 0.879336536 XXX ND H_ H 0.000
- 'H8 1.847819567 -0.856299460 -0.928170502 XXX ND H_ H 0.000
- 'end
- 'end
-
Option Explicit
Const RayonHydrogene = 1.2
Const RayonAzote = 1.54
Const RayonCarbone = 1.85
Const Echelle = 8.405
Dim Docs1 As Documents
Dim PartMolecule As Document
Sub CATMain()
Dim objParcourir As Object
Dim CARFileName As String
Dim objectFSO 'As New FileSystemObject
Dim Fichier 'As TextStream
Dim strLine, NomCorps As String
Dim x, y, z, rayon As Double
Dim line, intResult, Rouge, Vert, Bleu As Integer
Dim Point, Sphere As Object
Dim myHybridBody, referencebody As Object
Dim parameters1 As Parameters
Dim strParam1 As StrParam
Dim EnsembleCorps As Bodies
Dim CorpsDePiece As Body
Dim reference1, reference2 As Reference
Dim closeSurface1 As CloseSurface
Dim ObjSelection As Selection
' On crée et on affiche une boite de dialogue Parcourir en
' filtrant le type de fichier affichés
Set objParcourir = CreateObject("UserAccounts.CommonDialog")
objParcourir.Filter = "car File|*.car|All Files|*.*"
'objParcourir.Flags = &H0200
objParcourir.FilterIndex = 1
objParcourir.InitialDir = "C:\"
intResult = objParcourir.ShowOpen
' Si on n'a pas choisi de fichier le programme s'arrete.
If intResult = 0 Then
Exit Sub
End If
' On ouvre le fichier choisi
CARFileName = objParcourir.FileName
Set objectFSO = CreateObject("Scripting.FileSystemObject")
Set Fichier = objectFSO.OpenTextFile(CARFileName, 1, True)
' On crée un nouveau fichier Part et on le renomme.
Set Docs1 = CATIA.Documents
Set PartMolecule = Docs1.add("Part")
PartMolecule.Product.PartNumber = "Molecule"
' On veut cacher les trois plans de référence
Set ObjSelection = PartMolecule.Selection ' On récupère la sélection courante dans notre pièce
ObjSelection.Clear
ObjSelection.add PartMolecule.Part.OriginElements.PlaneXY
ObjSelection.add PartMolecule.Part.OriginElements.PlaneYZ
ObjSelection.add PartMolecule.Part.OriginElements.PlaneZX
ObjSelection.VisProperties.SetShow catVisPropertyNoShowAttr
' On commencera par créer des sphères en surfacique pour ensuite
' les transformer en volumique.
' Les corps surfaciques sont des HybridBody.
Set myHybridBody = PartMolecule.Part.HybridBodies.add()
myHybridBody.Name = "GeometryMol"
' EnsembleCorps contient l'ensemble des Corps de Pièce de notre Part.
Set EnsembleCorps = PartMolecule.Part.Bodies
Set reference1 = PartMolecule.Part.CreateReferenceFromName("")
' Boucle qui va extraire les informations utile du fichier et créer les atomes dans CATIA.
line = 1
While Not Fichier.AtEndOfStream
strLine = Fichier.ReadLine
' On s'assure que la ligne n'est ni vide ni en commentaire (le !)
If ((Len(strLine) > 0) And (Not (Left(strLine, 1) = "!"))) Then
' On vérifie que la ligne contient bien un nombre en 2eme colonne
If IsNumeric(Mid(strLine, 2, 5)) Then
'Récupération des infos
x = Val(Mid(strLine, 9)) * Echelle
y = Val(Mid(strLine, 24)) * Echelle
z = Val(Mid(strLine, 39)) * Echelle
NomCorps = Left(strLine, 5)
Select Case (Mid(strLine, 72, 1))
Case "C"
rayon = RayonCarbone * Echelle
Rouge = 0
Vert = 0
Bleu = 255
Case "H"
rayon = RayonHydrogene * Echelle
Rouge = 255
Vert = 255
Bleu = 255
Case "N"
rayon = RayonAzote * Echelle
Rouge = 0
Vert = 255
Bleu = 0
End Select
'On ajoute un nouveau corps de pièce pour l'atome en cours.
Set CorpsDePiece = EnsembleCorps.add()
CorpsDePiece.Name = NomCorps
'On créé un point à la position indiquée dans le fichier, puis on
' s'en sert pour ajouter une sphère au bon rayon.
Set Point = PartMolecule.Part.HybridShapeFactory.AddNewPointCoord(x, y, z)
Set Sphere = PartMolecule.Part.HybridShapeFactory.AddNewSphere(Point, Nothing, rayon, -90, 90, 0, 360)
'myHybridBody.AppendHybridShape Sphere 'Permet d'ajouter l'objet créé dans le HybridBody
' Transformation en corps volumique
Set closeSurface1 = PartMolecule.Part.ShapeFactory.AddNewCloseSurface(reference1)
Set reference2 = PartMolecule.Part.CreateReferenceFromObject(Sphere)
closeSurface1.Surface = reference2
' Technique pour changer la couleur d'un élément.
Set ObjSelection = PartMolecule.Selection
ObjSelection.Clear
ObjSelection.add CorpsDePiece
ObjSelection.VisProperties.SetRealColor Rouge, Vert, Bleu, 1
'PartMolecule.Part.Update
line = line + 1
End If
End If
Wend
PartMolecule.Part.Update
End Sub
' Exemple d'un fichier *.CAR : molécule de toluène
' Pensez a enlever l'apostrophe en début de ligne.
'!BIOSYM archive 3
'PBC=OFF
'!DATE Wed Jun 28 11:20:26 2006
'C1 -0.000587572 -0.305649638 0.010987936 XXX ND C_R C 0.000
'C2 -0.682412148 0.921967447 0.060582917 XXX ND C_R C 0.000
'H1 -0.134903491 1.855818629 0.090066366 XXX ND H_ H 0.000
'C3 -2.080808878 0.949411213 0.072386093 XXX ND C_R C 0.000
'H2 -2.602594376 1.896936655 0.110630915 XXX ND H_ H 0.000
'C4 -2.805644512 -0.245127603 0.034861680 XXX ND C_R C 0.000
'H3 -3.887702942 -0.221981764 0.044063833 XXX ND H_ H 0.000
'C5 -2.133326769 -1.469513297 -0.014543146 XXX ND C_R C 0.000
'H4 -2.695469618 -2.393985987 -0.043574754 XXX ND H_ H 0.000
'C6 -0.735176623 -1.501351118 -0.026503135 XXX ND C_R C 0.000
'H5 -0.224755973 -2.455921650 -0.064914539 XXX ND H_ H 0.000
'C7 1.498682141 -0.352547675 -0.002297481 XXX ND C_3 C 0.000
'H6 1.938825011 0.666825652 0.031103747 XXX ND H_ H 0.000
'H7 1.861794949 -0.921559393 0.879336536 XXX ND H_ H 0.000
'H8 1.847819567 -0.856299460 -0.928170502 XXX ND H_ H 0.000
'end
'end
Conclusion
Ce code est principalement un assemblage de plusieurs infos trouvées sur des forums, avec un peu de bidouille, il peut donc y avoir des choses inutiles ou redondantes. Merci de me le signaler.
Historique
- 08 septembre 2006 10:37:01 :
- Suppression de déclarations de variables inutiles.
- 01 mars 2007 16:49:56 :
- Ajout dans la présentation du code
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
VB6 et CATIA V5 [ par Spip ]
SpipVB6 permet des acces au logiciel de CAO CATIA V5. Ce message a pour sel but de prende des contacts avec des programmeurs pouvant m'aider en VB6 po
Excel vers VB (catia V5) [ par CAOVINCE ]
Bonjour à tousVoila mon pb, j'ai une petite appli qui ouvre un fichier catia V5 enregistré en stp en invisible, qui tri une chaîne de caractères et qu
Gestion des propriétés sous CATIA en VB Script [ par isa911 ]
Bonjour, Je suis en train de faire un code permettant de créer des Part, Product et/ou Drawing en renseignant dès la création des documents un certain
Récupération langue Catia v5 et séparateur décimal [ par haiduc ]
Bonjour, J'ai besoin de récupérer la langue de l'interface (menus, messages, etc.) du logiciel Catia v5. Je n'arrive pas à la trouver... De même, j'
CATIA et VBA [ par CdXie ]
Je souhaite permettre à l'utilisateur de sélectionner un fichier et un répertoire à partir d'une Macro VBA sous CATIA V5. Bon norm
Liste des routines VBA Catia V5 [ par progpy32ab ]
Bonjour,J'aimerais savoir s'il existe une liste (Pas obligatoirement exhaustive) des routinescatia V5. Telles que par exemple extraction d'entité
récupérer une variable d'environnement CATIA dans un script VBA [ par extrastouf ]
bonjour,J'ai besoin de récupérer une variable d'environnement CATIA V5 (qui correspond à un chemin d'accès) dans une macro VBA.j'a
Comment récupérer une variable existante dans une application et la reprendre dans une macro VB ?? [ par extrastouf ]
bonjour,J'ai besoin de récupérer une variable d'environnement CATIA V5 (qui correspond à un chemin d'accès) dans une macro VBA.j'a
Prb CATIA + VBA ! [ par CdXie ]
Je développe actuellement une application sous CATIA V5 en VBA et je souhaite insérer dans un formulaire des entités graphiques du type
Macro de conversion dans catia v5 [ par Arzhel ]
Bonjour à tous, Je cherche un moyen (une macro me semble correspondre le plus à ma démarche) de convertir un caractère quelquonque en entitées filair
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|