Aller au contenu

Messages recommandés

Posté(e)

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 :)

Posté(e)

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."

Posté(e)

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 "".)

Posté(e)

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)

Posté(e)

@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).

Posté(e)

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."

Posté(e)

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)

Posté(e)

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*

Posté(e)

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

Posté(e)

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

Posté(e)

À 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' !!!laugh.gif Et quand t'as un PC et une carte graphique qui expire à chaque manip complexe, t'es content qu'Autocad te le permette.wink.gif

 

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

Posté(e)

Coucou

 

J'ai bien dit : à moins d'être un expert

Il 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 !wink.gif

 

Bon après-midi.

COME

 

La vie sans musique est tout simplement une erreur, une fatigue, un exil. »

Friedrich Nietzsche

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é