Aller au contenu

Lisp tabloblo et bloc dynamique


defrai

Messages recommandés

Bonjour tous d'abord,

un grand merci a tous les pros du lisp et a ce forum, pour tout ce qu'ils apportent.

 

Je suis cherche à savoir si il était possible d'intégré les blocs dynamiques, dans ce merveilleux lisp TABLOBLO de Mr Tramber.

 

Merci par avance.

 

 

Lien vers le commentaire
Partager sur d’autres sites

Sympa pour le compliment mais il n'est pas tant mérité.

C'est une routine facile que, j'ai v à l'époque, de nombreux lispeurs ont modifié X fois pour répondre à des besoins.

Le seul mérite que j'ai eu est d'avoir codé pour la première fois une table mais c'est somme toute assez facile.

 

Tu veux intégrer des blocs dynamiques(il doit déjà le faire) ou uniquement des blocs dynamiques ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Voila, il me compte bien les blocs dynamiques mais le problème est qu'il me les associe par leur nom d'origine.

J’aimerais qu'il me dissocie les blocs avec les différentes visibilités .

 

Par exemple, j’ai un bloc nommé interrupteur qui peut avoir comme visibilité :

inter simple, va et vient ou bouton poussoir. Il me mais tous dans la même ligne car il s’appelle interrupteur.

J’aurais aimer qu’il me face comme l’extraction d’attribut que J’utilise de plus en plus mais elle n’insère pas les symboles .

 

Lien vers le commentaire
Partager sur d’autres sites

J'ai fait ce petit truc parce que j'avais un peu de temps et d'intérêt.

Je ne l'ai pas testé en profondeur, mais ça semble marcher.

 

;; TABLDYNBLOC
;; Crée un tableau qui liste les blocs sélectionnés

(defun c:tabldynbloc (/ ss refs lst ele ins tbl row)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)))
 (prompt "\nSélectionnez les blocs à lister ou ")
 (or (setq ss (ssget '((0 . "INSERT"))))
     (setq ss (ssget "_X" '((0 . "INSERT"))))
 )
 (if ss
   (progn
     (vlax-for	x (setq ss (vla-get-ActiveSelectionSet *acdoc*))
(or (vlax-property-available-p x 'Path)
    (setq refs
	   (cons
	     (cons
	       (vla-get-EffectiveName x)
	       (gc:GetVisibilityState x)
	     )
	     refs
	   )
    )
)
     )
     (vla-delete ss)
   )
 )
 (foreach n refs
   (setq lst (if (setq ele (assoc n lst))
	(subst (cons (car ele) (1+ (cdr ele))) ele lst)
	(cons (cons n 1) lst)
      )
   )
 )
 (initget 1)
 (setq ins (trans (getpoint "\nPoint d'insertion: ") 1 0))
 (setq	tbl (vla-addtable
      (vla-get-modelspace
	(vla-get-activedocument (vlax-get-acad-object))
      )
      (vlax-3d-point ins)
      (+ 2 (length lst))
      3
      20			; Hauteur cellule
      80			; Largeur cellule
    )
 )
 (vla-put-VertCellMargin tbl 4.0)	; Marge verticale
 (vla-put-TitleSuppressed tbl :vlax-false)
 (vla-put-HeaderSuppressed tbl :vlax-false)
 (vla-setText tbl 0 0 "Blocs")		; Titre
 (vla-setText tbl 1 0 "Nom")		; Titre colonne 1
 (vla-setText tbl 1 1 "Nombre")	; Titre colonne 2
 (vla-setText tbl 1 2 "Symbole")	; Titre colonne 3
 (setq row 2)
 (foreach b lst
   (vla-SetText
     tbl
     row
     0
     (if (cdar b)
(strcat (caar b) " (" (cdar b) ")")
(caar b)
     )
   )
   (vla-SetText tbl row 1 (cdr b))
   (vla-SetBlockTableRecordId tbl row 2 (vla-get-ObjectId (vla-Item *blocks* (caar b))) :vlax-true)
   (vla-setcellalignment tbl row 0 5)
   (vla-setcellalignment tbl row 1 5)
   (setq row (1+ row))
 )
 (princ)
)

;; gc:GetVisibilityState
;; Retourne l'état de visibilité d'un bloc dynamique ou nil

(defun gc:GetVisibilityState (blk / state)
 (if (= (vla-get-IsDynamicblock blk) :vlax-true)
   (foreach p (vlax-invoke blk 'GetDynamicBlockProperties)
     (if (= (type (car (vlax-get p 'AllowedValues))) 'STR)
(setq state (vlax-get p 'Value))
     )
   )
 )
 state
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

J'ai bien essayé de régler la propriété de choix car ce sont des blocs à vues multiples et j'aurais donc voulu compléter la routine de (gile).

 

MAIS :

Je ne suis pas arrivé à remplacer

(vla-SetBlockTableRecordId tbl row 2 (vla-get-ObjectId (vla-Item *blocks*(caar b))) :vlax-true) 

Par une formule qui permette de choisir la vue du bloc par programmation.

Pas de solution pour le moment. Je suis assez occupé par ailleurs.

 

On dirait qu'il est difficile voire impossible d'accéder à ta demande defrai. Je donne ma langue au chat pour le moment. S'il y a un chat ? :cool:

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

On peut le faire en récupérant l'ObjectId du bloc anonyme.

Mais comme on veut regrouper les blocs par état de visibilité, on ne peut conserver qu'un bloc anonyme pour différents blocs ayant le même état. Le symbole reflètera donc le bloc anonyme qui a été conservé avec toutes ses autres modifications dynamiques (étirement, rotation, etc.).

 

;; TABLDYNBLOC
;; Crée un tableau qui liste les blocs sélectionnés

(defun c:tabldynbloc (/ ss refs lst ele ins tbl row)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)))
 (prompt "\nSélectionnez les blocs à lister ou ")
 (or (setq ss (ssget '((0 . "INSERT"))))
     (setq ss (ssget "_X" '((0 . "INSERT"))))
 )
 (if ss
   (progn
     (vlax-for	x (setq ss (vla-get-ActiveSelectionSet *acdoc*))
(or (vlax-property-available-p x 'Path)
    (setq refs
	   (cons
	     (list
	       (cons
		 (vla-get-EffectiveName x)
		 (gc:GetVisibilityState x)
	       )
	       (vla-get-Name x)
	     )
	     refs
	   )
    )
)
     )
     (vla-delete ss)
   )
 )
 (foreach n refs
   (setq lst (if (setq ele (assoc (car n) lst))
	(subst (list (car ele) (cadr ele) (1+ (caddr ele))) ele lst)
	(cons (list (car n) (cadr n) 1) lst)
      )
   )
 )
 (initget 1)
 (setq ins (trans (getpoint "\nPoint d'insertion: ") 1 0))
 (setq	tbl (vla-addtable
      (vla-get-modelspace
	(vla-get-activedocument (vlax-get-acad-object))
      )
      (vlax-3d-point ins)
      (+ 2 (length lst))
      3
      20			; Hauteur cellule
      80			; Largeur cellule
    )
 )
 (vla-put-VertCellMargin tbl 4.0)	; Marge verticale
 (vla-put-TitleSuppressed tbl :vlax-false)
 (vla-put-HeaderSuppressed tbl :vlax-false)
 (vla-setText tbl 0 0 "Blocs")		; Titre
 (vla-setText tbl 1 0 "Nom")		; Titre colonne 1
 (vla-setText tbl 1 1 "Nombre")	; Titre colonne 2
 (vla-setText tbl 1 2 "Symbole")	; Titre colonne 3
 (setq row 2)
 (foreach b lst
   (vla-SetText
     tbl
     row
     0
     (if (cdar b)
(strcat (caar b) " (" (cdar b) ")")
(caar b)
     )
   )
   (vla-SetText tbl row 1 (caddr b))
   (vla-SetBlockTableRecordId tbl row 2 (vla-get-ObjectId (vla-Item *blocks* (cadr b))) :vlax-true)
   (vla-setcellalignment tbl row 0 5)
   (vla-setcellalignment tbl row 1 5)
   (setq row (1+ row))
 )
 (princ)
)

;; gc:GetVisibilityState
;; Retourne l'état de visibilité d'un bloc dynamique ou nil

(defun gc:GetVisibilityState (blk / state)
 (if (= (vla-get-IsDynamicblock blk) :vlax-true)
   (foreach p (vlax-invoke blk 'GetDynamicBlockProperties)
     (if (= (type (car (vlax-get p 'AllowedValues))) 'STR)
(setq state (vlax-get p 'Value))
     )
   )
 )
 state
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

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é