Aller au contenu

Sélection d'un bloc DWG avec le langage LISP


Novice_python

Messages recommandés

Bonjour à tous,

 

Je suis actuellement en stage dans une collectivité territoriale. Je suis débutant dans le langage LISP. Je dois contrôler la conformité d'un plan DWG avec une charte graphique imposée. Pour ce faire, j'ai préalablement effectué cette charte graphique.

 

Maintenant, je dois extraire tous les objets (lignes, points et blocs) ne respectant pas les normes prédéfinies, puis les insérer dans un calque "Objets_exclus".

 

Pour ce faire, j'ai regardé dans beaucoup de forums et je pensais travailler de la sorte :

1) création du calque accueillant ces futurs objets exclus de la charte

2) réalisation d'une boucle répertoriant les éléments non conformes

3) déplacement de ces éléments vers le calques créés.

 

1) création du calque accueillant ces futurs objets exclus de la charte

Pour ce qui est de la création, pas de problème :

 

(defun c:creation_calque()

(command "-calque" "n" "Objets_exclus" "co" "7" "Objets_exclus" "ep" "0" "Objets_exclus" "tl" "Continuous" "Objets_exclus" "")

)

 

2) Mon problème intervient à partir de cette étape. Je n'arrive pas à réaliser la boucle permettant de sélectionner certains objets. Par exemple, la charte graphique indique que le bloc "112_cruche" doit être dans le calque "bateau" et avoir une couleur "bleue". Or, dans le dessin, ce bloc est dans le calque "bidule" et présente une couleur "verte". Ainsi, je voudrais le sélectionner et le transférer dans le calque "Objets_exclus"...

 

3) De même que précédemment, je ne trouve pas la commande permettant de réaliser cette fonction.

 

Un petit peu d'aide ne serait pas de refus :)

Lien vers le commentaire
Partager sur d’autres sites

Vue d'ici, il n'est pas évident de faire un algorithme que répertorie tout ce qui est hors charte et qui soit exhaustif.

Si tu peux lister les règles, de ce qui est conforme, tu peu toujours tester si un objet ne répond a aucune règle, mais ça risque d'être un peu longuet...

 

As tu regarger du coté des "normes de dessin" je crois que cette fonction autocad pourai deja te mâcher le boulot, mais pour ce machin que je n'ai jamais utilisé comme pour le lisp, je ne peux t'en dire plus...

Lien vers le commentaire
Partager sur d’autres sites

Oui en effet, j'ai déjà fait avec l'outil de vérificateur de normes sous AutoCAD, mais on cherche un moyen de visualiser les anomalies à l'écran. D'où l'idée de créer un calque et d'y intégrer les éléments hors gabarit. J'ai fait la même chose sous Python (avec des blocs), le programme marche bien mais même remarque qu'avec l'outil "vérificateur de normes en différé".

 

Donc bon, je recherche sur internet et dans les cours LISP, sans grand succès à vrai dire ...

Lien vers le commentaire
Partager sur d’autres sites

Il y a toujours l'initiation de (gile)

 

http://gilecad.azurewebsites.net/Tutorials/Introduction_a_AutoLISP.pdf

 

regarde aussi son lisp spécial sélection ou sélection match que tu trouvera ici... mais pour une initiation c'est du grand art...

http://cadxp.com/topic/14427-les-lisp-de-gile/

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Novice_python,

 

Après la création de ton calque, voici les différentes étapes à suivre avec les principales fonctions nécessaires. Une recherche dans l'aide et le forum pour chacune d'elle au fur et à mesures devrait t'aider.

 

1/ Création du variable avec l'ensemble des objets.

fonction :

> setq

> ssget

2/ Lancement boucle sur l'ensemble des objets

fonction :

> repeat

> sslength

3/ Création d'une variable avec l'entité n du jeu de sélection

fonction :

> ssname

4/ Regarder les propriétés de l'entité

fonction :

> entget + code dxf

5/ Vérification de l'adéquation avec ta charte

fonction :

> assoc

> equal

6/ Modification du calque de l'entité si besoin

> cond

> subst

> entmod

 

Commence avec sa puis pose des questions précises lorsque tu rencontre un problème.

 

Olivier

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

J'ai développé un programme qui teste calque après calque les entités présentent, etc. Chaque erreur rencontrée est décrite dans un fichier erreur. Pour cela j'utilise le maintien de l'entité.

Un autre lisp me permet de zoomer sur les erreurs les unes après les autres.

Ce n'est pas une programmation optimum mais ça marche.

 

Bonne journée.

VannesIntégrateurTopo.zip

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bonjour à vous trois,

 

Merci déjà pour votre aide !! C'est super.

 

Olivier : je me lance cette semaine dans le langage de programmation en suivant tes principales étapes ! Je te tiens au courant de l'avancée de cette programmation...

 

Vannes : Merci pour ton script ! Je vais à présent jeter un coup d'œil pour l'adapter et le modifier afin qu'il colle à ce que je désire ! Je te tiens également au courant ...

 

Petite question supplémentaire : est ce que vous savez si PYTHON peut également faire le travail ?

 

Bonne journée et merci encore !!

Lien vers le commentaire
Partager sur d’autres sites

Oui on peut contrôler Autocad avec Python via l'interface COM.

Du coup on a accès aux fonctions vlax-

 

Exemple:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import win32com.client

acad = win32com.client.Dispatch("AutoCAD.Application")
if AutoCAD != None:
  doc = acad.ActiveDocument
  ms = doc.ModelSpace
  count = ms.Count
  if count == 0:
    print "Erreur: Veuillez ouvrir un dessin Autocad"
    exit(1)

  plines = []
  for item in ms:
     if 'polyline' in item.ObjectName.lower():
         item = win32com.client.CastTo(item, "IAcadPolyline")
         if '1PARCELLE' == item.Layer:
               plines.append(item)
  doc.Utility.Prompt(str(len(plines)) + " polylignes de parcelles\n")

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

J'ai développé un programme qui teste calque après calque les entités présentent, etc. Chaque erreur rencontrée est décrite dans un fichier erreur. Pour cela j'utilise le maintien de l'entité.

Un autre lisp me permet de zoomer sur les erreurs les unes après les autres.

Ce n'est pas une programmation optimum mais ça marche.

 

Bonne journée.

 

 

Bonjour Vannes,

J'ai essayé de voir ton script et de l'adapter avec mes données. Cependant, lorsque je le teste avec un fichier DWG, il me donne un fichier "erreur" étrange ... J'ai du mal à comprendre en fait !

J'ai tout d'abord défini ma charte graphique (liste des claques, des blocs, types de lignes ...).

 

Maintenant, je voudrais sélectionner tous les éléments du dessin ; je pense que c'est avec cette fonction :

(setq SELECTION (ssget "X" (list (cons 8 CALQUE) (cons 410 "Model"))))

(setq L 0)

Et connaître si ces différents éléments sont bien dans la charte graphique.

 

En pièces jointes, le LISP de la fonction . Merci d'avance pour tes lumières :)

fonction.lsp

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Novice_python,

 

pour sélectionner tous les objets d'un plan.

 

(setq SELECTION (ssget "_X"))

 

Dans ta ligne de code, tu ajouté deux filtres. Le premier pour ne prendre que les objets sur le calque CALQUE et le deuxième pour qu'il soit en plus dans l'espace objet.

 

Olivier

  • Upvote 1
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é