cedwit Posté(e) le 2 octobre 2006 Posté(e) le 2 octobre 2006 Bonjours a tous,J'aimerais savoir si quelqu'un pourrais m'aider en lisp.Je m'explique : je veus inserer un bloc type puis pouvoir l'exploser pour changer ses dimensions.En fait j'ai creer un fichier lisp et il ne marche pas bien.Voisi in apperçu;;armatures parametré;;============================(defun err (s) (if (/= s "Fonction annul‚") (princ (strcat "\nErreur: " s)) ) (setq p nil) (setq *error* olderr) (princ));---------------------------------(defun c:arma () (setq olderr *error* *error* err) (setq oldcmd (getvar "cmdecho")) (setvar "cmdecho" 0) (textscr) (princ "\n") (princ "\n") (princ "\n") (princ "\n") (princ "\n Diametres --> A : U") (princ "\n B : L") (princ "\n C : D") (princ "\n D : I") (princ "\n") (princ "\n") (initget "A B C D") (setq choix (getkword "\n ...... Choisissez une lettre :")) (if (= choix nil) (setq choix "A")) (cond ((= choix "A") (U)) ((= choix "B") (L)) ((= choix "C") (D)) ((= choix "D") (I)) ) (setvar "cmdecho" oldcmd);; (princ))(princ);;----------------------------------------- ;;U(defun U () (Utab));;----------------------------------------- ;;L(defun L () (Ltab));;----------------------------------------- ;;D(defun D () (Dtab));;----------------------------------------- ;;I(defun I () (Itab));;-----------------------------------------;;tableau U(defun Utab () (initget "U6 U8 U10 U12 U14 U16 U18 U20 U25 U32") (setq dim (getkword "\n ...... Diametre de la barre ? ")) (if (= dim nil) (setq dim "U6")) (cond ((= dim "U6") (command "insert" "U6")) ((= dim "U8") (command "insert" "U8" ptab "1" "" "0")) ((= dim "U10") (command "insert" "U10" ptab "1" "" "0")) ((= dim "U12") (command "insert" "U12" ptab "1" "" "0")) ((= dim "U14") (command "insert" "U14" ptab "1" "" "0")) ((= dim "U16") (command "insert" "U16" ptab "1" "" "0")) ((= dim "U18") (command "insert" "U18" ptab "1" "" "0")) ((= dim "U20") (command "insert" "U20" ptab "1" "" "0")) ((= dim "U25") (command "insert" "U25" ptab "1" "" "0")) ((= dim "U32") (command "insert" "U32" ptab "1" "" "0")) ));;-----------------------------------------;;tableau L(defun Ltab () (initget "L6 L8 L10 L12 L14 L16 L18 L20 L25 L32") (setq dim (getkword "\n ...... Diametre de la barre ? ")) (if (= dim nil) (setq dim "L6")) (cond ((= dim "L6") (command "insert" "L6" ptab "1" "" "0" "EXPLODE")) ((= dim "L8") (command "insert" "L8" ptab "1" "" "0" "EXPLODE")) ((= dim "L10") (command "insert" "L10" ptab "1" "" "0" "EXPLODE")) ((= dim "L12") (command "insert" "L12" ptab "1" "" "0" "EXPLODE")) ((= dim "L14") (command "insert" "L14" ptab "1" "" "0" "EXPLODE")) ((= dim "L16") (command "insert" "L16" ptab "1" "" "0" "EXPLODE")) ((= dim "L18") (command "insert" "L18" ptab "1" "" "0" "EXPLODE")) ((= dim "L20") (command "insert" "L20" ptab "1" "" "0" "EXPLODE")) ((= dim "L25") (command "insert" "L25" ptab "1" "" "0" "EXPLODE")) ((= dim "L32") (command "insert" "L32" ptab "1" "" "0" "EXPLODE")) ));;-----------------------------------------;;tableau D(defun Dtab () (initget "D6 D8 D10 D12 D14 D16 D18 D20 D25 D32") (setq dim (getkword "\n ...... Diametre de la barre ? ")) (if (= dim nil) (setq dim "D6")) (cond ((= dim "D6") (command "insert" "D6" ptab "1" "" "0" "EXPLODE")) ((= dim "D8") (command "insert" "D8" ptab "1" "" "0" "EXPLODE")) ((= dim "D10") (command "insert" "D10" ptab "1" "" "0" "EXPLODE")) ((= dim "D12") (command "insert" "D12" ptab "1" "" "0" "EXPLODE")) ((= dim "D14") (command "insert" "D14" ptab "1" "" "0" "EXPLODE")) ((= dim "D16") (command "insert" "D16" ptab "1" "" "0" "EXPLODE")) ((= dim "D18") (command "insert" "D18" ptab "1" "" "0" "EXPLODE")) ((= dim "D20") (command "insert" "D20" ptab "1" "" "0" "EXPLODE")) ((= dim "D25") (command "insert" "D25" ptab "1" "" "0" "EXPLODE")) ((= dim "D32") (command "insert" "D32" ptab "1" "" "0" "EXPLODE")) ));;-----------------------------------------;;tableau I(defun Itab () (initget "I6 I8 I10 I12 I14 I16 I18 I20 I25 I32") (setq dim (getkword "\n ...... Diametre de la barre ? ")) (if (= dim nil) (setq dim "I6")) (cond ((= dim "I6") (command "insert" "I6" ptab "1" "" "0" "EXPLODE")) ((= dim "I8") (command "insert" "I8" ptab "1" "" "0" "EXPLODE")) ((= dim "I10") (command "insert" "I10" ptab "1" "" "0" "EXPLODE")) ((= dim "I12") (command "insert" "I12" ptab "1" "" "0" "EXPLODE")) ((= dim "I14") (command "insert" "I14" ptab "1" "" "0" "EXPLODE")) ((= dim "I16") (command "insert" "I16" ptab "1" "" "0" "EXPLODE")) ((= dim "I18") (command "insert" "I18" ptab "1" "" "0" "EXPLODE")) ((= dim "I20") (command "insert" "I20" ptab "1" "" "0" "EXPLODE")) ((= dim "I25") (command "insert" "I25" ptab "1" "" "0" "EXPLODE")) ((= dim "I32") (command "insert" "I32" ptab "1" "" "0" "EXPLODE")) ))(princ) La partie que j'ai mis en gras est a faire exploser.Merci d'avance pour toute l'aide que vous me fournirez.
Patrick_35 Posté(e) le 2 octobre 2006 Posté(e) le 2 octobre 2006 SalutPour décomposer un bloc en l'inserant, tu fais un (command "_.insert "*MonBloc" ...) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
cedwit Posté(e) le 2 octobre 2006 Auteur Posté(e) le 2 octobre 2006 Un grand merci, ça a fonctionner.Mais je n'arrive pas à inserer mon bloc a l'échelle 1/1.Pourriez-vous me dire comment faire, car cela ne fait pas longtemps que je me suis mis au lisp.
Bred Posté(e) le 2 octobre 2006 Posté(e) le 2 octobre 2006 Salut (command "_.insert" "*MonBloc" ptab 1 1 0) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
cedwit Posté(e) le 2 octobre 2006 Auteur Posté(e) le 2 octobre 2006 Un grand merci à toi BRED, mais cela ne fonctionne pas, je l'avais déjà essayer.Autocad ne reconnait pas les chiffres après le ptab.
zebulon_ Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Bonjour, ne serait-il pas plus simple de faire dessiner une polyligne par le lisp plutôt que d'insérer un bloc ?... du genre : (defun c:ancfer () (setq PT1 (getpoint "\n1er Point : ")) (setq PT2 (getpoint PT1 "\2ème Point : ")) (setq PHIEXT 0.030) ; diamètre extérieur d'un HA25 par exemple (setq PHIN 0.025) ; diamètre nominal d'un HA 25 (setq RM (/ 0.250 2)) ; rayon du mandrin de cintrage (setq PT1G (trans PT1 1 0)) ; conservation des coordonnées en scu général (setq PT2G (trans PT2 1 0)) (setq OLDOS (getvar "OSMODE")) (setvar "OSMODE" 0) ;supprimer accroche aux objets (command "_ucs" "_3p" PT1 PT2 "") ; dans le scu aligné avec les 2 points (setq PT1 (trans PT1G 0 1)) ; coordonnées dans le scu local (setq PT2 (trans PT2G 0 1)) (setq PT1 (polar PT1 (/ PI 2) (* 0.5 PHIEXT))) ; décalage d'un demi diamètre (setq PT2 (polar PT2 (/ PI 2) (* 0.5 PHIEXT))) ; calcul des points pour construire la barre (setq PT13 (polar PT1 0.00 (+ RM PHIEXT))) (setq PT14 (polar PT2 PI (+ RM PHIEXT))) (setq R1 (polar PT13 (/ PI 2) (+ RM (* 0.5 PHIEXT)))) (setq R2 (polar PT14 (/ PI 2) (+ RM (* 0.5 PHIEXT)))) (setq PT12 (polar R1 (/ (* 3 PI) 4) (+ RM (* 0.5 PHIEXT)))) (setq PT15 (polar R2 (/ PI 4) (+ RM (* 0.5 PHIEXT)))) (setq PT11 (polar PT12 (/ PI 4) (* 10 PHIN))) (setq PT16 (polar PT15 (/ (* 3 PI) 4) (* 10 PHIN))) (setq OLDWID (getvar "plinewid")) (setvar "plinewid" PHIEXT) ; on fixe l'épaisseur de la polyligne ; dessiner la barre (command "_pline" PT11 PT12 "_a" PT13 "_l" PT14 "_a" PT15 "_l" PT16 "") (command "_ucs" "_p") ; on revient au scu précédent (setvar "OSMODE" OLDOS) ; on remet les accroches objets (setvar "PLINEWID" OLDWID) ; on remet l'épaisseur de polyligne (princ) ) Et on peut imaginer la même chose pour l'ensemble des façonnages standards (cadres, U, barres droites, frettes, étriers ...), le tout agrémenté avec une boîte de dialogue pour permettre à l'utilisateur de choisir le type d'acier (HA ou DX) et son diamètre, par exemple. C'est beaucoup plus souple d'utilisation que les blocs explosés. Amicalement Zebulon_ C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
zebulon_ Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Au sujet du bloc inséré et décomposé tout de suite, Bred suggère la syntaxe suivante (command "_.insert" "*MonBloc" ptab 1 1 0) Un bloc décomposé directement à l'insertion ne peut avoir qu'une echelle uniforme, donc la commande _insert ne demande pas de facteur d'échelle en Y, mais uniquement en X Essaye la syntaxe (command "_.insert" "*MonBloc" ptab 1 0) Amicalement Zebulon_ C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Bred Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Je ne comprend pas.... chez moi ça marche... (setq ptab '(0 0 0)) (command "_.insert" "*MonBloc" ptab 1 1 0) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
zebulon_ Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Je ne comprend pas.... chez moi ça marche... Tu es sûr ? (command "_.insert" "*MonBloc" ptab 1 1 0) A mon avis, le bloc est inséré avec une echelle uniforme de 1 et un angle de rotation de 1 puis le lisp essaye de lancer une commande 0 qui n'est pas reconnue. Essaye de faire (command "_.insert" "*MonBloc" ptab 10 10 0) tu verras mieux la rotation de 10, car celle de 1 peut passer inapperçue Je persiste donc a dire que la syntaxe est (command "_.insert" "*MonBloc" ptab FACECH ANGLEROT ) Amicalement Zebulon_ [Edité le 3/10/2006 par zebulon_] C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Bred Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 En effet, tu as raison, je n'avais pas vu qu'il me faisait une rotation de 1.....Donc tu as raison, c'est bien ce que tu propose qui fonctionne. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
cedwit Posté(e) le 3 octobre 2006 Auteur Posté(e) le 3 octobre 2006 Un grand merci pour vos solutions, je m'envai essayer tous ça
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