dr.loveless Posté(e) le 7 octobre 2004 Posté(e) le 7 octobre 2004 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
bruno_l Posté(e) le 7 octobre 2004 Posté(e) le 7 octobre 2004 (setq existe (tblsearch "block" "blocporte"))cette ligne retourne un liste se referant au bloc si il existeretourne nil si il n'existe pas (if (null existe)(prompt "exsite pas")(prompt "existe"))ensuite on imprime le resultat du test
Patrick_35 Posté(e) le 7 octobre 2004 Posté(e) le 7 octobre 2004 Salut, et encore plus court(if (tblsearch "block" "blocporte")(prompt "existe")(prompt "existe pas"))(princ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
dr.loveless Posté(e) le 8 octobre 2004 Auteur Posté(e) le 8 octobre 2004 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
BIM G CO Posté(e) le 22 octobre 2004 Posté(e) le 22 octobre 2004 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ôtespré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
BIM G CO Posté(e) le 22 octobre 2004 Posté(e) le 22 octobre 2004 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
Patrick_35 Posté(e) le 22 octobre 2004 Posté(e) le 22 octobre 2004 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 22 octobre 2004 Posté(e) le 22 octobre 2004 Salut Si présence de bloc imbriqué, pour explorer la présence de sous-bloc tu peut aller voir la réponse que j'ai faite àhttp://www.cadxp.com/sujetXForum-3602.htm Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
BIM G CO Posté(e) le 22 octobre 2004 Posté(e) le 22 octobre 2004 à savoir que ce prog je l'ai récup sur un Auto CAD 12 ;) 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
Serge Posté(e) le 22 octobre 2004 Posté(e) le 22 octobre 2004 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant