Aller au contenu

Macro pour récupérer les coordonnées de points


Messages recommandés

Posté(e)

Bonjour,

 

Je suis en train de réaliser une macro sur v5r11.

Je fais une recherche de tous les points d'une part et ensuite je veux pouvoir récupérer les infos du ou des point (coordonnées, nom,etc.) pour les exploiter derriere (faire un tableau de coordonées en 2d ou exporter la liste sous excel)

Mais je n'arrive pas à récupérer ces info depuis la sélection :

 

selection1.Search "CATPrtSearch.Point,all"

Dim Table(1 To 3) As Double

 

For i = 1 To selection1.Count

 

debug.print selection1.item(i). ????

 

next

 

si qlqn pouvez me donner un tuyau sur la manière de procéder,merci d'avance.

mooneck

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut Didier,

 

c'est fort possible qu'au point de vue compatibilité, autocad et catia doivent avoir de grandes similitudes de langage. ce serait intéressant d'en reparler dans un autre sujet (à suivre !)

 

Dans le cas de Mooneck, c'est un peu différent: il s'agit de macros; le langage est un peu particulier; c'est comme si tu utilisais du VBA, mais avec quelques différences. Ainsi par exemple, tu peux te passer de déclarer certaines variables.

J'en ai un peu utiliser, on va dire, pour des opérations de base, mais je préfère de loin utiliser le VBA.

 

Bien, alors ce problème.....

 

je regardes, j'analyses, je transcris et je te réponds dès que possible.

Gawel

Posté(e)

Didier,

 

ce serait intéressant de voir ce que tu proposerais en VBA, car ce serait plus simple à gérer.

Je pense qu'il faudrait partir sur la création d'une liste qui prendrait les coordonnées XYZ et les insèrer dans une nouvelle feuille excel.

 

@+ tard !

 

Gawel

Posté(e)

bonjour,

 

Je patoge toujours dans la semoule !!

 

J'ai trouvé une idée mais qui n'est pas concluente. Ca a marché une fois et puis apres plus rien !

J'arrive à retrouver l'ID du point "Point.1".

J'aimerais maintenant retrouver le nom du parent (Corps surfacique.1) mais j'ai un problème avec les déclaratifs entre :

Dim hybridShapePoint

Dim hybridShapePointCoord1 As HybridShapePointCoord

Dim hybridBody1 As HybridBody

Dim hybridBodies1 As HybridBodies

Set hybridBodies1 = part1.HybridBodies

C'est le bordel dans CATIA si on regarde dans la fenetre espion les propriétés d'un objet on peut constater que les imbrications sont quasi infinis. Comment fait-on pour s'y retrouver.

 

Au secours ! :( :( :( :( :( :( :( :( :( :mad2:

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

En ce qui concerne la soluce autocad que propose didier je veux bien la voir c'est une orientation a prendre ?

Merci d'avance

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Bonsoir,

excusez le retard de la réponse, mais j'ai pas tout le temps dont j'ai besoin ...

donc voici un extrait de prog, qui va mémoriser des coordonnées X et Y,

libre à chacun d'en faire ce qu'il veut dans la boucle,

soit les mettre dans un fichier, soit les envoyer sur Excel ...

je parle du VBA pour AutoCad 2004.

 

Call ObjSset.SelectOnScreen(Codes, Valeurs)

ObjSset.Select acSelectionSetAll, , , Codes, Valeurs

End If

For Each Elem In ObjSset

With ThisDrawing.Utility

Pins = Elem.InsertionPoint

Pins2 = .TranslateCoordinates(Pins, acWorld, acUCS, False)

X = Pins2(0)

Y = Pins2(1)

End With

Next Elem

 

à votre disposition, si questions.

amicalement

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

 

Posté(e)

Ah oui quand même...

y'a une petite différence entre VBA autocad et celui de catia, mais ça peut se faire.

Bon faut dire que là je suis pas au boulot, et que j'ai pas mon cher PC adoré bourré de toute l'aide de catia.

j'ai quand même une version de catia chez moi qui peut le faire, je vais la lancer sur mon vieux massey fergusson.....

 

à tout à l'heure !

 

Gawel

Posté(e)

Ah oui quand même...

y'a une petite différence entre VBA autocad et celui de catia, mais ça peut se faire.

Bon faut dire que là je suis pas au boulot, et que j'ai pas mon cher PC adoré bourré de toute l'aide de catia.

j'ai quand même une version de catia chez moi qui peut le faire, je vais la lancer sur mon vieux massey fergusson.....

 

à tout à l'heure !

 

Gawel

Posté(e)

Merci Didier pour ton aide.

Mais ca ne ressemble pas du tout au vba de CAtia si ce n'est l'alogrithme.

Le mien est un peu différent mais je l'ai quand meme.

Ce qu'il me manque c'est les bon mots clés et méthodes d'objet pour Catia v5.

Merci quand meme.

 

Gawel, as tu une idée de code ?

 

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut Mooneck,

 

Tes points, où se trouvent-ils ? Dans un corps surfacique bien précis (avec un nom par exemple) ? Dans une esquisse ? Dans plusieurs corps surfaciques ?

Pour faciliter la recherche, le plus facile serait que tous tes points soient dans le même corps surfacique.

 

@+ tard

 

Gawel

Posté(e)

Bonjour Gawel

 

En fait, les points sont censés se trouver dans une part quelconque car je lance la recherche suivante :

 

selection1.Search "CATPrtSearch.Point,all"

 

Puis la boucle suivante donne le nom des points :

 

For i = 1 To selection1.Count

LaPart = selection1.Item(i).Value.Parent.Parent.Name

Debug.Print LaPart

next

 

J'avais essayé la commande suivante :

 

NomducorpSurfacique = selection1.Item(i).Value.Parent.Parent.Name

Debug.Print NomducorpSurfacique

 

Cela me donné le nom du corps surfacique dans lequel ils se trouvent.

Et là c'était gagné, mais ca n'a marché qu'une fois. Maintenant cela me donne le nom de la Part.

BIZARRE.

Donc si j'arrivais à obtenir le nom du parent direct (corps surfacique) dans lequel se trouvent les points je pourrais sans aucun doute récupérer les coordonnées des points par la fonction suivante :

 

Set hybridShapePoint = part1.HybridShapes.Item(NomPoint)

Debug.Print "X = " & hybridShapePoint.X.Value & " " & hybridShapePoint.X.Unit.Symbol

Debug.Print "Y = " & hybridShapePoint.Y.Value & " " & hybridShapePoint.Y.Unit.Symbol

Debug.Print "Z = " & hybridShapePoint.Z.Value & " " & hybridShapePoint.Z.Unit.Symbol

 

Si tu trouves quelquechose qui cloche ...

Il doit s'agir d'un probleme de déclaration de collection d'objet et de variable objet ... :(

 

Je pense ne pas etre tres loin du but !

@+

 

 

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut,

 

 

Autocad j'y connais que dalle, d'ailleurs ça m'interresse même pas.... :)

 

sous V5:

je vais pas détailler le code mais te donner quelques directions.

 

avec ta fonction search, tu as dans ta selection un certain nombre de points 3D.

 

avec une commande For tu balayes ta selection, tu crées une array à 3 entrées et pour chaque objet (chaque point) tu appliques un GetCoordinates. Qu'il s'agisse d'un Point on Curve, on Plane, on Surface ou d'un Coordinate Point pas de problème ça marche (tant que ça reste un (3D Point)

 

J'ai perso souvent utilisé cette fonction.

Après, une fois que tu as les coordonnées, rien de plus facile d'exporter cela dans un textstream (de mon coté j'utilise pas directment les classeurs excel mais des fichiers CSV importables sous Unix)

 

Bon courage!

Christophe

Posté(e)

Bonjour prosper67,

 

J'ai déja ezssayer auparavent car c'etait la marche à suivre que je voulais faire.

Mais la fonction getcoordinat ne marche pas ou du moins je n'ai pas le bon code pour l'utiliser.

 

Voila ce que j'utilise :

 

 Dim oSelElem2 as Point
Dim Table (1 To 3)

For i = 1 to Selection1.count

     oSelElem2 = Selection1.part1.FindObjectByName(selection1.Item(i).Reference.DisplayName)
     oSelElem2.GetCoordinates Table

 

Mais le programme s'arret sur GetCoordinate et affiche le msg suivant :

 

Compile error :

Function or interfaceas restricted, or the function uses an automation type not supported in Visual Basic.

 

Vois tu d'où l'erreur peut provenir ?

 

Merci d'avance Hervé

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut,

 

la fonction GetCoordinates marche très bien. Le script suivant recherche tous les points 3D et enrregistre des coordonnée dans une Table. Après il te suffit plus qu'à balayer la table et l'exporter dans un fichier CSV.

 

Sub CATMain()

 

Dim table()

ReDim table(0)

Set osel = CATIA.ActiveDocument.Selection

osel.Clear

osel.Search "CATGmoSearch.Point,all"

 

For i = 1 To osel.Count

Set opoint = osel.Item(i).Value

Dim acoord(2)

opoint.GetCoordinates acoord

scoord = acoord(0) & ";" & acoord(1) & ";" & acoord(2)

table(UBound(table)) = scoord

ReDim Preserve table(UBound(table) + 1)

Next

 

ReDim Preserve table(UBound(table) - 1)

End Sub

 

Bye et bon courage pour la suite!

Christophe

 

Posté(e)

Merci Prosper67

 

Le code marche.

En fait grace a ton dernier code j'ai pu voir d'ou vient l'erreur.

 

l'erreur vient du déclaratif de la table :

dim Table(1 To 3) au lieu de la déclarer Table(2)

Getcoordinates utilise forcement la valeur 0 comme départ pour saisir le "X".

 

Merci

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité