mateus Posté(e) le 26 novembre 2012 Posté(e) le 26 novembre 2012 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 ._._._._._._ = mlType 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
lecrabe Posté(e) le 26 novembre 2012 Posté(e) le 26 novembre 2012 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: APPLOADCommande 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
mateus Posté(e) le 28 novembre 2012 Auteur Posté(e) le 28 novembre 2012 Merci pour le programme Mais es-ce que on pourrais améliorer ce programme, c'est-a-direde 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:...
lecrabe Posté(e) le 29 novembre 2012 Posté(e) le 29 novembre 2012 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
mateus Posté(e) le 10 décembre 2012 Auteur Posté(e) le 10 décembre 2012 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
x_all Posté(e) le 10 décembre 2012 Posté(e) le 10 décembre 2012 la fonction rechercher marche désormais, faudrait pas s'en priverhttp://cadxp.com/index.php?/topic/25605-lister-blocs/page__p__139553__hl__bcnt__fromsearch__1#entry139553 ou http://cadxp.com/index.php?/topic/36498-nombre-de-bloc-dans-un-fichier/page__view__findpost__p__198703 quelques trucs sur autocad
mateus Posté(e) le 10 décembre 2012 Auteur Posté(e) le 10 décembre 2012 la fonction rechercher marche désormais, faudrait pas s'en priverhttp://cadxp.com/index.php?/topic/25605-lister-blocs/page__p__139553__hl__bcnt__fromsearch__1#entry139553 ou http://cadxp.com/index.php?/topic/36498-nombre-de-bloc-dans-un-fichier/page__view__findpost__p__198703merci
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