Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Dans une application je voudrais tester le nom d'un bloc afin de savoir si il existe déjà, je sais le faire en Visual Basic, mais je seche completement en Lisp.

 

Le Nom du bloc -> BlocPorte

 

Je pense qu'il faut executer une boucle qui compare le nom de tous les blocs du dessin avec le nom du bloc (ici BlocPorte) que je veux créer.

 

Si qq à une idée, je suis preneur !!

 

Merci d'avance

Le DOC

Posté(e)

(setq existe (tblsearch "block" "blocporte"))

cette ligne retourne un liste se referant au bloc si il existe

retourne nil si il n'existe pas

(if (null existe)(prompt "exsite pas")(prompt "existe"))

ensuite on imprime le resultat du test

 

Posté(e)

La pensée du jour du Doc :" :mad2: Putain je suis vraiment nul, je vais me recycler et faire vendeur de crêpes" .

 

Ca parait si simple, mais tellement compliquer en même temps !!

 

Et moi qui m'acharnait à faire une boucle pour tester chaque block !!!

 

 

Vraiment merci beaucoup !!!

Le DOC

  • 2 semaines après...
Posté(e)

euh ca ne marche que si le bloc n'est présent sur le dessin en Bloc, c'est à dire :

 

présent en flèche utilisateur dans les styles de côtes

présent dans la liste des blocs (style Insérer bloc) mais pas sur le dessin !

 

 

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

Ah zut j'ai encore avalé des mots !

 

il fallait comprendre que l'on arrive pas à les detecter de cette manière s'il ne sont pas présent dans le dessin en bloc. Donc le test ne fonctionne quand malgré tout il est présent en flèche utilisateur dans les styles de côtes et/ou présent dans la liste des blocs (style Insérer bloc) mais pas sur le dessin !

 

J'ai créé des gabarits (.DWT) avec des styles de cotes spécifiques pour justement pouvoir séparer diffrénts ligne de repère (désignation d'éléments, diamètre des fluides, traversée de dalle) mais malheureusement si un dessinateur purge les cotes non utilisé ainsi que les blocs je ne sait pas comment tester si les blocs et les styles de cotes sont toujours là : "COT-Designation$7", "COT-Diametre$7", COT-"Colonne$7", et les blocs "BLK-Designation" "BLK-Diametre" et "BLK-Colonne"

 

la pour le test pas moyen de les trouver s'il ne sont pas insérer en bloc, l'exemple est encore plus tragique lorsque il est inséré avec la ligne de repère et malgré tout il n'est pas présent dans avec ce petit test.

 

même avec ce petit programme autolisp récupéré :

 

(defun C:cbbloc (/ NomBloc Nombre b a)

; PROGRAMME: CBBLOC.LSP

; EDITER PAR F.CARRE LE 01/06/94

; Compter le nombre d'occurrences d'un bloc. En modifiant quelque

; peu ce programme, il pourra compter n'importe quelle autre entité.

 

(setq NomBloc (getstring "\nEntrez le nom du bloc: "))

(setq b (cons 2 NomBloc))

(setq a (ssget "x" (list b)))

(if (/= a nil)

(progn

(setq Nombre (sslength a))

(princ (strcat "\nCe bloc est insere "

(rtos Nombre 2 0)

" fois dans ce dessin.\n"

)

)

)

)

(if (= a nil)

(prompt

"\nCe bloc ne figure pas dans la base de données. \n"

)

)

(princ)

)

 

 

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

Salut, je vais te simplifier un peu ton prog si tu le permets, ça te permettras de voir un peu autrement la condition if

 

(defun C:cbbloc (/ NomBloc Nombre b a)
; PROGRAMME: CBBLOC.LSP
; EDITER PAR F.CARRE LE 01/06/94
; Compter le nombre d'occurrences d'un bloc. En modifiant quelque 
; peu ce programme, il pourra compter n'importe quelle autre entité.

(setq NomBloc (getstring "\nEntrez le nom du bloc: "))
(setq a (ssget "x" (list (cons 2 NomBloc))))
(if a
 (princ (strcat "\nCe bloc est inseré " (itoa (sslength a)) " fois dans ce dessin."))
 (princ "\nCe bloc ne figure pas dans la base de données.")
)
(princ)
)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Je suis définitivement en retard sur le forum. Voici un autre exemple:

 

(defun getBlockQuantityEntry (

blockname

/ blockTables count1 count2 count3 modelSpace paperSpace

)

(princ (strcat "\nRecherche du bloc '" blockname "'."))

(setq blockname (strcase blockname))

 

(setq modelSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))

(setq count1 (getBlockQuantity modelSpace blockname))

(princ (strcat "\n" (itoa count1) " en espace objet"))

 

(setq paperSpace (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))))

(setq count2 (getBlockQuantity paperSpace blockname))

(princ (strcat "\n" (itoa count2) " en espace papier"))

 

(setq blockTables (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))))

(setq count3 (getBlockQuantity blockTables blockname))

(princ (strcat "\n" (itoa count3) " imbriqué" (if (> count3 1) "s" "")))

 

(princ "\n----------------------------")

(princ (strcat "\n" (itoa (+ count1 count2 count3)) " au total."))

(princ)

)

 

(defun getBlockQuantity (

space blockname

/ count

)

(setq count 0)

(setq blockname (strcase blockname))

(vlax-for item space

(if (or

(and (= (vla-get-objectname item) "AcDbBlockTableRecord")

(= (strcase (vla-get-name item)) blockname)

)

(and (= (vla-get-objectname item) "AcDbBlockReference")

(= (strcase (vla-get-name item)) blockname)

)

)

(setq count (1+ count))

)

)

count

)

 

(defun c:test ( / blockname)

(setq blockname (getstring t "\nNom du bloc: "))

(if (/= "" blockname) (getBlockQuantityEntry blockname))

(princ)

)

 

Serge

 

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é