Aller au contenu

récup contenu fenêtres/viewport


pelloux

Messages recommandés

Bonjour

 

Je redirige un message que j'avais posté sur un forum cadxp qui n'étais pas le bon. Voici son contenu :

 

1. Dans notre organisation, nous avons à peu près 1 milliers de fichiers dwg (certains avec des références externes) que nous devons passer d’un système de coordonnées à un autre. Le problème n'est pas tant le passage d'un système de référence à un autre des objets que le contenu des view ports des onglets de présentations que l'on doit récupérer.

 

Pour info : Je précise que j’ai envisagé d’utiliser les atlas sur AutoCAD MAP mais que cela ne m’a pas donné satisfaction et qu’il ne s'agit pas d'un problème spécifique à Map comme vous aller le voir.

 

N’étant pas familier de la programmation voici ce que serait l’enchainement des commandes.

 

 

Une 1ère routine :

 

- qui dans chaque présentation/mise en page, crée un rectangle/lwpolyligne (dans le cas de fenêtres/viewport rectangulaires) ou une polyligne polygonale (dans le cas de fenêtres/viewport polygonales).

 

- Mettre sous un calque "zones-impressions" ce rectangle ou ce polygone.

 

- Associer en Xdatas ou Ldatas le nom de la présentation, le nom du fichier et l'angle du scu si différent d'un scu général.

 

- Passe ce rectangle ou ce polygone de l’espace présentation à l’espace objet comme avec la fonction "_chspace".

 

 

 

Une 2ième routine :

 

A partir de toutes les présentations/mises en page d’un dwg, re-zoomer dans chaque fenêtres/viewport.

 

- Sélectionner toutes les polylignes du calque "zones-impressions".

 

- Récupérer l'information du nom de la présentation/mise en page.

 

- Aller sur la présentation associée afin de zoomer et d'orienter par rapport à la polyligne.

 

 

 

Voilà j’espère avoir été suffisamment clair.

 

Par avance merci.

 

 

PHP

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à tous,

 

Je suis intéressé aussi par ces routines surtout lorsque nous devons gérer des passerelles entre de la DAO et les SIG.

 

Pour nos programmeurs les plus expérimentés, on peut remplacer la partie xdatas par un bloc rectangulaire de 1x1unités (point d'insertion au centre du rectangle) et d'insérer ce dernier au centre de chaque viewport de chaque layout et prendre la hauteur et largeur de chaque viewport afin de modifier le bloc en facteur d'échelle X et Y.

 

Une 1ère routine :

 

- Dans chaque layout, insertion du bloc "relai" (si plus de deux viewport, prendre la plus grande)

 

- Mettre sous un calque concaténé : "zones-impressions+nom de la layout" ce bloc "relai".

 

- Modifier ce bloc "relai" d’espace layout à l’espace objet comme avec la fonction "_chspace".

 

 

 

Une 2ième routine :

 

Sur toutes les Layouts d’un dwg, re-zoomer dans chaque viewport à l'aide des blocs "relais".

 

- Sélectionner toutes les blocs "relais" des calques commencant par "zones-impressions".

 

- Récupérer le nom de la layout grâce au suffixe du calque du bloc relai pour aller sur la bonne layout (si inexistante arrêter la fonction).

 

- Aller sur la layout associée afin de zoomer par rapport au bloc relai en sélectionnant la viewport concernée.

1- Centre de la viewport = point d'insertion du bloc

2- zoom fenêtre sur les deux points bas gauche et haut droit du bloc.

Lien vers le commentaire
Partager sur d’autres sites

Voici mon premier jet pour insérer un bloc viewport par rapport à une viewport d'une layout et de l'envoyer dans l'espace modele.

(defun C:insert_bloc_viewport
	(/
		calque calque_vl
		centre centre_vl
		hauteur hauteur_vl
		longueur longueur_vl
		objet_acad_viewport
		objet_vl_viewport
		ss_viewport
	)
	(vl-load-com)
	(setq block "viewport")

	(foreach layout (layoutlist)
		(command "presentation" "Etablir" layout)
		(command "espacep")
		(command "resol" "in")
		;select viewport boundary
		(setq ss_viewport (ssget (list '(0 . "VIEWPORT"))))
		(setq objet_acad_viewport (entget (ssname ss_viewport 0)))
		(setq objet_vl_viewport (vlax-ename->vla-object (ssname ss_viewport 0)))
		;Get Viewport height with 
		(setq hauteur (cdr (assoc 41 objet_acad_viewport)))
		;Get Viewport width with 
		(setq longueur (cdr (assoc 40 objet_acad_viewport)))
		;Get Viewport Number
		(setq centre (cdr (assoc 10 objet_acad_viewport)))
		;Get Viewport Calque
		(setq calque (cdr (assoc 8 objet_acad_viewport)))

		;Get Viewport height with 
		(setq hauteur_vl (vla-get-height objet_vl_viewport))
		;Get Viewport width with 
		(setq longueur_vl (vla-get-width objet_vl_viewport))

		;Get Viewport Centre
		;(setq centre_vl (vla-get-center objet_vl_viewport))
		;(setq pointlist (vlax-3d-point centre_vl)

		;Get Viewport Calque
		(setq calque_vl (vla-get-layer objet_vl_viewport))

		(command "_.insert" block centre longueur hauteur "0")
		(command "_chspace" (entlast) "")
		(setq objet_vl_bloc_viewport (vlax-ename->vla-object (entlast)))
		(setq calque_bloc (strcat "print_zone-" (getvar "CTAB")))

		(if (not (tblobjname "LAYER" calque_bloc))
			(vla-add (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) calque_bloc)
		)

		(vla-put-layer objet_vl_bloc_viewport calque_bloc)
		(command "espacep")
	);fin foreach
	(princ)
);fin defun

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

voilà ce que cela donne chez moi =>

 

Commande: (LOAD "C:/Users/Lilian/Desktop/insert_bloc_viewport.lsp")

; erreur: caractère lu incorrect (octal): 0

 

Commande: insert_bloc_viewport

Commande inconnue "INSERT_BLOC_VIEWPORT". Appuyez sur F1 pour obtenir de

l'aide.

 

Une idée ?

Civil 3D 2024 - COVADIS_18.2

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

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é