Aller au contenu

Messages recommandés

Posté(e)

Bonjour

 

Je souhaite effectuer une translation (pan) et rotation (dview) dans plusieurs fenetres sur une même présentation.

Au final, je traiterai plusieurs présentations !

 

J'arrive à faire la boucle qui traite l'ensemble des présentations.

J'arrive aussi à récupérer une liste de l'ensemble des fenetres "Actives".

Mais lorsque je veux traiter, fenetre par fenetre (mspace+pan+dview+pspace), je bloque sur le traitement automatique du choix des fenetres avec la variable CVPORT qui lorsque l'Id de la fentre est > à 1 ...... erreur !!

 

Est-ce que qu'elqu'un aurait une idée ?

 

Merci

Posté(e)

Salut,

Ne pourrais-tu pas poster ton code afin que l'on puisse voir ton niveau pour savoir ce que nous devons te proposer pour que tu puisses comprendre stp ?

Autolisp ? ActiveX ? ...

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Oui bien sur

Je developpe en Lisp, mais je suis débutant ...

Voici le code de départ !

 

(Defun C:transvue (/ temp THISTAB VPLST VPS nblay llay nbvue listvue)

 

(setq *old1* (getvar "cmdecho"))

(setq *old2* (getvar "LAYOUTREGENCTL"))

(setvar "cmdecho" 0)

(setvar "LAYOUTREGENCTL" 0)

 

(setq THISTAB (getvar "CTAB"))

(setq nblay (lengthlist (setq llay (layoutlist))))

(setq a 0)

 

(while (< a nblay)

(progn

(setvar "CTAB" (nth a llay))

(setq VPLST (ssget "x" (list (cons 0 "viewport") ;(cons 68 1)

(cons 410 (nth a llay)))))

(setq nbvue (lengthlist (setq listvue (sset_liste VPLST))))

(setq b 0)

(if listvue

(while (< b nbvue)

(if (and

(/= (cdr (assoc 68 (entget (nth b listvue)))) -1)

(/= (cdr (assoc 68 (entget (nth b listvue)))) 0)

)

(progn

(setvar "CVPORT" (cdr (assoc 69 (entget (nth b listvue)))))

(command "_.MSPACE")

(command "_.UCS" "_W")

(command "-pan" (list 0 0 0) (list -617592.5171 -144913.5211 0))

(command "_.DVIEW" "" "_TW" -5 "")

(command "_.PSPACE")

)

)

(setq b (+ b 1))

)

)

(setq vplst nil)

(setq nbvue nil)

(setq a (+ a 1))

)

)

 

(setvar "CTAB" THISTAB)

(RestaureEnv) ; Appel à la procédure de restauration

)

Posté(e)

Re,

Je me rappel avoir recontré ce problème de modification de CVPORT impossible...

 

Essaye en activant d'abord la fenêtre, puis en modifiant cvport ensuite (si je me souviens bien...)

 

(command "_.MSPACE")
(setvar "CVPORT" (cdr (assoc 69 (entget (nth b listvue)))))

 

PS :

Je vois que tu utilises des routine à toi.

Je suis intrigué par "lengthlist"...

Tu m'expliques sont utilité ?

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Pour Lenghtlist, juste une routine pour calculer le nombre d'élements dans une liste formée d'entité !! cette liste est d'alleurs formée par le SSET_LISTE qui à partir du jeu de selection de SSGET, ressort l'ensemble des entité par une liste de noms !

 

Je vais essayer en activant d'abord une fenêtre .. puis d'activer les autres fenetres par leur ID et donc un CVPORT ... 2 ou 3 ou 4 !!

 

Posté(e)

Re,

Pour Lenghtlist, juste une routine pour calculer le nombre d'élements dans une liste formée d'entité !!

Va voir dans l'aide la fonction length (et tant que t'y est, sslength)

 

à partir du jeu de selection de SSGET, ressort l'ensemble des entité par une liste de noms !

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

voici les codes des 2 fonctions :

 

;*********************************************************

; LENGTHLIST

; calcul du nombre d'éléments d'une liste

;---------------------------------------------------------

(defun LENGTHLIST (liste / nbre elt)

 

(setq nbre 0)

 

(if (= (type liste) 'LIST)

(foreach elt liste (setq nbre (1+ nbre)))

)

 

nbre

)

 

;*****************************************************************************

; SSET_LISTE

; Retourne une liste formée des nom d'entité contenus dans un jeux de selection

;------------------------------------------------------------------------------

(defun SSET_LISTE (sset / liste n ent)

(setq liste nil)

(setq n 0)

(if (not (eq sset nil))

(progn

(while (< n (sslength sset))

(setq ent (ssname sset n))

(setq liste (cons ent liste))

(setq n (+ n 1))

)

)

)

liste

)

 

Posté(e)

Re,

As-tu regarder dans l'aide du développeur les fonctions que je te donnes plus haut ?...

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Il est vrai que cela donne le même résultat !!

Elles ont du fonctionner pour un besoin specifique et il y longtemps !!

Merci pour l'info !

 

Concernant le CVPORT .... toujours le même probleme !! impossible de changer son ID !

Posté(e)

Re,

 

Test cela ci-dessous.

Je t'ai re-écris ton lisp en gardant tes (command... , mais en changeant la logique de traitement, afin de te montrer l'utilisation de certaines fonctions, et d'une certaines manière pour réaliser des boucles (il y en a d'autres...)

 

Si tu as besoin d'explication, n'hésite pas.

 

(Defun C:transvue (/ FEN I LST-LAY THISTAB)
 (setq lst-lay (layoutlist)
THISTAB (getvar "CTAB"))
 (repeat (setq i (length lst-lay))
   (setvar "CTAB" (nth (setq i (1- i)) lst-lay))
   (setq fen (vports))
   (foreach n fen
     (if (not (equal (car n) 1))
(progn
  (command "_.MSPACE")
  (setvar "CVPORT" (car n))
  (command "_.UCS" "_W")
  (command "-pan" (list 0 0 0) (list -617592.5171 -144913.5211 0))
  (command "_.DVIEW" "" "_TW" -5 "")
  (command "_.PSPACE")
  )
)
     )
   )
 (setvar "CTAB" THISTAB)
 (princ)
 )

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

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é