Aller au contenu

wblocs par thématique SIG


fabcad

Messages recommandés

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 SIG

dans 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.dwg

COMMUNE-Lineaires.dwg

COMMUNE-Surfaciques.dwg

COMMUNE-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]

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

 

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 IAcadSelectionSet

Commande:

 

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

Lien vers le commentaire
Partager sur d’autres sites

Salut!!

Juste pour rire je la veut la version de gile A2077 32 Bits....

MDR!!!

Allez à plus

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

il s'agit de A2007 que je ne l'abandonnerais pour rien au monde

Tout a fait d'accord avec toi..

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

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é