Aller au contenu

métré par type de ligne


fabichou

Messages recommandés

Bonjour speedy

 

non Long_line prend le calque en entier, moi j'ai differents type de ligne qui correspondent à des diametres de tuyau, donc il me faudrait 1 lisp qui differencie les types de ligne.

Dans le temps j'avais récupéré 1 lisp qui différencié les lignes par couleur...

Lien vers le commentaire
Partager sur d’autres sites

Invité Yamtdm_21

bonjour,

 

J'ai un lisp pour faire des metres. il ne fait pas la différence sur les types de lignes mais sur le nom des calques. Bref si tu as 10 diamètre de tuyaux différents, il te suffit de créer un calque par diamètre.

 

Résultat le lisp génère un ficher "metre.csv" directement sur mon disque D.

 

Pour chaque nom de calque le lisp de donne la surface, la longueur et le nombre d'objet.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Bruno

çà doit être celui-la de lisp : http://www.g-eaux.com/powerclic/download/metre_tl.lsp

 

pour fabichou , mes anciennes méthodes, c'était de mettre chaque diamètre dans un calque comme Yamtdm, par epaisseur de lignes ou par types de lignes.

et ensuite j'utilise un filtre de mon choix pour exporter les infos en txt.

 

@+

 

Michel a

Lien vers le commentaire
Partager sur d’autres sites

Tu utilises la commande FILTER que tu règles sur le type de ligne que tu veux. Tu peux rajouter des filtres supplémentaires si tu le désire comme le calque, la couleur etc...

 

Une fois tes éléments filtrées (gripés), tu te sers de cumul_measure en validant l'option de jeu de sélection "Existant" de la routine

 

Ou si tu préfères faire un tableau récapitulatif avec des champs, à la place tu utilises Metre2Cell&Field dans le même principe.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Une proposition en LISP.

 

Comme tu ne précises pas s'il s'agit de type de ligne forcé par entité ou des types de ligne de calque, le LISP regroupe les entité en type de ligne forcé "TOTO" avec celles sur les calques ayant un type de ligne "TOTO".

 

Les lignes et les polylignes sont traitées, le résultat est écrit dans un fichier CSV dans le répertoire du dessin avec le séparateur (virgule ou point-virgule) courant, sur 5 colonnes : type de ligne, nombre de lignes, longueur des lignes, nombre de polylignes, longueur des polylignes.

Le fichier s'affiche avec le bloc-note, mais tu peux l'ouvrir avec Excel ou Open Office.

 

(defun c:metre (/ ss lt lst sub sep filename file)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (or *layers* (setq *layers* (vla-get-Layers *acdoc*)))

 (defun GetLineType (o / lt)
   (setq lt (vla-get-LineType o))
   (cond
     ((= lt "ByLayer")
      (vla-get-LineType (vla-item *layers* (vla-get-Layer o)))
     )
     ((= lt "ByBlock") "Continuous")
     (lt)
   )
 )

 (princ "\nSélectionnez les objets ou valider pour tous.")
 (if
   (or
     (ssget '((0 . "LINE,LWPOLYLINE")))
     (ssget "_X" (list '(0 . "LINE,LWPOLYLINE") (cons 410 (getvar 'ctab))))
   )
    (progn
      (vlax-for o (setq ss (vla-get-ActiveSelectionSet *acdoc*))
 (setq lt  (strcase (GetLineType o))
       lst
	   (if (setq sub (assoc lt lst))
	     (subst
	       (if (= (vla-get-ObjectName o) "AcDbLine")
		 (vl-list* (car sub) (1+ (cadr sub)) (+ (vla-get-Length o) (caddr sub)) (cdddr sub))
		 (list (car sub)
		       (cadr sub)
		       (caddr sub)
		       (1+ (cadddr sub))
		       (+ (vla-get-Length o) (last sub))
		 )
	       )
	       sub
	       lst
	     )
	     (cons
	       (if (= (vla-get-ObjectName o) "AcDbLine")
		 (list lt 1 (vla-get-Length o) 0 0)
		 (list lt 0 0 1 (vla-get-Length o))
	       )
	       lst
	     )
	   )
 )
      )
      (vla-Delete ss)
      (setq sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")
     filename (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) "_metre.csv")
     file     (open filename "w")
      )
      (write-line
 (strcat "Type de ligne" sep "Lignes" sep "Longueur" sep "Polylignes" sep "Longueur")
 file
      )
      (foreach	l lst
 (write-line
   (strcat (car l)
	   sep
	   (itoa (cadr l))
	   sep
	   (rtos (caddr l))
	   sep
	   (itoa (cadddr l))
	   sep
	   (rtos (last l))
   )
   file
 )
      )
      (close file)
      (startapp "notepad" filename)
    )
 )
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous

 

Je viens d'essayer le lisp de gile, il me convient très bien merci gile

 

Je réponds à speedy qui préconise de mettre chaque type de ligne sur 1 calque, je ne peux pas car je travaille avec plusieurs batiments et plusieurs niveaux

merci quand même

le lisp dont je parlais (metre_tl.lsp) c'était bien celui de powerclic mais je crois qu'il faut télécharger le logiciel pour qu'il fonctionne....

 

Bon encore un grand merci à tous

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
Est-ce que c'est possible d'ajouter dans le lisp l’épaisseur des lignes ?

(donc avoir un métré par type de ligne ET par épaisseur ?)

Excuse-moi si je demande trop :(

 

Voilà :

(defun c:metre (/ GetLineWeight GetLineType ss lt lst sub sep filename file)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (or *layers* (setq *layers* (vla-get-Layers *acdoc*)))

 (defun GetLineWeight (o / lw)
   (if	(      (if (= -3 (setq lw (vla-get-LineWeight (vla-item *layers* (vla-get-Layer o)))))
"défaut"
(itoa lw)
     )
     (itoa lw)
   )
 )
 
 (defun GetLineType (o / lt)
   (setq lt (vla-get-LineType o))
   (cond
     ((= lt "ByLayer")
      (strcat (vla-get-LineType (vla-item *layers* (vla-get-Layer o))) "_" (GetLineWeight o) )
     )
     ((= lt "ByBlock")
      (strcat "Continuous" "_" (GetLineWeight o))
     )
     ((strcat lt "_" (GetLineWeight o)))
   )
 )

 (princ "\nSélectionnez les objets ou valider pour tous.")
 (if
   (or
     (ssget '((0 . "LINE,LWPOLYLINE")))
     (ssget "_X" (list '(0 . "LINE,LWPOLYLINE") (cons 410 (getvar 'ctab))))
   )
    (progn
      (vlax-for o (setq ss (vla-get-ActiveSelectionSet *acdoc*))
 (setq lt  (strcase (GetLineType o))
       lst
	   (if (setq sub (assoc lt lst))
	     (subst
	       (if (= (vla-get-ObjectName o) "AcDbLine")
		 (vl-list* (car sub) (1+ (cadr sub)) (+ (vla-get-Length o) (caddr sub)) (cdddr sub))
		 (list (car sub)
		       (cadr sub)
		       (caddr sub)
		       (1+ (cadddr sub))
		       (+ (vla-get-Length o) (last sub))
		 )
	       )
	       sub
	       lst
	     )
	     (cons
	       (if (= (vla-get-ObjectName o) "AcDbLine")
		 (list lt 1 (vla-get-Length o) 0 0)
		 (list lt 0 0 1 (vla-get-Length o))
	       )
	       lst
	     )
	   )
 )
      )
      (vla-Delete ss)
      (setq sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")
     filename (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) "_metre.csv")
     file     (open filename "w")
      )
      (write-line
 (strcat "Type de ligne" sep "Lignes" sep "Longueur" sep "Polylignes" sep "Longueur")
 file
      )
      (foreach	l lst
 (write-line
   (strcat (car l)
	   sep
	   (itoa (cadr l))
	   sep
	   (rtos (caddr l))
	   sep
	   (itoa (cadddr l))
	   sep
	   (rtos (last l))
   )
   file
 )
      )
      (close file)
      (startapp "notepad" filename)
    )
 )
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Pour les métrés par types de ligne , vous pouvez aussi utiliser la version de démo d'autospeed.

Il suffit de copier vos entités dans le dessins autospeed.dwg puis de taper MLC ( lignes) ou MPC ( métré des polylignes par calques)

http://www.autospeed.biz

Auteur du logiciel Autospeed

Auteur de la théorie du site www.kheops.biz

Auteur de nombreux livres

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

Bonjour,

 

Je suis également intéressé par ce lisp qui permets de faire des métrés (ou sélection) en tenant compte de la largeur des polylignes.

est ce que je dois remplacer simplement "getlineweight" par "getline", pour avoir un lisp qui fonctionne avec les largeurs de polylignes ????

axlxex est ce que ca marche ??

 

Merci déjà pour ces lisp !!!

Lien vers le commentaire
Partager sur d’autres sites

Donc j'imagine que ce n'est pas GetLineWeight, mais GetLine?????

est ce que je dois remplacer simplement "getlineweight" par "getline"

 

Si c'était si simple...

 

(defun c:metre (/ GetLineType ss lt lst sub sep filename file)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (or *layers* (setq *layers* (vla-get-Layers *acdoc*)))

 (defun GetLineType (o / lt wid)
   (setq lt (vla-get-LineType o)
  lt (cond
       ((= lt "ByLayer")
	(vla-get-LineType (vla-item *layers* (vla-get-Layer o)))
       )
       ((= lt "ByBlock") "Continuous")
       (lt)
     )
   )
   (if	(= (vla-get-ObjectName o) "AcDbPolyline")
     (setq wid	(vl-catch-all-apply 'vla-get-ConstantWidth (list o))
    lt
	(if (vl-catch-all-error-p wid)
	  (strcat lt "_variable")
	  (strcat lt "_" (rtos wid))
	)
     )
   )
   lt
 )

 (princ "\nSélectionnez les objets ou valider pour tous.")
 (if
   (or
     (ssget '((0 . "LINE,LWPOLYLINE")))
     (ssget "_X" (list '(0 . "LINE,LWPOLYLINE") (cons 410 (getvar 'ctab))))
   )
    (progn
      (vlax-for o (setq ss (vla-get-ActiveSelectionSet *acdoc*))
 (setq lt  (strcase (GetLineType o))
       lst
	   (if (setq sub (assoc lt lst))
	     (subst
	       (if (= (vla-get-ObjectName o) "AcDbLine")
		 (vl-list* (car sub) (1+ (cadr sub)) (+ (vla-get-Length o) (caddr sub)) (cdddr sub))
		 (list (car sub)
		       (cadr sub)
		       (caddr sub)
		       (1+ (cadddr sub))
		       (+ (vla-get-Length o) (last sub))
		 )
	       )
	       sub
	       lst
	     )
	     (cons
	       (if (= (vla-get-ObjectName o) "AcDbLine")
		 (list lt 1 (vla-get-Length o) 0 0)
		 (list lt 0 0 1 (vla-get-Length o))
	       )
	       lst
	     )
	   )
 )
      )
      (vla-Delete ss)
      (setq sep      (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")
     filename (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) "_metre.csv")
     file     (open filename "w")
      )
      (write-line
 (strcat "Type de ligne" sep "Lignes" sep "Longueur" sep "Polylignes" sep "Longueur")
 file
      )
      (foreach	l lst
 (write-line
   (strcat (car l)
	   sep
	   (itoa (cadr l))
	   sep
	   (rtos (caddr l))
	   sep
	   (itoa (cadddr l))
	   sep
	   (rtos (last l))
   )
   file
 )
      )
      (close file)
      (startapp "notepad" filename)
    )
 )
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Comme je l'ai expliqué je ne travail pas avec les épaisseurs de polyligne mais avec les largeurs qui elles se mettent à l'échelle.

Pour les métrés le lisp de Gile fonctionne....c juste que pour les lisp ssmatch et matchset,(les sélection rapide d'entités et les propriétés rapide), la propriété largeur serait génial, car il faut toujours que change la largeur avec "LA" et c un peu lourd....et puis pour les sélection, quand j'ai besoin de sélectionner toutes les polylignes d'une largeur donnée, je suis obligé de le faire à la main.

Voilà.....

 

Si qq un veut bien ajouter cette propriété à ces deux lisp.....je lui en serait reconnaissant.....Moi je ne maîtrise pas du tout ce truc....mais je vais peu être mis mettre.....

Lien vers le commentaire
Partager sur d’autres sites

Comme je l'ai expliqué je ne travail pas avec les épaisseurs de polyligne mais avec les largeurs qui elles se mettent à l'échelle.

Pour les métrés le lisp de Gile fonctionne....c juste que pour les lisp ssmatch et matchset,(les sélection rapide d'entités et les propriétés rapide), la propriété largeur serait génial, car il faut toujours que change la largeur avec "LA" et c un peu lourd....et puis pour les sélection, quand j'ai besoin de sélectionner toutes les polylignes d'une largeur donnée, je suis obligé de le faire à la main.

Voilà.....

 

Si qq un veut bien ajouter cette propriété à ces deux lisp.....je lui en serait reconnaissant.....Moi je ne maîtrise pas du tout ce truc....mais je vais peu être mis mettre.....

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Personnellement, je ne peux plus publier de modifications de ces routines par correction envers ceux qui m'ont payé pour les adapter et les intégrer à leur applicatif.

Mais leur code en l'état étant public, je ne peux empêcher quiconque de le faire s'il en a envie...

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

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é