sechanbask Posté(e) le 8 novembre 2011 Posté(e) le 8 novembre 2011 Bonjour, Je cherche à lancer une commande puis une fonction avec paramètre. Je n'ai droit qu'à un nil : ;dessiner un tube (defun c:tubpvc () (setq diam (getint "Diamiètre :")) (setq P1 (getpoint "premier point :")) (setq P2 (getpoint "second point :")) (command "_line" P1 P2 "") ;selectionner l'ancien objet ;et le décaler de la moitié du diamètre ;(setq der (entget (entlast))) ;(setq coord (cadr (assoc '10 der))) ;(command "DECALER" (/ diam 2) der @-1 "") ;(while (setq der (entnext der)) ;(ssadd der js) ;) ;(command "DECALER" diam/2 der "-1" "") (initget 1 "Embranchement Fin") (setq choix (getkword "Embranchement, Fin")) (if (= choix "Embranchement") (Embranchement)) (if (= choix "Fin") (command "Fin")) ) (defun Embranchement () (if (= diam "100") (command "_insert" "culotte_bt144_back.dwg" P2 1 1 pause) ) (if (= diam "110") (command "_insert" "culotte_bv144_back.dwg" P2 1 1 pause) ) (if (= diam "125") (command "_insert" "culotte_bx144_back.dwg" P2 1 1 pause) ) ) pour l'instant je n'arrive pas décaler l'axe des 2 cotés pour faire du bifilaire, mais déjà si j'arrive à insérer les blocs... ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
Tramber Posté(e) le 8 novembre 2011 Posté(e) le 8 novembre 2011 Pas mal de choses à optimiser tout de suite mais pourquoi la commande FIN. sur 2011, elle n'existe même plus !? Je comprends bien ton code mais pas du tout ta question... En résumé on peut faire un IF tout simple pour lancer la commande.(j'ai enlevé le bit 1 du INITGET pour sortir rapidement.)Mais pour aller plus loin on peut utiliser COND pour décider d'options multiples et non plus d'un simple OUI ou NON (IF). J'ai imaginé ici 4 possibilités. 3 diamètres qui donnent une insertion d'un bloc particulier et un dernier pour les autres diamètres.C'est juste pour expliquer COND. ;dessiner un tube (defun c:tubpvc () (setq diam (getint "Diamiètre :")) (setq P1 (getpoint "premier point :")) (setq P2 (getpoint "second point :")) (command "_line" P1 P2 "") (initget "Embranchement Sortir") (setq choix (getkword "\nEmbranchement/Sortir <Sortir> :")) (if(= choix "Embranchement")(Embranchement)) ) (defun Embranchement () (command "_insert" (cond((= diam "100")"culotte_bt144_back.dwg") ((= diam "110")"culotte_bt156_AAA.dwg") ((= diam "125")"culotte_bt178_BBBB.dwg") (T"culotte_onsaitjamais.dwg")) P2 1 1 pause) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
sechanbask Posté(e) le 8 novembre 2011 Auteur Posté(e) le 8 novembre 2011 La commande FIN qui lancera une fonction d'insertion d'un autre bloc. Je ne l'ai pas mise ici. je viens de regarder ton code et de le tester : lorsque que je rentre le diamètre à 100, il ne cherche pas à insérer la bonne culotte pourquoi ? TUBPVC Diamiètre :100 premier point :second point :_line Spécifiez le premier point: Spécifiez le point suivant ou [annUler]: Spécifiez le point suivant ou [annUler]: Commande: Embranchement/Sortir <Sortir> :e _insert Entrez le nom du bloc ou [?]: culotte_onsaitjamais.dwg "culotte_onsaitjamais.dwg": Impossible de trouver le fichier dans le chemin de recherche: ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
sechanbask Posté(e) le 8 novembre 2011 Auteur Posté(e) le 8 novembre 2011 je viens de trouver il faut mettre un itoa pour transformer la variable dim en chaine ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
sechanbask Posté(e) le 8 novembre 2011 Auteur Posté(e) le 8 novembre 2011 bon maintenant que j'ai un peu compris le fonctionnement de tout ça voici mon code : ;dessiner un tube (defun c:tubpvc () ;;; ICI il manquerait l'enregistrement de l'état de OSMODE (setq diam_pvc (getint "Diamiètre :")) (setq P1 (getpoint "premier point :")) (setq P2 (getpoint "second point :")) (command "_line" P1 P2 "") (initget "Embranchement Coude Sortir") (setq choix (getkword "\nEmbranchement/Sortir/Coude <Sortir> :")) (if(= choix "Embranchement")(Embranchement_f)) (if(= choix "Coude")(Coude_f)) ;;;Et ici sa restitution ) (defun Embranchement_f () ;transformer la variable diam_pvc en chaine de carctère pour la comparer par la suite (setq str_diam_pvc (itoa diam_pvc) ) (initget "Gauche Droite") (setq choix (getkword "\nGauche/Droite <Gauche> :")) (if(= choix "Gauche") (command "_insert" (cond((= str_diam_pvc "100")"culotte_bt144_back.dwg") ((= str_diam_pvc "110")"culotte_bv144_back.dwg") ((= str_diam_pvc "125")"culotte_bx144_back.dwg") (T"culotte_onsaitjamais.dwg")) P2 -1 1 P1) ) (if(= choix "Droite") (command "_insert" (cond((= str_diam_pvc "100")"culotte_bt144_back.dwg") ((= str_diam_pvc "110")"culotte_bv144_back.dwg") ((= str_diam_pvc "125")"culotte_bx144_back.dwg") (T"culotte_onsaitjamais.dwg")) P2 -1 -1 P1) ) ) (defun Coude_f () ;transformer la variable diam_pvc en chaine de carctère pour la comparer par la suite (setq str_diam_pvc (itoa diam_pvc) ) (initget "Gauche Droite") (setq choix (getkword "\nGauche/Droite <Gauche> :")) (if(= choix "Gauche") (command "_insert" (cond((= str_diam_pvc "100")"coude_ct44_back") ((= str_diam_pvc "110")"coude_cv44_back") ((= str_diam_pvc "125")"coude_cx44_back") (T"coude_onsaitjamais.dwg")) P2 -1 1 P1) ) (if(= choix "Droite") (command "_insert" (cond((= str_diam_pvc "100")"coude_ct44_back") ((= str_diam_pvc "110")"coude_cv44_back") ((= str_diam_pvc "125")"coude_cx44_back") (T"coude_onsaitjamais.dwg")) P2 -1 -1 P1) ) ) Est-ce que l'on pourrait m'expliquer comment faire pour décaler la ligne de la moitié du diamètre ? j'avais tenter un truc du genre : ;(setq der (entget (entlast))) ;(setq coord (cadr (assoc '10 der))) ;(command "DECALER" (/ diam 2) der @-1 "")mais je n'arrivais pas à grand chose... ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
Tramber Posté(e) le 8 novembre 2011 Posté(e) le 8 novembre 2011 Je suis content que tu avances et comprennes ! command "DECALER" ! ? On y arrive, je pense que ton @-1 est vraiment bizarre ! "@-1,0" ?Bon. A toi de dépatouiller ton COMMAND ! Pour l'autre côté, il suffit de faire (/ DIAM -2.0), partir en négatif avec le même point de décalage. Il y a une autre méthode pour "DECALER", c'est du Vlisp. Promis je te donne la formule si tu te débrouilles d'abord en command :(rires forts): Mais une chose : fais toujours très attention.(setq diam (getint "Diamiètre :")) Un INTEGER, c'est pas terrible. Mieux vaut un REAL.D'autant que (/ 51 2) renvoie 25 ! (/ 51 2.0) renvoie 25.5Donc l'autre réflexe serait aussi de plutôt écrire (/ DIAM 2.0) ! Et oui ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 8 novembre 2011 Posté(e) le 8 novembre 2011 La commande FIN qui lancera une fonction d'insertion d'un autre bloc. Je ne l'ai pas mise ici. Ah oui ? Ca nous fait "Embranchement/Fin/Sortir" donc là, tu pourras utiliser COND.Genre : (cond((= choix "Embranchement")(Embranchement)) ((= choix "Fin")(routine_fin)) (T ligneinutilepuisquechoix=nilnelancerien) ) équivalent à (cond((= choix "Embranchement")(Embranchement)) ((= choix "Fin")(routine_fin)) ) Qui est équivalente à IF avec valeur_si_vrai et valeur_si_faux. Mais avec COND, tu pourras mettre N options, autant que tu veux. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
sechanbask Posté(e) le 9 novembre 2011 Auteur Posté(e) le 9 novembre 2011 Et bien, après plusieurs test, je bloque toujours sur DECALER : ;dessiner un tube (defun c:tubpvc () ;;; ICI il manquerait l'enregistrement de l'état de OSMODE (setq diam_pvc (getint "Diamiètre :")) (setq P1 (getpoint "premier point :")) (setq P2 (getpoint "second point :")) (command "_line" P1 P2 "") (setq der (entget (entlast))) (setq coord (cadr (assoc '10 der))) (command "_offset" (/ diam -2.0) der ) (initget "Embranchement Coude Sortir") (setq choix (getkword "\nEmbranchement/Sortir/Coude <Sortir> :")) (if(= choix "Embranchement")(Embranchement_f)) (if(= choix "Coude")(Coude_f)) ;;;Et ici sa restitution ) (defun Embranchement_f () ;transformer la variable diam_pvc en chaine de carctère pour la comparer par la suite (setq str_diam_pvc (itoa diam_pvc) ) (initget "Gauche Droite") (setq choix (getkword "\nGauche/Droite <Gauche> :")) (if(= choix "Gauche") (command "_insert" (cond((= str_diam_pvc "100")"culotte_bt144_back.dwg") ((= str_diam_pvc "110")"culotte_bv144_back.dwg") ((= str_diam_pvc "125")"culotte_bx144_back.dwg") (T"culotte_onsaitjamais.dwg")) P2 -1 1 P1) ) (if(= choix "Droite") (command "_insert" (cond((= str_diam_pvc "100")"culotte_bt144_back.dwg") ((= str_diam_pvc "110")"culotte_bv144_back.dwg") ((= str_diam_pvc "125")"culotte_bx144_back.dwg") (T"culotte_onsaitjamais.dwg")) P2 -1 -1 P1) ) ) (defun Coude_f () ;transformer la variable diam_pvc en chaine de carctère pour la comparer par la suite (setq str_diam_pvc (itoa diam_pvc) ) (initget "Gauche Droite") (setq choix (getkword "\nGauche/Droite <Gauche> :")) (if(= choix "Gauche") (command "_insert" (cond((= str_diam_pvc "100")"coude_ct44_back") ((= str_diam_pvc "110")"coude_cv44_back") ((= str_diam_pvc "125")"coude_cx44_back") (T"coude_onsaitjamais.dwg")) P2 -1 1 P1) ) (if(= choix "Droite") (command "_insert" (cond((= str_diam_pvc "100")"coude_ct44_back") ((= str_diam_pvc "110")"coude_cv44_back") ((= str_diam_pvc "125")"coude_cx44_back") (T"coude_onsaitjamais.dwg")) P2 -1 -1 P1) ) ) voilà l'erreur produite _offset Paramètres courants: Effacer source=Non Calque=Source OFFSETGAPTYPE=0 Spécifiez la distance de décalage ou [Par/Effacer/Calque] <1.0000>: ; erreur: type d'argument incorrect: numberp: nil faut-il récupérer des coordonnées pour les indiquer à la commande _offset ? ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
VDH-Bruno Posté(e) le 9 novembre 2011 Posté(e) le 9 novembre 2011 Salut, J’ai pas tout suivi la discussion, mais rapidement pour répondre à ton interrogation pour la commande _offset Tout d’abord l’erreur qui t’as été retourné est une erreur de type d’argument non valable, regardons rapidement les lignes de codes incriminé :(setq diam_pvc (getint "Diamiètre :")) (setq der (entget (entlast))) (command "_offset" (/ diam -2.0) der ) Rapidement diam n’est jamais renseigné (ou affecté d’une valeur) dans ton code, par contre diam_pvc oui !(/ diam -2.0) avec cette ligne tu risques un nombre négatif, (ce qui n’est pas une valeur de décalage acceptable).Puis (entget (entlast)) retourne la liste des codes dxf de l’entité, et pas son nom d’entité.. Le mieux c’est de reprendre calmement le fonctionnement de la fonction décalé en la faisant tourner sous AutoCAD que voyons nous, en ligne de commande la fonction _offset (décaler) réclame 3 arguments : En 1 : Spécifiez la distance de décalage ou [Par/Effacer/Calque] <>:Une valeur strictement positive et nom nulle, je suppose pour ton cas:(/ diam_pvc 2.0) En 2 : Sélectionnez l'objet à décaler ou [Quitter/annUler] <Quitter>:L’objet (entité en Lisp) à décaler, dans ton cas si j’ai bien compris le dernier objet dessiné c.a.d.(entlast) En 3 : Spécifiez un point sur le côté à décaler ou [Quitter/Multiple/annUler] Un point pour la direction, soit spécifié à l’écran ou automatiquement de ce que j’ai compris un point en fonction du dernier cliqué, peut être :"@-1,0" Voilà pour résumer essaye de faire tourner les lignes de codes suivantes elle devrait t’aider.. ((lambda (/) (command "_line" (getpoint "premier point :") (getpoint (getvar 'lastpoint) "second point :") "" ) (command "_offset" (/ (setq diam_pvc (getint "Diamiètre :")) 2.0) (entlast) "@-1,0" ) ) ) A+ Apprendre => Prendre => Rendre
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