Olivier_CEA_Grenoble Posté(e) le 25 octobre 2018 Posté(e) le 25 octobre 2018 Bonjour a tous, Je séche :angry: D'habitude je trouve des solutions a mes problèmes,grâce a ce forum, mais là? Rien. :blink: Je suis en cour d'écriture d'une fonction qui me permette d'ajouter une légende automatique sur le point haut droit d'un fichier suivant le scu courant.Malheureusement, mes fichiers étant géographier autour du 0,0 , EXTMAX ce trouve du coup très différents suivant le fichier. (getvar "extmax") Cas1 = (215.44 -34290.8 0.0)Cas2 = (-42665.7 -4973.1 0.0)Cas3 = (117551.0 38521.3 0.0)et j'en passe Du coup j'ai écrit ce qui suit mais la legende ce balade en permanence entre en haut a gauche ou a droite, du coup ça ménerve!!! :angry: :angry: ;;--------------------------------------------- ;;-- Legende par bloc / description ;;-- TYP_EQU ;;--------------------------------------------- (defun c:LegBLK(/) (setvar "cmddia" 0) (setvar "attdia" 0) (setq Htext "60";Hauteur texte légende SqlLstBlk (strcat "select distinct BLKNAME, v.L_TYP_EQU_COU_FAI FROM EQUIP_REPART e left join EQU_COU_FAI_V v on V.N_TYP_EQU_COU_FAI = E.N_TYP_EQU_COU_FAI where v.L_CATEG = \'" TYP_EQU "\'and e.N_BATIM = \'" N_BATIM "\' AND e.N_NIVEA = \'" N_NIVEA "\'") LstBlk (ggSelRows "EQUIPEMENT_REPARTITEUR" SqlLstBlk);liste des objets / fonction interne a l'application (GEOMAP) PTIns '(0 0 0) InterLigne '(0 110 0) TabTextes '(55 0 0) ) (command "calque" "n" "Legende" "CH" "Legende" "" "scu" "G" ) (while (/= LstBlk nil) (command "inserer" (caar LstBlk) PTIns "1" "1" "" "") (command "texte" (plus PTIns TabTextes) Htext "0" (cadar LstBlk)) (setq LstBlk (cdr LstBlk) PTIns (moins PTIns InterLigne) ) ; (print PTIns) ; (print (caar LstBlk)) ; (print (cadar LstBlk)) ) (setq ssleg(ssget "x"'((8 . "Legende"))) EchIns 1 PTInsBLK '(415 28 0) ) (command "scu" "G" "zoom" "et" "regen" "bloc" "Legende" '(0 0 0) ssleg "" "zoom" "et" "regen" "INSERER" "Legende" (plus (getvar "extmax") '(150 150 0)) EchIns "" "" "calque" "CH" "0" "" ) (c:r_obj_lab (ssget "_L"));fonction qui assure la rotation suivant le scu nommé ) Une idée, un conseil? :( Bonne journéeØlivier
Patrick_35 Posté(e) le 25 octobre 2018 Posté(e) le 25 octobre 2018 Salut Un exemple pour déterminer le point max et min d'une sélection(ssget) (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (vla-getboundingbox ent 'hd 'bg) (if lst_max (setq lst_max (mapcar 'max (vlax-safearray->list hd) (vlax-safearray->list bg) lst_max)) (setq lst_max (mapcar 'max (vlax-safearray->list hd) (vlax-safearray->list bg))) ) (if lst_min (setq lst_min (mapcar 'min (vlax-safearray->list hd) (vlax-safearray->list bg) lst_min)) (setq lst_min (mapcar 'min (vlax-safearray->list hd) (vlax-safearray->list bg))) ) ) (vla-delete sel) @+ 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 25 octobre 2018 Posté(e) le 25 octobre 2018 Salut, Les points dans les variables EXTMAX et EXTMIN sont toujours définis en coordonnées générales (SCG) les fonctions LISP qui utilisent l'éditeur (command, getpoint, etc.) utilisent les coordonnées du SCU courant. Il faut donc que tu convertisse le point renvoyé par (getvar 'extmax) en coordonnées SCU avec la fonction trans pour le passer à (command ...) (trans (getvar 'extmax) 0 1) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Olivier_CEA_Grenoble Posté(e) le 25 octobre 2018 Auteur Posté(e) le 25 octobre 2018 Salut Un exemple pour déterminer le point max et min d'une sélection(ssget) (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (vla-getboundingbox ent 'hd 'bg) (if lst_max (setq lst_max (mapcar 'max (vlax-safearray->list hd) (vlax-safearray->list bg) lst_max)) (setq lst_max (mapcar 'max (vlax-safearray->list hd) (vlax-safearray->list bg))) ) (if lst_min (setq lst_min (mapcar 'min (vlax-safearray->list hd) (vlax-safearray->list bg) lst_min)) (setq lst_min (mapcar 'min (vlax-safearray->list hd) (vlax-safearray->list bg))) ) ) (vla-delete sel) @+ Merci, je viens de tester et bien que les commandes VLA me paraisse puissante je suis loin du compte! :unsure:Je supose que LST_MAX est en fonction du SCG et non pas du SCU nommé. A+Ølivier
Olivier_CEA_Grenoble Posté(e) le 25 octobre 2018 Auteur Posté(e) le 25 octobre 2018 Salut, Les points dans les variables EXTMAX et EXTMIN sont toujours définis en coordonnées générales (SCG) les fonctions LISP qui utilisent l'éditeur (command, getpoint, etc.) utilisent les coordonnées du SCU courant. Il faut donc que tu convertisse le point renvoyé par (getvar 'extmax) en coordonnées SCU avec la fonction trans pour le passer à (command ...) (trans (getvar 'extmax) 0 1) Bonjour gil,Effectivement, le trans me parait de bonne aloi, bien que cela ne résolve pas mon pb de droite gauche.A près le trans, je vais tenter de mettre le x en valeur positive de façons systématique via minusp.. Je test! a de suiteØlivier
Olivier_CEA_Grenoble Posté(e) le 25 octobre 2018 Auteur Posté(e) le 25 octobre 2018 (modifié) Salut, Les points dans les variables EXTMAX et EXTMIN sont toujours définis en coordonnées générales (SCG) les fonctions LISP qui utilisent l'éditeur (command, getpoint, etc.) utilisent les coordonnées du SCU courant. Il faut donc que tu convertisse le point renvoyé par (getvar 'extmax) en coordonnées SCU avec la fonction trans pour le passer à (command ...) (trans (getvar 'extmax) 0 1) Bonjour gile,Effectivement, le trans me parait de bonne aloi, bien que cela ne résolve pas mon pb de droite gauche.A près le trans, je vais tenter de mettre le x en valeur positive de façons systématique via minusp.. Je test! a de suiteØlivier Je patalle complètement grave :wacko: Le passage en positif ne donne bien sur rien du tout. Modifié le 25 octobre 2018 par Olivier_CEA_Grenoble
Patrick_35 Posté(e) le 25 octobre 2018 Posté(e) le 25 octobre 2018 Merci, je viens de tester et bien que les commandes VLA me paraisse puissante je suis loin du compte! :unsure:Je supose que LST_MAX est en fonction du SCG et non pas du SCU nommé. A+ØlivierLst_max retourne le coin haut droit d'une sélection. Lst_min, le coin bas gauche. Un peu comme extmin et extmax.La sélection peut se faire sur tout le dessin. Avec, comme l'indique (gile), la fonction trans, tu vas du SGC au SGU. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Olivier_CEA_Grenoble Posté(e) le 25 octobre 2018 Auteur Posté(e) le 25 octobre 2018 Lst_max retourne le coin haut droit d'une sélection. Lst_min, le coin bas gauche. Un peu comme extmin et extmax.La sélection peut se faire sur tout le dessin. Avec, comme l'indique (gile), la fonction trans, tu vas du SGC au SGU. @+ J'ais mis le trans en application mais rien n'y fait!:-(livier
Patrick_35 Posté(e) le 25 octobre 2018 Posté(e) le 25 octobre 2018 J'ais mis le trans en application mais rien n'y fait!:-(livierLe plus simple est que tu nous donnes deux exemples initiaux, puis le résultat attendu. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Olivier_CEA_Grenoble Posté(e) le 25 octobre 2018 Auteur Posté(e) le 25 octobre 2018 (modifié) Je m'approche et je m’accroche ;) Bien,Le PB est plus complexe qu'un simple trans. Si je veux la légende en HD, il me faut que x soit systématiquement positif et que le x 'extmax soit supérieur a x 'extmindu coup, je récupère le x de 'extmin(setq maxi (trans (getvar 'extmax)0 1) mini (trans (getvar 'extmin)0 1) ) (if (/= (minusp (car maxi)) T) (setq PTinsLegende maxi) (setq PTinsLegende (subst (car mini) (car maxi) maxi)) ) (if (> (car mini)(car maxi) nil ) (setq PTinsLegende (subst (car mini) (car maxi) maxi)) ) et que l'insertion ce face dans le scu nommé. Reste je pense un PB sur les scu nommés qui on un angle supérieur a 180°, ça doit inversé le processus! Merci bien a vous deux, J'avance,ØlivierCa marche!Merci a vous, je vais pouvoir lancer la publication de quelques ~5800 fichiers sans manipulations fastidieuses. MerciMercietMerci Ølivier Modifié le 26 octobre 2018 par Olivier_CEA_Grenoble
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