Novice_python Posté(e) le 27 février 2015 Posté(e) le 27 février 2015 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 charte2) 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 chartePour 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 :)
x_all Posté(e) le 27 février 2015 Posté(e) le 27 février 2015 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... quelques trucs sur autocad
Novice_python Posté(e) le 27 février 2015 Auteur Posté(e) le 27 février 2015 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 ...
x_all Posté(e) le 27 février 2015 Posté(e) le 27 février 2015 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/ quelques trucs sur autocad
-Olivier- Posté(e) le 27 février 2015 Posté(e) le 27 février 2015 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 > ssget2/ Lancement boucle sur l'ensemble des objetsfonction :> repeat> sslength3/ Création d'une variable avec l'entité n du jeu de sélectionfonction :> ssname4/ Regarder les propriétés de l'entitéfonction :> entget + code dxf5/ Vérification de l'adéquation avec ta chartefonction :> assoc> equal6/ 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 1
vannes Posté(e) le 2 mars 2015 Posté(e) le 2 mars 2015 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 1
Novice_python Posté(e) le 2 mars 2015 Auteur Posté(e) le 2 mars 2015 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 !!
vincentp010 Posté(e) le 2 mars 2015 Posté(e) le 2 mars 2015 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
Novice_python Posté(e) le 3 mars 2015 Auteur Posté(e) le 3 mars 2015 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
-Olivier- Posté(e) le 3 mars 2015 Posté(e) le 3 mars 2015 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 1
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