Aller au contenu

RemyT

Membres
  • Compteur de contenus

    5
  • Inscription

  • Dernière visite

Tout ce qui a été posté par RemyT

  1. RemyT

    Macro extrusion

    Bonjour à tous, Je me suis lancé dans la programmation VBA de Catia en raison d'une reconstitution de maillage. :huh: En donnée d'entrée j'ai 2 fichiers excel : -L'un contenant des points avec leur coordonnées et leur identifiant : Point A : 0.0 0.0 0.0 Point B : 1.0 2.0 3.0 etc -L'autre contenant les barres avec leur identifiant et les points reliés : Barre1 : PointA PointB Barre2 : PointA PointC Avec l'aide de macro excel, j'ai traité le fichier excel pour pouvoir utilisé le fichier : GSD_PointSplineLoftFromExcel (voir lien) https://d2t1xqejof9utc.cloudfront.net/files/23155/Excel_to_CATIA.pdf?1371318453 J'ai donc une part avec dans l'arborescense : Point1 point2 Spline1 Point3 Point4 Spline2 etc J'ai donc créer un programme pour : -créer sur chacun des points un plan orthogonal à la spline -créer un cercle sur les points dans un des plans de rayon radius -créer une extrusion de ce cercle jusqu'au prochain plan Le BLABLA d'entrée Language="VBSCRIPT" Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set hybridShapeFactory1 = part1.HybridShapeFactory Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("GeometryFromExcel") Set hybridShapes1 = hybridBody1.HybridShapes Déclaration des variables Radius =20 NombreBarre = 3 Créations des plans sur chacun des points I=1 For N= 3 to 3*NombreBarre Step 3 Set hybridShapeSpline1 = hybridShapes1.Item(N) Set Spline1 = part1.CreateReferenceFromObject(hybridShapeSpline1) Set hybridShapePointCoord1 = hybridShapes1.Item(I) Set Point1 = part1.CreateReferenceFromObject(hybridShapePointCoord1) Set hybridShapePlaneNormal1 = hybridShapeFactory1.AddNewPlaneNormal(Spline1, Point1) hybridBody1.AppendHybridShape hybridShapePlaneNormal1 part1.InWorkObject = hybridShapePlaneNormal1 Set hybridShapePointCoord2 = hybridShapes1.Item(I+1) Set Point2 = part1.CreateReferenceFromObject(hybridShapePointCoord2) Set hybridShapePlaneNormal2 = hybridShapeFactory1.AddNewPlaneNormal(Spline1, Point2) hybridBody1.AppendHybridShape hybridShapePlaneNormal2 part1.InWorkObject = hybridShapePlaneNormal2 I=I+3 Next part1.Update Création de l'esquisse du cercle For K=NombreBarre*3+1 to NombreBarre*5 Step 2 Set sketches1 = hybridBody1.HybridSketches Set hybridShapes1 = hybridBody1.HybridShapes Set reference1 = hybridShapes1.Item(K) Set sketch1 = sketches1.Add(reference1) part1.InWorkObject = sketch1 Set factory2D1 = sketch1.OpenEdition() Set circle2D =factory2D1.CreateClosedCircle(0,0, radius) sketch1.CloseEdition part1.InWorkObject = hybridBody1 Next part1.Update Créations des extrusions pour chacunes des esquisses P=NombreBarre*3+2 For J= 1 to NombreBarre Set bodies1 = part1.Bodies Set body1 = bodies1.Item("Corps principal") part1.InWorkObject = body1 part1.InWorkObject = body1 Set shapeFactory1 = part1.ShapeFactory Set Ref8 = part1.CreateReferenceFromName("") Set pad1 = shapeFactory1.AddNewPadFromRef(Ref8, 20.000000) Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("GeometryFromExcel") Set sketches2 = hybridBody1.HybridSketches Set sketch2 = sketches1.Item(J) Set reference9 = part1.CreateReferenceFromObject(sketch2) pad1.SetProfileElement reference9 Set limit1 = pad1.FirstLimit limit1.LimitMode = catUpToPlaneLimit Set hybridShapes1 = hybridBody1.HybridShapes Set hybridShapePlaneNormal1 = hybridShapes1.Item(P) Set reference10 = part1.CreateReferenceFromObject(hybridShapePlaneNormal1) limit1.LimitingElement = reference10 P=P+2 Next part1.Update End Sub j'ai globalement construit mon raisonnement sur la place des items dans l'arborescence. -Spline -Point -Point etc -Plan etc -Esquisse etc Voila en gros mon programme, il fonctionne !!! je voulais donc avoir des suggestions sur l'amélioration de mon programme, rapidité etc Et également comment intégrer une toolbox pour entrer en lancement du programme les paramètres nombre de barre / radius (rayon du cylindre d'extrusion) Merci d'avance :)
  2. RemyT

    Liste de point et barre

    Bonjour, je vous tiens informer de mon avancé, j'ai trouvé une autre méthode pour effectuer le travail que je voulais. En passant sous CATIAv5 et en utilisant les macros intégrés a celui ci (voir la méthode ci dessous) Une simple mise en page d'un Excel suffit. https://d2t1xqejof9utc.cloudfront.net/files/23155/Excel_to_CATIA.pdf?1371318453 http://sti-beziers.fr/tsipm/spip_tsipm/IMG/pdf/IMPORT_EXCEL_CATIA.pdf J'obtiens alors mon maillage représenté et utilisable en step. Bon aller je n'ai plus qu'à rajouter du volume et de la matière ! :) En tout cas merci pour vos réponses.
  3. RemyT

    Liste de point et barre

    Bonjour, Merci Olivier pour ta réponse. (if (setq f (open fname "r")) ;open the file in read mode (while (setq txtLine(read-line f)) ;while lines of text exist in file (princ txtLine) ;print the text string to the command line ) ;close the while statement Du coup la boucle while va s’arrêter quand il n'y aura plus de ligne ? (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) Au niveau des arguments je ne comprend pas quoi mettre pour str et pos ! Je pense comprend que sep sera remplacé par par exemple " " "," ";" etc Pour te répondre Didier : Fichier 1 des noeuds: ID du Noeud / x /y /z 1 / 0.0 / 0.0 / 0.0 2 / 0.1 / 0.2 / 0.3 3 / 0.3 / 0.2 / 0.3 etc Fichier 2 des barres : ID des barres / Id du noeud de départ / Id du noeud d'arrivé 1 / 1 / 3 (La barre 1 relie la barre 1 et 3) 2 / 2 / 3 (La barre 2 relie la barre 2 et 3) etc J'espère avoir été plus claire :/ En tout cas merci pour déjà les aides trouvés sur tout le forum ainsi que les réponses ici
  4. RemyT

    Liste de point et barre

    Oui en effet c'est voulu, c'est disons le formalisme que je connais dans les autres programmations c'est pour disons expliquer le raisonnement du programme. Le fichier peut être transformé pour avoir tout en ligne et avec les séparateurs voulu entre chaque données x,y,z,id noeud,id barre etc. Disons que je ne fais pas du copier coller, je recherche l'inspiration et je cherche surtout à comprendre le fonctionnement c'est pour moi le plus important.
  5. Bonjour à tous, Tout d'abord merci à Gilles pour son super travail sur le lisp, j'ai beaucoup appris sur ce langage en peu de temps. :) Je suis totalement nouveau sur le forum ainsi qu'en langage lisp. Du coup, je ne sais pas si je suis dans le bon sujet et si je dois me présenter avant dans une certaine partie, si besoin je le ferai évidemment. ;) Donc je vais exposer mon souci. :mellow: J'essai de coder en lisp ce programme : D is diameter of wire for each line in elements.txt ID element = first cell start node = second cell end node = third cell define start point define end point found = 0 for each line in nodes.txt ID node = first cell node coord = (second cell, third cell, fourth cell) if ID node == start node start point = node coord found += 1 else if ID node == end node end point = node coord found += 2 end if end if if found == 3 break for end end for draw cylinder in Autodesk of diameter D between start point and end point end for Pour explication : J'ai un fichier contenant une liste de nœuds avec leurs ID et leurs coordonnées et un fichier contenant les barres : le numéro de la barre et les ID des nœuds reliés. J'ai donc commencé mes recherches sur les lips et j'ai du mal à trouver une formulation pour des itérations style de I à N etc, je pensais utilisé la fonction while mais j'ai du mal à comprend la notion de "nil" J'ai également du mal à savoir comment la fonction read-line fonction. Elle ne retourne que la ligne ? Peut on aller chercher des infos dans lignes colonnes ? <_< J'ai essayé de trouver des bribs un peu partout sur le net et sur le forum mais bon pas trop concluant. Pour la liaison entre les points je pensais à : (defun c:cyl() (command "_cylinder" pt1 "diametre" "_c"pt2)) utiliser la fonction read-line pour la lecture des données des lignes utiliser la fonction nth pour obtenir la données utiliser la fonction command "_point" "_non" Voilà je sais, c'est mince niveau travail personnel mais bon.. J'espère que j'ai été clair, si besoin je reprécise ! N’hésitez pas à réagir et à m'éclairer ! Merci d'avance. Rem
×
×
  • 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é