lecrabe Posté(e) le 25 novembre 2009 Posté(e) le 25 novembre 2009 Hello J'ai farfouille dans differents forums sans rien trouver, Sniff ! :o SVP je desire une routine en VLisp ou Lisp qui permette de selectionner / trouver les polylignes (2D ou 3D, splinees ou Non, Lissees ou Non) en fonction du nombre de Vertex utilises pour les dessiner ! En fin de routine, on force les Polylignes concernees par une couleur C --- Deroulement de la routine --- 1) Parametres Nombre de Vertex (Defaut=2) : NCritere de selection = ou = (Defaut =) : =Choix de la couleur de "forcage" (Defaut=1=Rouge) : CSelection AutoCAD classique ... 2) Traitement 3) Resultat :Total des Polylignes selectionnees = xxxNombre de polylignes traitees = yyyet bien sur les polylignes concernees ont ete forcees par la couleur C Avec les parametres par defaut (N=2, Critere =, Couleur 1 Rouge), je trouve par exemple les Polylignes composees de 2 vertex seulement ! Merci d'avance de votre aide, Le Decapode Autodesk Expert Elite Team
bonuscad Posté(e) le 25 novembre 2009 Posté(e) le 25 novembre 2009 Bonjour, Ceci pourrait-il te convenir? (defun c: Pol_Nbr_Vtx ( / jspl n count AcDoc Space nbr exprtest e_col ent_name ename id_obj nbx) (setq jspl (ssget '((-4 . " (0 . "*POLYLINE") (-4 . " (-4 . "&") (70 . 112) (-4 . "NOT>") (-4 . "AND>")) ) n -1 count 0 ) (cond (jspl (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-StartUndoMark AcDoc) (initget 6) (setq nbr (getint "\nNombre de sommets recherchés pour les polylignes? <2>: ")) (if (not nbr) (setq nbr 2)) (initget "= >= <=") (setq exprtest (getkword "\nTest d'égalité à appliquer [=/>=/<=]? <=>: ")) (if (not exprtest) (setq exprtest "=")) (initget 4) (setq e_col (getint "\nForcer à la couleur (0 - 256) <1>: ")) (if (not e_col) (setq e_col 1)) (repeat (sslength jspl) (setq ent_name (ssname jspl (setq n (1+ n))) ename (vlax-ename->vla-object ent_name) id_obj (vla-get-ObjectName ename) ) (if (eq id_obj "AcDbPolyline") (setq nbx (/ (length (vlax-get ename 'Coordinates)) 2)) (setq nbx (/ (length (vlax-get ename 'Coordinates)) 3)) ) (if ((eval (read exprtest)) nbx nbr) (progn (vla-put-Color ename e_col) (setq count (1+ count)))) ) (vla-EndUndoMark AcDoc) (princ (strcat "\n" (itoa count) " polylignes ayant un nombre de sommets " exprtest " à " (itoa nbr) " sur " (itoa (1+ n)) " sélectionnées, ont été forcées à la couleur: " (itoa e_col) ) ) ) ) (prin1) ) [Edité le 25/11/2009 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 25 novembre 2009 Auteur Posté(e) le 25 novembre 2009 Hello Merci, je suis en train de tester "TEL QUE" avec MAP 2006 sur des Polylignes 2D classiques et cela semble bien fonctionner donc j'imagine que cela devrait aller aussi pour les 3DPOLY et autres joyeusetes !? :P SVP pourrais tu "enrober" cette routine dans un DEFUN nomme Pol_Nbr_Vtx ainsi cela serait plus pratique et surtout plus propre d'indiquer les variables utilisees Encore MERCI de ta rapidite et de ton efficacite, je vais tester sur MAP 3D 2010 ! Le Decapode "trieur de polylignes par le nombre de vertex" [Edité le 25/11/2009 par lecrabe] Autodesk Expert Elite Team
bonuscad Posté(e) le 25 novembre 2009 Posté(e) le 25 novembre 2009 "enrober" cette routine dans un DEFUN nomme Pol_Nbr_Vtx Maintenant que tu m'as donné un nom... j'ai édité le code. ;) Quand je ne sais pas trop quoi inventer je fais une fonction anonyme. En fait tu remplace le corps ((lambda ( / ....) .......)) par un (defun c:ma_fonction ( / ...) ....) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 25 novembre 2009 Auteur Posté(e) le 25 novembre 2009 Hello En fait j'avais deja implemente un DEFUN mais pour les autres utilisateurs de la routine, c quand meme mieux que ton code soit nickel-chrome (comme d'habitude d'ailleurs) ! :) A propos j'ai teste sur MAP 3D 2010 (toujours avec des PLINEs 2D classiques) et ca fonctionne parfaitement donc cette routine est censee etre operationnelle sur toutes les versions d'AutoCAD depuis la 2006 jusqu'a la 2010 (et sans doute aussi sur la 2004/2005) Encore Merci, Bonne soiree, Le Decapode Autodesk Expert Elite Team
zebulon_ Posté(e) le 25 novembre 2009 Posté(e) le 25 novembre 2009 Bonsoir, je suis un peu plus lent et j'ai pondu ceci (defun c:selpoly (/ AcDoc ss KEY I J e eobj typ coords nbvtx) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq ss (ssget '((0 . "*POLYLINE")))) (if ss (progn (if (not selpolyNB) (setq selpolyNB 2)) (if (not selpolyCRIT) (setq selpolyCRIT "=")) (if (not selpolyCOL) (setq selpolyCOL 1)) (setq KEY "N") (while KEY (prompt (strcat "\nParamètres courants : NOMBRE SOMMETS " (itoa selpolyNB) ", CRITERE " selpolyCRIT ", COULEUR " (itoa selpolyCOL))) (initget "N T C") (setq Key (Getkword "\ntraiter les polylignes ou [Nombre de sommets/criTère/Couleur] : ")) (cond ((= KEY "N") (setq selpolyNB (getint "\nNombre de sommets : ")) ) ((= KEY "C") (setq selpolyCOL (acad_colordlg selpolyCOL nil)) ) ((= KEY "T") (initget "= <= >=") (setq selpolyCRIT (getkword "\nCritère [=, <=, >=] <=> ")) (if (not selpolyCRIT) (setq selpolyCRIT "=")) ) ) ) ;; while (setq I 0 J 0) (vla-StartUndoMark AcDoc) (repeat (sslength ss) (setq e (ssname ss I)) (setq eobj (vlax-ename->vla-object e)) (setq typ (cdr (assoc 0 (entget e)))) (setq coords (vlax-get eobj 'coordinates)) (if (= typ "LWPOLYLINE") (setq nbvtx (/ (length coords) 2)) (setq nbvtx (/ (length coords) 3)) ) (if ((eval (read selpolyCRIT)) nbvtx selpolyNB) (progn (vla-put-Color eobj selpolyCOL) (setq J (+ J 1)) ) ) (setq I (+ I 1)) ) ;; repeat (alert (strcat "Nombre de polylignes sélectionnées : " (itoa (sslength ss)) "\nNombre de polylignes traitées : " (itoa J))) (vla-EndUndoMark AcDoc) ) ) (princ) ) Cela ressemble à ce qu'à fait Bonuscad. Je voulais juste savoir à quoi correspond le code dxf 70 . 112 (puisque mon ssget est beaucoup plus simpliste, trop sans doute) AmicalementVincent 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)
(gile) Posté(e) le 30 novembre 2009 Posté(e) le 30 novembre 2009 Salut, Je voulais juste savoir à quoi correspond le code dxf 70 . 112 Sous le nom POLYLINE (pas LWPOLYLINE) sont en fait regroupés plusieurs types d'entités :- polylignes 2d "old style" ("AcDb2dPolyline")- polylignes 3d ("AcDb3dPolyline")- surfaces maillées ("AcDbPolygonMesh")- mailles polyfaces ("AcDbPolyFaceMesh") C'est dans le code de groupe DXF 70 qu'est déterminé le type de polyligne. 112 correspond à 16+32+64 à savoir les codes binaires qui définissent les surfaces maillées et mailles polyface, ces objets seront écartés du filtre de sélection. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 30 novembre 2009 Posté(e) le 30 novembre 2009 Merci 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)
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