mooneck Posté(e) le 26 septembre 2004 Posté(e) le 26 septembre 2004 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
didier Posté(e) le 26 septembre 2004 Posté(e) le 26 septembre 2004 Bonjour, Bon Dimanche, es tu au courant de l'éventuelle compatibilitéentre AutoCad, 2000, 2004 ou 2005,et Catia ? je parle bien sûr du VBA,peut on te répondre une soluce AutoCad ? c'est bien du VBA que tu cherches ? Éternel débutant… Mon site perso : Programmer dans AutoCAD
gawel Posté(e) le 27 septembre 2004 Posté(e) le 27 septembre 2004 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
gawel Posté(e) le 27 septembre 2004 Posté(e) le 27 septembre 2004 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
mooneck Posté(e) le 28 septembre 2004 Auteur Posté(e) le 28 septembre 2004 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 hybridShapePointDim hybridShapePointCoord1 As HybridShapePointCoordDim hybridBody1 As HybridBodyDim hybridBodies1 As HybridBodiesSet hybridBodies1 = part1.HybridBodiesC'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
mooneck Posté(e) le 28 septembre 2004 Auteur Posté(e) le 28 septembre 2004 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
didier Posté(e) le 28 septembre 2004 Posté(e) le 28 septembre 2004 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, ValeursEnd IfFor Each Elem In ObjSset With ThisDrawing.Utility Pins = Elem.InsertionPoint Pins2 = .TranslateCoordinates(Pins, acWorld, acUCS, False) X = Pins2(0) Y = Pins2(1) End WithNext Elem à votre disposition, si questions.amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
gawel Posté(e) le 28 septembre 2004 Posté(e) le 28 septembre 2004 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
gawel Posté(e) le 28 septembre 2004 Posté(e) le 28 septembre 2004 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
mooneck Posté(e) le 28 septembre 2004 Auteur Posté(e) le 28 septembre 2004 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
gawel Posté(e) le 29 septembre 2004 Posté(e) le 29 septembre 2004 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
mooneck Posté(e) le 29 septembre 2004 Auteur Posté(e) le 29 septembre 2004 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 LaPartnext J'avais essayé la commande suivante : NomducorpSurfacique = selection1.Item(i).Value.Parent.Parent.NameDebug.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
prosper67 Posté(e) le 30 septembre 2004 Posté(e) le 30 septembre 2004 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
mooneck Posté(e) le 1 octobre 2004 Auteur Posté(e) le 1 octobre 2004 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
prosper67 Posté(e) le 1 octobre 2004 Posté(e) le 1 octobre 2004 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.Selectionosel.Clearosel.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
prosper67 Posté(e) le 1 octobre 2004 Posté(e) le 1 octobre 2004 Pour la recherche des points utilise plutot ça: osel.clearosel.search "CATPrtSearch.Point,all" Salutations.Christophe
mooneck Posté(e) le 3 octobre 2004 Auteur Posté(e) le 3 octobre 2004 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant