Aller au contenu

somme par épaisseur de polylignes


x_all

Messages recommandés

Bonjour

 

j'avais vu passer ça, mais je n'arrive plus à remettre la main sur un lisp qui fasse la somme des polylignes sélectionnées en triant les épaisseurs.

 

Les entrées sont une sélection dans un calque isolé ou il n'y a que des polylignes avec différentes épaisseur (c'est un réseau EP avec les diamètres noté sur la propriété "largeur globale" des poly que des segments séparés pour chaque diamètre) Cette routine sortait dans la fenêtre F2 la liste des totaux par épaisseur

 

0.2 -- 50.3m

0.3 -- 10.8m

.

.

.

 

Si qq1 l'a sous la main ou si un codeur fou se sent de la pondre vous aurez ma reconnaissance éternelle

 

merci par avance

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

(defun c:ListPlines (/ padLeft selSet width item result)
 (vl-load-com)
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))))
 (defun padLeft (s l)
   (if	(< (strlen s) l)
     (padLeft (strcat " " s) l)
     s
   )
 )
 (if (ssget '((0 . "LWPOLYLINE")))
   (progn
     (vlax-for	pline (setq selSet (vla-get-ActiveSelectionSet *acdoc*))
(setq width  (vla-get-ConstantWidth pline)
      result
	     (if (setq item (assoc width result))
	       (subst (list (car item) (1+ (cadr item)) (+ (caddr item) (vla-get-Length pline)))
		      item
		      result
	       )
	       (cons (list width 1 (vla-get-Length pline)) result)
	     )
)
     )
     (vla-Delete selSet)
   )
 )
 (setq dimzin (getvar 'dimzin))
 (setvar 'dimzin 0)
 (prompt "\n*** Liste polylignes ***\n\nLargeur  Nombre  Longueur\n")
 (foreach item	(vl-sort result '(lambda (a B) (< (car a) (car B))))
   (prompt (strcat (padLeft (rtos (car item) 2 2) 6)
	    (padLeft (itoa (cadr item)) 6)
	    (padLeft (rtos (caddr item) 2 2) 12)
	    "m\n"
    )
   )
 )
 (setvar 'dimzin dimzin)
 (textscr)
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

yo !!!

 

c'est noël avant l'heure !!

 

La 1ere routine était bien celle que j'avais en mémoire, mais j'ai pas l'impression quelle marche bien sur la 2015...

Par contre encore super merci à super (gille) ça marche du feu de dieu...

 

Je vais pouvoir faire les métrés de mes EP de façon un peu plus rapide super merci !!!

Lien vers le commentaire
Partager sur d’autres sites

:)

 

je les connais les extractions, mais il faut reconnaitre que si c'est puissant c'est un peu lourd à l'utilisation.

vu la taille du réseau que j'ai à me frappé, je me serai tourné vers cette solution en désespoir de cause (solution à la quelle je ne pense pas naturellement il est vrai), mais le code de (gile) et incomparablement plus pratique. On "jete" le lisp dans le dessin, et on récupère les longueurs pour le quantitatif, pas de tableau qui traine sur le dessin pas de fichier d'extraction à trimbaler...

bref l'extraction c'est l'artillerie lourde, le lisp c'est le sniper de splinter cell

Lien vers le commentaire
Partager sur d’autres sites

Hello Gilles

 

0) MERCI : c TIP-TOP !!

 

1) SVP petite micro-amelioration avec un Total general !

 

2) SVP quel serait la variante sur les Calques (et non pas sur les Largeurs globales) ?

 

3) Et IDEM sur les Couleurs forcees ?

Sur les Types de lignes forcees ??

Sur les Epaisseurs de ligne forcees ???

 

Sans doute 2/3/4 lignes de Lisp/VLIsp un peu differentes suivant les cas ...

 

Merci d'avance, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello Gilles

 

0) MERCI : c TIP-TOP !!

 

1) SVP petite micro-amelioration avec un Total general !

 

2) SVP quel serait la variante sur les Calques (et non pas sur les Largeurs globales) ?

 

3) Et IDEM sur les Couleurs forcees ?

Sur les Types de lignes forcees ??

Sur les Epaisseurs de ligne forcees ???

 

Sans doute 2/3/4 lignes de Lisp/VLIsp un peu differentes suivant les cas ...

 

Merci d'avance, Bye, lecrabe

Salut

 

Un truc que j'avais, adapté à ta demande

 

(defun c:tpo(/ ent ele lst sel res tot filtre)
 (setq filtre 'constantwidth) ; Constantwidth pour les épaisseurs, Layer pour les calques, Color pour les couleurs, Linetype pour les types de lignes
 (and (ssget (list (cons 0 "*POLYLINE")))
   (progn
     (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
(if (setq ele (assoc (vlax-get ent filtre) lst))
  (setq lst (subst (list (car ele) (cons (vla-get-length ent) (cadr ele))) ele lst))
  (setq lst (cons (list (vlax-get ent filtre) (list (vla-get-length ent))) lst))
)
     )
     (vla-delete sel)
     (setq tot 0)
     (mapcar '(lambda(x)
	(setq tot (+ tot (setq res (apply '+ (cadr x)))))
	(princ "\nTotal polyligne(s) type ")
	(princ filtre)
	(princ " --> ")
	(princ (car x))
	(princ (strcat " : " (rtos res)))
      )
      (vl-sort lst '(lambda(a B)(< (car a) (car B))))
     )
     (princ (strcat "\nTotal : " (rtos tot)))
   )
 )
 (princ)
)

 

ps : il ressemble beaucoup à celui de (gile)

pps : (setq dimzin (getvar 'dimzin)) Celle-ci est très subtile ;)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

  • 6 mois après...

@gile,

ton lisp est parfait, ma seule remarque (qui n'est pas grand chose) c'est l'arrondi qui se fait après la deuxième décimale (or, sur des plans en mètre il arrive fréquemment que certaines conduites aient besoin d'une 3ème décimale)

@+

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

  • 11 mois après...

Bonjour à tous,

 

Je suis novice en programmation LISP mais j'ai besoin de certaines fonctions pour avancer sur un projet sur ZWCAD (un clone d'Autocad). La fonction "ListPlines" répondrait à mes attendes mais j'aurais besoin de faire quelques modifications :

 

_ Pour les longueurs de polylignes, j'aurais besoin de rajouter à la longueur par épaisseur, une longueur d'un mètre par élément sélectionné.

_ Aussi je voulais savoir si quelqu'un avait entre les mains une méthode pour que les valeurs obtenues rentrent dans un tableau dans l'espace objet. Je souhaiterai récupérer ces longueurs dans une cellule d'un tableau qui se créerait avec le programme LISP.

 

Merci d'avance pour votre aide.

Lien vers le commentaire
Partager sur d’autres sites

  • 5 ans après...

ça fait une paye... c'est en cherchant l'origine des lisp que j'utilise que je retombe sur ce thread....
et le code de notre regretté Patrick_35 qui me sort de la panade, une fois encore....

Le hasard fait que ça répond au souhait de CNéo car je me posait aussi la question des tableaux
Si un codeur fou passe par ici, pour être parfait, le décompte des blocs dynamique mériterait 2 améliorations hors de mes maigres capacités

il faudrait faire un tri des visibilités (comme pour les largeurs de poly mais faire un décompte par état de visibilité)
et si une propriété "longueur" existe, en faire la somme en plus du décompte des occurrences

ce serai le cœur du poulet

j'ai mis mise à jour la page des métrés en tableaux avec des commandes par type de ligne, couleur pour les poly, compte les blocs et surfaces

avec déjà mes remerciements aux codeurs du forum car j'ai pas fait grand chose finalement même si j'y ai passé 2 jours 🙂

http://joch04.free.fr/achtml/Metres.html

 

Lien vers le commentaire
Partager sur d’autres sites

mise à jour avec des outils trouvé chez Lee Mac pour trier les états de visibilité et un truc bricolé pour les longueurs d'une propriété particulière des blocs dyn

mes adaptations sont des insultes pour les codes originaux, j'en présente toutes mes excuses aux auteurs, mais ça va me faire du taff 🙂

et je partage... il y aura sans doute des trucs à améliorer mais ça me semble opérationnel

http://joch04.free.fr/achtml/Metres.html

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é