Alfila Posté(e) le 18 juillet 2019 Posté(e) le 18 juillet 2019 Bonjour, Je viens de me mettre à AutoLisp (une bonne dizaine d'heures à essayer de débroussailler la base) et je voudrais écrire un lisp qui contient une insertion de block. Pour bien comprendre chaque manip, je les teste individuellement avant d'essayer de créer des choses plus complexes. Et là je bloque sur un truc qui paraît pourtant tout simple : quand je lance ma fonction, elle me demande de préciser le point d'insertion du block alors que je l'ai pourtant définie (enfin je crois) à 0,0,0 (suivi de l'échelle et de la rotation). Je copie mon bout de code : (defun c:insbl () (command "_insert" "nom_block" "" '(0 0 0) () 1 () 0 () ) (princ) ) Après avoir cherché en vain la réponse, je me suis inscrite ici :)
Matt666 Posté(e) le 18 juillet 2019 Posté(e) le 18 juillet 2019 Salut, Dans ta commande _insert tu mets un "" après le nom du bloc, alors qu'il te demande le point d'insertion. Enlève-le donc. Ensuite tu mets des (), veux-tu dire "" ?La commande pour juste l'insérer au point 0 : (command "_insert" "nom_block" '(0.0 0.0 0.0) "" "" "") "Chacun compte pour un, et nul ne compte pour plus d'un."
Alfila Posté(e) le 18 juillet 2019 Auteur Posté(e) le 18 juillet 2019 Oui, c'est ça. Merci infiniment. J'avais mis un "" après le nom du bloc parce que je pensais que je devais valider ce nom (quand on le fait manuellement, on tape "enter"). (Et effectivement après je me suis trompée entre () et "".)
DenisHen Posté(e) le 18 juillet 2019 Posté(e) le 18 juillet 2019 Salut. Tu inserts toujours ton bloc à 0,0,0 ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Alfila Posté(e) le 19 juillet 2019 Auteur Posté(e) le 19 juillet 2019 @DenisHen, C'était la première étape, pour comprendre le fonctionnement. Mon programme a évolué (maintenant j'insère le bloc "appel" à l'intérieur d'un bloc sélectionné et "appel" doit être explosé). Et je voudrais effectivement insérer "appel" à un point sélectionné par l'utilisateur, mais quand j'utilise la commande (getpoint), ça interrompt le programme. (defun c:xopbl ( / blk sel) (setq sel (ssget)) (setq blk (cdr (assoc 2 (entget (ssname sel 0) ) ) ) ) (command "_bedit" blk (command "_insert" "appel" (getpoint "\nInsertion point") "" "" (command "_explode" (entlast)) (command "_bclose" "") ) ) (princ) ) J'ai essayé aussi : (command "_insert" "appel" "_S" 1 "_R" 0 "_none" (getpoint "\nInsertion point") ) mais ça ne change rien.Par contre ça marche très bien avec un point défini (l'origine par exemple). Donc ça vient bien de (getpoint).
Matt666 Posté(e) le 19 juillet 2019 Posté(e) le 19 juillet 2019 Pour laisser faire l'utilisateur dans une commande, il faut entrer PAUSE : (command "_insert" "appel" PAUSE "" "" "") "Chacun compte pour un, et nul ne compte pour plus d'un."
DenisHen Posté(e) le 19 juillet 2019 Posté(e) le 19 juillet 2019 Salut. Grillé par Matt666 ! ! ! Pour respecter l'accroche objet, il y a :(command "_insert" "appel" "_none" PAUSE "" "" "") Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Alfila Posté(e) le 19 juillet 2019 Auteur Posté(e) le 19 juillet 2019 Non, j'avais essayé ça aussi, mais ça ne marche pas. Le programme s'interrompt avant que le point soit donné.Dans la ligne de commande on a : Specify insertion point or [basepoint/Scale/Rotate]: *Cancel*
didier Posté(e) le 19 juillet 2019 Posté(e) le 19 juillet 2019 Coucou Les conseils fusent on dirait...Je vais m'en permettre quelques-uns pour Alfila:À moins d'être un expert il faut éviter d'intercaler une commande dans une commande,Est-ce que tu le fais sur AutoCAD quand tu dessines ? non alors en prog c'est pareil.Pour le choix du point d'insertion c'est de la même eau,Il est préférable de faire une ligne de code dédiée, de mettre le point dans une variable et de donner cette variable en argument de la commande "_insert"Par exemple : (setq pins (getpoint "\nPoint d'insertion\n")) (command "_insert" nombloc pins "" "" "") Tu remarques le nombloc n'est pas une string mais une variable car en tête du programme je définis des constantes, entre autres nombloc(setq nombloc "appel") Et de cette façon si un jour tu dois insérer le bloc "toto", tu redéfinis UNE ligne et tout le code se met à jour Pour décomposer le bloc inséré, rien de plus facile, au lieu de le décomposer à l'insertion tu peux lancer la décomposition juste après l'avoir inséré(command "_explode" (entlast))Et le tour est joué Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Alfila Posté(e) le 19 juillet 2019 Auteur Posté(e) le 19 juillet 2019 Oui, ça marche parfaitement à présent.Merci à tout le monde pour les conseils !
lecrabe Posté(e) le 19 juillet 2019 Posté(e) le 19 juillet 2019 Hello YES il faut toujours écouter les Conseils de Didier !Sinon le Vieux Hibou Grincheux Maléfique Funeste va te porter malheur !Bye, lecrabe "triste" en Vacs Autodesk Expert Elite Team
COME Posté(e) le 19 juillet 2019 Posté(e) le 19 juillet 2019 À moins d'être un expert il faut éviter d'intercaler une commande dans une commande,Est-ce que tu le fais sur AutoCAD quand tu dessines ? Si, Si ! Même que cela fonctionne vraiment très bien avec les commandes 'invisibles' !!! Et quand t'as un PC et une carte graphique qui expire à chaque manip complexe, t'es content qu'Autocad te le permette. Bon Didier je te moque gentiment, car tu as raison il faut y aller doucement au début. A la prochaine COME La vie sans musique est tout simplement une erreur, une fatigue, un exil. »Friedrich Nietzsche
didier Posté(e) le 19 juillet 2019 Posté(e) le 19 juillet 2019 Coucou J'ai bien dit : à moins d'être un expertIl y a des choses qu'on peut se permettre mais que je me permets de déconseiller aux débutants pour ne pas les décourager dès les premiers pas Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
COME Posté(e) le 19 juillet 2019 Posté(e) le 19 juillet 2019 Coucou J'ai bien dit : à moins d'être un expertIl y a des choses qu'on peut se permettre mais que je me permets de déconseiller aux débutants pour ne pas les décourager dès les premiers pas Amicalement J'avais bien lu, mais comme c'est très très calme au bureau cet après-midi j'avais juste envie de te taquiner un peu ! Bon après-midi. COME La vie sans musique est tout simplement une erreur, une fatigue, un exil. »Friedrich Nietzsche
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