+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    janvier 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : janvier 2013
    Messages : 7
    Points : 2
    Points
    2

    Par défaut Convertir des polylignes en volumes via un script VB

    Bonjour,

    Je cherche à convertir des polylignes en volumes par le biais d'un script VB. Le but est de passer un plan 2D d'un immeuble en plan 3D sous AutoCAD 3D par le biais d'une routine.

    Je dispose d'un plan 2D avec des polylignes fermées (chaque polyligne possède un calque propre) et je dispose d'un fichier excel sur lequel est référencé le nom des calques et la hauteur associée à chaque calque.

    Dans mon idée, le code associerait la hauteur du calque à la polyligne en lisant le fichier excel et extruderait la polyligne en fonction de la hauteur associée.

    Je ne sais pas trop si c'est envisageable... Je vous remercie d'avance pour vos remarques, vos conseils et pour votre aide.

  2. #2
    Invité de passage
    Homme Profil pro
    Inscrit en
    janvier 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : janvier 2013
    Messages : 7
    Points : 2
    Points
    2

    Par défaut Début de réponse

    J'ai un début de réponse à ma question (envoyé par Tharwat Al Shoufi) mais le test n'est pas concluant. En effet, lorsque je test ce lisp, les polylignes ne sont pas extrudées.

    Est-ce que l'un d'entre vous aurait une idée ? D'où proviens le blocage ?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    (defun c:Ex-polys (/ *error* Deconstruct_Strings f st ss i sn lst s cm l)
    ;;; 	------======= Author : Tharwat Al Shoufi =====-----  ;;;
    ;;; This routine to extrude Polylines according to the       ;;;
    ;;;    value in the second column in the .csv excel file     ;;;
    ;;; Excel file contents example 			     ;;;
    ;;; A			B				     ;;;
    ;;; Layer name1    123.123				     ;;;
    ;;; layer name2    456.456				     ;;;
    ;;; and so on , as much as needed			     ;;;
     
      (vl-load-com)
      (or Doc (setq Doc (vla-get-activedocument (vlax-get-acad-object))))
      (defun *error* (x)
        (if f
          (close f)
        )
        (if cm
          (setvar 'cmdecho cm)
        )
        (vla-EndUndoMark Doc)
        (princ "\n *Cancel*")
      )
      (defun Deconstruct_Strings (string delimiter / pos lst)
        (while (setq pos (vl-string-search delimiter string 0))
          (progn (setq lst (cons (substr string 1 pos) lst))
                 (setq string (substr string (+ pos 2) (strlen string)))
          )
        )
        (if string
          (setq lst (cons string lst))
        )
        (setq lst (reverse lst))
      )
      (if (and (setq ss (ssget "_:L" '((0 . "*POLYLINE"))))
               (setq f (getfiled "Select Excel file" (getvar 'dwgprefix) "csv" 16))
          )
        (progn (setq f (open f "r"))
               (while (setq st (read-line f))
                 (setq s (Deconstruct_Strings st ";"))
                 (setq lst (cons (list (car s) (read (cadr s))) lst))
               )
               (close f)
               (setq cm (getvar 'cmdecho))
               (setvar 'cmdecho 0)
               (vla-EndUndoMark Doc)
               (vla-StartUndomark Doc)
               (repeat (setq i (sslength ss))
                 (setq sn (ssname ss (setq i (1- i))))
                 (setq l (cdr (assoc 8 (entget sn))))
                 (foreach x lst
                   (if (and (eq (strcase l) (strcase (car x))) (numberp (cadr x)))
                     (progn (vl-cmdf "_.extrude" sn "" (cadr x)) (vl-cmdf "_.chprop" (entlast) "" "_layer" l ""))
                   )
                 )
               )
               (vla-EndUndoMark Doc)
               (setvar 'cmdecho cm)
        )
      )
      (princ "\n Written by Tharwat Al Shoufi")
      (princ)
    )

  3. #3
    Invité de passage
    Homme Profil pro
    Inscrit en
    janvier 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : janvier 2013
    Messages : 7
    Points : 2
    Points
    2

    Par défaut Solution

    Solution avec le lisp précédent en vidéo : http://www.youtube.com/watch?v=4l20M...ature=youtu.be

    Et cela marche super bien ! A condition de ne pas mettre de virgule dans le fichier .csv au lieu de point !

    Merci à Tharwat Al Shoufi pour son aide !

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •