Tramber Posté(e) le 23 septembre 2004 Posté(e) le 23 septembre 2004 Je viens de découvrir l'Amérique ! Je lispe seulement avec des command Mais depuis qqes temps, j'ai (enfin) (re-)découvert ENTMAKE et notamment la facilité de création d'un bloc : (setq pt (getpoint)) (SETQ tube (LIST (CONS 0 "CIRCLE") (CONS 10 pt) (CONS 40 100) (CONS 8 "tube")) externe (LIST (CONS 0 "CIRCLE") (CONS 10 pt) (CONS 40 500) (CONS 8 "ext")) mili (LIST (CONS 0 "CIRCLE") (CONS 10 pt) (CONS 40 200) (CONS 8 "mili"))) (ENTMAKE (list (cons 0 "block") (CONS 2 "dessus") (cons 10 pt) (cons 70 64))) (ENTMAKE tube) (ENTMAKE externe) (ENTMAKE mili) (ENTMAKE (list (cons 0 "endblk"))) (ENTMAKE (list (CONS 0 "INSERT") (cons 2 "dessus") (cons 10 pt))) Seulement je n'arrive pas à aller + loin.La question est comment ajouter une entité que j'aurais créé avec un command au milieu de tout ca, c'est à dire au même niveau que : (ENTMAKE tube) (ENTMAKE externe) (ENTMAKE mili) ? La réponse est peut-être bête (et pas vous) mais je bloque. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
didier Posté(e) le 23 septembre 2004 Posté(e) le 23 septembre 2004 bonsoir Tramber,ben y'avait longtemps qu'on s'était pas compris, qu'est ce que tu veux faire,rajouter une entité dans la définition du bloc "dessus" ?j'ai pas compris, pardon ! explicite, Éternel débutant... Mon site perso : Programmer dans AutoCAD
Serge Posté(e) le 24 septembre 2004 Posté(e) le 24 septembre 2004 Tramber, Il faut que les calques existent.. Exemple:(defun faites_du_lisp ( / pt tube ext mili blkend) (command "_-layer" "_new" "tube,mili,ext" "") (setq pt (getpoint "\nPoint: ")) (setq tube (list (cons 0 "circle") (cons 10 pt) (cons 40 100) (cons 8 "tube") )) (setq externe (list (cons 0 "circle") (cons 10 pt) (cons 40 500) (cons 8 "ext") )) (setq mili (list (cons 0 "circle") (cons 10 pt) (cons 40 200) (cons 8 "mili") )) (entmake (list (cons 0 "block") (cons 2 "dessus") (cons 10 pt) (cons 70 64) )) (entmake tube) (entmake externe) (entmake mili) (entmake '((0 . "endblk"))) (entmake (list (cons 0 "insert") (cons 2 "dessus") (cons 10 pt)))) Serge
bonuscad Posté(e) le 24 septembre 2004 Posté(e) le 24 septembre 2004 Serge, Une particularité de ENTMAKE et qu'il peut créer le calque même si celui ci n'existe pas.Ex. cette instruction va créer une ligne sur le plan TOTO même si celui ci est inexistant. (entmake '((0 . "LINE") (5 . "2B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "TOTO") (100 . "AcDbLine") (10 118.753 129.067 0.0) (11 264.238 186.718 0.0) (210 0.0 0.0 1.0))) Ce qu'il faut c'est que le nom du calque soit valide. Voilà pour la petite rectification. ;) Bruno Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bonuscad Posté(e) le 24 septembre 2004 Posté(e) le 24 septembre 2004 Tramber, Il n'est pas possible de mixer les 2 mode de création (entmake) et (command).Entmake crée un fichier de définition tamporaire qui sera validé lors de l'instruction (entmake '((0 . "ENDBLK"))). Donc durant cette période, seul entmake est abilité pour ajouter des définitions. La seule astuce possible est de récupérer l'entité crée par un (entget) de la supprimer par un (entdel) et de la recréer par (entmake) à l'aide de la liste retourné par enget, ceci au bon endroit bien sur. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Tramber Posté(e) le 24 septembre 2004 Auteur Posté(e) le 24 septembre 2004 Ok, je vais faire l'essai. On en revient à une question qui me chatouille. C'est très dur de connaitre les codes de groupes strictement nécessaires à un ENTMAKE. Pour ligne, cercles, et qqes autres, ca va.Mais là je me demande si je ne vais pas devoir faire le ménage de "groupes parasites" genre le groupe 100. Si vous avez plus d'infos. Merci en tous cas. Je confirme que tout se passe bien qd on spécifie un nom de calque inexistant, ce que je trouve tout à fait intéressant. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Serge Posté(e) le 24 septembre 2004 Posté(e) le 24 septembre 2004 Tramber, Question de te faire la main, dessine un objet puis tape (entget (entlast)). Tu verras rapidement les codes de l'objet. Parmi les codes dxf inutiles, et c'est l'expérience qui te guideras: -1, 5, 100, 300 à 500. Inclure ces codes n'est pas fatal mais peu nuire à la lecture ou à la vitesse à laquelle tu chemine. À titre d'exemple, tu peux cloner le dernier objet tout simplement comme suit:(entmake (entget (entlast))) Bonuscad, En fait, j'avais testé le code avant de créer les calques et ça bloquait. Je revérifierai plus tard.Par rapport au mixage de méthodes, j'ajouterai qu'il ne faut pas utiliser simultannément les (command ...) (entmake ...) et (vla-add ...) Et en passant, les Bonus sont devenus des Express ;-) Serge
Tramber Posté(e) le 24 septembre 2004 Auteur Posté(e) le 24 septembre 2004 Merci les gars, on va travailler tout ça. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 24 septembre 2004 Auteur Posté(e) le 24 septembre 2004 Tout marche super bien. (setq fait (entget(entlast))) (entdel (cdr(car fait))) (setq pt (getpoint)) (SETQ tube (LIST (CONS 0 "CIRCLE") (CONS 10 pt) (CONS 40 100) (CONS 8 "tube")) externe (LIST (CONS 0 "CIRCLE") (CONS 10 pt) (CONS 40 500) (CONS 8 "ext")) mili (LIST (CONS 0 "CIRCLE") (CONS 10 pt) (CONS 40 200) (CONS 8 "mili"))) (ENTMAKE (list (cons 0 "block") (CONS 2 "dessus") (cons 10 pt) (cons 70 64))) (ENTMAKE tube) (ENTMAKE externe) (ENTMAKE mili) (ENTMAKE fait);;; that's the trick (ENTMAKE (list (cons 0 "endblk"))) (ENTMAKE (list (CONS 0 "INSERT") (cons 2 "dessus") (cons 10 pt))) Sachant que entmake doit renvoyer du DXF.Peut-on imaginer glisser carrément un jeu de selection ? [Edité le 24/9/2004 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Serge Posté(e) le 24 septembre 2004 Posté(e) le 24 septembre 2004 Tramber, Pourquoi un jeu de sélection? Pour constituer le bloc? Si c'est cela, c'est non. D'ailleurs Bruno et moi t'avons signaler le danger de mélanger des techniques de création telles que entmake, command et vla Par contre, il y a un work-around:(setq ss (ssget)) ; Sélection(setq i 0)(setq n (if ss (sslength ss) 0)) ; Nombre d'éléments(while (< i n) (setq element (ssname ss i)) ; ssname extrait l'élément de la sélection, l'index initial = 0 (setq elementGet (entget element)) (entmake elementGet) (setq i (1+ i))) Serge
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