DenisHen Posté(e) le 3 décembre 2015 Posté(e) le 3 décembre 2015 Bonjour à tous, Voilà, j'ai un petit souci... J'ai, dans une macro assez complexe, une variable (décimale) égàle à 0.5, par exemple. Et bien lorsque je l'enregistre dans un attribut de bloc, ce dernier est égale à 0.500000000000000 Voici le bout de code qui attibut la variable : (setq Txt_Prof (car (entsel "\t\tSélectionnez la profondeur :"))) (wcmatch (cdr (assoc 0 (setq elst (entget Txt_Prof)))) "*PROF") (setq Prof (cdr (assoc 1 elst))) Ou Prof est bien égàle à 0.5 Et plus loin, j'ai (command "inserer" "PTRL_PROF" pt_ins echBlk echBlk (angtos x_alpha) Prof) Qui donne 0.500000000000000 à l'attribut "PROF" du bloc "PTRL_PROF"... Si quelqu'un a une idée ou une astuce, je suis preneur... Denis... 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)
Patrick_35 Posté(e) le 3 décembre 2015 Posté(e) le 3 décembre 2015 Salut Regarde la variable DIMZIN @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 3 décembre 2015 Auteur Posté(e) le 3 décembre 2015 Salut Patrick_35 et merci de m'aider, J'ai réglé DIMZIN à 8 et rien n'y fait... 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)
Patrick_35 Posté(e) le 3 décembre 2015 Posté(e) le 3 décembre 2015 Et en faisant cela ?Sélection de l'attribut(setq att (vlax-ename->vla-object (car (nentsel)))) Ecrire la valeur(vla-put-textstring att "0.5") Et pour jouer avec la variable dimzin(vla-put-textstring att (rtos 0.5)) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 3 décembre 2015 Auteur Posté(e) le 3 décembre 2015 Merci Patrick_35 pour ton aide, mais là, c'est trop complexe pour moi... 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)
Patrick_35 Posté(e) le 3 décembre 2015 Posté(e) le 3 décembre 2015 Je te propose juste d'écrire une valeur dans un attribut en lisp, de voir le résultat pour essayer de comprendre d'où peut provenir le problème ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 3 décembre 2015 Auteur Posté(e) le 3 décembre 2015 Je ne doute pas de la qualité de ton aide ni de ta bonne volonté, j'ai juste quelques doutes ton estimation de mon niveau en LiSP. :blink: Dans mon LiSP, j'insert un bloc et, en même temps, je lui donne une valeur pour un attribut. Avec tes trois lignes de code, j'ai l'impression qu'il faut inserer le bloc et ensuite, le sélectionner pour en sortir l'attribut... Mais je répète, on n'a pas le même niveau ;) 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)
Patrick_35 Posté(e) le 3 décembre 2015 Posté(e) le 3 décembre 2015 Je ne doute pas de la qualité de ton aide ni de ta bonne volonté, j'ai juste quelques doutes ton estimation de mon niveau en LiSP. :blink: Non, je vois très bien ce que tu fais.Quand on lit un lisp, on voit rapidement le niveau de la personne. Dans mon LiSP, j'insert un bloc et, en même temps, je lui donne une valeur pour un attribut. Avec tes trois lignes de code, j'ai l'impression qu'il faut inserer le bloc et ensuite, le sélectionner pour en sortir l'attribut...Ce n'est pas le but de l'opération. L'idée est d'écrire en lisp une valeur sur un attribut quelconque et de voir le résultat. En fonction du résultat, tu peux deviner ce qui ne va pas dans le lisp et corriger. C'est jouer avec dimzin, d'écrire directement une valeur numérique, un string, etc...Avec les flèches du clavier, tu peux rappeler une instruction lisp, la modifier et voir. Mais je répète, on n'a pas le même niveau ;)Je pense que tu n'as pas compris ma démarche. Ce n'est pas une question de niveau. Juste une manière de débuguer. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 3 décembre 2015 Posté(e) le 3 décembre 2015 Salut, Pour lire/écrire des valeurs d'attributs, je rappellerais qu l'utilisation des dernières nouveautés en AutoLISP (à ma connaissance) permettent de faire ça très facilement :blockEname = le nom ventité du blocETIQUETTE = l'étiquette de l'attribut (getpropertyvalue blockEname "ETIQUETTE")retourne la valeur de l'attribut (setpropertyvalue blockEname "ETIQUETTE" "0.5")affecte la valeur "0.5" à l'attribut. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 4 décembre 2015 Posté(e) le 4 décembre 2015 Salut, Pour lire/écrire des valeurs d'attributs, je rappellerais qu l'utilisation des dernières nouveautés en AutoLISP (à ma connaissance) permettent de faire ça très facilement :blockEname = le nom ventité du blocETIQUETTE = l'étiquette de l'attribut (getpropertyvalue blockEname "ETIQUETTE")retourne la valeur de l'attribut (setpropertyvalue blockEname "ETIQUETTE" "0.5")affecte la valeur "0.5" à l'attribut.Bonjour et merci (gile) Tu as raison de faire ce rappel. Perso, je n'y pense jamais. Les habitudes sont dures à changer ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 4 décembre 2015 Auteur Posté(e) le 4 décembre 2015 Merci messieurs de votre aide... Mais je ne saisi pas très bien vos démarches, je dois écrir un bout de LiSP pour intéroger le contenu de mon bloc une fois créé en le sélectionnant ? Car je vois bien le contenu de mon attribut dans la fenêtre de propriété. A moins que cet affichage ne soit pas conforma à son contenu... A toutes fins utiles, voici la totalité de mon LiSP : ;Sélection de DEUX textes pour en faire des PTRL--------------------------------------------------------------------------------------------------------------------- (defun c:Alti-Prof-versPTRL (/) ;;Sélection de deux textes (Alti puis Prof) (princ "\tDéveloppé par Denis H. (ver.1.3)") (setq Calq (vlax-ldata-get "DenisH" "CalqCourDetect")) ;;(princ (strcat "\t\tRéseau courant : " Calq)) (cond ;; Écriture des calques actifs ((= Calq "DET_ARR") (princ "\tCalques 'Arrosage' actifs")) ((= Calq "DET_RES_ARR") (princ "\tCalques 'Arrosage' actifs")) ((= Calq "DET_CHA") (princ "\tCalques 'Chaleur' actifs")) ((= Calq "DET_RES_CHA") (princ "\tCalques 'Chaleur' actifs")) ((= Calq "DET_CHI") (princ "\tCalques 'Chimique' actifs")) ((= Calq "DET_RES_CHI") (princ "\tCalques 'Chimique' actifs")) ((= Calq "DET_EAU") (princ "\tCalques 'Eau potable' actifs")) ((= Calq "DET_RES_EAU") (princ "\tCalques 'Eau potable' actifs")) ((= Calq "DET_EP") (princ "\tCalques 'Eau Pluviale' actifs")) ((= Calq "DET_RES_EP") (princ "\tCalques 'Eau Pluviale' actifs")) ((= Calq "DET_EU") (princ "\tCalques 'Eau Usée' actifs")) ((= Calq "DET_RES_EU") (princ "\tCalques 'Eau Usée' actifs")) ((= Calq "DET_ECL") (princ "\tCalques 'Éclairage Public' actifs")) ((= Calq "DET_RES_ECL") (princ "\tCalques 'Éclairage Public' actifs")) ((= Calq "DET_ELEC") (princ "\tCalques 'Électicité (BT+HT)' actifs")) ((= Calq "DET_RES_ELEC") (princ "\tCalques 'Électicité (BT+HT)' actifs")) ((= Calq "DET_ELEC_BT") (princ "\tCalques 'ErDF BT' actifs")) ((= Calq "DET_RES_ELEC_BT") (princ "\tCalques 'ErDF BT' actifs")) ((= Calq "DET_ELEC_HT") (princ "\tCalques 'ErDF HT' actifs")) ((= Calq "DET_RES_ELEC_HT") (princ "\tCalques 'ErDF HT' actifs")) ((= Calq "DET_FIB") (princ "\tCalques 'Fibre Optique' actifs")) ((= Calq "DET_RES_FIB") (princ "\tCalques 'Fibre Optique' actifs")) ((= Calq "DET_GAZ") (princ "\tCalques 'GrDF Gaz' actifs")) ((= Calq "DET_RES_GAZ") (princ "\tCalques 'GrDF Gaz' actifs")) ((= Calq "DET_MULTI") (princ "\tCalques 'Multi Réseau' actifs")) ((= Calq "DET_RES_MULTI") (princ "\tCalques 'Multi Réseau' actifs")) ((= Calq "DET_NI") (princ "\tCalques 'Réseau Non Identifié' actifs")) ((= Calq "DET_RES_NI") (princ "\tCalques 'Réseau Non Identifié' actifs")) ((= Calq "DET_SLT") (princ "\tCalques 'Signalisation Lumineuse Tricolore' actifs")) ((= Calq "DET_RES_SLT") (princ "\tCalques 'Signalisation Lumineuse Tricolore' actifs")) ((= Calq "DET_TEL") (princ "\tCalques 'Télécom' actifs")) ((= Calq "DET_RES_TEL") (princ "\tCalques 'Télécom' actifs")) ((= Calq "DET_UNI") (princ "\tCalques 'Unitaire' actifs")) ((= Calq "DET_RES_UNI") (princ "\tCalques 'Unitaire' actifs")) ((= Calq "DET_VID") (princ "\tCalques 'Vidéo' actifs")) ((= Calq "DET_RES_VID") (princ "\tCalques 'Vidéo' actifs")) ) ;_ Fin de cond (if (= Calq "") (progn (princ "\nIl faut définir un calque par défaut...") (princ "\nLe Calque 'Reseau A Définir' sera créé si vous continuez.") (setq Calq "Reseau A Définir") ) ;_ Fin de progn ) ;_ Fin de if (setvar "cmdecho" 1) (setq old_osmd (getvar "osmode") old_abase (getvar "angbase") old_adir (getvar "angdir") old_aunits (getvar "aunits") old_DimZin (getvar "dimzin") old_layer (getvar "clayer") ) ;_ Fin de setq (setvar "osmode" 1) (setvar "angbase" 0) (setvar "angdir" 0) (setvar "cmdecho" 0) (setvar "aunits" 0) (setvar "dimzin" 0) ;; (setq ech (vlax-ldata-get "DenisH" "Ech")) (if ech (princ (strcat "\t\tEchelle : 1/" (rtos ech 2 0))) (progn (setq ech (getreal "\tÉchelle du dessin 1/")) (vlax-ldata-put "DenisH" "Ech" ech)) ;_ Fin de progn ) ;_ Fin:if ;; ;; (if (= (vlax-ldata-get "DenisH" "EtiqPTRL_Zgs") "Oui") (progn (setq Txt_Alti (car (entsel "\nSélectionnez l'altitude :"))) (wcmatch (cdr (assoc 0 (setq elst (entget Txt_Alti)))) "*ALTI") (setq Alti (cdr (assoc 1 elst))) ;(princ (strcat " " Alti)) ) ;_ Fin de progn ) ;_ Fin de if (setq Txt_Prof (car (entsel "\t\tSélectionnez la profondeur :"))) (wcmatch (cdr (assoc 0 (setq elst (entget Txt_Prof)))) "*PROF") (setq Prof (cdr (assoc 1 elst))) ;; Suppression des textes "P" et "M" dans le Prof (if (= T (wcmatch Prof "*#*")) (progn (setq Prof (vl-string-left-trim "Pf:" (vl-string-right-trim "m" Prof))) (setq Prof (vl-string-left-trim "Zgs=" (vl-string-right-trim "m" Prof))) (setq Prof (vl-string-left-trim "Zgs:" (vl-string-right-trim "m" Prof))) (setq Prof (vl-string-left-trim "P=" (vl-string-right-trim "M" Prof))) (setq Prof (vl-string-left-trim "P:" (vl-string-right-trim "M" Prof))) (setq Prof (vl-string-left-trim "P" (vl-string-right-trim "M" Prof))) (setq Prof (vl-string-left-trim "p" (vl-string-right-trim "m" Prof))) ) ;_ Fin de progn ) ;_ Fin de if ;; (if (= (vlax-ldata-get "DenisH" "EtiqPTRL_Zgs") "Oui") (setq Zgs (rtos (- (atof Alti) (atof Prof)) 2 2)) ;_ Fin de progn ) ;(princ (strcat "\nAlti=" Alti"\tProf=" Prof "\tZgs=" Zgs)) (setvar "osmode" 1) (setq pt_ins (getpoint "\nPoint d'insertion du PTRL : ")) (setvar "osmode" 0) ;Récupération du segment de la polyligne (while (null (setq e_seg (entsel "\tSélectionnez le segment de la polyligne : ")) ;_ Fin de setq ) ;_ Fin de null ) ;_ Fin de while ;;(princ "\nDrapeau 01") (setq typent (cdr (assoc 0 (setq dxf_ent (entget (car e_seg)))))) (cond ((or (eq typent "XLINE") (eq typent "RAY")) (setq dxf_11 (cdr (assoc 11 dxf_ent))) (setq x_alpha (atan (/ (cadr dxf_11) (car dxf_11)))) (grdraw (trans (cdr (assoc 10 dxf_ent)) 0 1) (polar (trans (cdr (assoc 10 dxf_ent)) 0 1) x_alpha (distance (getvar "vsmin") (getvar "vsmax")) ) ;_ Fin de polar -1 1 ) ;_ Fin de grdraw ) ((eq typent "LINE") (setq x_alpha (angle (cdr (assoc 10 dxf_ent)) (cdr (assoc 11 dxf_ent))) ;_ Fin de angle ) ;_ Fin de setq (grdraw (trans (cdr (assoc 10 dxf_ent)) 0 1) (trans (cdr (assoc 11 dxf_ent)) 0 1) -1 1) ;_ Fin de grdraw ) ((or (eq typent "LWPOLYLINE") (and (eq typent "POLYLINE") (zerop (boole 1 118 (cdr (assoc 70 dxf_ent))))) ;_ Fin de and ) ;_ Fin de or (setq l_2pt (near_vertex_arr e_seg)) (grdraw (car l_2pt) (cadr l_2pt) -1 1) (if (zerop (caddr l_2pt)) (setq x_alpha (angle (trans (car l_2pt) 1 0) (trans (cadr l_2pt) 1 0)) ;_ Fin de angle ) ;_ Fin de setq (progn (setq x_alpha nil) (princ "\nNe peut obtenir un angle depuis ce type d'objet!")) ;_ Fin de progn ) ;_ Fin de if ) (T (princ "\nNe peut obtenir un angle depuis ce type d'objet!") (redraw)) ) ;_ Fin de cond (if (not (tblsearch "layer" (strcat Calq "_PTRL"))) (command "-calque" "n" (strcat Calq "_PTRL") "") (setvar "Clayer" (strcat Calq "_PTRL")) ) ;_ Fin de if ;(princ "\nDrapeau 02") (setq Prof (atof Prof)) ;(princ (strcat "\nDrapeau X :" (rtos Prof 2 2))) (setvar "attdia" 0) (setq echBlk (/ ech 150)) (if (= (vlax-ldata-get "DenisH" "EtiqPTRL_Zgs") "Oui") (progn (command "inserer" "PTRL_PF_ZG" pt_ins echBlk echBlk (angtos x_alpha) Prof ZGs) (setvar "attdia" 1) ;(princ "\nDrapeau 03 :") (setq Prof (strcat "Pf:" (rtos Prof 2 2))) (setq ZGs (strcat "Zgs:" ZGs)) ) ;_ Fin de progn (progn (command "inserer" "PTRL_PROF" pt_ins echBlk echBlk (angtos x_alpha) Prof) ;_ Fin de command ;(princ Prof) (setvar "attdia" 1) ;(princ (atof (rtos Prof 2 2))) (setq Prof (strcat "Pf:" (rtos Prof 2 2))) ) ;_ Fin de progn ) ;_ Fin de if ; ;Ecriture et déplacement du texte le long du texte ;(command "textstyle" "Profondeur") (if (not (tblsearch "style" "Profondeur")) (command "-style" "Profondeur" "simplex" "" "" "" "" "") ;_ Fin de princ (command "textstyle" "Profondeur") ) ;_ Fin de if (if (not (tblsearch "layer" (strcat Calq "_PROF"))) (command "-calque" "n" (strcat Calq "_PROF") "") (setvar "CLAYER" (strcat Calq "_PROF")) ) ;_ Fin de if ;Ecriture de la profondeur sur le point du PTRL (command "texte" "j" "mc" pt_ins (/ (* 0.6 ech) 500.0) (angtos x_alpha) Prof) ;Déplacement de la profondeur depuis le pt_ins pour le placer correctement le texte le long du segment de la Pline (command "_move" "_last" "" pt_ins pause) (if (= (vlax-ldata-get "DenisH" "EtiqPTRL_Zgs") "Oui") (progn (command "textstyle" "ZGs") ;(command "-Calque" "n" (strcat Calq "_Zgs" "")) (if (not (tblsearch "layer" (strcat Calq "_ZGs"))) (command "-calque" "n" (strcat Calq "_ZGs") "") ) ;_ Fin de if (setvar "CLAYER" (strcat Calq "_ZGs")) (command "texte" "j" "mc" pt_ins (/ (* 0.6 ech) 500.0) (angtos x_alpha) ZGs) (command "_move" "_last" "" pt_ins pause) ) ;_ Fin de progn ) ;_ Fin de if (if (= (vlax-ldata-get "DenisH" "EtiqPTRL_Zs") "Oui") (progn (command "textstyle" "ZSurf") ;(command "-Calque" "n" (strcat Calq "_Zgs" "")) (if (not (tblsearch "layer" (strcat Calq "_ZSurf"))) (command "-calque" "n" (strcat Calq "_ZSurf") "") ) ;_ Fin de if (setvar "CLAYER" (strcat Calq "_ZSurf")) (command "texte" "j" "mc" pt_ins (/ (* 0.6 ech) 500.0) (angtos x_alpha) Alti) (command "_move" "_last" "" pt_ins pause) ) ;_ Fin de progn ) ;Réaffectation des variables AutoCAD (setvar "osmode" 15) (setvar "angbase" old_abase) (setvar "angdir" old_adir) (setvar "aunits" old_aunits) (setvar "dimzin" old_DimZin) (setvar "clayer" old_layer) (princ) ;(c:Alti-Prof-versPTRL) (CtrlSvGrd) ) ;_ Fin de defun Je sais, je ne gère pas les "erreurs" ni la fin prématurée de mon LiSP par ECHAP ou autre... Mais c'est, je pense, le prochain stade de mon apprentissage... 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