Aller au contenu

Routines pour TEXT/MTEXT


lecrabe

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

 

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

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é