Aller au contenu

LISP pour creer une presentation depuis une zone de l\'espace objet


pitt13

Messages recommandés

Messieurs bonjour,

je suis a la recherche d'une routine permettant de créer des présentations depuis des folios dans l'espace objet : j'ai des folios dans l'espace objet espacés a intervalles reguliers et je doit créer une présentation pour chacun des folios afin de pouvoir les publier et les editer sur une imprimante.

 

Pourriez vous m'indiquer si l'un d'entre vous a un LISP pour effectuer cette tache assez gourmande en temps ?

 

Merci d'avance

 

Le Pitt13

 

 

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Voire ce lisp , merci à son auteur

 

 

 ;;;Fonctionnement :
;;;- Les cadres de pages doivent être des blocs.
;;;(Si vous avez des cadres en simple rectangle, transformez en un en bloc et faites un réseau ou un copier)
;;;- Afin d'éviter toutes erreur, une présentation déjà paramétré doit exister (Une fenêtre de présentation cadré et mis à l'échelle, Traceur, échelle de tracé pour un cadre).
;;;- Les cadres en Espace Objets peuvent être à n'importe quel échelle, et peuvent être mélangé Portrait et Paysage.
;;;- L'unité d'insertion doit être en millimètre, centimètre ou mètre.
;;;- Le nom des onglet sera incrémenter de +1.

;;;- Commande : CEP

; Crée un onglet EP par cadre (bloc) de page sélectionné en EO
; par Bred - Un onglet déjà paramétrer doit exister
(defun c:CEP (/ ACDOC B C FEN I LAYS N-P NOM-P ONG-BASE ONG_DEST SEL XMIN YMAX
A-P HAUT LARG P1 P2 NOM ECH LAY LOCK UNIT)
(vl-load-com)
; 4 Millimètres 5 Centimètres 6 Mètres
(setq Unit (cdr (assoc (getvar "INSUNITS") '((4 . 1) (5 . 10) (6 . 1000)))))
(while (not sel)
(setq sel (car (entsel "\n Choix du cadre (Bloc) :")))
(if sel
(if (not (equal (vla-get-ObjectName (setq b (vlax-ename->vla-object sel))) "AcDbBlockReference"))
(setq sel nil)))
)
(setq sel (ssget '((0 . "INSERT")))
AcDoc (vla-get-activedocument (vlax-get-acad-object))
nom-p (getstring t "\n Nom des Onglets à Créer :")
layS (layoutlist))

(if (> (length layS) 1)
(progn
(princ "\n Copie configuration traceur d'onglet Existant. \n Plusieurs Présentations détectées.")
(while (not ong-base)
(princ "\n")
(repeat (setq i (length layS))
(princ (strcat (nth (- (length layS) i) layS) " * "))
(setq i (1- i)))
(setq ong-base (getstring t "\n Présentation d'où la configuration du traceur sera récupérée :"))
(if (not (member ong-base layS))
(setq ong-base nil))))
(setq ong-base (car layS)))

(setq a-p (vla-item (vla-get-layouts AcDoc) ong-base))
(vla-getcustomscale a-p 'n 'm)


(vla-put-ActiveLayout AcDoc a-p)
(vlax-for e (vla-get-paperspace AcDoc)
(if (equal (vla-get-ObjectName e) "AcDbViewport")
(setq lay (vla-get-Layer e)
lock (vla-get-DisplayLocked e)))
)

(setq i 0)
(repeat (sslength sel)
(if (vlax-property-available-p (vlax-ename->vla-object (ssname sel i)) 'effectivename)
(setq nom vla-get-effectivename)
(setq nom vla-get-name))

(if (equal (nom (setq c (vlax-ename->vla-object (ssname sel i))))
(nom b))
(progn
(vla-GetBoundingBox c 'xmin 'ymax)
(setq n-p (vla-add (vla-get-Layouts AcDoc) (setq ong_dest (strcat nom-p " - " (rtos (1+ i) 2 0)))))

(setq ech (vla-get-XEffectiveScaleFactor c))
(vla-copyfrom n-p a-p)
(vla-put-ActiveLayout AcDoc n-p)
(setq fen
(vla-AddPViewport (vla-get-paperspace AcDoc) (vlax-3d-point '(0 0 0))
(setq Larg (* Unit (/ (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin))) ech)))
(setq Haut (* Unit (/ (- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin))) ech)))))
(vla-put-Layer fen lay)
(vla-put-DisplayLocked fen lock)
(vla-ZoomExtents (vlax-get-acad-object))
(vla-Display fen :vlax-true)
(vla-put-MSpace AcDoc :vlax-true)
(vla-put-ActivePViewport AcDoc fen)
(vla-ZoomWindow (vlax-get-acad-object) xmin ymax)
(vla-put-MSpace AcDoc :vlax-false)
(if (> (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin)))
(- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin))))
(vla-put-PlotRotation (vla-get-activelayout AcDoc) ac90degrees)
(vla-put-PlotRotation (vla-get-activelayout AcDoc) ac0degrees))
(setq p1 (vlax-make-safearray vlax-vbdouble (cons 0 1))
p2 (vlax-make-safearray vlax-vbdouble (cons 0 1)))
(vlax-make-variant
(vlax-safearray-fill p1 (list (- (/ Larg 2)) (- (/ Haut 2)))))
(vlax-make-variant
(vlax-safearray-fill p2 (list (/ Larg 2) (/ Haut 2))))
(vla-put-PlotType (vla-get-activelayout AcDoc) acWindow)
(vla-setwindowtoplot (vla-get-activelayout AcDoc) p1 p2)
(setq i (1+ i))
) ) )
(setvar "TILEMODE" 1)
(princ)
)

Lien vers le commentaire
Partager sur d’autres sites

Messieurs bonjour,

j'ai testé ce matin le LISP de Patrick_35 dans un post précédent mais celui-ci ne fonctionne pas, par contre celui de Bred fonctionne mais pas comme j'en aurai besoin : ce LISP permet de creer qu'une seule presentation a partir d'une presentation existante : une bonne base pour moi :D

 

Ce que je recherche c'est de pouvoir creer plusieurs presentations suivant le nombre de blocs present dans l'espace objet, par exemple, (bloc rectangle simulant les dimensions d'une feuille A4 ou A3). En gros : si j'ai 14 blocs (les fameux rectangles) dans l'espace objet, le resultat que je cherche a avoir c'est 14 presentations avec incrementation des noms.

 

Assez compliqué

 

Je vous tiens au courant sur l'avancement de ma recherche.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Voici 2 lisp(s) qui pourront compléter le tien (je ne me souviens plus de l'auteur mais l'en remercie pour leur efficacité):

 

CLAYOUT: Etablit plusieurs présentations en prenant la première comme référence (présentation papier)

et en décalant les suivantes vers le bas. (dans notre cas ==> décalage de 205 vers le bas)

 

 

CLAYOUTT: Etablit plusieurs présentations en prenant la première comme référence (présentation papier)

et en décalant les suivantes vers la droite. (dans notre cas ==> décalage de 300 vers la droite)

 

Pour les décalage il suffit d'ouvrir le lisp et de modifier la mesure.

 

CLAYOUT:

 

(defun llayouts (/ acadobject ActDoc LAYOUTS LLAY n)

(setq acadObject (vlax-get-acad-object))

(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))

(setq LAYOUTS (vla-get-Layouts ActDoc))

(setq LLAY nil)

(vlax-for n LAYOUTS

(setq LLAY (cons (vla-get-name n) LLAY))

)

LLAY

)

 

(defun NewNameLayout (OLDLAY NEWLAY)

(setq RES nil)

(while NEWLAY

(setq ELEM (car NEWLAY))

(setq NEWLAY (cdr NEWLAY))

(if (not (member ELEM OLDLAY))

(setq RES ELEM)

)

)

RES

)

 

 

(defun c:clayout ()

(vl-load-com)

(setq NBPAGE (getint "\nNombre de copies : "))

(repeat NBPAGE

(setq OLDLLAY (llayouts))

(command "_layout" "_c" "" "")

(setq NEWLLAY (llayouts))

(setq NNAME (NewNameLayout OLDLLAY NEWLLAY))

(command "_layout" "_s" NNAME)

(command "_MSPACE")

(command "_-pan" "_non" '(0 0) "_non" '(0 205))

(command "_PSPACE")

)

(princ)

)

 

 

 

CLAYOUTT:

 

(defun llayouts (/ acadobject ActDoc LAYOUTS LLAY n)

(setq acadObject (vlax-get-acad-object))

(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))

(setq LAYOUTS (vla-get-Layouts ActDoc))

(setq LLAY nil)

(vlax-for n LAYOUTS

(setq LLAY (cons (vla-get-name n) LLAY))

)

LLAY

)

 

(defun NewNameLayout (OLDLAY NEWLAY)

(setq RES nil)

(while NEWLAY

(setq ELEM (car NEWLAY))

(setq NEWLAY (cdr NEWLAY))

(if (not (member ELEM OLDLAY))

(setq RES ELEM)

)

)

RES

)

 

 

(defun c:clayoutt ()

(vl-load-com)

(setq NBPAGE (getint "\nNombre de copies : "))

(repeat NBPAGE

(setq OLDLLAY (llayouts))

(command "_layout" "_c" "" "")

(setq NEWLLAY (llayouts))

(setq NNAME (NewNameLayout OLDLLAY NEWLLAY))

(command "_layout" "_s" NNAME)

(command "_MSPACE")

(command "_-pan" "_non" '(0 0) "_non" '(-300 0))

(command "_PSPACE")

)

(princ)

)

Lien vers le commentaire
Partager sur d’autres sites

Re bonjour tout le monde

 

merci Oran pour les 2 LISP faudrai que je couple avec le LISP de Bred sur l'espace presentation.

 

lili2006 en fait le truc c'est que j'ai des folios (A4 297x210mm) en espace objet (EO) espacés a intervalles régulier sur X et sur Y, un peu comme une grille. Chaque présentation en espace papier (EP) est une vue en zoom fenetre du folio :

- en EP ,nom de la presentation n°1 = F001 qui est une vue en zoom fenetre sur le folio n°1 dans EO ;

 

puis

 

- en EP ,nom de la presentation n°2 = F002 qui est une vue en zoom fenetre sur le folio n°2

 

etc...

Lien vers le commentaire
Partager sur d’autres sites

salut,

Ce que tu viens d'expliquer est exactement ce que devrait faire le lisp "CEP".

Mais ça fait longtemps qu'il a été fait, et je ne l'ai pas testé sur les dernières....

quelle version d'Autocad utilises tu ?

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

Lien vers le commentaire
Partager sur d’autres sites

... je viens de le tester sur la 2011, ça fonctionnes toujours... (qu'est-ce qu'il est bon le gars qu'à fait ça !) :P

 

- Tu lances CEP

- tu sélectionnes un cadre (un bloc)

- tu sélectionnes ensuite par une fenêtre de capture tous les cadres que tu veux traiter (si tu les veux dans l'ordre, faut les sélectionner un par un)

- tu donnes le nom de l'onglet (ici F00)

- tu valides.

- tu laisses faire.

 

Pour que tu n'ai pas d'erreur, tu paramètres un onglet (que tu pourras supprimer ensuite) tous comme tu veux : L'imprimante, le zoom, etc... en cadran bien la fenêtre sur un de tes folio.

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Bred

je tourne sur une version 2010

 

Ca ne fonctionne pas trop bien apparement sur 2010

 

Extrait de la console :

Choix du cadre (Bloc) :

Choix des objets: Spécifiez le coin opposé: 1 trouvé(s)

 

Choix des objets: Spécifiez le coin opposé: 1 trouvé(s), 2 au total

 

Choix des objets: Spécifiez le coin opposé: 1 trouvé(s), 3 au total

 

Choix des objets: Spécifiez le coin opposé: 1 trouvé(s), 4 au total

 

Choix des objets:

Nom des Onglets à Créer :F00

Régénération de la présentation.

Régénération de la présentation.

Régénération de la présentation.

 

Commande: Régénération du modèle.

 

Commande:

Commande:

Commande: ; erreur: Erreur Automation Entrée incorrecte

 

 

Une seule présentation est créer : F00-1, je testerai sur une autre version.

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

(y'a des bugs dans les avatars on dirait....)

 

Je viens de tester sur 2010 (EN) et ça fonctionne. :casstet:

 

As-tu bien paramétrer un onglet correctement : Echelle, Style, imprimante... et tu fais un cadrage de ton aire de fenêtre par "fenêtre" .

 

 

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour tout le monde,

merci thry0 pour cette description du cadrage fenetre :D, c'est a cause de ce petit changement que cela ne fonctionnait pas : car toute mes impression sont faite en étendu, du coup erreur.

 

Merci Bred pour ce fabuleux LISP et tout les personnes qui ont participées : lili2006, oran, lesourd2 et patrick_35

 

 

Cordialement

Pitt13

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonsoir à toutes et tous,

 

lex

 

erreur: Erreur Automation Entrée incorrecte

 

C'est pour les mêmes raisons,...

 

Et la réponse à été donné par thry0

 

 

Par cadrage "fenêtre" il faut comprendre

la nécessité de saisir ta zône de tracé au moyen de "fenêtre"

dans l'aire du tracé ...

 

Remonte un peu le post pour mieux comprendre éventuellement,...

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Salut,

tu trouveras ci-joint ton fichier avec une présentation paramétrée afin que les autres onglets soient créés comme tu le veux.

(j'ai fait un test avec un nom d'onglet "toto", supprimes les avant si tu veux, mais pas la première présentation.)

 

http://file.ahst.fr/get.php?id=4d6a0fa0c7733

 

 

[Edité le 27/2/2011 par Bred]

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines aprè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 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é