Nux Posté(e) le 9 avril 2018 Posté(e) le 9 avril 2018 Bonjour, J'ai créer un lisp me permettant de tracer des polylignes et d'inscrire leur surface ou leur longueur dans un bloc avec attribut.Le programme est fonctionnel, mais le nombre de chiffres après la virgule déborde en dehors du bloc. J'ai fait quelques recherches, mais les résultats ne correspondent pas tout à fait à mon problème. J'ai regardé dans la fenêtre "unités" d'autocad, fait des car/cdr en lisp pour essayer de supprimer les chiffres en trop, mais je n'ai pas réussi. Pourriez vous m'aider ? En vous remerciant par avance.
didier Posté(e) le 9 avril 2018 Posté(e) le 9 avril 2018 Coucou Si tu veux qu'on commente ton code et qu'on y apporte des solutions il faut le soumettreMerci de le mettre correctement formaté pour le site de préférence. À première vue je pense à un rtos mais sans le code je ne peux en dire plus Explications de RTOS mon site Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Fraid Posté(e) le 9 avril 2018 Posté(e) le 9 avril 2018 Bonjour, Avec ton code cela serais plus facile de te répondre.Mais tu peux essayer régler la variable LUPREC à 4 ... https://github.com/Fraiddd
Nux Posté(e) le 10 avril 2018 Auteur Posté(e) le 10 avril 2018 Bonjour, oui je suis désolé j'avais pas joint le code. le voici : (defun c:testz() (setq ini(getvar "osmode")) (setvar "osmode" 0) (setq Rtyp (getint "Select. reseau 1:CFO 2:Cfa 3:EP 4:EU")) (cond ((= Rtyp 1) (command "-calque" "ch" "CFO" "")) ((= Rtyp 2) (command "-calque" "ch" "Cfa" "")) ((= Rtyp 3) (command "-calque" "ch" "EP" "")) ((= Rtyp 4) (command "-calque" "ch" "EU" "")) ) (setq P1 (getpoint " Premier point")) (command "polylign" P1 (while P1 (setq P1(getpoint " Nouveau point ou appuyer sur entrer pour finir")) (command P1) )) (command "aire" "o" "d") (setq lrsx (getvar "perimeter")) (setq lrsx (rtos lrsx 2 2)) (setq ptexte (getpoint " insérer la longeur du reseau \n")) (command "-texte" ptexte 0.5 "" lrsx) (command "-calque" "ch" "0" "") (setvar "osmode" ini) ) J'ai modifié la valeur de luprec à 4 mais rien n'y a fait. j'ai finalement utilisé RTOS comme Didier me l'avez conseillé. Cela marche à merveille.Merci beaucoup pour votre aide
didier Posté(e) le 10 avril 2018 Posté(e) le 10 avril 2018 Coucou Je te remercie de me citer en plus en disant que ma piste de recherche était la bonneJe me permets de t'inviter à visiter mon site de programmation sur AutoCAD (signature)En même temps je ne sais pas si tu veux te perfectionner,En admettant que ce soit le cas, ta routine est facilement améliorableEn effet elle n'est pas "robuste" au sens informatiqueSi les calques n'existent pas ?Si on ne répond pas à la question du réseau et qu'on valide à vide ?La commande "polylign" ne sera pas reconnue sur toutes les machines... Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Nux Posté(e) le 11 avril 2018 Auteur Posté(e) le 11 avril 2018 Bonjour,Effectivement, je débute en lisp. Pour la question du réseau le modifier comme ceux ci :(setq Rtyp (getint "Select. reseau 1:CFO 2:Cfa 3:EP 4:EU")) (cond ((= Rtyp 1) (command "-calque" "ch" "CFO" "")) ((= Rtyp 2) (command "-calque" "ch" "Cfa" "")) ((= Rtyp 3) (command "-calque" "ch" "EP" "")) ((= Rtyp 4) (command "-calque" "ch" "EU" "")) ((< Rtyp 4) ("Entrez une valeur entre 1 et 4)) ) Je sais pas si il existe une sorte de goto en lisp pour permettre de revenir au début de la question si la valeur entrée n'est pas comprise en 1 et 4. Concernant les calques j’utilise le lisp avec un gabarit, le programme ne peut donc marcher qu'avec mon gabarit, sauf si on créer les calques avant de lancer la commande. Pour la reconnaissance de la commande "polylign", je me demandais, j'ai développé ce lisp avec les commandes en français, mais si je veut le lancer sur une version d'autocad en anglais ou en espagnol, existe t-il un moyen de rendre ce lisp "universel" ? Je visiterais ton site avec plaisir. :)
didier Posté(e) le 11 avril 2018 Posté(e) le 11 avril 2018 Coucou goto en lisp tel qu'exprimé NONne peut donc marcher qu'avec mon gabarit FAUX tu peux lancer le lisp dans n'importe quel fichier et si les calques n'existent pas... soucis...existe t-il un moyen de rendre ce lisp "universel" ? effectivement une visite s'impose : da-code Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 11 avril 2018 Posté(e) le 11 avril 2018 Salut. Pour palier au GoTo, je pense à un while, voici ce que, avec mes petites compétences, j'aurais fais (avec une autre méthode pour dessiner la polyligne) :(defun c:testRtyp (/ Rtyp) (while (and (/= Rtyp "1:CFO") (/= Rtyp "2:Cfa") (/= Rtyp "3:EP") (/= Rtyp "4:EU")) (initget 1 "1:CFO 2:Cfa 3:EP 4:EU") ;_ Fin de initget (setq Rtyp (getkword "\nFaite votre choix : [1:CFO/2:Cfa/3:EP/4:EU] : ") ;_ Fin de getpoint ) ;_ Fin de setq (cond ((= Rtyp "1:CFO") (princ "\nChoix : CFO")) ((= Rtyp "2:Cfa") (princ "\nChoix : Cfa")) ((= Rtyp "3:EP") (princ "\nChoix : EP")) ((= Rtyp "4:EU") (princ "\nChoix : EU")) ) ;_ Fin de cond ) ;_ Fin de while (command "_.pline") (while (not (zerop (getvar "cmdactive"))) (command pause)) ;_ Fin:while (princ) ) ;_ Fin de defun Pour le cas ou le calque n'existerait pas, tu peux prendre l'option "e" et non "ch" de la commande "calque". Ca créé le calque s'il n'existe pas et le rend courant. Denis... 1 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)
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