Invité Sylvainhinard Posté(e) le 27 janvier 2005 Posté(e) le 27 janvier 2005 Bonjour, Je dois controlé certaines propriété d'entité dans des dessins que mon entreprise à fait, a savoir:-Controler si des entité sont sur le calque 0-Controler si il y a des Xref dans le dessin-Controler si des entité sont en couleur forcé-Controler si des entité sont en type de ligne forcé-Controler si des entité sont dans l'espace papier-Controler si des entité ont une elevation differente de 0-Controler si des polyligne ont des largeur differrente de 0-Controler si des blocs n'ont pas été construit dans le calque 0 Pour ce la j'ai fait un LISP: ;;CALCULER LES ENTITES QUI SONT DANS LE DESSIN(setq toutlesobjets (ssget "_X"))(setq nombrestoutlesobjets (sslength toutlesobjets)) ;;CALCULER LE NOMBRES D'ENTITES QUI SONT SUR LE CALQUE 0(setq objetcalque0 (ssget "_X" '((8 . "0"))))(setq nombreobjetcalque0 (sslength objetcalque0))(princ "nombre d'objet qui sont sur le calque 0:")(princ nombreobjetcalque0) ;;CALCULER LE NOMBRES D'ENTITES QUI SONT EN COULEURS FORCEE(setq objetcouleurducalque (ssget "_X" '((62 . 256))))(setq nombreobjetcouleursducalque (sslength objetcouleurducalque))(princ "Nombre d'objet qui sont en couleur Forcée:")(princ (- nombrestoutlesobjets nombreobjetcouleursducalque)) ;;CALCULER LE NOMBRES D'ENTITES QUI SONT EN TYPES DE LIGNE FORCE(setq objetligneducalque (ssget "_X" '((6 . "DUCALQUE"))))(setq nombreobjetligneducalque (sslength objetligneducalque))(princ "nombre d'objet qui sont en type de ligne force:")(princ (- nombrestoutlesobjets nombreobjetligneducalque)) ;;CALCULER LE NOMBRES D'ENTITES AVEC UNE ELEVATION DIFFERENTE DE ZERO(setq objetelevationzero (ssget "_X" '((38 . 0))))(setq nombreobjetelevationzero (sslength objetelevationzero))(princ "nombre d'objet qui sont à une élévation differente de zéro:")(princ (- nombrestoutlesobjets nombreobjetelevationzero)) Je voudrais que mon lisp me liste les entités de la maniére suivante :Nombre d'objet sur le calque 0: 10Nomre d'Xref dans le dessin: 10Nombres d'objet en couleur forcée: 50.... Parce que pour l'instant Autocad m'affiche un truc du genre "nombre d'objet qui sont sur le calque 0:19Nombre d'objet qui sont en couleur Forcée:15nombre d'objet qui sont en type de ligne force:11nombre d'objet qui sont à une élévation differente de zéro:5" C'est ILLISIBLE... De plus je n'ai pas reussis à programmer pour controler-Si il y a des Xref dans le dessin-Si des entité sont dans l'espace papier-Si des polyligne ont des largeur differrente de 0-Si des blocs n'ont pas été construit dans le calque 0 J'éspère que j'ai été assez clair... Merci d'avance... Sylvain
rebcao Posté(e) le 27 janvier 2005 Posté(e) le 27 janvier 2005 Déjà pour tes problèmes d'affichage... tu peux utiliser les fonctions : PRINTWRITE-LINEPRIN1PROMPT exemple avec PROMPT (n'affiche que du texte) : (prompt "\n\nNombre de ...") \n = saut de ligne Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
zebulon_ Posté(e) le 27 janvier 2005 Posté(e) le 27 janvier 2005 Voilà pour compter les xref d'un fichier. Pour l'affichage du résultat, je suggère l'utilisation de la fonction alert. Une xref est de type bloc (INSERT), ce n'est que l'indacteur de type (70) dont la valeur (4 binaire) indique que le bloc est une référence externe. (defun c:fxref () (setq SS (ssget "_X" '((0 . "INSERT")))) ; tous les objets blocs ou xref (setq NBXREF 0) (if SS (progn (setq SSL (sslength SS)) (setq I 0) (while (< I SSL) (setq E (ssname SS I)) (setq A (entget E)) (setq INFOTBL (tblsearch "BLOCK" (cdr (assoc 2 A)))) (if (= (boole 1 (cdr (assoc 70 INFOTBL)) 4) 4) ; c'est une xref (setq NBXREF (+ NBXREF 1)) ) (setq I (+ I 1)) ) ) ) (alert (strcat "il y a " (itoa NBXREF) " xref(s)"))) C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Tramber Posté(e) le 27 janvier 2005 Posté(e) le 27 janvier 2005 (princ "\nnombre d'objet qui sont sur le calque 0:") Si des blocs n'ont pas été construit dans le calque 0 Tu veux dire quoi ? Que le bloc contient des entités définies ailleurs que sur 0. Alors il te faut utiliser TBLSEARCH et TBLNEXT et regarder le groupe 8 de chaque entité composant le bloc. TBLNEXT renvoie un groupe contenant le -2, c'est le nom d'entité correspondant au premier objet du bloc.Un petit (entget(cdr(assoc -2 (tblnext "Block"))) pour se renseigner et refaire un assoc dessus pour trouver le nom de calque (s'il y est, donc qu'il est différent de "0") avant de faire une boucle avec le ENTNEXT, plus classique. L'aide donne un coup de pouce. Pour le papier, je ne vais pas me prononcer car je crains de ne faire que du bricolage.... Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
zebulon_ Posté(e) le 27 janvier 2005 Posté(e) le 27 janvier 2005 Pour compter les objets de l'espace papier, en excluant les viewports. (defun c:nbobjep () (setq ss1 (ssget "_X")) ; tous les objets (setq ss2 (ssget "_X" '((0 . "VIEWPORT")))) ; les fenetres espace papier (setq ss3 (ssget "_X" '((410 . "MODEL")))) ; les objets de l'espace objet (if ss1 (setq NBSS1 (sslength SS1)) (setq NBSS1 0) ) (if ss2 (setq NBSS2 (sslength SS2)) (setq NBSS2 0) ) (if ss3 (setq NBSS3 (sslength SS3)) (setq NBSS3 0) ) (setq NB (- NBSS1 NBSS2 NBSS3)) (alert (strcat (strcat "nombre d'objet en espace papier : " (itoa NB))))) C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
bonuscad Posté(e) le 28 janvier 2005 Posté(e) le 28 janvier 2005 Sylvain, Attention avec tes 2 filtres (ssget "_X" '((62 . 256)))) et (ssget "_X" '((6 . "DUCALQUE")))) car ce type d'information n'est pas forcément présent dans la définition DXF de l'entité. Cela rique de fausser tes résultats. Pour t'en assurer fait un (entget (car (entsel))) sur une entité tracé avec la couleur "Ducalque" et le type de ligne "Ducalque" et tu verras que la liste reournée ne contient aucune information sur le code DXF 62 et 6. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 28 janvier 2005 Posté(e) le 28 janvier 2005 Plutôt de sélectionner tous les blocs dans le dessin, il est plus rapide de regarder directement dans la table des blocs afin de voir les xrefs et de les compter comme te le signale Tramber @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Invité Sylvainhinard Posté(e) le 31 janvier 2005 Posté(e) le 31 janvier 2005 Bonjour, Désolé pour ma réponse tardive. Je vous remercie tous avec vos conseils je pense que je vais pouvoir gagner beaucoup de temps.Heuresement qu'il y à Cadxp!!! ;)
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