Communauté
AutoCAD – tous produits - Français
Bienvenue sur les forums AutoCAD d’Autodesk. Partagez vos connaissances, posez des questions, et explorez les sujets AutoCAD populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

Tableau récapitulatif longueur polylignes cumulées

2 RÉPONSES 2
Répondre
Message 1 sur 3
niepoc
1256 Visites, 2 Réponses

Tableau récapitulatif longueur polylignes cumulées

Bonjour,

Jj'ai récupéré un bout de lisp sur le net et j'aimerais avoir une aide pour le comprendre et le modifier. je tiens à remercier son auteur pour l'aide précieuse apportée.

 

Etant novice sur Visual Lisp, je sollicite son aide. je ne connais que Python, Matlab et Scilab.

 

Quel ligne de code donne le nombre de lignes et le nombres de colonnes du tableau ?

Est ce  : (setq NumColumns 2) pour les colonnes et (setq NumRows (+ 3 LayerCount)) pour les lignes ?

 

 

Serait il possible de quantifier le nombre de lignes au résultats du filtre suivant au début de code :  (setq filteredLayers "*EP_PRO_TRANCHEE_*") soit indiquée à LayerCount le nombre de fichiers trouvés

 

Comment peut on ajouter des colonnes ?

 

Merci d'avance pour l'aide.

 

Cordialement

 

 

 

Voici le code en entier

 


(vl-load-com)

(defun c:tableau_Perimetres (

 / acadObject column ColWidth endPt filteredLayers filteredObjets i LayerCount LayerName layerNames lcLayerName

   LineWeightMedium LineWeightNone LineWeightThick ModelSpace n NumColumns NumRows objectName perimeter Point3D_UCS

   Point3D_WCS Resultat Resultats row RowHeight tableau textsize ThisDrawing Total vlaLayers vlaPoint3D vlaTableau

   )

 

   ;; ======================================================================================================================

   ;; Personnalisation

   ;; ======================================================================================================================

 

   ;; Liste des calques et objets désirés, séparés par des virgules, sans espace, wildcard acceptés, en minuscules ou majuscules

   ;; Exemple pour calques: "*" pour tous les calques, "E*,Z*" pour tous ceux qui commencent par E et par Z

   ;; Exemple pour objets "*" pour tous les objets "*line,circle" pour tous les objets dont le nom se termine par "line", ainsi que les cercles

   (setq filteredLayers "*EP_PRO_TRANCHEE_*")  

   (setq filteredObjets "*line")  


   ;; Taille du tableau

   (setq textsize (getvar "textsize"))          ; Voir cette variable qui contrôle la hauteur du texte

   (setq RowHeight (* 2.0 textsize))

   (setq ColWidth (* 10.0 RowHeight))           ; Largeur totale du tableau = 2 * ColWidth puisqu'on a 2 colonnes

   (setq LineWeightThick acLnWt090)             ; Épaisseur de la ligne de séparation (voir LWDISPLAY)

   (setq LineWeightMedium acLnWt040)            ; Épaisseur de la ligne de séparation (voir LWDISPLAY)

   (setq LineWeightNone acLnWt000)              ; Épaisseur de la ligne de séparation (voir LWDISPLAY)


 

   ;; ======================================================================================================================

   ;; Ne pas modifier la suite du programme

   ;; ======================================================================================================================


   (setq filteredLayers (strcase filteredLayers t))  ; Minuscules

   (setq filteredObjets (strcase filteredObjets t))  ; Minuscules

 

   (setq acadObject (vlax-get-acad-object))

   (setq ThisDrawing (vla-get-ActiveDocument acadObject))

   (setq ModelSpace (vla-get-ModelSpace ThisDrawing))

   (setq vlaLayers (vla-get-Layers ThisDrawing))

   (setq LayerCount (vla-get-count vlaLayers))
   

   (setq Point3D_UCS (getpoint "\nPoint d'insertion: "))

   (setq Point3D_WCS (trans Point3D_UCS 1 0))  ; Si pas en WCS

   (setq vlaPoint3D (PointToVariant Point3D_WCS))


   ;; En AutoLISP, il n'y a pas de tableau. On va se créer un faux tableau avec des clés (hash table)

   ;; dont les paires sont (LayerName Count)

   (setq Resultats nil)

   (setq layerNames nil)

   (vlax-for vlaLayer vlaLayers

      (setq layerName (vla-get-name vlaLayer))

      (setq lcLayerName (strcase layerName t))  ; Minuscules

      (if (wcmatch lcLayerName filteredLayers) (setq layerNames (cons lcLayerName layerNames)))

   )

   (setq layerNames (vl-sort layerNames '<))  ; Trier en ordre croissant

   (setq Resultats (mapcar '(lambda (x) (cons x 0.0)) layerNames))


   (vlax-for vlaObject ModelSpace

      

      (if (and (wcmatch (setq objectName (strcase (vla-get-ObjectName vlaObject) t)) filteredObjets)

               (wcmatch (setq layerName (strcase (vla-get-Layer vlaObject) t)) filteredLayers)

          )

      (progn

         (setq endPt (vlax-curve-getEndParam vlaObject))

         (setq perimeter (vlax-curve-getDistAtParam vlaObject endPt))

         (setq Total (+ perimeter (cdr (assoc layerName Resultats))))

         (setq Resultats (subst (cons layerName Total) (assoc layerName Resultats) Resultats))

      ))

   )


   (setq NumRows (+ 3 LayerCount)) ; 2 lignes de titre + total

   (setq NumColumns 2)

   (setq vlaTableau (vla-AddTable ModelSpace vlaPoint3D NumRows NumColumns RowHeight ColWidth))


   ;; Ligne 0

   (setq row 0)

   (setq column 0)

   (SetCellProperties vlaTableau row column "Résultats" textsize acMiddleCenter nil)


   ;; Ligne 1, colonne 0

   (setq row 1)

   (setq column 0)

   (SetCellProperties vlaTableau row column "Calques" textsize acMiddleCenter (cons acHorzBottom LineWeightMedium))


   ;; Ligne 1, colonne 1

   (setq row 1)

   (setq column 1)

   (SetCellProperties vlaTableau row column "Longueur de tranchée" textsize acMiddleCenter (cons acHorzBottom LineWeightMedium))


   ;; Lignes de résultat

   (setq i 0)

   (setq n LayerCount)

   (setq Total 0.0)

   (while (< i n);remplacer 4 par n

      (setq Resultat (nth i Resultats))

      (setq row (+ i 2))


      ;; Calque

      (setq column 0)

      (setq layerName (strcase (car Resultat)))

      (SetCellProperties vlaTableau row column layerName textsize acMiddleLeft nil)


      ;; Longueur de tranchée

      (setq column 1)

      (setq perimeter (cdr Resultat))

      (setq Total (+ Total perimeter))

      (SetCellProperties vlaTableau row column (rtos perimeter) textsize acMiddleRight nil)

      (setq i (1+ i))

   )

)




(defun SetCellProperties (

   vlaTableau Row Column Texte TextHeight Alignment LineWeightPair

   )

   ;; Gère les propriétés populaires des cellules d'un tableau

   ;;    vlaTableau Row Column : Obligatoire, les autres sont facultatifs

   ;;    Row, Column : INT, base 0

   ;;    Alignment: INT,

   ;;    LineWeightPair: nil, sinon (cons "AcGridLineType enum" "acad_lweight enum"), soit (cons Position Épaisseur)

   ;; Support pour Acad2006 et Acad2009

   (if LineWeightPair (vla-SetCellGridLineWeight vlaTableau Row Column (car LineWeightPair) (cdr LineWeightPair)))

   (if Alignment (vla-SetCellAlignment vlaTableau Row Column Alignment))

   (if TextHeight (vla-SetCellTextHeight vlaTableau Row Column TextHeight))

   (if Texte

      (if vla-SetCellValue

         (vla-SetCellValue vlaTableau Row Column Texte) ; AutoCAD 2009

         (vla-SetText vlaTableau Row Column Texte)      ; AutoCAD 2006

      )

   )

)


;;; PointToVariant

;;; Conversion de Point2D ou Point3D en variant

(defun PointToVariant (

   point

 / arraySpace sArray

   )

   (setq arraySpace (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length point)))))

   (setq sArray (vlax-safearray-fill arraySpace point))

   (vlax-make-variant sArray)

)

2 RÉPONSES 2
Message 2 sur 3
niepoc
en réponse à: niepoc

Bonjour,

 

est ce que quelqu'un a une idée svp ?

Message 3 sur 3
patrick_35
en réponse à: niepoc

Salut

Le nombre de lignes est déterminé dans cette boucle
(vlax-for vlaObject ModelSpace
 ...
)


En fonction des filtres et des objets trouvés, une liste nommée Resultats est créée contenant les infos Calques + Longueurs cumulées.
Le nombre d'objets dans la liste est variable et en conséquence le nombre de lignes du tableau.

Pour le nombre de colonnes, tu as trouvé la bonne variable mais c'est aussi en relation avec ce qui est recherché et la contitution de la liste.

 

Si tu cherches à comprendre le lisp, recopie dans autocad ligne par ligne et essaye de comprendre les résultats indiqués.

@+

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report