whitesquare Posté(e) le 4 mai 2007 Posté(e) le 4 mai 2007 quelle methode utilisez vous pour rendre un bloc unique
whitesquare Posté(e) le 4 mai 2007 Auteur Posté(e) le 4 mai 2007 euh ............c'est pas comme dans sketchup pour ceux qui connaissent,je m excuse, je me suis mal exprimé, en fait je m interroge sur la procedure a utiliser pour enregistrer un bloc sous un autre nom afin de pouvoir le modifier sans que cela modifie tous les blocs deja present dans le dessin. la premiere chose qui me vient est de decomposer et de renregistréj ai vu qu il est egalement possible, dans l editeur de bloc de faire enregistrer sous, mais cela ne modifie pas le bloc en question, il faut alors inserer le nouveau bloc (il n y a pas, à ma connaissance, de possibilité de modifier le bloc lui meme)
esbe Posté(e) le 5 mai 2007 Posté(e) le 5 mai 2007 Je n 'ai pas encore la 2006 mais tu ne peux pas faire aussi simplement que ds SU... clic droit... A part changer son nom, aprés decomposition , je ne vois pas ! dommage, hein ?!
LUDWIG Posté(e) le 5 mai 2007 Posté(e) le 5 mai 2007 dans Autodesk Architectural Desktop, il avait une fonction pour ça (je ne me rappelle plus trop du nom, "copier la définition du bloc et associer").En lisp ce ne doit pas être trop comlexe je pense... Autocad 2021 - Revit 2022 - Windows 10
(gile) Posté(e) le 5 mai 2007 Posté(e) le 5 mai 2007 Salut, En m'inspirant largement de ce qu'avait fait Bred (UCS2WCSMatrix de Doug Broad inclue). Edit : Devrait fonctionner quelque soit le SCU courant et quelque soient la rotation du bloc et le SCU dans lequel il a été inséré. (defun c:nbl (/ old name AcDoc Space zdir ins rot nor obj new ref) (vl-load-com) (while (not (and (setq old (car (entsel "\nSélectionner le bloc à re-créer: "))) (= "INSERT" (cdr (assoc 0 (entget old)))) ) ) (princ "\nObjet incorrect.") ) (while (not (and (setq name (getstring T "\nEntrez le nouveau nom pour le bloc: ") ) (/= name "") (null (tblsearch "BLOCK" name)) ) ) (princ "\nNom incorrect.") ) (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) zdir (trans '(0 0 1) 1 0 T) old (vlax-ename->vla-object old) ins (vlax-get old 'InsertionPoint) rot (vla-get-Rotation old) nor (vlax-get old 'Normal) obj (vlax-invoke old 'Explode) new (vla-add (vla-get-Blocks AcDoc) (vlax-3d-point (trans ins 0 nor)) name ) ) (foreach n obj (vla-rotate3d n (vlax-3d-point ins) (vlax-3d-point (mapcar '+ ins nor)) (- rot) ) (vla-transformby n (vlax-tmatrix (append (mapcar '(lambda (vec org) (append (trans vec nor 0 T) (list org)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 nor) ) (list '(0 0 0 1)) ) ) ) ) (vlax-invoke acDoc 'CopyObjects obj new) (mapcar 'vla-delete (cons old obj)) (setq ref (vla-insertblock Space (vlax-3d-point '(0 0 0)) name 1 1 1 0 ) ) (vla-transformby ref (vlax-tmatrix (append (mapcar '(lambda (vec org) (append vec (list org)) ) (mxm (mapcar '(lambda (x) (trans x 0 nor T)) '((1 0 0) (0 1 0) (0 0 1)) ) (mapcar '(lambda (x) (trans x zdir 0 T)) '((1 0 0) (0 1 0) (0 0 1)) ) ) ins ) (list '(0 0 0 1)) ) ) ) (vla-rotate3d ref (vlax-3d-point ins) (vlax-3d-point (mapcar '+ ins nor)) rot ) (princ (strcat "Le bloc \"" name "\" a été créé.")) (princ) ) ;; Multiply two matrices by Vladimir Nesterovsky (defun mxm (m q) (mapcar '(lambda (r) (mapcar '(lambda (l) (apply '+ (mapcar '* l r))) (apply 'mapcar (cons 'list q)) ) ) m ) ) [Edité le 6/5/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 7 mai 2007 Posté(e) le 7 mai 2007 Hello Gilles Comme d'habitude, FELICITATIONS ! J'aime bien cette routine :) :D :cool: Cependant je signale un point "subtil" qui ne me gêne pas du tout : Sur des blocs qui ont subi une commande MIRROIR, il y a souvent un facteur d'Echelle en X ou Y qui est NEGATIF (= Normal), lorsque tu reconstruit le nouveau bloc, il est refait à sa nouvelle position et avec une rotation normale donc X ou Y sont toujours positifs ! Pour moi c parfait, mais bon dans certains cas, les gens peuvent peut être parfois interpréter ce facteur négatif (A vérifier) ... :exclam: Attendons de voir ce que vont en dire les utilisateurs ! ;) Routine testée et validée sur MAP 2004 / 2006 / 2007 et aussi sur MAP R6 (ACAD 2002) Le Decapode (toujours impressionné par ton efficacité et réactivité) [Edité le 7/5/2007 par lecrabe] Autodesk Expert Elite Team
whitesquare Posté(e) le 18 mai 2007 Auteur Posté(e) le 18 mai 2007 gile peux tu m expliquer comment on utilise ton lispj ai essayé nbl ...
(gile) Posté(e) le 18 mai 2007 Posté(e) le 18 mai 2007 Salut, NBL crée une nouvelle définition de bloc dans le dessin à partir d'une référence insérée.La nouvelle définition sera identique à la référence sélectionnée. Pour l'utiliser, charger le LISP, sélectionner une référence dans le dessin et spécifier le nom du nouveau bloc. Les instructions apparaissent sur la ligne de commande. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
whitesquare Posté(e) le 18 mai 2007 Auteur Posté(e) le 18 mai 2007 euh...... je comprend ce que tu m explique, du moind je crois, seulement lorsque je tape nbl cela ne fionctionne pas, j avais dans un premier temps crée un fichier lsp, chargé, puis redemarrage autocadc'est à l'evidence pas la bonne procedure puisque cela ne marche pas dans un second temps j ai chargé le lisp dans la ligne de commande directement et meme resultat. j ai egalement esssayé dans l editeur de bloc.........veuillez excuser mon ignorance........et merci de votre aide
(gile) Posté(e) le 18 mai 2007 Posté(e) le 18 mai 2007 Pour charger un LISP, vois sur cette page, une fois le LISP chargé dans le dessin courant, tape NBL à la ligne de commande. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ludo07 Posté(e) le 17 octobre 2008 Posté(e) le 17 octobre 2008 bonjou à tous, suite à mon message dans le forum AUTOCAD 2009 (BLOC *U139) et aprés une recherche sur Cadxp, je suis tombé sur cette discussion. (gile): nbl fonctionne, mais le bloc *U139 existe 50 fois dans le fichier. nbl ne change que le bloc *U139 que j'ai selectionné il ne modifi pas les 49 autres bloc *U139. Tu crois que cela peut-être faisable??? A+
ludo07 Posté(e) le 19 octobre 2008 Posté(e) le 19 octobre 2008 Bonjour, (gile) si tu passe dans le coin tu peux s'il te plait répondre à mon message précedent à savoir si ce que je te demande est possible ou NON. Merci
(gile) Posté(e) le 19 octobre 2008 Posté(e) le 19 octobre 2008 Salut, Je ne comprends pas bien ta demande.Le LISP nbl créer une nouvelle définition de bloc en copiant une référence dans le dessin (et remplace cette référence par une référence du nouveau bloc créé). Si tu veux remplacer toutes les références de l'ancien bloc, tu peux utiliser rbloc de Patrick_35 qui fonctionne avec les blocs dynamiques. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
philsogood Posté(e) le 14 janvier 2023 Posté(e) le 14 janvier 2023 Salut @(gile) je me rappelle plus si j'ai déjà posté ce pb mais toujours est-il que je n'ai pas corrigé le lisp après avoir sélectionné mon lisp, j'ai en retour la ligne suivante : erreur: no function definition: INPUTBOX2 que faut-il faire? Phil Projeteur Revit Indépendant - traitement des eaux/CVC
lecrabe Posté(e) le 14 janvier 2023 Posté(e) le 14 janvier 2023 Hello @philsogood Tu trouveras InputBox ici : https://gilecad.azurewebsites.net/LISP/Dialog.lsp ---- ZUT je suis nul , c InputBox2 dont tu as besoin ! ... Help @(gile) ! Belle annee 2023, La Sante, Bye, lecrabe Autodesk Expert Elite Team
PHILPHIL Posté(e) le 14 janvier 2023 Posté(e) le 14 janvier 2023 hello Philsogood ;; InputBox (gile) ;; Ouvre une boite de dialogue pour récupérer une valeur ;; sous forme de chaine de caractère ;; ;; Arguments ;; tous les arguments sont de chaines de caractère (ou "") ;; box : titre de la boite de dialogue ;; msg : message d'invite ;; val : valeur par défaut ;; ;; Retour ;; une chaine ("" si annulation) ;; ;; Modifié par Patrick_35 pour inclure le caractère \n ;; comme retour chariot (defun inputbox2 (box msg val / subr temp file dcl_id ;;ret ) ;; Retour chariot automatique à 50 caractères (defun subr (str / pos) (cond ((setq pos (vl-string-search "\n" str)) (strcat ":text_part{label=\"" (substr str 1 pos) "\";}" (subr (substr str (+ 2 pos)))) ) ((and (< 80 (strlen str)) (setq pos (vl-string-position 32 (substr str 1 80) nil t))) (strcat ":text_part{label=\"" (substr str 1 pos) "\";}" (subr (substr str (+ 2 pos)))) ) (t (strcat ":text_part{label=\"" str "\";}")) ) ) ;; Créer un fichier DCL temporaire (setq temp (vl-filename-mktemp "Tmp.dcl") file (open temp "w") ret "" ) ;; Ecrire le fichier (write-line (strcat "InputBox:dialog{key=\"box\";initial_focus=\"val\";spacer;:paragraph{" (subr msg) "}spacer;:edit_box{key=\"val\";edit_width=120;allow_accept=true;} spacer;ok_cancel;}" ) file ) (close file) ;; Ouvrir la boite de dialogue (setq dcl_id (load_dialog temp)) (if (not (new_dialog "InputBox" dcl_id)) (exit) ) (set_tile "box" box) (set_tile "val" val) (action_tile "accept" "(setq ret (get_tile \"val\")) (done_dialog)") (start_dialog) (unload_dialog dcl_id) ;;Supprimer le fichier (vl-file-delete temp) ret ) Phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 14 janvier 2023 Posté(e) le 14 janvier 2023 Il y a 2 heures, philsogood a dit : je me rappelle plus si j'ai déjà posté ce pb mais toujours est-il que je n'ai pas corrigé le lisp après avoir sélectionné mon lisp, j'ai en retour la ligne suivante : erreur: no function definition: INPUTBOX2 que faut-il faire? Phil De quoi parle-t-on ? Ce sujet a 15 ans et il n'y est jamais question d'une fonction INPUTBOX2 ! 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PHILPHIL Posté(e) le 14 janvier 2023 Posté(e) le 14 janvier 2023 hello Gile ca doit venir de moi, j'ai du reposter le lisp NBL sur le site, un peu modifié, et j'avais modifié "inputbox" en "inputbox2" PHIL FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 14 janvier 2023 Posté(e) le 14 janvier 2023 Mais il n'y a ni InputBox ni InputBox2 dans la routine NBL ci-dessus ! Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PHILPHIL Posté(e) le 16 janvier 2023 Posté(e) le 16 janvier 2023 hello Gile j'ai modifie ton lisp en rajoutant un "inputbox" ca doit etre de ce lisp que parle Philsogood, par contre je ne sais plus sur quel post je l'ai mis. Phil ;;;----------------------------- ;;;créer un clone avec un nom different ;;;----------------------------- ;; NBL -03/08/07- version 2.2 ;; Crée un nouvelle définition de bloc semblable à celle de la référence sélectionnée. ;; La référence sélectionnée est remplacée par une référence de la nouvelle définition ;; qui conserve ses propriétés. (defun c:nbl2 (/ old-ref new-name acdoc space blocks old-name old-block new-block obj new-ref) (vl-load-com) (while (not (and (setq old-ref (car (entsel "\nSélectionner le bloc à re-créer: "))) (= "INSERT" (cdr (assoc 0 (entget old-ref)))) ) ) (princ "\nObjet incorrect.") ) (while (not (and (setq new-name (getstring t "\nEntrez le nouveau nom pour le bloc: ")) (/= new-name "") (null (tblsearch "BLOCK" new-name)) ) ) (princ "\nNom incorrect.") ) (setq acdoc (vla-get-activedocument (vlax-get-acad-object)) space (if (= (getvar "CVPORT") 1) (vla-get-paperspace acdoc) (vla-get-modelspace acdoc) ) blocks (vla-get-blocks acdoc) old-ref (vlax-ename->vla-object old-ref) old-name (if (vlax-property-available-p old-ref 'effectivename) (vla-get-effectivename old-ref) (vla-get-name old-ref) ) old-block (vla-item blocks old-name) new-block (vla-add blocks (vlax-3d-point '(0 0 0)) new-name) ) (vlax-for o old-block (setq obj (cons o obj))) (vlax-invoke acdoc 'copyobjects obj new-block) (and (vlax-property-available-p old-block 'units) (vla-put-units new-block (vla-get-units old-block)) ) (setq new-ref (vla-insertblock space (vlax-3d-point '(0 0 0)) new-name (vla-get-xscalefactor old-ref) (vla-get-yscalefactor old-ref) (vla-get-zscalefactor old-ref) (vla-get-rotation old-ref) ) ) (vla-put-normal new-ref (vla-get-normal old-ref)) (vla-put-insertionpoint new-ref (vla-get-insertionpoint old-ref)) (if (= (vla-get-hasattributes old-ref) :vlax-true) (progn (setq old-att (mapcar '(lambda (att) (cons (vla-get-tagstring att) att)) (vlax-invoke old-ref 'getattributes)) new-att (mapcar '(lambda (att) (cons (vla-get-tagstring att) att)) (vlax-invoke new-ref 'getattributes)) ) (foreach att new-att (foreach prop (list 'alignment 'backward 'color 'fieldlength 'height 'insertionpoint 'invisible 'layer 'textstring 'linetype 'linetypescale 'lineweight 'material 'normal 'obliqueangle 'rotation 'scalefactor 'stylename 'textstring 'thickness 'truecolor 'upsidedown 'visible ) (if (vlax-property-available-p (cdr (assoc (car att) old-att)) prop) (vlax-put (cdr att) prop (vlax-get (cdr (assoc (car att) old-att)) prop)) ) ) ) ) ) (vla-delete old-ref) (princ (strcat "Le bloc \"" new-name "\" a été créé.")) (princ) ) ;; NBL -09/06/16- version 2.3 ;; gile ;; Crée un nouvelle définition de bloc semblable à celle de la référence sélectionnée. ;; La référence sélectionnée est remplacée par une référence de la nouvelle définition ;; qui conserve ses propriétés. (defun c:nbl (/ old-ref new-name acdoc space blocks old-name old-block new-block obj new-ref) (vl-load-com) (while (not (and (setq old-ref (car (entsel "\nSélectionner le bloc à re-créer: "))) (= "INSERT" (cdr (assoc 0 (entget old-ref)))) ) ) (princ "\nObjet incorrect.") ) (setq old-ref (vlax-ename->vla-object old-ref) old-name (if (vlax-property-available-p old-ref 'effectivename) (vla-get-effectivename old-ref) (vla-get-name old-ref) ) ) (while (not (and (progn (setq boite "MODIFICATION DU NOM DE BLOC") (setq message "NOUVEAU NOM") (inputbox2 boite message old-name) ;;; (setq new-name ret) (snvalid (setq new-name ret)) ) (/= new-name "") (null (tblsearch "BLOCK" new-name)) ) ) (princ "\nNOM INCORRECT.") ) (setq acdoc (vla-get-activedocument (vlax-get-acad-object)) space (if (= (getvar "CVPORT") 1) (vla-get-paperspace acdoc) (vla-get-modelspace acdoc) ) blocks (vla-get-blocks acdoc) old-block (vla-item blocks old-name) new-block (vla-add blocks (vlax-3d-point '(0 0 0)) new-name) ) (vlax-for o old-block (setq obj (cons o obj))) (vlax-invoke acdoc 'copyobjects obj new-block) (and (vlax-property-available-p old-block 'units) (vla-put-units new-block (vla-get-units old-block)) ) (setq new-ref (vla-insertblock space (vlax-3d-point '(0 0 0)) new-name (vla-get-xscalefactor old-ref) (vla-get-yscalefactor old-ref) (vla-get-zscalefactor old-ref) (vla-get-rotation old-ref) ) ) (vla-put-normal new-ref (vla-get-normal old-ref)) (vla-put-insertionpoint new-ref (vla-get-insertionpoint old-ref)) (if (= (vla-get-hasattributes old-ref) :vlax-true) (progn (setq old-att (mapcar '(lambda (att) (cons (vla-get-tagstring att) att)) (vlax-invoke old-ref 'getattributes)) new-att (mapcar '(lambda (att) (cons (vla-get-tagstring att) att)) (vlax-invoke new-ref 'getattributes)) ) (foreach att new-att (foreach prop (list 'alignment 'backward 'color 'fieldlength 'height 'insertionpoint 'invisible 'layer 'textstring 'linetype 'linetypescale 'lineweight 'material 'normal 'obliqueangle 'rotation 'scalefactor 'stylename 'textstring 'thickness 'truecolor 'upsidedown 'visible ) (if (vlax-property-available-p (cdr (assoc (car att) old-att)) prop) (vlax-put (cdr att) prop (vlax-get (cdr (assoc (car att) old-att)) prop)) ) ) ) ) ) (vla-delete old-ref) (princ (strcat "Le bloc \"" new-name "\" a été créé.")) (princ) ) FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
philsogood Posté(e) le 16 janvier 2023 Posté(e) le 16 janvier 2023 Le 14/01/2023 à 17:47, (gile) a dit : De quoi parle-t-on ? Ce sujet a 15 ans et il n'y est jamais question d'une fonction INPUTBOX2 ! 15 ans... c'est moche ske tu viens de dire... j'ai repris ton code comme tu l'avais ecrit à l'initial et je n'ai plus de pb bonne année M. le retraité 😉 Phil Projeteur Revit Indépendant - traitement des eaux/CVC
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