pelloux Posté(e) le 23 janvier 2012 Posté(e) le 23 janvier 2012 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
fabcad Posté(e) le 23 janvier 2012 Posté(e) le 23 janvier 2012 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 bloc2- zoom fenêtre sur les deux points bas gauche et haut droit du bloc.
fabcad Posté(e) le 25 janvier 2012 Posté(e) le 25 janvier 2012 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
lili2006 Posté(e) le 25 janvier 2012 Posté(e) le 25 janvier 2012 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_viewportCommande inconnue "INSERT_BLOC_VIEWPORT". Appuyez sur F1 pour obtenir de l'aide. Une idée ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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