MarcoTic Posté(e) le 4 octobre 2007 Posté(e) le 4 octobre 2007 J'ai cru comprendre, après m'être promené sur ce site que le Lisp est grand et puissant.Existe-t-il des possibilité de formation ?En attendant, j'ai une proposition de développement:J'ai un dessin contenant de nombreux blocs nommés par un attribut.J'ai une polyligne. Les blocs sont disposés, aléatoirement, de par et d'autre de cette polyligne.La manip "magique" que je cherche à faire, c'est de récupérer, dans Excel par exemple, pour chaque bloc la distance curviligne de sa projection perpendiculaire sur la polyligne (je sais si c'est très clair ça ? ) :exclam: Voilà le genre de truc que je souhaiterai savoir faire (Houa ! le frimeur) est-compliqué, est-ce-que ça néssécite un longue expérience ?
(gile) Posté(e) le 4 octobre 2007 Posté(e) le 4 octobre 2007 Salut, Existe-t-il des possibilité de formation ? Oui, plusieurs organismes de formation en proposent (fais une recheche sur le web). Certains membres de CADxp sont formateurs AutoCAD et proposent aussi des formations AutoLISP, d'autres ont suivi ce type de formations et pourront peut-être t'en dire plus.De mon côté, je suis entrain d'essayer de mettre en place une formation AutoLISP avec l'organisme qui m'emploie parfois, mais je peux d'ores et déjà intervenir en interne (CDD) dans des entreprises pour des formations et/ou dévellopements en LISP. En ce qui concerne ta proposition de dévellopement, ce n'est pas très compliqué mais nécessite quand même une certaine expérience : - récupérer de l'utilsateur le nom du bloc, le nom de l'étiquette de l'attribut identifiant chaque bloc, la polyligne et un nom de fichier Excel ;- sélectionner tous le blocs de ce nom dans le dessin ;- parcourrir le jeu de sélection pour récupérer la valeur de l'attribut, le point d'insertion ;- calculer la distance du point d'insertion à la polyligne ;- écrire le fichier Excel. Si j'ai le temps dans la journée (et si un autre ne l'a pas fait avant) j'essayerais de poster quelque chose. [Edité le 4/10/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 4 octobre 2007 Posté(e) le 4 octobre 2007 Re, Voilà un exemple de ce qu'on peut faire : (defun c:dist-bloc-pline (/ acdoc bl pl tag str ins name file) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (= "" (setq bl (getstring T "\nEntrez le nom du bloc (ou Entrée pour le sélectionner à l'écran): " ) ) ) (while (not (and (setq bl (car (entsel "\nSélectionnez une référence du bloc: ")) ) (= "INSERT" (cdr (assoc 0 (entget bl)))) (setq bl (cdr (assoc 2 (entget bl)))) ) ) ) ) (while (not (setq tag (strcase (getstring T "\nEntrez l'étiquette de l'attribut identifiant: " ) ) ) ) ) (while (not (and (setq pl (car (entsel "\nSélectionnez la polyligne: "))) (= "LWPOLYLINE" (cdr (assoc 0 (entget pl)))) ) ) ) (setq str "Bloc\tDistance\n") (if (ssget "_X" (list '(0 . "INSERT") (cons 2 bl))) (progn (vlax-for b (vla-get-ActiveSelectionSet acdoc) (if (= (vla-get-HasAttributes b) :vlax-true) (foreach a (vlax-invoke b 'getAttributes) (if (= (strcase tag) (vla-get-TagString a)) (setq name (vla-get-TextString a)) ) ) ) (setq ins (vlax-get b 'InsertionPoint) str (strcat str name "\t" (rtos (distance ins (vlax-curve-getClosestPointTo pl ins)) ) "\n" ) ) ) (textscr) (terpri) (princ str) (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] : " ) "Oui" ) (and (setq file (getfiled "Créez ou sélectionnez un fichier" "" "xls" 1 ) ) (setq file (open file "w")) (princ str file) (close file) ) ) (graphscr) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
usegomme Posté(e) le 4 octobre 2007 Posté(e) le 4 octobre 2007 Je suis impressionné par ta rapidité , (gile) et aussi par les "vla..machin" auxquels je n'entend rien, et qui permettent de faire des trucs " pas possible". Dommage que je ne sois pas au goûtdu jour.
MarcoTic Posté(e) le 5 octobre 2007 Auteur Posté(e) le 5 octobre 2007 Merci (Gile) , impressionnant, et rassurant, il semble que cela ne soit pas si long à faire après tout.Maintant, c'est bien joli, mais étant béotien en la matière que puis je faire avec ces lignes cabalistiques, les copier tel quel dans un fichier texte, ou bien ? :o Excuse par avance mes retards à l'allumage, mais il se trouve que j'ai été livré d'un charette :(
(gile) Posté(e) le 5 octobre 2007 Posté(e) le 5 octobre 2007 Je suis impressionné par ta rapidité il semble que cela ne soit pas si long à faire après tout Je commence à disposer d'un petite collections d'expressions dans diverse routines qu'il me suffit parfois de "réassembler" pour en construire une nouvelle. Maintant, c'est bien joli, mais étant béotien en la matière que puis je faire avec ces lignes cabalistiques, les copier tel quel dans un fichier texte, ou bien ? Tu trouveras une explication détaillée ici. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
MarcoTic Posté(e) le 5 octobre 2007 Auteur Posté(e) le 5 octobre 2007 Re-bonjour.J'ai testé to lisp (Gile), il fonctionne très bien et de plus c'est instinctif et souple.Mais, comme je le craignais dans mon premier post, je n'est pas été clair.Il ne s'agit pas de récupérer la distance qui sépare le bloc de la polyligne (encore que l'info est intéressante, à conserver) mais de mesurer sur le polyligne la distance qui va du début de celle-ci jusqu'à l'intersection avec la projection perpandiculaire du bloc.En fait, imagine un éolienne se trouvant sur le bord d'une Autoroute. Ce que l'on cherche ici c'est de savoir à combien de Kilomètre se trouve cette éolienne depuis le début de la route. :D C'est toujours plus facil avec un exemple.Bon Week, et allez les Petits !!
(gile) Posté(e) le 5 octobre 2007 Posté(e) le 5 octobre 2007 Qu'à cela ne tienne ! J'ai laissé la distance du blo à la poly dan la troisième colonne.Si tu veux changer le titre des colonnes dans le LISP, c'est la ligne : (setq str "Bloc\tDistance1\tDistance2\n") Tu peux remplacer Bloc, Distance1 et Distance2 mais en laissant bien les tabulations : \t et saut de ligne : \n (defun c:dist-bloc-pline (/ acdoc bl pl tag str ins perp name file) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (= "" (setq bl (getstring T "\nEntrez le nom du bloc (ou Entrée pour le sélectionner à l'écran): " ) ) ) (while (not (and (setq bl (car (entsel "\nSélectionnez une référence du bloc: ")) ) (= "INSERT" (cdr (assoc 0 (entget bl)))) (setq bl (cdr (assoc 2 (entget bl)))) ) ) ) ) (while (not (setq tag (strcase (getstring T "\nEntrez l'étiquette de l'attribut identifiant: " ) ) ) ) ) (while (not (and (setq pl (car (entsel "\nSélectionnez la polyligne: "))) (= "LWPOLYLINE" (cdr (assoc 0 (entget pl)))) ) ) ) (setq str "Bloc\tDistance1\tDistance2\n") ; à modifier à ta guise (if (ssget "_X" (list '(0 . "INSERT") (cons 2 bl))) (progn (vlax-for b (vla-get-ActiveSelectionSet acdoc) (if (= (vla-get-HasAttributes b) :vlax-true) (foreach a (vlax-invoke b 'getAttributes) (if (= (strcase tag) (vla-get-TagString a)) (setq name (vla-get-TextString a)) ) ) ) (setq ins (vlax-get b 'InsertionPoint) perp (vlax-curve-getClosestPointTo pl ins) str (strcat str name "\t" (rtos (vlax-curve-getDistAtPoint pl perp)) "\t" (rtos (distance ins perp)) "\n" ) ) ) (textscr) (terpri) (princ str) (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] : " ) "Oui" ) (and (setq file (getfiled "Créez ou sélectionnez un fichier" "" "xls" 1 ) ) (setq file (open file "w")) (princ str file) (close file) ) ) (graphscr) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
MarcoTic Posté(e) le 8 octobre 2007 Auteur Posté(e) le 8 octobre 2007 Merci (Gile)sa fonctionne à merveille !Bonne Semaine
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