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
[WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7[WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7 par Audrey
Lors de la réalisation de ma 2ème application Windows Phone 7, j'ai souhaité utiliser un WrapPanel pour afficher plusieurs photos. Mais le contrôle WrapPanel ne fait pas parti de la liste des contrôles inclus dans le SDK de la version Beta des outils pour...
Cliquez pour lire la suite de l'article par Audrey [WP7] BESOIN D'AVOIR DES DONNéES EN CACHE[WP7] BESOIN D'AVOIR DES DONNéES EN CACHE par Nicolas
Les développeurs ASP.NET ont l'habitude de mettre des données en cache pour éviter de requêter a chaque fois la base de données. Et il est toujours utilie de penser que vos utilisateurs mobiles n'ont pas troujours une super connexion 3G/WIFI et un for...
Cliquez pour lire la suite de l'article par Nicolas [TFS] COMMENT FORCER LA SAISIE D'UN AREA OU ITERATION[TFS] COMMENT FORCER LA SAISIE D'UN AREA OU ITERATION par cyril
Lorsque l'on créé un Work Item dans TFS, il est possible de le classer dans un "area" et dans une "iteration". Dans la plupart des types de projet, un "area" correspond à une catégorie, une "iteration" à un numéro de version. Il est possible de cré...
Cliquez pour lire la suite de l'article par cyril SQL : FONCTIONS D'AGRéGATION MIN/MAX ET VALEURS NULLSQL : FONCTIONS D'AGRéGATION MIN/MAX ET VALEURS NULL par coq
Les fonctions d'agrégation comme MIN et MAX ignorent les valeurs NULL présentes dans le jeu de données sur lequel porte leur calcul, d'où le fameux message d'avertissement : Warning: Null value is eliminated by an aggregate or other SET operation...
Cliquez pour lire la suite de l'article par coq VOTEZ POUR WARNYGOVOTEZ POUR WARNYGO par Nicolas
La vidéo du projet Warnygo est disponible sur facebook et attend vos votes ! Pour rappel: Warnygo est une application Windows Phone 7 qui permet d'alerter tous utilisateurs inscrits qui se trouve dans la zone où se passe l'...
Cliquez pour lire la suite de l'article par Nicolas
Logiciels
sDEVIS-FACTURES vlPRO (3.8.0)SDEVIS-FACTURES VLPRO (3.8.0)sDEVIS-FACTURES vlPRO a été mis au point pour permettre besoins des particuliers, créateurs, entr... Cliquez pour télécharger sDEVIS-FACTURES vlPRO LettresFaciles (5.6.0)LETTRESFACILES (5.6.0)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles MyPlanning 2010 (5.6.0)MYPLANNING 2010 (5.6.0)MyPlanning 2010 permet de créer des plannings sous la représentation de diagrammes. Plannings pré... Cliquez pour télécharger MyPlanning 2010 Emicsoft Mac DVD en iPad Convertisseur (3.1.16)EMICSOFT MAC DVD EN IPAD CONVERTISSEUR (3.1.16)Emicsoft Mac DVD en iPad Convertisseur, logiciel professionnel de convertir les fichiers DVD en i... Cliquez pour télécharger Emicsoft Mac DVD en iPad Convertisseur Emicsoft ipad ménager pour mac (3.1.08)EMICSOFT IPAD MéNAGER POUR MAC (3.1.08)Emicsoft ipad ménager pour mac est spécialement conçu pour les utilisateurs Mac pour copier des f... Cliquez pour télécharger Emicsoft ipad ménager pour mac
|