lecrabe Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 Hello Bred Tu as parfaitement raison, je viens de retester la version Light de ton programme sur ma version 2005 et ça marche Nickel-Chrome ! :) :D :cool: Sinon je reviens aussi sur ton excellent petit programe "Liste d'ecart" et sa fonction list-tri-txt pour te proposer 2 autres versions dérivées ... ;) SVP je désire une autre version (2 en fait) exactement du même genre (sous-entendu, on modifie en DUR le Lisp pour la liste des intervalles) sur les Polylines & LWPolylines afin de transférer sur N calques ces objets en fonctions de 2 critères simples: Surface ou Périmètre/Longueur On se fout de savoir si les Polylignes sont closes ou Non ! Avec ce (ou ces 2) programme(s), il sera facile APRES de thématiser "classiquement" les polylignes sur leur nouveau calque en fonction de leur Surface ou Périmètre/Longueur :cool: - soit en jouant sur la couleur et/ou épaisseur du calque- soit en hachurant les polylignes closes Maintenant nous allons avoir les outils pour thématiser des valeurs de textes (Nous avons déjà, MERCI) et des Polylignes (Surface & Longueur) SANS avoir un MAP ou un CIVIL ! :P Merci d'avance de ton aide, Le Decapode "thématisant sur AutoCAD" [Edité le 19/7/2007 par lecrabe] Autodesk Expert Elite Team
Bred Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Salut,je jette un coup d'oeuil sur ta demande. juste pour info : j'ai légerement modifié le lisp "coef-txt" ci-dessus pour la forme : lors de la demande du calque, il met entre crochet le calque courant (qui sera donc pris en compte avec une simple validation). Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Bred Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Re,Alors, à tester :commande "tri-poly"Choix de classement par défaut : Longueur Nota :1- je ne savais pas comment trouver la surface d'une polyligne "simple" (dites 3D), donc j'ai créer une routine qui calcul cette surface (vla-get-area2Dpoly3D) en projetant les point sur un plan.2-repiquage de la routine LST2MAT de (gile). ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; tri polyligne selon Surface ou longueur ;;;;;;; ; par Bred ; [b]fourchette - à modifier-[/b] (defun list_tri_poly () (list "Nom_du_calque" (cons 0 3) (cons 4 9) (cons 10 19) ) ) ;prog tri (defun c:[b]tri-poly[/b] (/ A I L LST Q SEL X) (vl-load-com) (initget "L S") (setq Q (getkword "\n Tris des (LW)Polylignes par Calque : Longueur ou Surface (L/S) ? ")) (if (not Q )(setq Q "L")) (setq sel (ssget '((0 . "*POLYLINE"))) lst (list_tri_poly)) (repeat (setq i (sslength sel)) (setq L (vla-get-length (vlax-ename->vla-object (ssname sel (setq i (1- i)))))) (if (equal (vla-get-ObjectName (vlax-ename->vla-object (ssname sel i))) "AcDb3dPolyline") (setq A (vla-get-area2Dpoly3D (vlax-ename->vla-object (ssname sel i)))) (setq A (vla-get-area (vlax-ename->vla-object (ssname sel i)))) ) (if (equal Q "L") (repeat (1- (setq x (length lst))) (if (and (>= L (car (nth (setq x (1- x)) lst))) (<= L (cdr (nth x lst)))) (entmod (subst (cons 8 (strcat (car lst) "-" (rtos (car (nth x lst))) "_" (rtos (cdr (nth x lst))))) (assoc 8 (entget (ssname sel i))) (entget (ssname sel i)) )))) (repeat (1- (setq x (length lst))) (if (and (>= A (car (nth (setq x (1- x)) lst))) (<= A (cdr (nth x lst)))) (entmod (subst (cons 8 (strcat (car lst) "-" (rtos (car (nth x lst))) "_" (rtos (cdr (nth x lst))))) (assoc 8 (entget (ssname sel i))) (entget (ssname sel i)) )))) ) ) (princ) ) ;;; LST2MAT Retourne un liste de listes du nombre ;;; d'éléments spécifié (matrice) ;;; (lst2mat '(1 2 3 4 5 6) 2) -> ((1 2) (3 4) (5 6)) ;;; (lst2mat '(1 2 3 4 5 6) 3) -> ((1 2 3) (4 5 6)) (defun lst2mat (lst n) (if (and lst (zerop (rem (length lst) n))) (cons (sublst lst 1 n) (lst2mat (sublst lst (1+ n) (- (length lst) n)) n) ) ) ) ;;; SUBLST Retourne une sous-liste ;;; Premier élément : 1 ;;; (sublst '(1 2 3 4 5 6) 3 2) -> (3 4) ;;; (sublst '(1 2 3 4 5 6) 3 -1) -> (3 4 5 6) ;;; (sublst '(1 2 3 4 5 6) 3 12) -> (3 4 5 6) ;;; (sublst '(1 2 3 4 5 6) 3 nil) -> (3 4 5 6) (defun sublst (lst start leng / rslt) (if (not (<= 1 leng (- (length lst) start))) (setq leng (- (length lst) (1- start))) ) (repeat leng (setq rslt (cons (nth (1- start) lst) rslt) start (1+ start)) ) (reverse rslt) ) [b]; routine surface (2D) Polyligne (3D)[/b] (defun [b]vla-get-area2Dpoly3D[/b] (vla-poly3D / ACDOC AIRE COORD COORDF PLINE) (setq AcDoc (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) ) coordF nil coord (lst2mat (vlax-safearray->list (vlax-variant-value (vla-get-coordinates vla-poly3D))) 3)) (foreach n coord (setq coordF (append coordF (list (car n) (cadr n) 0.0)))) (setq pline (vla-addPolyline AcDoc (vlax-make-variant (vlax-SafeArray-fill (vlax-make-SafeArray vlax-vbDouble (cons 0 (1- (length coordF))))coordF)))) (setq Aire (vla-get-area pline)) (vla-delete pline) Aire ) [Edité le 19/7/2007 par Bred] [Edité le 19/7/2007 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
lecrabe Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 Hello Bred - Grand Merci :) Ta routine fonctionne Nickel-Chrome sur AutoCAD 2005 :D et toi je suppose que tu l'as testée sur AutoCAD 2006 et 2008 !? Youpee, A moi la thématisation facile des polylignes sur mon simple AutoCAD ! :cool: Le Decapode "coloriant ses polylignes en fonction des surfaces / longueurs" :P Autodesk Expert Elite Team
lecrabe Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 Hello Bred Ca y est, je commence à trouver des petits problèmes :exclam: ( Toujours sur mon AutoCAD 2005 ) Si des Polylignes sont Lissées ou Splinées, elles ne sont pas traitées et cela provoque une erreur mais BON les autres polylignes sont traitées ! Pourtant je pensais que tu interrogeais seulement la propriété de Surface ou Longueur !vla-get-length et vla-get-area Pourtant le mode Lissage ou Spline pose un problème à la routine !mais bon je suis nul en programmation :P J'ai vu que tu traitais aussi les polylignes 3D, je suis impressionné ! :o Le Decapode "testeur" Autodesk Expert Elite Team
Bred Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Re,Les polylignes(3D) lissée sont traités (j'avais oublié de mettre une routine : SUBLST de (gile) ) Par contre, ce que tu appel polyligne "spinées", c'est quoi, des spines ou autre chose ? (pour moi une spline n'est pas un polyligne) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
lecrabe Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 Hello Tu dessines une polyligne (2D), tu en fais 2 copies la 1ère : PEDIT option sPline (P au clavier)la 2eme : PEDIT option Lissage (L au clavier) avec ces 3 polylignes, essayes maintenant le programme TRI-POLY ! Le Decapode Autodesk Expert Elite Team
Bred Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Ah oui !je pensais en fait que je le faisais, mais j'avais inverser un test "if" ...j'ai édité le code précédent, test le et tiens moi au courant.... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
lecrabe Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 Hello Ca semble bien marcher maintenant y compris avec les polylignes lissées et/ou splinées ! :) Je suis sous AutoCAD 2005 mais je n'ai absolument pas testé les polylignes 3D ! Sorry !! Tu le testes avec quelle version d'AutoCAD SVP ? Le Decapode (qui thématise les espaces verts / étangs / zones / etc maintenant) Autodesk Expert Elite Team
Bred Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 je suis en 2008, mais je teste aussi en 2006 (rapidement). Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Bred Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Re,j'ai ouvert un sujet ici concernat le classement des polylignes.(le sujet de ce post n'avais rien à voir). Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
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