Invité ingoenius Posté(e) le 19 septembre 2008 Posté(e) le 19 septembre 2008 Salut, je cherche a faire fonctionner un lisp, mais j'ai des problemes, le but est d'insere un nombre de blocs sur un parcours, ligne poliligne etc si le parcour est une ligne ca fonctionne, car avec la commande _divide plus l'insertion du bloc en debut et en fin de ligne tout est ok, par contre si le parcours est un poliligne, j'arrive pas a extraire les coord de debut et de fin de poliligne pour inserer le fameus bloc ici bon affreux debut de code ;-( (defun C:PB ();path Block (setq EL (car (entsel "\nSelect Path")));selectionne le parcour (setq DTIPO (entget EL)) (setq IN (cdr (assoc 10 DTIPO)));debut de ligne (setq OUT (cdr (assoc 11 DTIPO)));fin deligne (setq ENT (cdr (assoc -1 DTIPO)));nom entité dans le dessin (setq BLOCCO (car (entsel "\nSelect 1 block ")));block a cliquer dans le dessin (setq DatiB (entget BLOCCO)) (setq NBLOC (cdr (assoc 2 DatiB))) (setq N (getreal "\nInsert Number of blocks\n")) (setq NDiv (fix (- N 1))) (command "_divide" ENT "B" NBLOC "_Y" NDiv "") (command "_-insert" NBLOC IN "" "" "") ) [Edité le 19/9/2008 par ingoenius]
Tramber Posté(e) le 19 septembre 2008 Posté(e) le 19 septembre 2008 Tiens : pour une polyligne, (mapcar 'cdr(vl-remove-if-not '(lambda(x)(=(car x)10))(entget EL))) Donne tous les points très facilement. Mais la question est : mon programme sait-il qu'il à affaire à une polyligne ? (setq N (getreal "\nInsert Number of blocks\n")) N'oublie pas que tu veux un ENTIER pas un REEL, donc GETINT ! Pour ton exercice, tu peux utiliser les fonction CURVE, mais je trouve ca super de débuter avec du lisp classique. [Edité le 19/9/2008 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Invité ingoenius Posté(e) le 19 septembre 2008 Posté(e) le 19 septembre 2008 merci, pour la ligne de code, Mais la question est : mon programme sait-il qu'il à affaire à une polyligne ? justement aprés je doir ecrire toutes les COND si c'est une polyligne, une ligne etc, j'ai testé ton code sur la polyligne 2D c'est ok, parcontre sur un polyligne 3d ca a par l'aire de fonctionner , je me trompe? de plus si je trouve une poliligne fermé, 2D ou 3D et je decide d'insere 15 blocs equidistant, il faudrait que le script le detecte et que ne me souperpose pas le bloc du debut e de fin (mais cela viendrà aprés) N'oublie pas que tu veux un ENTIER pas un REEL, donc GETINT ! tu as raison j'avais oublier est en fait j'avais mis une ligne de trop avec la commande FIX Pour ton exercice, tu peux utiliser les fonction CURVE, mais je trouve ca super de débuter avec du lisp classique. J'utilisp l'aiutolisp classique, car le Vlisp, je j'amais reussir a comprendre ;-( bon WE je cherche 'd'avancer la semaine prochaine ;-)
Tramber Posté(e) le 19 septembre 2008 Posté(e) le 19 septembre 2008 *** Il y a une erreur :(command "_divide" ENT "B" NBLOC "_Y" NDiv ) suffit, pas besoin du "" *** Je te propose de gérer les ACCROBJ :(setq *osmode*(getvar "OSMODE")) (setvar "OSMODE" 0) au début du code (setvar "OSMODE" *osmode*) à la fin Ainsi, le programme fonctionnera sans ACCROBJ et ne sera pas perturbé ! *** Je te propose de faire un COND à la fin *** Je te propose un INITGET sur GETINT *** Et je te propose d'enlver des \n inutiles : (defun C:PB ();path Block (setq *osmode*(getvar "OSMODE")) (setvar "OSMODE" 0) (setq EL (car (entsel "\nSelect Path")));selectionne le parcour (setq DTIPO (entget EL)) (setq IN (cdr (assoc 10 DTIPO)));debut de ligne (setq OUT (cdr (assoc 11 DTIPO)));fin deligne (setq ENT (cdr (assoc -1 DTIPO)));nom entité dans le dessin (setq BLOCCO (car (entsel "\nSelect 1 block :")));block a cliquer dans le dessin (setq DatiB (entget BLOCCO)) (setq NBLOC (cdr (assoc 2 DatiB))) (initget 7) (setq N (getreal "\nInsert Number of blocks ? :")) (setq NDiv (fix (- N 1))) (command "_divide" ENT "B" NBLOC "_Y" NDiv ) (cond((=(cdr(assoc 0 DTIPO))"LINE") (command "_-insert" NBLOC IN "" "" "") (command "_-insert" NBLOC OUT "" "" "")) ((=(cdr(assoc 0 DTIPO))"LWPOLYLINE") (command "_-insert" NBLOC IN "" "" "") (command "_-insert" NBLOC (last(mapcar 'cdr(vl-remove-if-not '(lambda(x)(=(car x)10))(entget EL)))) "" "" "")) ) (setvar "OSMODE" *osmode*) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 19 septembre 2008 Posté(e) le 19 septembre 2008 Tiens, tu viens de répondre ! Je n'avais pas vu le FIX.Sais-tu que la fonction 1- existe ?(setq NDiv(1-(getint "\nInsert Number of blocks ? :")))est correct. Pour t'entrainer, tu peux :rajouter toi-même le COND des poly3Detchercher à savoir si une polyligne est fermée (il y a un code DXF). Une autre chose à gérer est l'orientation des blocs. Ca faisait longtemps que je n'avais pas quelques minutes d'affilé pour aider un débutant, ca me rappelle mes propres débuts (snif). [Edité le 19/9/2008 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Invité ingoenius Posté(e) le 19 septembre 2008 Posté(e) le 19 septembre 2008 ici la premiere version sur la polyligne , par contre elle prend pas en compte la rotation du premier et dernier bloc , mais dejà ca aide beaucoup (defun C:PB ();path Block (vl-load-com) (setq EL (car (entsel "\nSelect Path"))) (setq DTIPO (entget EL)) (setq LL(mapcar 'cdr(vl-remove-if-not '(lambda(x)(=(car x)10))(entget EL)))) (setq Nlist (length LL ));longueur liste (setq END (nth (- Nlist 1) LL) ) (setq IN (cdr (assoc 10 DTIPO))) (setq OUT (cdr (assoc 11 DTIPO))) (setq ENT (cdr (assoc -1 DTIPO))) ;nom entité dal le dessin (setq BLOCCO (car (entsel "\nSelect 1 block "))) (setq DatiB (entget BLOCCO)) (setq NBLOC (cdr (assoc 2 DatiB))) (setq N (getint "\nInsert Number of blocks\n")) (command "_divide" ENT "B" NBLOC "_Y" N "") (command "_-insert" NBLOC IN "" "" "") (command "_-insert" NBLOC END "" "" "") ) [Edité le 19/9/2008 par ingoenius] [Edité le 19/9/2008 par ingoenius]
lili2006 Posté(e) le 19 septembre 2008 Posté(e) le 19 septembre 2008 Bonsoir à toutes et tous, Super cette fonction, mais toujours pas possible d'insérer un bloc avec attribut(s), c'est bien ça ? Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lecrabe Posté(e) le 20 septembre 2008 Posté(e) le 20 septembre 2008 Hello Lili Mais si avec ATTREQ = 0, AutoCAD ne demande pas les attributs lors de l'insertion ! Tu rempliras les attributs plus tard ! C'est d'ailleurs un moyen classique de faire fonctionner des programmes, macros, scripts qui traitent les blocs mais pas les attributs ! Ne pas oublier de remettre après ATTREQ = 1et aussi ATTDIA = 1 Le Decapode "en mode ATTxxx" Autodesk Expert Elite Team
lili2006 Posté(e) le 20 septembre 2008 Posté(e) le 20 septembre 2008 Bonjour à toutes et tous, Merci pour ta réponse lecrabe , J'utilise déjà les variables ATTREQ = 0 & ATTDIA = 0 puisque j'incrémente ensuite mes attributs et pourtant voici le résultat donné par PB ici, Ce qui donne => http://images4.hiboox.com/images/3808/fbc886e9ef2623904efaa6c05014524c.jpg Deux constats => 1 bloc inséré depuis une palette avec facteur d'echelle (au centre sur l'image ci-dessus) ne se reproduit pas pareil en bout de polyligne (il garde cependant ici l'attribut) et en cours de polyligne (plus petit et sans attribut !) Les variables ATTREQ & ATTDIA semblent n'avoir aucune influence,... Mais peut-être que je m'y prend mal,... ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
bonuscad Posté(e) le 20 septembre 2008 Posté(e) le 20 septembre 2008 Un lien sur ce sujet Pour donner des idées... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lili2006 Posté(e) le 20 septembre 2008 Posté(e) le 20 septembre 2008 Re, En effet, lien intéressant,.. Comment fais-ton avec la routine "blk-att_measure " pour choisir son bloc avec attribut(s) ? Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Invité ingoenius Posté(e) le 22 septembre 2008 Posté(e) le 22 septembre 2008 merci tramber pour tous tes conseils, j'esayerai de corriger, en tout cas comme dejà dit plus haut j'aimerais vraiment trouver un livre (en francais) sur le V-lisp , mais appareament pour l'instant personne l'a fait purquoi pas vous??
Tramber Posté(e) le 24 septembre 2008 Posté(e) le 24 septembre 2008 Un jour nous ferons une réunion, sorte d'Autodesk University à la Française.... Un jour.... Et nous publierons les conférences ...!? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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