Aller au contenu

Point HAUT DROIT suivant SCU courrant [RESOLUE]


Olivier_CEA_Grenoble

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par Olivier_CEA_Grenoble
Lien vers le commentaire
Partager sur d’autres sites

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

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.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 'extmin

du 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,

Ølivier

Ca marche!

Merci a vous, je vais pouvoir lancer la publication de quelques ~5800 fichiers sans manipulations fastidieuses.

 

Merci

Merci

et

Merci

 

Ølivier

Modifié par Olivier_CEA_Grenoble
Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité