Matt666
Membres-
Compteur de contenus
736 -
Inscription
-
Dernière visite
-
Jours gagnés
2
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Matt666
-
Salut ! Bon eh bien voilà, j'ai essayé la fameuse routine qui permet de créer un fichier dcl temporaire .. Et j'ai un petit soucis, enfin deux pour être exact... BricsCad (le logiciel basé sur le moteur IntelliCad), tout comme AutoCad ne connait pas les fonctions "string-position" et "string-right-trim"... Pourrais-tu m'expliquer à quoi elles correspondent, et quelles actions elles produisent au sein de ce lisp.... Parce que ce lisp est bien balaise, bravo !! Ca dépasse de très loin mes (petites) compétences de développement lisp... Merci !! Bon courage pour la suite... Matt.
-
Dément.... J'essai toutes ces routines (si je peux, évidemment), dès lundi ! Un moteur Intellicad a la particularité d'être un clone de Autocad, mais 10 fois moins cher (en tout cas pour bricsCad...), donc ça ne DEVRAIT pas poser de pb... Merci !!! Adtal... Matt.
-
Dément.... Simplement dément !!! J'adhère totalement à cette initiative... On signe où ??? Pour la dernière routine, je tente ça direc' lundi... Je te'en donnerai des news.... Mais faut que je regarde ça d'un peu plus près... Ca me taquine cette histoire de fichier temporaire ! Merci pour tout, et a bientot !! Matt.
-
Ah oui euh pardon !! Effectivement VLX et VL, c'est pas la même chose.. Ce qui ne résout quand même pas mon problème... BricsCad ne sait ni lire le FAS, ni le VLX... Raah c'est bien les logiciels pas chers !! J'ai envoyé une demande d'information directement chez BrisCad, pour voir ce qu'ils en pensent. Je vous informerai de la réponse, si elle vous intéresse bien sur ! Je comprends mieux maintenant l'intérêt des fonctions supplémentaires de visual lisp... Plus de facilité, rapidité, etc... Dommage que BricsCad n'utilise que de l'autolisp... Sur le problème de regroupement des fichiers, je reste persuadé qu'on peut scindé les deux directement en un seul lisp... Je continue à chercher de mon coté... Merci à vous deux de m'aider comme ça... A bientot ! -Chacun compte pour un, et nul ne compte pour plus d'un- Jeremy Bentham.
-
Salut !! Merci (gile) de ta réponse rapide et concise... Le problème c'est que je n'utilise pas AutoCad, mais BricsCad, basé sur un moteur IntelliCad. Ce logiciel ne supporte pas le VLX... J'ai l'impression que toi et patrick_35 aimez beaucoup le VLX... je ne connais pas ses possibilités (elles doivent être conséquentes !!), mais j'avoue que de voir "(vl-filename-mktemp...)", bref un bon gros VL me filerai limite des boutons !!! :) Peut-être cela vient-il du fait que - je ne peux pas l'exploiter, - mais surement aussi que je trouve qu'utiliser le VLX dans une routine lisp revient à utiliser "command" alors qu'un bon vieux "entmake" est beaucoup plus..... noble? en tout cas plus sain ou beau... Je ne sais pas comment dire ceci, et tu dois me trouver extrême autant que fou, mais voilà je ne peux et ne veux pas utiliser de VLX.... Hum hum... Mais merci quand même ! Je ne remets pas en cause la qualité de ta réponse, très très bien, vraiment !! Voilà. Si je vous saoule, promis je ferai deux fichiers ! Dites moi, vraiment !! Merci ! A bientôt.... Et longue vie à ce forum ! Matt.
-
Eh oui c'est remoi.... Bon voilà j'ai fini ma routine, et elle tourne très bien !! Merci encore à vous, pour vos conseils et votre patience... Mais avant de vous donner cette routine, j'ai encore une question... Une dernière j'espère ! J'ai lu sur ce site http://aidacad.com/fr/aiddcl.htm Qu'on pouvait intégrer le fichier dcl au sein du fichier lisp, pour éviter à Autocad de chercher partout :) Est-ce que vous avez une idée de comment faire ?? Voilà... Merci d'avance ! Matt.
-
Alors là, bluffé....Génial ça marche !! Je sais pas d'où tu as sorti le (or modan (setq modan "1")) , c'est la première fois que je vois ça... D'ailleurs je comprends mal la logique du OR, je vais chercher... Mais merci, ça marche très bien maintenant !! Je vous donnerai les codes de tout ça une fois que ce sera fini... Yen a plus pour longtemps, maintenant ! Merci encore, et bonne continuation !! A bientôt pour d'autres questions...
-
Voici une copie d'écran de la boîte dialogue que j'ai créée... Attention c'est ma première boîte de dialogue, pas de moqueries !!! http://xs116.xs.to/xs116/07234/incmt.jpg
-
Bonjour ! Tout d'abord un grand merci à Patrick_35 et (gile) pour leurs conseils, ça m'a beaucoup aidé.... J'ai enfin réussi à masquer la boîte de dialogue lors du clic sur un bouton de sélection... J'avais juste un problème de parenthèses (tiens donc !!!) dans mon lisp ! En fin de compte mon "new_dialog" n'était pas au sein de la boucle, donc forcément, il n'allait pas la rappeler !! Voilà... Maintenant j'ai un autre soucis... Je suis conscient d'être un chiant, mais si vous pouviez m'aider, ça m'arrangerait beaucoup ! C'est au sujet des boutons radios... Je n'arrive pas à affecter une variable lorsque je choisis un bouton radio... Le problème aussi c'est que j'aimerai affecter un bouton radio coché par défaut, puisque ce sera le paramètre le plus courant... Je ne sais pas si je suis clair, alors je vous montre d'abord le dcl, qui se nomme essai.dcl... dincr : dialog { aspect_ratio = 0 ; initial_focus = "Incmtvald"; label = "Incrémentation caractères" ; : column { : radio_row { label = "Mode" ; key = "box1"; : radio_button { label = "Numérique"; key = "incmtnum"; value = "1" ;} : radio_button { label = "Alphabétique"; key = "incmtalp" ;} } :boxed_column { label = "Valeur textes" ; key = "box2"; : edit_box { label = "Valeur de Début :"; is_tab_stop = True; key ="Incmtvald"; mnemonic = "d"; edit_width=10 ; } : edit_box { label = "Valeur de Fin :"; key ="Incmtvalf"; mnemonic = "f"; edit_width=10 ; } : edit_box { label = "Incrément :"; key ="Incmtincmt"; mnemonic = "I"; edit_width=10 ; } } :boxed_column { label = "Position textes" ; key = "box3"; : row { : text { label = "Point de départ :"; alignment = left; fixed_width=true; width=10; } : button { label = ">>"; mnemonic = "o"; alignment=right; key = "incmpt"; fixed_width=true; width=10; } } : row { : text {label = "Décalage : "; alignment = left; } : button { label = ">>"; mnemonic = "d"; fixed_width=true; width=4; key = "incmdec"; } : edit_box { label = ""; key ="Incmtdec"; mnemonic = "e"; alignment=right; fixed_width=true; width=10; } } : row { : text {label = "Direction (en degrés) :"; alignment = left; } : button {label = ">>"; mnemonic = "r"; fixed_width=true; width=4; key = "Incmdir";} : edit_box { label = ""; key ="Incmtdir"; mnemonic = "i"; alignment=right; fixed_width=true ; width=10; } } } } :boxed_column { label = "Options de texte" ; key = "box4"; : edit_box { label = "Hauteur :"; key ="Incmthtext"; mnemonic = "h"; edit_width=10 ; } : edit_box { label = "Angle rotation :"; key ="Incmtang"; mnemonic = "a"; edit_width=10 ; } : popup_list { label = "Justification : " ; list = "Gauche\nCentre\nDroite" ; value = "0" ; key ="Incmtjust"; popup_height = 50 ; alignment = right ; mnemonic = "j"; edit_width=15 ; } } ok_cancel ; spacer ; } Voilà pour le dcl... priori, je ne vois aucun problème dans ce fichier... Maintenant le lisp. C'est là que ça se gâte !!! Pour infos, pour l'instant il n'y a aucun traitement des valeurs des champs, j'essaie juste de rappatrier les données de la boîte de dialogue... Le fichier se nomme essai.lsp (original dites-donc !!) (defun C:essai () (while dcl_id (unload_dialog dcl_id)(setq dcl_id nil)) (setq dcl_id (load_dialog "essai.dcl")) (setq loop 2 bug 0) (while (and (>= loop 2) (< bug 20)) (if (not (new_dialog "dincr" dcl_id)) (progn (princ "\nBoîte de dialogue 'essai.dcl' introuvable.") (exit)) ) (setq bug (1+ bug)) (action_tile "Incmtnum" "(setq modan 1)") (action_tile "Incmtalp" "(setq modan 2)") (action_tile "Incmtvalf" "(progn (setq Incmtvalf $value))") (action_tile "Incmtincmt" "(progn (setq Incmtincmt $value))") (action_tile "Incmtdec" "(progn (setq Incmtdec $value))") (action_tile "Incmtdir" "(progn (setq Incmtdir $value))") (action_tile "Incmthtext" "(progn (setq Incmthtext $value))") (action_tile "Incmtang" "(progn (setq Incmtang $value))") (action_tile "Incmtjust" "(setq Incmtjust $value)") (action_tile "cancel" "(done_dialog 0)") (action_tile "accept" "(done_dialog 1)") (action_tile "incmpt" "(done_dialog 3)") (action_tile "incmdec" "(done_dialog 4)") (action_tile "Incmdir" "(done_dialog 5)") (if modan (progn (if (eq modan 1) (progn (set_tile "incmtnum" "1") (set_tile "incmtalp" "0") ) (if (eq modan 2) (progn (set_tile "incmtalp" "1") (set_tile "incmtnum" "0") ) (setq modan (get_tile "box1")) ) ) ) ) (if Incmtdec (set_tile "Incmtdec" Incmtdec)) (if Incmtdir (set_tile "Incmtdir" Incmtdir)) (if Incmthtext (set_tile "Incmthtext" Incmthtext)) (if Incmtang (set_tile "Incmtang" Incmtang)) (if Incmtjust (set_tile "Incmtjust" Incmtjust)(setq incmtjust (get_tile "Incmtjust"))) (if (and incmtvald incmtvalf) (if (> incmtvald incmtvalf) (princ (strcat "\nLa valeur de début (" (itoa incmtvald) ") doit être inférieure à la valeur de fin (" (itoa incmtvalf) ")." )) (progn (if incmtvald (set_tile "Incmtvald" incmtvald)) (if Incmtvalf (set_tile "Incmtvalf" Incmtvalf)) (if Incmtincmt (set_tile "Incmtincmt" Incmtincmt)) ) ; end of progn ) ; end of if ) ; end of if (setq loop (start_dialog)) (cond ((eq loop 3) (setq ptstart (getpoint "Point de départ : ")) ) ((eq loop 4) (setq displ (getdist (if (null ptstart) (setq ptstart (getpoint "Premier point du décalage :"))ptstart) "\nDécalage : ")) (setq incmtdec (rtos displ 2 2)) ) ((eq loop 5) (setq ptang (getangle (if (null ptstart) (setq ptstart (getpoint "point de départ de l'angle :"))ptstart) "\nDirection : ")) (setq incmtdir (angtos ptang)) ) ((eq loop 0)(prompt "\nFonction annulée...")) ((eq loop 1) (if (eq modan "Incmtnum")(princ "\nAlphabétique...")(princ "\nAucune valeur dans le champ modan num.")) (if (eq modan "Incmtalp")(princ "\nNumérique...")(princ "\nAucune valeur dans le champ modan alpha.")) (if Incmtvald (princ "\nValeur de champ début Incmtvald ok.")(princ "\nAucune valeur dans le champ début.")) (if Incmtvalf (princ "\nValeur de champ fin Incmtvalf ok.")(princ "\nAucune valeur dans le champ fin.")) (if Incmtincmt (princ "\nValeur de champ incrément Incmtincmt ok.")(princ "\nAucune valeur dans le champ incrément.")) (if Incmtjust (princ "\nValeur de champ incrément Incmtjust ok.")(princ "\nAucune valeur dans le champ justification.")) ) ) ; end of cond (if (eq bug 20) (princ "\nAttention boucle redondante.")) ) ; end of while (unload_dialog dcl_id) (princ) ) Voilà... Personnellement je suis perdu, là ! C'est la valeur provenant d'un des champs ci dessous qui m'intéresse.. : radio_row { label = "Mode" ; key = "box1"; : radio_button { label = "Numérique"; key = "incmtnum"; value = "1" ;} : radio_button { label = "Alphabétique"; key = "incmtalp" ;} } codée dans le lisp comme ceci... (action_tile "Incmtnum" "(setq modan 1)") (action_tile "Incmtalp" "(setq modan 2)") (if modan (progn (if (eq modan 1) (progn (set_tile "incmtnum" "1") (set_tile "incmtalp" "0") ); end of progn (if (eq modan 2) (progn (set_tile "incmtalp" "1") (set_tile "incmtnum" "0") ); end of progn (setq modan (get_tile "box1")) ); end of if ); end of if ) ; end of progn ); end of if Bon j'ai essayé plein de trucs, donc il se pourrait que vous rigoliez à voir les conditions pour la variable "modan", qui prend la valeur des boutons radios... désespéré, je vous dis !! Voilà... J'espère avoir été assez clair ! Au fait, Patrick_35 (35 de Rennes ?), j'ai vu que tu avais déjà répondu à qqn pour ce genre de problème, mais je n'ai pas réussi à régler le mien avec tes exemples.... http:// http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=15311 Merci d'avance, et longue vie à ce très bon forum !
-
Merci pour ta réponse Patrick 35... Je vais tenter ça, mais je me demande si j'ai bien compris... Ce que je veux faire, c'est par exemple définir un point d'insertion comme suit : - je clique d'abord sur le bouton qui permet de sortir de la boîte de dialogue (donc action_tile) - Ensuite la boîte de dialogue disparait et je donne un point d'insertion dans la zone de travail d'autocad - Pour finir la boîte de dialogue revient, avec tous les champs préalablement remplis et le point d'insertion pris en compte dans une variable. En fait pour tout te dire, le problème vient du fait que je ne comprends pas les done_dialog et start_dialog... Donc faut vraiment que je trouve des définitions pour comprendre ce qui se passe... Merci encore pour ton aide, et à bientot !! Vive la Bretagne !!! Take care. Matt.
-
Bonjour à tous ! J'ai un petit problème de programmation. Peut être que le sujet a déjà été traité, je n'ai pas vraiment pris le temps de regarder dans le forum. J'ai beau avoir cherché quelques temps sur internet, je n'ai rien trouvé... Il faut savoir que je débute en dcl. Le lisp devient de plus en plus familier, et je suis arrivé à avoir vraiment besoin d'une boîte de dialogue pour un lisp. Ce lisp sert à incrémenter des caractères. Il ressemble à ceci : ;;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;Incrémente des chiffres et des lettres. Créé par Matthieu Noblet (defun c:incmt () (setq temperror *error* *error* myerror count 0 cntr 0 endv 0 inc 1 a (findfile "GTPI_MACRO_BCAD/VAR.txt") ) (if a (progn (setq refi (open a "R")) (while (setq aa (read-line refi)) (if (or (eq aa "M")(eq aa "CM")(eq aa "MM")) (setq l1 aa)) ) (close refi) ); end of progn ); end of if (setq h_txt (cdr (assoc 40 (tblsearch "STYLE" (getvar "textstyle"))))) (if (or (eq h_txt nil)(eq h_txt 0)) (if (eq l1 "M") (setq h_txte 0.15) (if (eq l1 "CM") (setq h_txte 15) (if (eq l1 "MM") (setq h_txte 150) ))) (setq h_txte h_txt) ); end of if (initget 1 "A N") (setq alpnum (getkword "Alphabétique ou Numérique [A/N] : ")) (if (eq alpnum "N") (progn (while (>= count endv) (initget) (setq count (getint "Valeur de début: ")) (initget 1) (setq endv (getint "Valeur de fin: ")) (initget 1) (setq inc (getint "Incrément: ")) ); end of while ); end of progn (progn (while (>= count endv) (setq count (ascii (getstring "Caratère de début: ")) endv (ascii (getstring "Caractère de fin: "))) ); end of while ); end of progn ); end of if (if alpnum (progn (initget 1) (setq start (getpoint "Point de départ : ")) (initget (+ 1 2 4)) (setq displ (getdist start "\nDécalage : ") ang (getangle start "Direction <0> : ") htxt (getreal (strcat "Hauteur du texte <" (rtos h_txte 2 2) "> : ")) rot (getangle "Angle de rotation du texte <0> : ") ) (initget 1 "G C D") (setq jus (getkword "Justification du texte [G/C/D] : ")) (if (eq jus "G")(setq jus "MG")(if (eq jus "C")(setq jus "MC")(if (eq jus "D")(setq jus "MR")))) (if (null htxt)(setq htxt h_txte)) (if (null ang)(setq ang 0)) (if (null rot)(setq rot 0)(setq rot (angtos rot))) (while (<= count endv) (if (eq alpnum "N") (progn (if (< count 10)(setq count (strcat "0" (itoa count)))) (if (or (eq h_txt nil)(eq h_txt 0)) (command "_text" "j" jus start h_txte rot count) (command "_text" "j" jus start rot count) ) ) (if (or (eq h_txt nil)(eq h_txt 0)) (command "_text" "j" jus start h_txte rot (chr count)) (command "_text" "j" jus start rot (chr count)) ) );end of if (if (eq (type count) 'STR)(setq count (atoi count))) (setq start (polar start ang displ) count (+ count inc) cntr (1+ cntr)) );end of while (princ (strcat "\n" (itoa cntr) " textes créés.")) ); end of progn ); end of if (princ) );end of defun ;;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Si vous essayez de le charger, vous comprendrez très vite l'utilité d'une boîte de dialogue... En effet il faut entrer pas moins de 10 paramètres pour pouvoir générer ces textes. Au passage, je travaille sous BricsCad, et les commandes ont parfois une sémantique différente... Donc vérifiez bien l'appel de la commande _text et ses paramètres avant de lancer cette routine sous autoCad... A terme je transformerai cette commande en un entmake, mais pas trop le temps pour ça !! Bref... Je blablate.... Donc j'ai tenté d'écrire un petit programme en dcl, qui ressemble à ceci : //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX dincr : dialog { aspect_ratio = 0 ; label = "Incrémentation caractères" ; : column { :boxed_column { : popup_list { label = "Mode :" ; list = "Numérique\nAlphabétique" ; key ="Incmtmode"; mnemonic = "M"; alignment = right ; edit_width=14;} } spacer ; :boxed_column { label = "Valeur textes" ; key = "box2"; : edit_box { label = "Valeur de Début :"; key ="Incmtvald"; mnemonic = "d"; edit_width=10 ; } : edit_box { label = "Valeur de Fin :"; key ="Incmtvalf"; mnemonic = "f"; edit_width=10 ; } : edit_box { label = "Incrément :"; key ="Incmtincmt"; mnemonic = "I"; edit_width=10 ; } } spacer ; :boxed_column { label = "Position textes" ; key = "box3"; : row { : text { label = "Point de départ :"; alignment = left; fixed_width=true; width=10; } : button { label = ">>"; mnemonic = "o"; alignment=right; fixed_height=true; key = "incmpt"; fixed_width=true; width=10; is_default = false; } } : row { : text { label = "Décalage : "; alignment = left; } : button { label = ">>"; mnemonic = "d"; fixed_height=true; fixed_width=true; width=4; key = "incmdec"; is_default = false; } : edit_box { label = ""; key ="Incmtdec"; mnemonic = "e"; alignment=right; fixed_width=true; width=10; } } : row { : text {label = "Direction (en degrés) :"; alignment = left; } : button { label = ">>"; mnemonic = "r"; fixed_width=true; fixed_height=true; width=4; key = "Incmdir"; is_default = false; } : edit_box { label = ""; key ="Incmtdir"; mnemonic = "i"; alignment=right; fixed_width=true ; width=10; } } } spacer ; :boxed_column { label = "Options de texte" ; key = "box4"; : edit_box { label = "Hauteur :"; key ="Incmthtext"; mnemonic = "h"; edit_width=10 ; } : edit_box { label = "Angle rotation :"; key ="Incmtang"; mnemonic = "a"; edit_width=10 ; } : popup_list { label = "Justification :"; list = "Gauche\nCentre\nDroite"; key ="Incmtjust"; mnemonic = "j"; alignment = right; edit_width=10 ; } } } ok_cancel ; spacer_1 ; : text {label = "Créé par Matthieu Noblet"; alignment = center;} } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Bon ce programme est bien joli, avec tout ce qu'il faut pour valider la routine d'incrémentation... Maintenant il faut créer la routine qui permettra de "dialoguer" avec la boîte... Et là, c'est le drame... Je nage !! Je n'en suis qu'au début, et mon problème principal, c'est que je n'arrive pas à rappeler la boîte de dialogue lorsque le point d'insertion a été entré... Si qqn pouvait m'aider, ça m'arrangerait énormément !!! Merci ! Adtal, comme on dit par chez nous ! PS : Je vous montre où j'en suis rendu... J'ai commencé par le plus dur, je n'ai pas du tout codé les champs de saisie.... (defun C:essai () (defun do_act (key_pr) (setq op key_pr) (if (= key_pr "cancel") (setq loop 0) ) (setq dlg_pt (done_dialog loop)) ) (setq dcl_id (load_dialog "essai.dcl")) (if (not (new_dialog "dincr" dcl_id)) (progn (princ "\nBoîte de dialogue 'essai.dcl' introuvable.") (exit)) ) (setq loop 1 bug 0 ) (while (and (/= loop 0) (< bug 20)) (setq bug (1+ bug)) (action_tile "cancel" "(do_act $key)") (action_tile "accept" "(do_act $key)") (action_tile "incmpt" "(done_dialog 1)(setq a 1)") (action_tile "incmdec" "(done_dialog 2)(setq a 2)") (action_tile "Incmdir" "(done_dialog 3)(setq a 3)") (start_dialog) (cond ((or (eq op "incmpt") (eq a 1)) (setq ptstart (getpoint "Point de départ : ")) ;(unload_dialog dcl_id) ; (new_dialog "dincr" dcl_id) ) ((or (eq op "incmdec") (eq a 2)) (setq displ (getdist start "\nDécalage : ")) ; (unload_dialog dcl_id) ; (new_dialog "dincr" dcl_id) ) ((or (eq op "Incmdir") (eq a 3)) (setq ang (getangle start "Direction <0> : ")) ; (unload_dialog dcl_id) ; (new_dialog "dincr" dcl_id) ) ) (if (eq bug 20) (princ "\nAttention boucle redondante.") ) (unload_dialog dcl_id) (princ) ) ) Merci d'avance, et bon courage pour la lecture !!! Désolé...
