fabcad Posté(e) le 10 septembre 2010 Posté(e) le 10 septembre 2010 Un développement en Auto-Visual LISP qui ravira les férus de SIG.Avec un dessin AutoCAD (MAP) pouvoir créer des dessins cible (wbloc) par type d'objet SIGdans le dossier du dessin source. Les fichiers cible porteront comme préfixe le nom du dessin source et comme préfixe les 4 types d'objets SIG séparé par un tiret. Exemple : soit un dessin source nommé COMMUNE.dwg alors les fichiers cibles se nommeront :COMMUNE-Ponctuels.dwgCOMMUNE-Lineaires.dwgCOMMUNE-Surfaciques.dwgCOMMUNE-Textuels.dwg J'ai répertorié les différents types d'objets AutoCAD pour cette routine :Ponctuels :POINT,INSERT Lineaires si objets non fermés :LWPOLYLINE, 2DPOLYLINE, ARC, LINE, SPLINE, TRACE Surfaciques si objets fermés :MPOLYGONE, LWPOLYLINE, REGION, 2DPOLYLINE, ELLIPSE, MLINE, SPLINE, SOLID Textuels :TEXT, MTEXT, ATTDEF Ca serait tip-top ! Merci [Edité le 11/9/2010 par fabcad]
(gile) Posté(e) le 11 septembre 2010 Posté(e) le 11 septembre 2010 Salut, Je suis sûr que tu es tout à fait capable d'écrire ce genre de LISP.Il suffit de faire 4 jeux de sélection filtrés et de les passer comme argument à la commande wbloc ou à la fonction vla-wbloc.Tu peux voir un exemple ici qui crée un fichier par calque. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 11 septembre 2010 Posté(e) le 11 septembre 2010 Hello SVP ne pas oublier les MPolygons dans les objets surfaciques Le Decapode PS: je suis rentre de vacances (3 semaines) Lundi dernier, et le retour est dur ! Autodesk Expert Elite Team
fabcad Posté(e) le 11 septembre 2010 Auteur Posté(e) le 11 septembre 2010 Merci Gile,Voici mon début de code, je souhaiterais un peu d'aide pour les filtres de sélections et les contrôles sur les objets fermés. ; Ponctuels : ; POINT,INSERT ; Lineaires si objets non fermés : ; LWPOLYLINE, 2DPOLYLINE, ARC, LINE, SPLINE, TRACE ; Surfaciques si objets fermés : ; LWPOLYLINE, REGION, 2DPOLYLINE, ELLIPSE, MLINE, SPLINE, SOLID ; Textuels : ; TEXT, MTEXT, ATTDEF ;; OBJETSTODWG ;; Crée un fichier DWG pour chaque catégorie d'objets (defun c:ObjetsToDwg (/ acdoc layers prefix name llst ss) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) prefix (getvar 'dwgprefix) name_doc_source (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 4)) );fin setq variables ;;; 111111 Début de la création de la couche des Ponctuels (if (ssget "_X" (list '(410 . "Model") (cons 8 name))) (progn (setq ss (vla-get-ActiveSelectionSet acdoc)) (setq name_Ponctuels (strcat name_doc_source "-" "Ponctuels")) (vla-Wblock acdoc (strcat prefix name_Ponctuels ".dwg") ss) (vla-delete ss) );fin progn );fin if ;;; 222222 Début de la création de la couche des Lineaires (if (ssget "_X" (list '(410 . "Model") (cons 8 name))) (progn (setq ss (vla-get-ActiveSelectionSet acdoc)) (setq name_Lineaires (strcat name_doc_source "-" "Lineaires")) (vla-Wblock acdoc (strcat prefix name_Lineaires ".dwg") ss) (vla-delete ss) );fin progn );fin if ;;; 333333 Début de la création de la couche des Surfaciques (if (ssget "_X" (list '(410 . "Model") (cons 8 name))) (progn (setq ss (vla-get-ActiveSelectionSet acdoc)) (setq name_Surfaciques (strcat name_doc_source "-" "Surfaciques")) (vla-Wblock acdoc (strcat prefix name_Surfaciques ".dwg") ss) (vla-delete ss) );fin progn );fin if ;;; 44444 Début de la création de la couche des Textuels (if (ssget "_X" (list '(410 . "Model") (cons 8 name))) (progn (setq ss (vla-get-ActiveSelectionSet acdoc)) (setq name_Textuels (strcat name_doc_source "-" "Textuels")) (vla-Wblock acdoc (strcat prefix name_Textuels ".dwg") ss) (vla-delete ss) );fin progn );fin if (princ) );fin defun ObjetsToDwg
(gile) Posté(e) le 11 septembre 2010 Posté(e) le 11 septembre 2010 Salut, Pour les filtres, il faut utiliser les opérateurs logiques (AND, OR, NOT) avec les codes DXF. Un exemple, qui utilise mapcar avec 2 listes : une liste filtres et une liste de suffixes correspondants pour les noms de fichiers. (defun c:wbsig (/ acdoc prefix ss) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) prefix (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) ) ) (mapcar '(lambda (filter suffix) (if (ssget "_X" filter) (progn (setq ss (vla-get-ActiveSelectionSet acdoc)) (vla-Wblock acdoc (strcat prefix suffix) ss) (vla-delete ss) ) ) ) (list ;; filtre ponctuels '((410 . "Model") (0 . "POINT,INSERT")) ;; filtre linéaires (list '(410 . "Model") '(-4 . " ;; arcs, lignes, traces '(0 . "ARC,LINE,TRACE") ;; lwpolyligne et splines ouvertes '(-4 . " '(0 . "LWPOLYLINE,SPLINE") '(-4 . " '(-4 . "&") '(70 . 1) '(-4 . "NOT>") '(-4 . "AND>") ;; polyligne 2d ouvertes '(-4 . " '(0 . "POLYLINE") '(-4 . " '(-4 . "&") '(70 . 121) ; '(70 . 113) pour ajouter les polylignes 3d ouvertes '(-4 . "NOT>") '(-4 . "AND>") ;; multilignes ouvertes '(-4 . " '(0 . "MLINE") '(-4 . " '(-4 . "&") '(71 . 2) '(-4 . "NOT>") '(-4 . "AND>") ;; arcs elliptiques '(-4 . " '(0 . "ELLIPSE") '(-4 . " '(-4 . "!=") '(41 . 0.0) '(-4 . "!=") (cons 42 (* 2 pi)) '(-4 . "OR>") '(-4 . "AND>") '(-4 . "OR>") ) ;; filtre surfaciques (list '(410 . "Model") '(-4 . " ;; mpolygons, régions, solides '(0 . "MPOLYGON,REGION,SOLID") ;; lwpolyligne et splines fermées '(-4 . " '(0 . "LWPOLYLINE,SPLINE") '(-4 . "&") '(70 . 1) '(-4 . "AND>") ;; polylignes 2d fermées '(-4 . " '(0 . "POLYLINE") '(-4 . " '(-4 . "&") '(70 . 120) '(-4 . "NOT>") '(-4 . "&") '(70 . 1) '(-4 . "AND>") ;; multilignes fermées '(-4 . " '(0 . "MLINE") '(-4 . "&") '(71 . 2) '(-4 . "AND>") ;; ellipses fermées '(-4 . " '(0 . "ELLIPSE") '(-4 . "=") '(41 . 0.0) '(-4 . "=") (cons 42 (* 2 pi)) '(-4 . "AND>") '(-4 . "OR>") ) ;; filtre textuels '((410 . "Model") (0 . "MTEXT,TEXT")) ) '("-Ponctuels.dwg" "-Lineaire.dwg" "-Surfacique.dwg" "-Textuel.dwg" ) ) (princ) ) PS : avec vla-Wblock je jeu de sélection doit être du type VLA-OBJECT et non PICKSET, regarde aussi la fonction vl-filename-base qui évite une expression substr compliquée. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabcad Posté(e) le 11 septembre 2010 Auteur Posté(e) le 11 septembre 2010 Merci Gile, Le coup de vl-filename-base, je ne connaissais pas. Je ne maitrise pas du tout mapcar et lamda. Merci pour ton sens du pratique car je suis plutôt un séquentiel (étapes par étapes) Bonne soirée, Fabcad
(gile) Posté(e) le 11 septembre 2010 Posté(e) le 11 septembre 2010 L'utilisation de mapcar est ici un peu un exercice de style.On aurait très bien pu définir une fonction qui fait la sélection puis crée le fichier et l'appeler quatre fois de suite en lui passant comme arguments le document, le nom de fichier et le filtre (un peu comme les arguments de vla-Wblock). (defun ss2wblock (document filename filter / ss) (vl-load-com) (if (ssget "_X" filter) (progn (setq ss (vla-get-ActiveSelectionSet document)) (vla-Wblock document filename ss) (vla-delete ss) ) ) ) (defun c:wbsig (/ acdoc prefix) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) prefix (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) ) ) (ss2wblock acdoc (strcat prefix "-ponctuel.dwg") '((410 . "Model") (0 . "POINT,INSERT")) ) (ss2wblock acdoc (strcat prefix "-lineaire.dwg") (list '(410 . "Model") '(-4 . " ;; arcs, lignes, traces '(0 . "ARC,LINE,TRACE") ;; lwpolyligne et splines ouvertes '(-4 . " '(0 . "LWPOLYLINE,SPLINE") '(-4 . " '(-4 . "&") '(70 . 1) '(-4 . "NOT>") '(-4 . "AND>") ;; polyligne 2d ouvertes '(-4 . " '(0 . "POLYLINE") '(-4 . " '(-4 . "&") '(70 . 121) ;_ '(70 . 113) pour ajouter les polylignes 3d ouvertes '(-4 . "NOT>") '(-4 . "AND>") ;; multilignes ouvertes '(-4 . " '(0 . "MLINE") '(-4 . " '(-4 . "&") '(71 . 2) '(-4 . "NOT>") '(-4 . "AND>") ;; arcs elliptiques '(-4 . " '(0 . "ELLIPSE") '(-4 . " '(-4 . "!=") '(41 . 0.0) '(-4 . "!=") (cons 42 (* 2 pi)) '(-4 . "OR>") '(-4 . "AND>") '(-4 . "OR>") ) ) (ss2wblock acdoc (strcat prefix "-surfacique.dwg") (list '(410 . "Model") '(-4 . " ;; mpolygons, régions, solides '(0 . "MPOLYGON,REGION,SOLID") ;; lwpolyligne et splines fermées '(-4 . " '(0 . "LWPOLYLINE,SPLINE") '(-4 . "&") '(70 . 1) '(-4 . "AND>") ;; polylignes 2d fermées '(-4 . " '(0 . "POLYLINE") '(-4 . " '(-4 . "&") '(70 . 120) '(-4 . "NOT>") '(-4 . "&") '(70 . 1) '(-4 . "AND>") ;; multilignes fermées '(-4 . " '(0 . "MLINE") '(-4 . "&") '(71 . 2) '(-4 . "AND>") ;; ellipses fermées '(-4 . " '(0 . "ELLIPSE") '(-4 . "=") '(41 . 0.0) '(-4 . "=") (cons 42 (* 2 pi)) '(-4 . "AND>") '(-4 . "OR>") ) ) (ss2wblock acdoc (strcat prefix "-textuel.dwg") '((410 . "Model") (0 . "MTEXT,TEXT")) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabcad Posté(e) le 11 septembre 2010 Auteur Posté(e) le 11 septembre 2010 Bonsoir, Merci pour cet exercice de style. Bonne fin de week-end, Fabcad
lecrabe Posté(e) le 12 septembre 2010 Posté(e) le 12 septembre 2010 Hello Magnifique et Merci a Fabcad pour l'idee Chapeau bas pour Gilles pour sa version ! Je vais tester cette semaine Le Decapode Autodesk Expert Elite Team
lecrabe Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 Hello Pour Info, j'ai teste le WBSIG.lsp (de Gilles) sur MAP 2006 / 2009 / 2010 ! :) Comme d'habitude, ca marche nickel-chrome !! :D Merci, Le Decapode Autodesk Expert Elite Team
lecrabe Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 Hello Avec un dessin test perso "un peu special", je passe sous MAP 2009 MAIS je plante sous MAP 2006 avec l'erreur : Commande: wbsig; erreur: Erreur Automation Echec de l'appel AddItems d'une méthode sur une interface IAcadSelectionSetCommande: Alors qu'un autre dessin "plus classique" etait passe sans souci sous MAP 2006 ! Pour Fabrice et Gilles, je vous envoie par MP le dessin test juste pour info car il peut s'averer utile pour certains tests ! Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 Salut, Aucun problème avec ton fichier sur :A2011 64 bitsA2010 32 bitsA2077 32 bits Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
RhymOne Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 Salut!!Juste pour rire je la veut la version de gile A2077 32 Bits....MDR!!!Allez à plus DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
(gile) Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 Juste pour rire je la veut la version de gile A2077 32 Bits.... Oupss !...Nos lecteurs auront rectifié d'eux même, il s'agit de A2007 que je ne l'abandonnerais pour rien au monde, elle est tellement plus stable et plus rapide que les suivantes (dont les gadgets ne m'intéressent guère). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 Hello Gilles C pas important si ton WBSIG ne fonctionne pas toujours sous 2006 ! Je suis comme toi sauf que je n'ai plus la 2007 (MAP etait NUL en 2007 et correct en 2008) par contre je garde precieusement mon MAP 2004, 2006, 2008, 2009, 2010, 2011 Encore Merci, Le Decapode Autodesk Expert Elite Team
RhymOne Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 il s'agit de A2007 que je ne l'abandonnerais pour rien au mondeTout a fait d'accord avec toi.. DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
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