Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

Tout ce qui a été posté par (gile)

  1. J'ai modifié le code, pour récupérer les centres sans passer par la construction d'entités invisibles, çà semble fonctionner (si c'est bien ce que tu voulais faire ;) ) Si tu veux t'en inspirer : Code effacé au vu de la suite de la discussion [Edité le 27/5/2006 par (gile)]
  2. Salut, je ne pense pas que le problème vienne de la version, je n'ai, jusqu'à présent, remarqué aucun dysfonctionnement avec les fonctions vlax-... sur 2007. Je pense avoir décelé une erreur pour les lignes et polylignes : (cond ((> det_or 0.0) (setq dir (+ (angle p_10 p_11) (/ pi 2)))) (( ) si det est à 0.0 dir se retrouve à nil, je propose : (cond ((>= det_or 0.0) (setq dir (+ (angle p_10 p_11) (/ pi 2)))) (( ) Et pour toutes les entités, c'est avec pc2 qu'il y a un problème (nil nil nil) Je pense que c'est parceque lst_int ne contient (dans mes essais) qu'un point d'intersection.
  3. Salut, Un problème chez moi avec une ligne ou polyligne, j'ai ce message ; avec un arc ou un cercle : Je n'ai pas cherché plus en profondeur, et fais ces premiers essais dans le SCG.
  4. J'ouvre un nouveau sujet qui fait suite à celui ci qui commençait à devenir fort long. Voici la version 2.4 (17/07/06) de EDIT_BLOC (attention nouveaux fichiers DCL edit_bloc.dcl et alert_bloc.dcl) http://img92.imageshack.us/img92/3361/eb3ho.png Nouveautés - Mise à jour de l'échelle des blocs composant les blocs imbriqués si l'unité d'insertion de leurs définitions a été changée. - Ajout de la possibilité de mettre les entités en style de tracé DuBloc (demande de "LeCrabe" que j'avais "zappée" - je ne suis pas coutumier des styles de tracé nommés). Cette possibilité n'est accessible que si le dessin courant est en mode style de tracé nommés (STB). - Ajout d'une boite de dialogue pour confirmation des changements d'échelle de blocs dynamiques. En cas d'infirmation, l'échelle du bloc n'est pas modifiée mais les autres modifications et les modification des autres blocs sont effectuées. - Réparation d'un dysfonctionnement avec les sélections de certaines références de blocs dynamiques (blocs anonymes). Le nouveau DCL à enregistrer sous edit_bloc.dcl dans un dossier de recherche des fichiers de support : // Boite de dialogue du LISP EDIT_BLOC version 2.0 edit_bloc:dialog{ label="Redéfinition de blocs"; :boxed_row{ label="Choix des blocs"; :radio_column{ :radio_button{ label="Toute la collection"; key="tbl"; fixed_width=true; allow_accept=true; } :radio_button{ label="Tous les blocs insérés"; key="all"; fixed_width=true; allow_accept=true; } :radio_button{ label="Sélection"; key="sel"; value="1"; fixed_width=true; } } :button{ label=" key="ss"; fixed_width=true; alignment=bottom; allow_accept=true; } } :boxed_column{ label="Propriétés à modifier"; :edit_box{ label= "Échelle globale"; key="fact"; edit_width=8; value="1"; allow_accept=true; } :popup_list{ label="Unités "; key="unt"; edit_width=16; } spacer; :toggle{ label="Calque 0"; key="lay"; fixed_width=true; allow_accept=true; } :toggle{ label="Couleur DuBloc"; key="col"; fixed_width=true; allow_accept=true; } :toggle{ label="Type de ligne DuBloc"; key="tl"; fixed_width=true; allow_accept=true; } :toggle{ label="Épaisseur de ligne DuBloc"; key="el"; fixed_width=true; allow_accept=true; } :toggle{ label="Style de tracé DuBloc"; key="plt"; fixed_width=true; allow_accept=true; } } ok_cancel; } Le DCL de la boite de confirmation à enregistrer sous alert_bloc.dcl dans un dossier de recherche des fichiers de support : // Boite de dialogue Echelle des blocs dynamiques alert_bloc:dialog{ label="Échelle des blocs dynamiques"; :paragraph{ :text_part{ value="Le changement d'échelle n'affecte pas"; } :text_part{ value="les paramètres des blocs dynamiques."; } } spacer; :boxed_column{ label="Modifier l'échelle du bloc"; :text{ key="txt"; } :radio_row{ :radio_button{ label="Oui"; mnemonic="O"; key="mod"; } :radio_button{ label="Non"; mnemonic="N"; key="anl"; value="1"; } } } ok_only; } Le LISP : ;;; Edit_bloc - Gilles Chanteau - version 2.4 - 17/07/06 ;;; ;;; Redéfinit les blocs après modification des propriétés de leurs composants. ;;; ;;; Les modification affectent : ;;; - soit tous les blocs de la collection (insérés ou non) ;;; - soit tous les blocs insérés ;;; - soit une sélection de blocs faite dans le dessin. ;;; ;;; Il est possible de : ;;; - modifier l'échelle globale ;;; - changer l'unité d'insertion (versions postérieures à 2005) ;;; - mettre les objets composant les blocs sur le calque 0 ;;; - changer la couleur, le type de ligne, l'épaisseur de ligne ;;; et le style de tracé (STB uniquement) des composants en DuBloc. ;;; ;;; Les blocs composant les blocs imbriqués sont traités. ;;; Les blocs insérés dans le dessin sont mis à jour en fonction ;;; des modifications effectuées. ;;; ;;; Les paramètres et propriétés des blocs dynamiques n'étant pas pris ;;; en compte par les changements d'échelle, une boite de dialogue demande ;;; confirmation ou infirmation pour les changements d'échelle du bloc. (vl-load-com) (defun c:edit_bloc (/ ;; Fonctions e_b_err edit_prop scl_upd att_upd sub_upd edit_bl ;; Variables AcDoc dcl_id loop u_lst lay col tl el plt fact unt ss ) ;;;******************************************************************* ;;; ;; Redéfinition de *error* (defun e_b_err (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (vla-endundomark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq *error* m:err m:err nil ) (princ) ) ;;;******************************************************************* ;;; (defun alert_bloc (name / dcl_id) (setq dcl_id (load_dialog "Alert_bloc.dcl")) (if (not (new_dialog "alert_bloc" dcl_id)) (exit) ) (set_tile "txt" name) (action_tile "mod" (strcat "(if (= \"1\" $value)" "(setq e_scl T)" "(setq e_scl nil))" ) ) (action_tile "anl" (strcat "(if (= \"1\" $value)" "(setq e_scl nil)" "(setq e_scl T))" ) ) (action_tile "accept" "(done_dialog)") (start_dialog) (unload_dialog dcl_id) ) ;;;******************************************************************* ;;; ;; Modification des propriétés des entités composant le bloc (defun edit_prop (ent) (if (= lay "Oui") (vla-put-Layer ent "0") ) (if (= col "Oui") (vla-put-Color ent acByBlock) ) (if (= tl "Oui") (vla-put-LineType ent "ByBlock") ) (if (= el "Oui") (vla-put-LineWeight ent acLnWtByBlock) ) (if (= plt "Oui") (vla-put-PlotStyleName ent "ByBlock") ) ) ;;;******************************************************************* ;;; ;; Mise à jour des attributs (defun att_upd (obj) (if (= :vlax-true (vla-get-HasAttributes obj)) (if (listp (setq att_lst (vl-catch-all-apply 'vlax-invoke (list obj 'getAttributes) ) ) ) (mapcar '(lambda (x) (if (/= fact 1.0) (vla-ScaleEntity x (vla-get-InsertionPoint obj) fact ) ) (edit_prop x) ) att_lst ) ) ) ) ;;;******************************************************************* ;;; ;; Mise à jour de l'échelle en cas de changement d'unité (defun scl_upd (obj) (if (and unt (/= unt 0) (/= i_unt unt) (/= i_unt 0) ) (vla-ScaleEntity obj (vla-get-InsertionPoint obj) (cvunit 1 (nth unt u_lst) (nth i_unt u_lst) ) ) ) ) ;;;******************************************************************* ;;; ;; Mise à jour des blocs composant les blocs imbriqués (defun sub_upd (obj blc / org ins) (if (/= fact 1.0) (progn (setq org (vlax-get blc 'origin) ins (vlax-get ent 'InsertionPoint) ) (vla-put-InsertionPoint obj (vlax-3d-point (mapcar '+ org (mapcar '(lambda (x) (* x fact) ) (mapcar '- ins org) ) ) ) ) ) ) (edit_prop obj) (att_upd obj) ) ;;;******************************************************************* ;;; ;; Modification des blocs (defun edit_bl (/ n obj lst n_lst name bloc e_scl i_unt nb) ;; Dévérouillage de tous les calques (vlax-for clq (vla-get-Layers AcDoc) (if (= :vlax-true (vla-get-lock clq) ) (progn (vla-put-lock clq :vlax-false) (setq clq_lst (cons clq clq_lst)) ) ) ) ;; Création de la liste des blocs à modifier (if ss ;; Si "Sélection" ou "Tous les blocs insérés" (progn (repeat (setq n (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))) ) (if (vlax-property-available-p obj 'EffectiveName) (setq name (vla-get-EffectiveName obj)) (setq name (vla-get-Name obj)) ) (if (and (not (member name lst)) (= :vlax-false (vla-get-isXref (vla-item (vla-get-Blocks AcDoc) name) ) ) ) (setq lst (cons name lst)) ) ) ;; Ajout des blocs composant les blocs imbriqués à la liste (setq n_lst 0) (while (setq name (nth n_lst lst)) (setq bloc (vla-item (vla-get-blocks acDoc) name)) (vlax-for ent bloc (if (and (= (vla-get-ObjectName ent) "AcDbBlockReference") (not (member (vla-get-name ent) lst)) ) (setq lst (reverse (cons (vla-get-Name ent) (reverse lst))) ) ) ) (setq n_lst (1+ n_lst)) ) ) ;; Si "Toute la collection" (vlax-for bl (vla-get-blocks AcDoc) (if (and (= :vlax-false (vla-get-isLayout bl)) (= :vlax-false (vla-get-isXref bl)) ) (setq lst (cons (vla-get-name bl) lst)) ) ) ) ;; Modification des blocs (mapcar '(lambda (name) (setq bloc (vla-item (vla-get-blocks AcDoc) name)) (if (and ( (= (vla-get-IsDynamicBlock bloc) :vlax-true) (/= fact 1.0) ) (progn (setq e_scl nil) (alert_bloc name) ) (setq e_scl T) ) (vlax-for ent bloc (if (/= (vla-get-ObjectName ent) "AcDbZombieEntity") (if (/= (vla-get-ObjectName ent) "AcDbBlockReference") (progn (if (and (/= fact 1.0) e_scl) ;_ Echelle (vla-ScaleEntity ent (vla-get-origin bloc) fact) ) (edit_prop ent) ) (sub_upd ent bloc) ) ) ) (if ( (if (/= (setq i_unt (vla-get-units bloc)) unt) (vla-put-Units bloc unt) ) ) ;; Mise à jour des blocs insérés (attributs et unités) (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 name)))) (if ss (repeat (setq n (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n))) ) ) (att_upd obj) (scl_upd obj) ) ) ) lst ) ;; Mise à jour des blocs composant les blocs imbriqués insérés non sélectionnés (setq ss (ssget "_X" (cons '(0 . "INSERT") (mapcar '(lambda (x) (cons 2 (strcat "~" x))) lst) ) ) ) (if ss (repeat (setq nb (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq nb (1- nb)))) name (vla-get-Name obj) bloc (vla-item (vla-get-blocks AcDoc) name) ) (vlax-for ent bloc (if (and (= (vla-get-ObjectName ent) "AcDbBlockReference") (member (vla-get-Name ent) lst) ) (progn (sub_upd ent bloc) (scl_upd ent) ) ) ) ) ) ;; Revérouillage des calques vérouillés (if clq_lst (mapcar '(lambda (x) (vla-put-lock x :vlax-true) ) clq_lst ) ) (vla-Regen AcDoc acAllViewports) ) ;;;******************************************************************* ;;; ;; Boite de dialogue (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) m:err *error* *error* e_b_err ) (vla-StartUndoMark AcDoc) (setq dcl_id (load_dialog "Edit_bloc.dcl") loop 2 u_lst (list "Sans unités" "Pouces" "Pieds" "Miles" "Millimètres" "Centimètres" "Mètres" "Kilomètres" "Micropouces" "Milles" "Yards" "Angströms" "Nanomètres" "Microns" "Décimètres" "Décamètres" "Hectomètres" "Gigamètres" "Unités astronomiques" "Parsecs" ) ) (while ( (if (not (new_dialog "edit_bloc" dcl_id)) (exit) ) (start_list "unt") (mapcar 'add_list u_lst) (end_list) (cond (( (mode_tile "unt" 0) (if (not unt) (setq unt (getvar "INSUNITS")) ) ) (T (mode_tile "unt" 1) (setq unt nil) ) ) (if unt (set_tile "unt" (itoa unt)) (set_tile "unt" (itoa (getvar "INSUNITS"))) ) (if (not ss) (mode_tile "accept" 1) ) (if (zerop (getvar "PSTYLEMODE")) (mode_tile "plt" 0) (progn (mode_tile "plt" 1) (setq plt "Non") ) ) (if fact (set_tile "fact" (rtos fact)) (setq fact 1.0) ) (if (= lay "Oui") (set_tile "lay" "1") ) (if (= col "Oui") (set_tile "col" "1") ) (if (= tl "Oui") (set_tile "tl" "1") ) (if (= el "Oui") (set_tile "el" "1") ) (if (= plt "Oui") (set_tile "plt" "1") ) (action_tile "tbl" (strcat "(if (= \"1\" $value)" "(progn (setq ss nil)" "(mode_tile \"ss\" 1)" "(mode_tile \"accept\" 0)))" ) ) (action_tile "all" (strcat "(if (= \"1\" $value)" "(progn" "(setq ss (ssget \"_X\" '((0 . \"INSERT\"))))" "(mode_tile \"ss\" 1)" "(mode_tile \"accept\" 0)))" ) ) (action_tile "sel" (strcat "(if (= \"1\" $value)" "(progn (mode_tile \"ss\" 0)" "(mode_tile \"ss\" 2)" "(mode_tile \"accept\" 1))" "(mode_tile \"accept\" 0))" ) ) (action_tile "ss" "(progn (done_dialog 3) (mode_tile \"accept\" 0))" ) (action_tile "fact" (strcat "(if ( "(setq fact (atof $value))" "(progn (alert \"Entrée non valide\")" "(mode_tile \"fact\" 2)))" ) ) (action_tile "unt" "(setq unt (atoi $value))") (action_tile "lay" (strcat "(if (= \"1\" $value)" "(setq lay \"Oui\")" "(setq lay \"Non\"))" ) ) (action_tile "col" (strcat "(if (= \"1\" $value)" "(setq col \"Oui\")" "(setq col \"Non\"))" ) ) (action_tile "tl" (strcat "(if (= \"1\" $value)" "(setq tl \"Oui\")" "(setq tl \"Non\"))" ) ) (action_tile "el" (strcat "(if (= \"1\" $value)" "(setq el \"Oui\")" "(setq el \"Non\"))" ) ) (action_tile "plt" (strcat "(if (= \"1\" $value)" "(setq plt \"Oui\")" "(setq plt \"Non\"))" ) ) (action_tile "accept" "(done_dialog 1)") (setq loop (start_dialog)) (cond ((= loop 3) (setq ss (ssget '((0 . "INSERT")))) ) ((= loop 1) (edit_bl) ) ) ) (unload_dialog dcl_id) (vla-endundomark AcDoc) (setq *error* m:err m:err nil ) (princ) )[Edité le 28/5/2006 par (gile)][Edité le 4/6/2006 par (gile)][Edité le 10/6/2006 par (gile)][Edité le 11/6/2006 par (gile)] [Edité le 17/7/2006 par (gile)]
  5. Tout çà manque de finition ! Déclaration des variables locales (voir ici). Restauration de la variable CMDECHO (voir ici) Noms de commande en langage international (voir ici, ou ici, ou encore là). Vois aussi la fonction (initget ...) pour toutes les fonction (getXXX ...), afin d'éviter que l'utilisateur n'entre des données qui feraient échouer la routine. À ce propos, avec (getkword ...) si tu mets les options entre crochets au lieu de parenthèses elles apparaîtront dans le menu contextuel de la commande (clic droit) et si tu n'as pas mis le bit 1 au initget tu peux mettre une option par défaut (en cas de ENTER) : (initget "Oui Non") (if (= (getkword "\nDessiner un croisillon ? [Oui/Non] : ") "Oui" ) (action si "Oui") (action si "Non" ou ENTER) ;_ Optionnel ) [Edité le 27/5/2006 par (gile)]
  6. La méthode traditionnelle consiste à, tout simplement récupéprer la valeur initiale de la variable système, l'affecter à une variable locale, et la restaurer en fin de routine. (defun c:ma_routine (/ v1 v2) (setq v1 (getvar "CMDECHO") v2 (getvar "OSMODE") (setvar "CMDECHO" 0) (setvar "OSMODE" 0) ... ... ... (setvar "CMDECHO" v1) (setvar "OSMODE" v2) (princ) ) Il est aussi possible de faire deux routines, une qui enregistre et change la valeur de la variable et une autre qui restaure leurs valeurs initiales à toutes les variables traitées par la première, les routines devront être chargées à chaque LISP qui les utitlise ou en permanence. ;;; SAVE&SET_VAR ;;; Enregistre la valeur initiale de la variable système dans une liste ;;; et lui attribue sa nouvelle valeur (si val est non nil) ;;; ;;; ex: (SAVE&SET_VAR "autosnap" nil) (SAVE&SET_VAR "orthomode" 1) ;;; -> SavedSysVarLst : ((setvar "orthomode" 0) (setvar "autosnap" 63)) ;;; -> (getvar "orthomode") : 1 ;;; -> (getvar "autosnap") : 55 (63 - 8 : le repérage polaire est désactivé) (defun SAVE&SET_VAR (var val) (cond ((getvar var) (setq SavedSysVarLst (cons (list 'setvar var (getvar var)) SavedSysVarLst) ) (if val (setvar var val) ) ) ) ) ;;; RESTORE_VAR ;;; Restaure leurs valeurs initiales aux variables système de "SavedSysVarLst" ;;; ;;; ex: (RESTORE_VAR) ;;; -> (getvar "orthomode") : 0 ;;; -> (getvar "autosnap") : 63 ;;; -> SavedSysVarLst : nil (defun restore_var () (mapcar 'eval SavedSysVarLst) (setq SavedSysVarLst nil) ) RESTORE_VAR est donnée ici à titre d'exemple, on peut aussi ne charger que SAVE&SET_VAR, déclarer SavedSysVarLst comme variable locale et faire simplement : (mapcar 'eval SavedSysVarLst) en fin de routine Attention toutefois, en cas d'erreur ou d'annulation en cours d'exécution les variables systèmes ne seraient pas restaurées. Il faut pour celà redéfinir la fonction *error* le temps de l'exécution du LISP. Ce sujet a été maintes fois traité (par exemple ici) tu peux faire une recherche dans les forums avec *error* ainsi que dans l'aide d'AutoCAD.
  7. C'est juste un problème de avec les copier/coller et les bbcodes. À la fin du LISP, il est écrit (prompt "\nType to run ") mais sans les espaces après et au copier/coller dans CADxp tout çà disparaît (c'est interprété comme du html, je crois). Donc dans ce cas là, rien de grave, le LISP fonctionne quand même si tu entres VALVE à la ligne de commande. Tu peux corriger en changeant cette ligne par : (prompt "\nType VALVE to run ") Pour info, dans un LISP la commande à entrer directement à la ligne c'est ce qui est écrit après c: dans la routine de lancement ex : (defun C:VALVE ...
  8. Chez moi çà fonctionne, je ne vois pas où est le problème. Si tu ne dis pas précisément ce que tu veux, je ne peux pas t'aider. Je ne comprends pas l'enigme, je ne suis pas plombier, je suis menuisier, ceci explique peut-être celà. ;)
  9. Difficile à dire comme çà :casstet: As tu le fichier" P&ID.dcl" qui va avec ? Si oui, est-il dans un dossier du chemin de recherche des fichiers de support ? As tu la librairie de diapositives (pid1.slb) qui va avec ? Si oui, est-il dans un dossier du chemin de recherche des fichiers de support ? Plus généralement, quel message d'erreur as-tu quand tu essayes de lancer le LISP ?
  10. Hè Denis, c'est moi qui ai une conjonctivite, mais c'est toi qui ne voit pas clair :casstet: Tu as commencé se sujet dans la rubrique "Débuter en LISP", juste en dessous dans la liste des forums il y a "Routines LISP" ;)
  11. (gile)

    Lier des Attributs

    Super ! Bravo !Total respect ! (comme disent les "djeuns") ;) Une véritable leçon d'utilisation des réacteurs, à étudier à tête bien reposée ;)
  12. (gile)

    Au secours

    Le problème est quasi toujours le même avec les LISP faits par des anglo-saxons, ils ignorent les commandes internationnales. Pour que le LISP fonctionne avec nimporte quelle version/pays il suffit d'ajouter un underscore (ou, mieux, un underscore et un point) devant les noms de commande appelés par la fonction (command ...) Dans le (defun psymbol ... Remplacer la ligne: (command "INSERT" "pvsymbols" "0,0" "1" "" "") par : (command "_.INSERT" "pvsymbols" "0,0" "1" "" "") Et dans (defun doit ... Remplacer les lignes : (command "BREAK" p (polar p ang 1.0)) (command "INSERT" blk-name p "" "" ang) (command "INSERT" blk-name inspt "" "" "") Par les lignes : (command "_.BREAK" p (polar p ang 1.0)) (command "_.INSERT" blk-name p "" "" ang) (command "_.INSERT" blk-name inspt "" "" "")
  13. (gile)

    Créer bloc imbriqué...

    Il y a quand même un petit "inconvenient" : le lisp ajoute un (ou deux si le scu courant n'était pas nommé) SCU à la collection de SCU nommés. On peut supprimer scg avec un (vla-delete scg) à la fin du LISP, mais je n'ai pas trouvé le moyen de supprimer scu s'il a été ajouté à la collection, c'est le scu actif (pas de scu précédent en vlisp ?) PS : il y avait une erreur dans le code (vla-put-ActiveUcs AcDoc scg) à la place de (vla-put-ActiveUcs AcDoc scu) -un copier/coller pas corrigé- c'est réparé.
  14. (gile)

    ... Merci ...

    Mais toujours intéressante :D Parcequ'avec l'entraide va le partage, tout le monde est "gagnant". J'ai, de mon côté, énormément appris sur ce site et souvent en essayant d'aider d'autres membres. Merci à Patrick d'avoir créé cet îlot d'entraide et de partage. Merci à tous les participants pour leurs questions et leurs réponses.
  15. (gile)

    fichier lisp

    Il me semble t'avoir répondu à cette question par message privé :casstet: Dans la boite de dialogue de la commande _appload, tu as un bouton "Contenu" dans la case "Démarrage", tu cliques dessus, une autre boite s'ouvre dans laquelle tu ajoute ton fichier LISP pour qu'il soit chargé à chaque démarrage. Sinon, tu peux ajouter le code contenu dans ton fichier au fichier acaddoc200X.lsp ou au fichier acad.mnl Vois aussi les sujets ici ou là
  16. Salut, Comme dit cdi, il s'agit de deux types d'objets différents, d'un côté des mailles d'épaisseur nulle ouvertes ou fermées, de l'autre d'objets plein. En bref, cetaines commandes de création d'objets surfaciques offrent des possibilités qui n'existent pas dans les commandes pour les solides (surfaces réglées, surfaces gauches...), on peut étirer des surfaces à l'aide des poignées situées à chacun de leurs sommet, ce qui n'est possible avec les solides que depuis la version 2007. Les commandes de base pour la réalisation de solides sont plus "limitées" (surtout avant 2007) il y a un peu moins de solides primitifs (boite, sphère, cone ...) et la possibilité de créer des solides de révolution et des solides à partir d'entités fermées (polylignes ou régions) extrudées. Mais seuls les solides permettent les opération booléennes (Union, Soustraction, Intersection) et des sections suivant des plans, ce sont ces dernières possibilités qui, à mon avis font la différence entre 3D surfacique et 3D solide. En espérant t'avoir un peu éclairé, mais comme dit cdi n'hésite pas à consulter l'aide d'AutoCAD.
  17. (gile)

    Modifier des blocs

    Merci beaucoup Bonuscad :D Bien sûr, je suis allé un peu trop vite dans la dernière correction :cool: Je n'ai qu'une version 2007 pour vérifier, je suis donc dans le cas où UNITS fonctionne. C'est une fonction, mais elle est déclarée comme une variable, je fais çà pour les sous routines pour qu'il ne puisse y avoir de conflit si d'autres fonctions du même nom étaient chargées dans le dessin courant (tout comme e_b_err edit_prop att_upd sub_upd). Je re-corrige le LISP (version 1.9)
  18. (gile)

    Modifier des blocs

    Merci Bonucad, Je modifie (encore !) le LISP (version 1.8), si tu pouvais me dire si çà fonctionne maintenant, merci d'avance.
  19. (gile)

    Créer bloc imbriqué...

    Excuse pour les digressions (qui n'en son pas en fait, on est bien dans le sujet). C'est toi qui veut aller vite, tu viens juste de faire fonctionner un LISP avec command, que tu veux déjà faire la même chose avec entmake et/ou vla-..., je suis impressionné par une telle motivation. Je proposais une façon plus directe, qui évite de passer par un calque temporaire et un jeu de sélection. Plutôt que d'insérer les blocs dans un calque temporaire de l'espace objet (ModelSpace), les insérer directement dans le bloc "NomB". Message modifié : pour un fonctionnement en 3D, il faut être dans le SCG pour insérer les différents blocs dans "NomB". 1) - On affecte à la variable AcDoc le document actif - On effecte aux variables scu et scg le SCU courant et le SCG - On ajoute "NomB" à la collection : (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (= (getvar "ucsname") "") (setq scu (vla-add (vla-get-UserCoordinateSystems AcDoc) (vlax-3d-point (trans '(0 0 0) 1 0)) (vlax-3d-point (trans '(1 0 0) 1 0)) (vlax-3d-point (trans '(0 1 0) 1 0)) "SCU_courant" ) ) (setq scu (vla-item (vla-get-UserCoordinateSystems AcDoc) (getvar "ucsname") ) ) ) (setq scg (vla-add (vla-get-UserCoordinateSystems AcDoc) (vlax-3d-point '(0 0 0)) (vlax-3d-point '(1 0 0)) (vlax-3d-point '(0 1 0)) "SCG" ) ) (setq Bloc (vla-add (vla-get-Blocks AcDoc) (vlax-3d-point '(0 0 0)) "NomB" ) ) 2) - On passe en SCG - On insère, explose, rotationne ... directement dans le Bloc - On restaure le SCU NOTA : le point d'insertion et l'angle de rotaton sont spécifiés dans le SCO du bloc "NomB", il n'est plus nécessaire de faire (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T))) (vla-put-ActiveUcs AcDoc scg) (setq a (vla-insertblock Bloc (vlax-3d-point pt) chem 1 1 1 0 ) ) (foreach b (vlax-safearray->list (vlax-variant-value (vla-explode a))) (vla-rotate b (vlax-3d-point '(0 0 0)) (/ (* pi Rot) 180)) ) (vla-delete a) (vla-put-ActiveUcs AcDoc scu) 3) Pour insérer le bloc "NomB" dans l'espace objet (là on tient compte du SCU): (vla-insertblock (vla-get-ModelSpace AcDoc) (vlax-3d-point (trans '(0 0 0) 1 0)) "NomB" 1 1 1 (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T))) ) [Edité le 25/5/2006 par (gile)]
  20. (gile)

    Créer bloc imbriqué...

    Y'a encore du boulot ! Bonne nuit.
  21. (gile)

    Créer bloc imbriqué...

    Je crée les définitions Bloc_0, Bloc_1 et Bloc_2 dans la collection. Je mets deux cercles concentrique dans Bloc_1 et deux lignes dans Bloc_2. J'insère Bloc_1 et Bloc_2 dans Bloc_0. (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Bloc (vla-add (vla-get-Blocks AcDoc) (vlax-3d-point '(0 0 0)) "Bloc" ) Bloc_1 (vla-add (vla-get-Blocks AcDoc) (vlax-3d-point '(0 0 0)) "Bloc_1" ) Bloc_2 (vla-add (vla-get-Blocks AcDoc) (vlax-3d-point '(0 0 0)) "Bloc_2" ) ) (vla-addcircle Bloc_1 (vlax-3d-point '(0 0 0)) 10 ) (vla-addcircle Bloc_1 (vlax-3d-point '(0 0 0)) 5 ) (vla-addline Bloc_2 (vlax-3d-point '(-10 -10 0)) (vlax-3d-point '(10 10 0)) ) (vla-addline Bloc_2 (vlax-3d-point '(-10 10 0)) (vlax-3d-point '(10 -10 0)) ) (vla-InsertBlock Bloc (vlax-3d-point '(0 0 0)) "Bloc_1" 1.0 1.0 1.0 0.0 ) (vla-InsertBlock Bloc (vlax-3d-point '(0 0 0)) "Bloc_2" 1.0 1.0 1.0 0.0 )
  22. (gile)

    Créer bloc imbriqué...

    Si j'insère bloc_1 dans la définition de bloc_0 (comme dit plus haut) et que j'insère bloc_0 dans le dessin, quand je décompose bloc_0 je retrouve bloc_1 et pas les entités qui le constituent.
  23. (gile)

    Modifier des blocs

    Il semblerait que les versions 2005 ne reconnaissent pas non plus VLA-GET-UNITS, je modifie donc le LISP en conséquence (Version 1.7).
  24. (gile)

    Créer bloc imbriqué...

    Ah ah ! C'est moi qui fait les réponse en vlisp à la place de Patrick_35 ;)
  25. (gile)

    Créer bloc imbriqué...

    Salut, Pour créér un bloc en VisualLISP, il n'est pas nécessaire d'insérer les entité qui le constituent dans un calque. On insère les entités (ou blocs imbriqués) directement dans la définition du bloc : On crée une définition de bloc (vide) dans la collection de blocs du dessin : (setq Bloc (vla-add (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point '(0 0 0)) "Nom_du_Bloc" ) ) Pour y mettre des entités on utilise vla-add*, pour un bloc imbriqué : (vla-InsertBlock Bloc (vlax-3d-point ins) "Nom_du_bloc_imbriqué" ech_X ech_Y ech_Z rot ) ins est le point d'insertion dans le SCO du bloc parent ech_X, echY, echZ, les échelles en X, Y et Z rot la rotation
×
×
  • 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é