begin process at 2012 02 12 16:31:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > 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

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBA Classé sous :catia Niveau :Débutant Date de création :08/09/2006 Date de mise à jour :01/03/2007 16:49:56 Vu :13 696

Auteur : HeeroYuhi

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

Source avec Zip GESTION PERSONNEL par oudlarbi
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture MANIPULER LES FENETRES ENFANT D'EXCEL par bigfish_le vrai
Source avec Zip Source avec une capture COLLECTION ID par Le Pivert
Source avec Zip Source avec une capture VBA MASQUE DE SAISIE NUMÉRIQUE par acive

 Sources en rapport avec celle ci

SNAPSHOT CATIA TO WORD par Wanours

Commentaires et avis

Commentaire de harzer le 09/09/2006 16:09:39

Bonjour,
Il serait plus pratique et génereux de mettre un zip complet du programme, puisqu'il semble exister, vue l'image du programme. Merci d'avance.

Commentaire de jean_marc_n2 le 10/09/2006 11:50:04

Hello,
harzer=> Ce n'est pas un programme VB6. C'est une macro en VBA pour "Catia", un logiciel de modélisation utilisé entre autre pour la construction (génie civil, aéronautique, etc.). Tu trouveras des infos ici: http://fr.wikipedia.org/wiki/CATIA.
Pour acquérir le logiciel, il va falloir casser ta tirelire: La licence de base coute 15.000 Euros (quinze-mille) mais le système complet coûte environ 1.000.000 Euros (1 million).




Commentaire de HeeroYuhi le 11/09/2006 09:35:52

Salut,
Jean-marc a raison, ce code ne peut-être utilisé que si tu possède CATIA V5. Le fichier du projet VBA à une extension spécifique ( *.catvba ). De plus, ma macro n'est composée que d'un seul module donc il suffit de faire un copier/coller dans l'éditeur VBA pour pouvoir l'utiliser.

J'ai principalement mis ce code pour aider les personnes qui ont besoin de faire des macros CATIA pour leur boulot ou les cours et qui ont donc déjà CATIA.

Commentaire de harzer le 11/09/2006 23:56:24

Bonjour à JEAN_MARC_N2 et HEEROYUHI,
Merci à tous les deux pour les informations complémentaires.
Le programme n’est certainement pas à ma portée financièrement même en cassant ma tirelire.
Cordiale poignée de mains à vous deux.

Commentaire de debutant726vt le 09/12/2006 11:19:40

J'ai essayé ton code, et ca marche.
Pourtant, je veux savoir si tu connais les documents qui permet d'apprendre programmer dans Catia macro avec VB ?
Thanks in advance man

Commentaire de HeeroYuhi le 01/03/2007 16:44:42

Désolé pour le retard de la réponse debutant726vt. Voici qlqe sites et forums qui m'ont aidé :
http://www.cadxp.com/forumXForum-41.htm
http://cao.etudes.ecp.fr/index.php?page=faq.htm#9
http://www.coe.org/Collaboration/DiscussionForum/ActiveDiscussions/tabid/210/Default.aspx
http://www4.utc.fr/~tn13/index.php?op=liens

Commentaire de Matthias31 le 06/04/2007 12:02:57

Salut HeeroYuhi ,


Juste pour information, jean_marc_n2, la version complete de CATIA V5 ne coute "que" 150.000 euros environ (1 million de francs).

Commentaire de sudrienetd24v le 27/04/2007 01:03:29

Bonsoir !
Sympa ce prog , bon par contre j’ai un petit pb avec ! sur V5R11
Il me créer un fichier vide en cachant les plans et en créant une nom surfacique GeometryMol vide aussi… (rien n’est caché)
J’ai jete un oeil rapide au script , je sais pas si c’est un pb sur le script ou le fichier .car

Pourrais tu mettre les fichiers en zip en ligne stp pour voir si j'ai pas foire mon ctrl+c/V.

Ha oui au passage j’ai un pb avec un autre script de type VBA fichier TinyPDM4CATIA-0-25.catvba de l’url http://cao.etudes.ecp.fr/index.php?page=tiny_psr.htm impossible de le chargé il n’est pas visible pour le menu macro !
Je me pose donc une question faut il un module special pour le VBA sous cat ??

Il est sympa ce script !
Merci pour votre aide.
A+

Commentaire de sudrienetd24v le 27/04/2007 02:59:25

J’ai trouvé pour le vba … l’option vba était pas installe .je les mise à la mano depuis le cdrom de catia.
Mais cela ne règle pas mon problème précédent avec le catcript (cela aurait trop facile)…

A+

Commentaire de gourmand86 le 09/01/2012 14:00:46 10/10

Super macro (je cherché justement a mètre de la couleur sur mes part)

Pour se ou sa ne marche pas: le copier coller ne mais que 1 espace entre chaque mots => -0.1      0.1 deviens : -0.1 0.1

 Ajouter un commentaire


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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales