Aller au contenu

LISP calculer le métré de différente type de ligne selon son calque


Messages recommandés

Posté(e)

Bonjour

 

Je suis étudiant je voudrais savoir créer un programme LISP qui me donne le métré de mes différentes types de ligne ou de bloc selon mon calque, c'est à dire

 

Voici un exemple:

 

Calque réseaux FT:

 

Type ligne1 ._._._._._._ = ml

Type ligne2 ............ = ml

 

Bloc regard: nombre

 

voilà je voudrais avoir le sous détail de mes différents type de ligne et bloc appartenant a un calque et tout doit etre mit sur un fichier excel automatiquement

 

merci

Posté(e)

Hello

 

Voici une routine de notre indispensable Gilles tres proche de ton besoin !

Longueur totale des lignes et polylignes par Type de Ligne et aussi par Epaisseur de Ligne

 

Chargement par: APPLOAD

Commande au clavier: METRE_2

 

lecrabe

 

 


;; METRE par Type de Ligne ET par Epaisseur de Ligne par GC 
;; le 20/01/2011 - version 1.00
;; Routine METRE renomme en METRE_2

(defun c:metre_2 (/ 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	(< (setq lw (vla-get-LineWeight o)) 0)
     (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)
)
 

Autodesk Expert Elite Team

Posté(e)

Merci pour le programme

 

Mais es-ce que on pourrais améliorer ce programme, c'est-a-dire

de pouvoir extraire ces donnée sur excel

 

Ou si c'est possible de faire un programme a partir de VBA , en gérent les différent calque et type de ligne et d'objet qui appatienne au meme calque

 

Calque: reseau GAZ

 

_ Type de ligne:EU___EU___EU___

_ Type de ligne:GAZ---GAZ---GAZ---GAZ

_ Type de ligne:FT___FT____FT___FT

_ Type d'objet:...

Posté(e)

Hello

 

Tu plaisantes ? Aucun besoin de developpement specifique (si j'ai bien compris ta demande)

 

Ce que tu demandes est possible de base par l'Extraction des donnees : _DATAEXTRACTION

 

Tu selectionnes ce qui t'interesse (ou TOUT le dessin ou N DWGs),

puis tu selectionnes les entites (par exemple uniquement les Polylignes) qui t'interessent,

puis tu choisis par exemple les "bonnes" proprietes : Nom de calque, type de ligne, epaisseur, longueur, etc

et tu envoies le tout dans Excel directement ...

 

Un peu de remise en forme dans Excel, et c'est fini !

 

lecrabe

Autodesk Expert Elite Team

  • 2 semaines après...
Posté(e)

Bonjour

 

j'ai éffectué des modifification sur le programme, donc je voudrais savoir de quel manière je pourrais avoir le nombres de bloc à la place de la ligne et sa longueur

 

(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

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é