CadXP: Créer un tableau - CadXP

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Créer un tableau

#1 L'utilisateur est hors-ligne   LElemurien 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 117
  • Inscrit(e) : 01-novembre 18

Posté 22 mai 2020 - 15:27

Bonjour,

Serait-il possible d'avoir un exemple de LISP pour la création d'un tableau?

Je comprends apparemment que cela est possible qu'avec du VisualLisp est-ce vraiment le cas?

Est-il possible d'avoir par exemple la création d'un tableau avec 3 colonnes et 2 lignes et l'intégration de la variable "a" dans la 1ère colonne de la 1ère ligne?

Cela permettrai d'avoir un exemple en plus des explications de la fonction vlax-make-safearray.

Bon week-end à tous
0

#2 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8 929
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 22 mai 2020 - 16:02

Hello

Et voici un SUPERBE Exemple de notre Grand Maitre Gilles !

Routine: LISTBLOCK qui genere un Tableau des Blocs avec :
le Nom, le Nombre Total par Bloc et la Representation graphique !

Je l'utilise pour des Quantitatifs et aussi en supprimant la colonne du Nombre Total pour avoir une simple legende !!

BIEN SUR le tableau genere (contrairement a l 'extraction de donnees AutoCAD) est STATIQUE
mais cela ne me gene pas du tout ...

------------------------------------------------------------------------------------------
SVP si qq'un pouvait faire une petite amelioration :
Traiter AUSSI les Blocs INCLUS dans les Reseaux associatifs ... MERCI d'avance !
------------------------------------------------------------------------------------------

Routine extraite de "mon" stock de 3000 routines ...

LA SANTE (Stay Safe), Bye, lecrabe "triste"
Automne 2020, la retraite


 
;; 
;; Routine: ListBlock par GC
;; 
;; Table des Blocs : Nom , Nombre , Graphisme du Bloc
;; 
;; To be clearer, you can set the text height bay row type:
;; Only data rows (bit 1)
;; (vla-SetTextHeight table 1 height)
;; Only title row (bit 2)
;; (vla-SetTextHeight table 2 height)
;; Only header row (bit 4)
;; (vla-SetTextHeight table 1 height)
;; You can also combinate this, e.g. for the entire table (+ 1 2 4):
;; (vla-SetTextHeight table 7 height)
;; 
 
;;;;; 
;;;;;  Hauteur des Textes dans la Table = 5.0 ;;;;; 
;;;;;  (vla-SetTextHeight table 7 5.0)
;;;;; 
 

(defun c:ListBlock (/ ss name block blocks insPt table row)
  (vl-load-com)
  (or *acdoc*
      (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
  )
  (or *blocks*
      (setq *blocks* (vla-get-Blocks *acdoc*))
  )

  ;; Select blocks
  (prompt "\nSelect blocks to list or <All> ")
  (or (setq ss (ssget '((0 . "INSERT"))))
      (setq ss (ssget "_X" '((0 . "INSERT")))
      )
  )
  (if ss
    (progn

      ;; Build a list of dotted pairs (blockName . numberOfReferences) from the selection set
      (vlax-for	x (setq ss (vla-get-ActiveSelectionSet *acdoc*))
	(if (not (vlax-property-available-p x 'Path))
	  (setq	name   (vla-get-EffectiveName x)
		blocks (if (setq block (assoc name blocks))
			 (subst (cons name (1+ (cdr block))) block blocks)
			 (cons (cons name 1) blocks)
		       )
	  )
	)
      )
      (vla-delete ss)

      ;; Prompt for insertion point
      (initget 1)
      (setq insPt (trans (getpoint "\nInsertion point: ") 1 0))

      ;; Create the table
      (setq table (vla-addtable
		    (vla-get-modelspace *acdoc*)
		    (vlax-3d-point insPt)
		    (+ 2 (length blocks)) ; number of rows (including title and header)
		    3			; number of colums
		    20			; cell height
		    80			; row width
		  )
      )
      (vla-put-VertCellMargin table 4.0)
      (vla-put-TitleSuppressed table :vlax-false)
      (vla-put-HeaderSuppressed table :vlax-false)

      ;; Fill the titel and the header
;     (vla-setText table 0 0 "Blocks")
;     (vla-setText table 1 0 "Name")
;     (vla-setText table 1 1 "Count")
;     (vla-setText table 1 2 "Symbol") 

      ;; Textes version Francaise
      (vla-setText table 0 0 "Quantitatif des Blocs")
      (vla-setText table 1 0 "Nom")
      (vla-setText table 1 1 "Nombre")
      (vla-setText table 1 2 "Symbole") 

;;;;; Hauteur des Textes dans la Table = 5.0 ;;;;; 
(vla-SetTextHeight table 7 5.0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

      ;; fill the following rows from the list contents
      (setq row 2)
      (foreach item blocks
	(vla-settext table row 0 (car item)) ; block name
	(vla-settext table row 1 (cdr item)) ; references count
	(vla-SetBlockTableRecordId	; block symbol
	  table
	  row
	  2
	  (vla-get-ObjectId (vla-Item *blocks* (car item)))
	  :vlax-true
	)
	(setq row (1+ row))
      )
    )
  )
  (princ)
)

Autodesk Expert Elite Team
0

#3 L'utilisateur est hors-ligne   LElemurien 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 117
  • Inscrit(e) : 01-novembre 18

Posté 22 mai 2020 - 16:10

Cela va me donner un exemple pour la construction!

En fait il n'y a pas besoin de vlax-make-safearray?

Bon il faut que je retourne relire tout ça.

Merci
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)