Bortch59 Posté(e) le 15 septembre 2012 Posté(e) le 15 septembre 2012 Bonjour,j'ai un fichier contenant des blocs que j'insère via les palettes.Je me retrouve donc avec un groupe de 5 palettes qui commence à être surchargée à mon gout (à chaque fois 1 type de raccords x 8 ou 9 diamètres). J'envisageais de créer un code par type de raccord qui irait me chercher le bloc dans le bon diamètre et que je mettrais dans une palette (gain = 1 palette au lieu de cinq).Seulement je ne sais pas comment aller chercher les blocs dans le fichier source à la manière des palettes.Est-ce possible ou dois je obligatoirement créer un fichier par bloc? Je précise que mis à part ce problème de récupération de bloc je sais faire le reste. Merci.
Tramber Posté(e) le 15 septembre 2012 Posté(e) le 15 septembre 2012 Un fichier par bloc ?Ca me semble beaucoup plus facile en effet. Car sinon, comment aller chercher la définition d'un bloc dans un dessin ? lourd en prog. Donc, tu peux concatener la racine de ton chemin avec le code ce qui reviendrait à enregistrer chacun de tes groupes de blocs dans un dossier portant le nom de code. Tu envisages de mettre un expression lisp dans la palette ? C'est possible tu sais. Donc à chaque clic, la routine te poserais la question du code ou plutôt la question du diamètre ? Le code, hein, je crois ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Fraid Posté(e) le 15 septembre 2012 Posté(e) le 15 septembre 2012 Bonjour, En effet, la solution d'enregistrer tout les blocs dans un dossier me semble le plus pratique à condition de déclarer dans les options le dossier dans les Chemin de recherche de fichiers support. Du coup tu peux oublier les chemins, (defun c:l2t nil (command "_.-LAYER" "e" "31_moburba" "") (command "_-insert" "chrl2t" pause "" "" pause) (command "_.-layer" "e" "0" "") (princ) ) ici m’insère le bloc chrl2t https://github.com/Fraiddd
Fraid Posté(e) le 15 septembre 2012 Posté(e) le 15 septembre 2012 Un petit lisp qui te rendra service ;btowb=>bloc to wbloc ;--------------------------- ;récuperer les blocs internes d'un fichier pour les passer en blocs externes (wbloc) ;-------------------------- (defun c:btowb () ; pour definier les noms longs à changer suivant la version d'autocad et de windows ;si nom_long = t alors nom long ok ;si nom_long = nil alors pas de nom long (setq nom_long t) ;on liste tous les blocs internes contenus dans le fichier (setq lst_bloc nil) (setq bloc (tblnext "BLOCK" t)) (while (/= bloc nil) (if (/= (substr (cdr (assoc 2 bloc)) 1 1) "*") (if (/= (wcmatch (cdr (assoc 2 bloc)) "*|*") t) (setq lst_bloc (append lst_bloc (list (cdr (assoc 2 bloc))))) ) ) (setq bloc (tblnext "BLOCK")) ) (setq nb_bloc (length lst_bloc)) (prompt (strcat "\n" (itoa nb_bloc) " blocs trouves")) ;on défini si la création est totale ou si on passe les noms un par un (setq compte 0) (setq option nil) (initget "p t") (setq option (getkword "\ncréation pas à pas ou tout: ")) (if (= option "t") (progn (repeat nb_bloc (creation_bloc) (setq compte (1+ compte)))) (progn (repeat nb_bloc (setq choix nil) (initget "O N") (setq choix (getkword (strcat "\nbloc " (itoa (1+ compte)) " = " (nth compte lst_bloc) " > O/N : ") ) ) (if (= choix "O") (creation_bloc) ) (setq compte (1+ compte)) ) ) ) (princ) ) ;--------------- ;sous programme creation de bloc ;-------------- (defun creation_bloc () (setq existe nil) ;on verifie que le bloc n'existe pas sinon on pose la question de le remplacer (setq existe (findfile (strcat (nth compte lst_bloc) ".dwg"))) (if (= existe nil) (if (= nom_long t) (vl-cmdf "wbloc" (nth compte lst_bloc) (nth compte lst_bloc)) (vl-cmdf "wbloc" (substr (nth compte lst_bloc) 1 8) (nth compte lst_bloc)) ) (progn (initget "O N") (setq efface (getkword (strcat "\nle bloc " (nth compte lst_bloc) " éxiste déja, désirez vous le remplacer O/N:" ) ) ) (if (= efface "O") (if (= nom_long t) (vl-cmdf "wbloc" (nth compte lst_bloc) "o" (nth compte lst_bloc)) (vl-cmdf "wbloc" (substr (nth compte lst_bloc) 1 8) "o" (nth compte lst_bloc)) ) ) ) ) ;(princ) ) Merci à l'Auteur si il se reconnais :D https://github.com/Fraiddd
Bortch59 Posté(e) le 15 septembre 2012 Auteur Posté(e) le 15 septembre 2012 Merci à vous deux pour vos réponses. Tu envisages de mettre un expression lisp dans la palette ? C'est possible tu sais. Donc à chaque clic, la routine te poserais la question du code ou plutôt la question du diamètre ? C'est exactement ça.Ce que je redoutais et que je voulais éviter, c'est d'avoir à sortir tout mes blocs en fichiers blocs => gros boulot!Mais avec le lisp que me présente Fraid, j'ai l'impression que cela va être un jeu d'enfant.
Tramber Posté(e) le 15 septembre 2012 Posté(e) le 15 septembre 2012 Ce que je redoutais et que je voulais éviter, c'est d'avoir à sortir tout mes blocs en fichiers blocs => gros boulot! S'ils sont tous disposés sur ton dessin, c'est cliquer sur chacun en selection unique et taper W suivi d'ENTREE, quelques minutes pour 50 blocs en modifiant le chemin de temps en temps. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 15 septembre 2012 Posté(e) le 15 septembre 2012 Ce que je redoutais et que je voulais éviter, c'est d'avoir à sortir tout mes blocs en fichiers blocs => gros boulot! Charge le LISP suivant dans le dessin contenant les blocs, lance WBLOCKALL, choisis le répertoire dans lequel enregistrer les fichiers dans la boite de dialogue, et c'est tout... ;; Commande WBLOCKALL ;; Crée un fichier dwg pour chaque bloc de la collection dans le répertoire spécifié. (defun c:wblockall (/ dirname block name filename) (if (setq dirname (DirBox "Sélectionner le répertoire pour les fichiers bloc." "" 0 ) ) (while (setq block (tblnext "BLOCK" (not block))) (setq name (cdr (assoc 2 block))) (if (findfile (setq filename (strcat dirname "\\" name ".dwg"))) (command "_.-wblock" filename "_yes" name) (command "_.-wblock" filename name) ) ) ) (princ) ) ;;; DirBox -Patrick_35- (defun DirBox (Message Chemin Drapeau / rep sh) (vl-load-com) (setq sh (vlax-create-object "Shell.Application")) (if (setq rep (vlax-invoke sh 'browseforfolder 0 Message Drapeau Chemin) ) (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path)) (setq rep nil) ) (vlax-release-object sh) rep ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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