Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. bonuscad

    decaler multiples.....

    Oui un oubli de ma part (if (eq vn "Interval") devient (if (or (eq vn "Interval") (not v_n)) J'ai eu cet oubli parce ce que, je tiens à préciser, que le mode "Interval" est AUSSI le mode implicite. C'est à dire que vous n'avez pas besoin de le spécifiez, vous pouvez directement entrer vos distances. Merci de ta remarque, je corrige le précédent post car l'action de valider le mode "Interval" par une entrèe nulle doit être valide Cela fera quand même mieux ;)
  2. bonuscad

    Tenlinks est HS

    Et cela dure... Une disparition en catimini ? Le malheur des uns fait le bonheur des autres: Les membres vont-ils enfler sur CADxp (pas les chevilles) ;) Longue vie à CADxp, et sort couvert Patrick ! :cool:
  3. (initdia) est en effet la façon d'obtenir la boite de dialogue. L'inconvénient est que l'on ne peut pas récupérer les valeurs saisies dans les boites de dialogue pour les affecter à des variables. (à moins que quelqu'un connaisse une astuce, à part faire un entget sur la dernière entité et récupérer ses paramètres) Il est facile de l'utiliser en FIN de programme (dernier appel) Pour l'utiliser en cours de procédure, (si vous n'avez pas besoins de connaitre les valeurs saisies , et pouvoir continuer la procédure) voici comment on peut faire pour que cela fonctionne. exemple: ((lambda ( / ) (setvar "ATTDIA" 1) (setvar "ATTREQ" 1) (initdia) (command "_.insert" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) (command "_.change" (entlast) "" "_properties" "_color" 3 "") (princ) ))
  4. bonuscad

    decaler multiples.....

    Pour simplement l'essayer, tu peux faire un copier-coller du listing du code sur la ligne de commande d'AutoCAD. Après un éventuel "Entrée" après la dernière paranthèse pour valider le code, tu devrais voir apparaitre : Tu n'as plus qu'a taper le nom de la commande retournée sans le "C:", ici "REPEAT_OFFSET". Si tu veux le conserver, tu le colle dans le bloc note et tu le sauvegarde sous le nom repeat_offset.LSP (penses à l'extension) NB: tu peux changer le nom du fichier et le nom de la commande; après (defun c: Tu peux utiliser la commande "APPLOAD" d'AutoCAD pour le charger. Mais il il y a d'autres manière de charger un prog, faire une recherche sur le forum si tu veux connaitre les différents moyens.
  5. Eric, Justement pense à la règle des "3 doigts" d'AutoCAD, et tu trouveras la réponse ;) J'suis sûr que j'en ai trop dis :mad:
  6. bonuscad

    decaler multiples.....

    Bonjour, J'ai essayé d'écrire rapidement quelques lignes. Après avoir sélectionné l'entité a décaler, tu seras invité à saisir successivement des distances de décalage. Par défaut c'est le mode "Interval" qui est actif. Cela veut dire que la distance sera appliqué au dernier objet décalé. Le mode "Cumul" ce fait toujours par rapport à l'objet initial sélectionné. Dans ce dernier mode, il sera vérifié que la distance entrée est supérieure à la précédente. Le message à la ligne de commande va s'enrichir des valeurs entrées. Si la variable "SHORTCUTMNU" est à 11 (normalement défaut), tu pourras même réentrer une valeur précédemment saisie par un click-droit (menu contextuel) Une fois toutes tes valeurs de décalage entrées, tu indiques de quel coté effectuer le décalage. Une façon parmi tant d'autre! ;) (defun c:repeat_offset ( / ent vn lst_vn tmp side_offset) (setq ent (entsel "\nSélectionnez l'objet à décaler plusieurs fois ou < sortir > : ")) (cond (ent (initget 70 "Cumul Interval") (setq vn (getdist (cadr ent) "\nSpécifiez une distance de décalage ou [Cumul/Interval] < I > : ")) (cond ((eq vn "Cumul") (setq lst_vn nil) (princ "\nSpécifiez une distance de décalage: ") (initget 70) (while (setq vn (getdist (cadr ent))) (princ "\nSpécifiez une distance de décalage [") (if (> vn (car lst_vn)) (setq lst_vn (cons vn lst_vn)) (princ "\n*Incorrect* La valeur doit être > à la précédente.\nSpécifiez une distance de décalage [") ) (foreach n (reverse lst_vn) (princ (rtos n)) (princ "/")) (princ "]: ") (initget 70) ) ) (T (if (or (eq vn "Interval") (not v_n)) (progn (setq lst_vn nil) (princ "\nSpécifiez une distance de décalage: ") ) (progn (setq lst_vn (list vn)) (princ (strcat "\nSpécifiez une distance de décalage [" (rtos vn) "/]: ")) ) ) (initget 70) (while (setq vn (getdist (cadr ent))) (princ "\nSpécifiez une distance de décalage [") (setq lst_vn (cons vn lst_vn)) (foreach n (reverse lst_vn) (princ (rtos n)) (princ "/")) (princ "]: ") (initget 70) ) (setq tmp nil) (while lst_vn (setq tmp (cons (apply '+ lst_vn) tmp)) (setq lst_vn (cdr lst_vn)) ) (setq lst_vn (reverse tmp)) ) ) (initget 1) (setq side_offset (getpoint "\nSpécifiez un point sur le côté à décaler: ")) (setvar "cmdecho" 0) (command "_.undo" "_group") (foreach n lst_vn (command "_.offset" n ent side_offset "")) (command "_.undo" "_group") (setvar "cmdecho" 1) ) ) (prin1) ) [Edité le 13/1/2006 par bonuscad] [Edité le 13/1/2006 par bonuscad]
  7. Le code qui suit va te permettre de changer l'ELEVATION d'une polyligne2D (optimisée ou pas) Les autre polylignes sont ecartées. Tu pourras alors sélectionner soit un TEXTE, TEXTEMULTILIGNE ou ATTRIBUT pour récupérer sa valeur texte. Le changement d'élévation sera effectué si la chaine de texte correspond à une valeur numérique. NB: Un + les décimales peuvent être séparée soit par un "." point ou "," virgule (defun c:eleve_pol2D ( / poly_ent l_dxf text-ent v-txt z) (princ "\nChoix de la polyligne 2D dont vous voulez changer l'élèvation: ") (while (not poly_ent) (setq poly_ent (ssget "_:S" '( (-4 . "< AND") (0 . "POLYLINE,LWPOLYLINE") (-4 . "< NOT") (-4 . "< OR") (-4 . "&=") (70 . 8) (-4 . "&=") (70 . 16) (-4 . "&=") (70 . 32) (-4 . "&=") (70 . 64) (-4 . "OR>") (-4 . "NOT>") (-4 . "AND>") )) ) ) (setq l_dxf (entget (ssname poly_ent 0))) (princ "\nSélectionnez une valeur numérique dans du Texte/TexteMultiligne/Attribut") (while (not text-ent) (setq text-ent (ssget "_+.:S:N" '((0 . "TEXT,MTEXT,INSERT")))) (cond (text-ent (setq text-ent (entget (cadar (ssnamex text-ent 0)))) (if (not (member (cdr (assoc 0 text-ent)) '("TEXT" "MTEXT" "ATTRIB"))) (setq text-ent nil) ) ) ) ) (setq v-txt (cdr (assoc 1 text-ent))) (if (wcmatch v-txt "*`,*") (setq v-txt (vl-list->string (subst 46 44 (vl-string->list v-txt)))) ) (setq z (read v-txt)) (if (or (eq (type z) 'REAL) (eq (type z) 'INT)) (progn (if (= (cdr (assoc 0 l_dxf)) "POLYLINE") (entmod (subst (cons 10 (list 0.0 0.0 z)) (assoc 10 l_dxf) l_dxf)) (entmod (subst (cons 38 z) (assoc 38 l_dxf) l_dxf)) ) (princ (strcat "\nLa polyligne 2D à une élèvation de " v-txt)) ) (princ "\nLe texte ne convient pas, la polyligne conserve son ancienne élèvation") ) (prin1) ) Rappel : Enlever l'espace après le "< " présent dans le code après avoir coller.[Edité le 11/1/2006 par bonuscad] [Edité le 11/1/2006 par bonuscad]
  8. Pas de variable! Bien qu'on met souvent (command "_.-plot") dans du lisp, le "-" évitant de passer par une boite dialogue. Les commande appelées par le lisp ne lance généralement pas de boite de dialogue. Exception, les renseignements d'attributs (ATTDIA, ATTREQ) et la selection de fichiers (FILEDIA) De toute façon il est très pénible de gérer une boite de dialogue pour débuter en lisp. Garde ça pour plus tard ;)
  9. Ou ceci, seule différence, tu choisi la definition de la polyligne par une distance de résolution. Fonctionne pour des SPLINE ou ELLIPSE. (defun C:S-E2PL ( / ent typent dxf_ent obj_vlax param_start param_end perim_obj pt_start pt_end res_track flag_ucs last_e old_osmd old_pdmd l_pt) (while (null (setq ent (entsel "\nChoix de la Spline ou Ellipse à convertir en polyligne: ")))) (setq typent (cdr (assoc 0 (setq dxf_ent (entget (car ent)))))) (cond ((or (eq typent "SPLINE") (eq typent "ELLIPSE")) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object (car ent)) param_start (vlax-curve-getStartParam obj_vlax) param_end (vlax-curve-getEndParam obj_vlax) perim_obj (vlax-curve-getDistAtParam obj_vlax (+ param_start param_end)) pt_start (vlax-curve-getStartPoint obj_vlax) pt_end (vlax-curve-getEndPoint obj_vlax) ) (initget 6) (setq res_track (getdist (cadr ent) (strcat "\nDistance de résolution< " (rtos (/ perim_obj 100.0)) "> : ")) last_e (entlast) old_osmd (getvar "osmode") old_pdmd (getvar "pdmode") ) (if (not res_track) (setq res_track (/ perim_obj 100.0))) (initget "Oui Non _Yes No") (if (eq (getkword "\nVoulez vous faire une projection sur le SCU courant? [Oui/Non] < Non> : ") "Yes") (setq flag_ucs nil) (progn (command "_.ucs" "_entity" (car ent)) (setq flag_ucs T) ) ) (cond ((and (eq typent "SPLINE") (not (zerop (boole 1 1 (cdr (assoc 70 dxf_ent)))))) (setq l_pt '("_close")) ) ((and (eq typent "ELLIPSE") (zerop (cdr (assoc 41 dxf_ent))) (eq (cdr (assoc 42 dxf_ent)) (* 2 pi))) (setq l_pt '("_close")) ) (T (setq l_pt (cons (trans pt_end 0 1) '(""))) ) ) (setvar "osmode" 0) (setvar "pdmode" 1) (setvar "cmdecho" 0) (command "_.measure" (car ent) res_track) (while (and (= (cdr (assoc 0 (setq dxf_ent (entget (entlast))))) "POINT") (not (equal (entlast) last_e)) ) (setq l_pt (cons (trans (cdr (assoc 10 dxf_ent)) 0 1) l_pt)) (entdel (entlast)) ) (command "_.pline" (mapcar 'command (cons (trans pt_start 0 1) l_pt))) (if flag_ucs (command "_.ucs" "_previous")) (initget "Oui Non _Yes No") (if (not (eq (getkword "\nEffacer l'entité source [Oui/Non] < Oui> : ") "No")) (entdel (car ent)) ) (setvar "osmode" old_osmd) (setvar "pdmode" old_pdmd) (setvar "cmdecho" 1) ) (T (princ "\nN'est pas une Spline ou Ellipse!")) ) (prin1) ) (princ "\nS-E2PL.LSP chargé. Tapez S-E2PL pour convertir SPLINE ou ELLIPSE en POLYLIGNE.") (prin1)
  10. Oli 553, les liens sont mort!.... Tramber Je te livre le contenu du fichier AutoLisp.txt que je possède. Il date d'octobre 2004, et je ne sais plus si c'est l'original ou si j'ai "bidouillé" dedans. à fusionner dans wordfile.txt (conserve le bak, on ne sait jamais) en espérant que le copier-coller sera bon J'ai supprimé le copier-collé et voici un lien FTP , se sera plu_s sûr.[Edité le 10/1/2006 par bonuscad] Je te refais le copier-coller car l'original semble très léger, je ne sais plus où j'ai trouvé le mien. /L1"AutoLisp" Line Comment = ; File Extensions = LSP FAS /Function String = "\\ \e \n \r \t \" /Indent Strings = "(" /Unindent Strings = ")" /C1"Functions" abs acad_colordlg acad_helpdlg acad_strlsort acdimenableupdate acet-attsync acet-layerp-mode acet-layerp-mark acet-laytrans acet-ms-to-ps acet-ps-to-ms action_tile add_list alert alloc and angle angtof angtos append apply arx arxload arxunload ascii assoc atan atof atoi atom atoms-family autoarxload autoload boole boundp caddr cadr car cdr chr client_data_tile close command cond cons cos cvunit defun defun-q defun-q-list-ref defun-q-list-set dictadd dictnext dictremove dictrename dictsearch dimx_tile dimy_tile distance distof done_dialog end_image end_list entdel entget entlast entmake entmakex entmod entnext entsel entupd eq equal *error* eval exit exp expand expt fill_image findfile fix float foreach function gc gcd get_attr getangle getcfg getcname getcorner getdist getenv getfiled getint getkword getorient getpoint getreal getstring getvar graphscr grclear grdraw grread grtext grvecs handent help if initdia initget inters itoa lambda last layoutlist length list listp load load_dialog log logand logior lsh mapcar max mem member menucmd menugroup min minusp mode_tile namedobjdict nentsel nentselp new_dialog not nth null numberp open or osnap polar prin1 princ print progn prompt quit quote read read-char read-line redraw regapp rem repeat reverse rtos set set_tile setcfg setenv setfunhelp setq setvar setview sin slide_image snvalid sqrt ssadd ssdel ssget ssgetfirst sslength ssmemb ssname ssnamex sssetfirst startapp start_dialog start_image start_list strcase strcat strlen subst substr tablet tblnext tblobjname tblsearch term_dialog terpri textbox textpage textscr trace trans type unload_dialog untrace vector_image ver vlisp-compile vports vl-acad-defun vl-acad-undefun vl-arx-import vl-bb-ref vl-bb-set vl-catch-all-apply vl-catch-all-message vl-catch-all-error-p vl-cmdf vl-consp vl-directory-files vl-doc-export vl-doc-import vl-doc-ref vl-doc-set vl-every vl-exit-with-error vl-exit-with-value vl-file-copy vl-file-delete vl-file-directory-p vl-file-rename vl-file-size vl-file-systime vl-filename-base vl-filename-directory vl-filename-extension vl-filename-mktemp vl-get-resource vl-list* vl-list->string vl-list-exported-functions vl-list-length vl-list-loaded-vlx vl-load-all vl-load-com vl-load-reactors vl-member-if vl-member-if-not vl-position vl-prin1-to-string vl-princ-to-string vl-propagate vl-registry-delete vl-registry-descendents vl-registry-read vl-registry-write vl-remove-if vl-remove-if-not vl-some vl-sort vl-sort-i vl-string->list vl-string-elt vl-string-left-trim vl-string-mismatch vl-string-position vl-string-right-trim vl-string-search vl-string-subst vl-string-translate vl-string-trim vl-symbol-name vl-symbol-value vl-symbolp vl-unload-vlx vl-vbaload vl-vbarun vl-vlx-loaded-p vlax-3d-point vlax-add-cmd vlax-create-object vlax-curve-getarea vlax-curve-getclosestpointto vlax-curve-getclosestpointtoprojection vlax-curve-getdistatparam vlax-curve-getdistatpoint vlax-curve-getendparam vlax-curve-getendpoint vlax-curve-getfirstderiv vlax-curve-getparamatdist vlax-curve-getparamatpoint vlax-curve-getpointatdist vlax-curve-getpointatparam vlax-curve-getsecondderiv vlax-curve-getstartparam vlax-curve-getstarpoint vlax-curve-isclosed vlax-curve-isperiodic vlax-curve-isplanar vlax-dump-object vlax-ename->vla-object vlax-erased-p vlax-for vlax-get-acad-object vlax-get-or-create-object vlax-get-property vlax-import-type-library vlax-invoke-method vlax-ldata-delete vlax-ldata-get vlax-ldata-list vlax-ldata-put vlax-ldata-test vlax-make-safearray vlax-make-variant vlax-map-collection vlax-method-applicable-p vlax-object-released-p vlax-product-key vlax-property-available-p vlax-put-property vlax-read-enable-p vlax-release-object vlax-remove-cmd vlax-safearray-fill vlax-safearray-get-dim vlax-safearray-get-element vlax-safearray-get-l-bound vlax-safearray-get-u-bound vlax-safearray-put-element vlax-safearray-type vlax-safearray->list vlax-tmatrix vlax-typeinfo-available-p vlax-variant-change-type vlax-variant-type vlax-variant-value vlax-vla-object->ename vlax-write-enabled-p vlr-acdb-reactor vlr-add vlr-added-p vlr-beep-reaction vlr-command-reactor vlr-current-reaction-name vlr-data vlr-data-set vlr-deepclone-reactor vlr-docmanager-reactor vlr-dwg-reactor vlr-dxf-reactor vlr-editor-reactor vlr-insert-reactor vlr-linker-reactor vlr-lisp-reactor vlr-miscellaneous-reactor vlr-mouse-reactor vlr-notification vlr-object-reactor vlr-owner-add vlr-owner-remove vlr-owners vlr-pers vlr-pers-list vlr-pers-p vlr-pers-release vlr-reaction-name vlr-reaction-set vlr-reactions vlr-reactors vlr-remove vlr-remove-all vlr-set-notification vlr-sysvar-reactor vlr-toolbar-reactor vlr-trace-reaction vlr-type vlr-types vlr-undo-reactor vlr-wblock-reactor vlr-window-reactor vlr-xref-reactor wcmatch while write-char write-line xdroom xdsize zerop /C2"Operators" + - * / = /= < <= > >= ~ 1+ 1- [Edité le 10/1/2006 par bonuscad]
  11. bonuscad

    Superbe jeux d\'énigmes...

    Jalna. Sympathiques comme moments de détentes. As tu vu les autres proposition sur http:// http://www.amanitadesign.com/ pour un fan comme toi
  12. Si tu veux garder l'accrochobjet actif durant les "pause" utilise simplement le mode "aucun" ponctuellement avant de fournir "@0,100"
  13. Si c'est vraiment du texte brut, essaie d'appliquer ceci. Si c'est des attributs ça ne fonctionneras pas, il faudra adapter. (defun c:format_numeric_text ( / js text-ent v-txt) (princ "\nSélectionner les textes à formater") (setq js (ssget '((0 . "TEXT"))) n 0) (cond (js (repeat (sslength js) (setq text-ent (entget (ssname js n))) (setq v-txt (cdr (assoc 1 text-ent))) (cond ((or (eq (type (read v-txt)) 'REAL) (eq (type (read v-txt)) 'INT)) (entmod (subst (cons 1 (rtos (read v-txt) 2 2)) (assoc 1 text-ent) text-ent ) ) ) (T (princ "\nLe texte n'est pas numérique")) ) (setq n (1+ n)) ) ) (T (princ "\nSélection vide!")) ) (princ) )
  14. bonuscad

    simplification polyligne 2d

    Bonjour, Comme déjà dit dans le post LT la commande "Pedit" option "Modif-Sommet" "Linéair" Mais sous quel version travail-tu? pleine, ligth. En version pleine on peut automatiser, par exemple supprimer 1 sommet sur 2 comme le code suivant peut faire. (defun c:linear_nto1 ( / ent dxf_ent typ_ent up_def pt_lst n new_lst) (while (not (setq ent (entsel "\nChoisir une polyligne2D: ")))) (setq typ_ent (cdr (assoc 0 (setq dxf_ent (entget (car ent))))) new_lst '()) (cond ((eq typ_ent "LWPOLYLINE") (setq up_def (vl-remove-if '(lambda (x) (or (= (car x) 10) (= (car x) 40) (= (car x) 41) (= (car x) 42))) dxf_ent)) (setq pt_lst (vl-remove-if-not '(lambda (x) (or (= (car x) 10) (= (car x) 40) (= (car x) 41) (= (car x) 42))) dxf_ent)) (initget 7) (while (> (setq n (getint (strcat "\nNombre de sommet à éliminer? Maxi <" (itoa (/ (length pt_lst) 4)) ">: "))) (/ (length pt_lst) 4)) (princ "\nNombre de sommet à éliminer supérieur à celui existant!") (initget 7) ) (while pt_lst (setq new_lst (append (mapcar '(lambda (x) (nth x pt_lst)) '(0 1 2 3)) new_lst)) (setq pt_lst (cddddr pt_lst)) (repeat n (if (cdr pt_lst) (setq pt_lst (cddddr pt_lst))) ) ) (setq up_def (subst (cons 90 (/ (length new_lst) 4)) (assoc 90 up_def) up_def)) (entmod (append (subst (cons 90 (/ (length new_lst) 4)) (assoc 90 up_def) up_def) new_lst)) ) (T (princ "\nN'est pas une polyligne 2D optimisée!") ) ) (princ) ) Modifier pour choisir le nombre de sommets à supprimer [Edité le 6/1/2006 par bonuscad]
  15. 10 min, c'est plus qu'assez pour faire un copier-coller. ;) J'avais répondu il y a longtemps à cette demande (je ne sais plus où). Moi même j'ai été confronté à ce genre de problème. En remarque: Si le type de ligne contient des formes, dans ce cas, bien que la définition du type de ligne soit correcte, il manquera le fichier de forme SHX. Ceci est beaucoup plus génant que pour une police car aucune substitution approchante ne peut être faite. L'usage de "etransmit" devrait être systématique lors de livraison de fichiers pour ne pas être confronté a ce genre de problèmes.
  16. Oui, tu peux les rajouter dans AutoCAD.LIN ou ACADISO.LIN , mais je te le déconseille car c'est le meilleur moyen pour perdre ses sources. Il vaut mieux les conserver distinctement tu pourras par exemple les faire migrer plus facilement sur une version ultérieure d'Autocad. Il n'ai pas toujours facile d'expliquer les choses correctement quand pour nous, ça nous semble évident. Donc faute partagée ;)
  17. Fichier .las ???? .lsp tu veux dire. Voici un exemple de déroulement. Dans ton dessin origine où tu veux récupérer la définition du type de ligne. Dessine une ligne quelconque, en lui affectant le type de ligne qui t'interesse -Tu charges le lisp. Au message commande, tu devrais avoir dans la dernière ligne de l'historique: Tu tapes alors cette nouvelle commande, exemple: Tu fais un copier-coller de l'astérisque à la 1ère ligne-vierge dans le bloc-note et tu l'enregistre (ici GAZ.LIN) Dans un nouveau dessin Ca va pour les manips ?...
  18. (gile) à répondu avant moi. Je rajouterais juste que tu peux faire aussi le coller directement en ligne de commande Autocad, suivi d'un éventuel "return". C'est pratique quand tu veux juste essayer et pas forcément garder le code dans un fichier.
  19. Bonjour, Essaye ce qui suit, Pour que ça fonctionne, le type de ligne doit être assigné à un objet et non au calque. (defun c:model_typline ( / ent ent_dxf nam_tl def_tl prec m_adir m_abas nam_lin def_lin nbr_lin w_line lg_tiret tp_cpx cod_shx ss_ent styl_tl file_shx scal_motif rot_motif x_motif y_motif str_motif) (setvar "cmdecho" 0) (while (not (setq ent (entsel "\nChoix du TypeLigne modèle: ")))) (setq ent_dxf (entget (car ent)) nam_tl (assoc 6 ent_dxf)) (cond ((and (cdr nam_tl) (/= (cdr nam_tl) "ByLayer") (/= (cdr nam_tl) "ByBlock")) (initget 4) (setq def_tl (entget (tblobjname "Ltype" (cdr nam_tl))) prec (getint (strcat "\nPrécision décimale désirée<" (itoa (getvar "LUPREC")) ">: ")) ) (if (not prec) (setq prec (getvar "LUPREC"))) (setq m_adir (getvar "angdir") m_abas (getvar "angbase") nam_lin (strcat "*" (cdr (assoc 2 def_tl))) def_lin (strcat "," (cdr (assoc 3 def_tl))) lg_lin (cdr (assoc 40 def_tl)) nbr_line (cdr (assoc 73 def_tl)) w_line "\nA" ) (setvar "angdir" 0) (setvar "angbase" 0) (textscr) (princ (strcat "\n" nam_lin def_lin)) (princ w_line) (while (/= (caar def_tl) 49) (setq def_tl (cdr def_tl)) ) (while def_tl (cond ((eq 49 (caar def_tl)) (setq lg_tiret (cdar def_tl)) (princ (strcat "," (rtos lg_tiret 2 prec))) ) ((eq 74 (caar def_tl)) (setq tp_cpx (cdar def_tl)) ) ((eq 75 (caar def_tl)) (setq cod_shx (cdar def_tl)) (cond ((zerop cod_shx) (princ (strcat ",[\"" (cdr (assoc 9 def_tl)) "\"")) ) ((eq tp_cpx 4) (princ ",[*") ) ) ) ((eq 340 (caar def_tl)) (setq ss_ent (entget (cdr (assoc 340 def_tl))) styl_tl (cdr (assoc 2 ss_ent)) file_shx (cdr (assoc 3 ss_ent)) ) (if (eq styl_tl "") (princ (strcat (itoa cod_shx) "," file_shx)) (princ (strcat "," styl_tl)) ) ) ((eq 46 (caar def_tl)) (setq scal_motif (cdr (assoc 46 def_tl))) (princ (strcat ",S=" (rtos scal_motif 2 prec))) ) ((eq 50 (caar def_tl)) (setq rot_motif (cdr (assoc 50 def_tl))) (princ (strcat ",R=" (angtos rot_motif 0 prec))) ) ((eq 44 (caar def_tl)) (setq x_motif (cdr (assoc 44 def_tl))) (princ (strcat ",x=" (rtos x_motif 2 prec))) ) ((eq 45 (caar def_tl)) (setq y_motif (cdr (assoc 45 def_tl))) (princ (strcat ",y=" (rtos y_motif 2 prec) "]")) ) ((eq 9 (caar def_tl)) (setq str_motif (cdr (assoc 9 def_tl))) ) ) (setq def_tl (cdr def_tl)) ) (setvar "angdir" m_adir) (setvar "angbase" m_abas) ) (T (princ "\nImpossible de récuperer le type de ligne de l'objet pointé.")) ) (setvar "cmdecho" 1) (prin1) ) Tu fais un copier-coller du résultat de l'écran texte dans un fichier .LIN
  20. Pour faire mes mise en page de projet routier, je procède comme suit: Je possède généralement mon assemblage topo, soit un seul fichier contenant toutes les planches, soit un fichier par planche. Je crée mon fichier projet général autocad dans l'EO en coordonnées réelle par l'import d'un DXF brut de piste. (je sectionne mon projet dessin par l'import successif de DXF correspondant a une zone de tabulation: ceci pour éviter d'avoir à refaire trop de retouches d'habillage dans mon dessin lors de modifications ponctuelle du projet sous micropiste) Dans ce fichier projet j'y attache des XREF d'ouvrages, de signalisation au sol, d'assainissement..... Je me crée alors mon fichier de mise en page pour l'impression. Celui ci est principalement constitué d'XREF Topo, Projet(avec lui même ses xrefs), page de garde en xref dans l'EP Dans l'EP et sous plusieurs onglet je refais mes planches orientées et j'insere en xref le profil en long (obtenu lui par un DXF de tracé dans micropiste) [surligneur]DANS [/surligneur] l'EP. Généralement je m'en sors plutôt bien dans la présentation des plans. Par expérience j'ai appris à "saussissoner" au mieux mon fichier projet, pour limiter le temps a passer à refaire des retouches lors de remise en cause fréquente d'une partie du projet et de son emprise. Pour certain projet routier je mène 2 fichier projet de front: 1 en 2D et 1 doublon en 3D Je me sers alors dans ce cas là du module TPL (Triangulation Par Ligne) de Micropiste pour modéliser ma topo en 3D et du DXF 3D de Piste pour le projet. Besoin ponctuel de présentation de perception d'ouvrage. Je conviens que ce besoin 3D n'est pas systématique heuresement ;) Car c'est quand même un sacré boulot pour avoir un résultat convenable, et vite des fichiers énormes et lourds à gérer. Mais tout ça je l'ai fait petit à petit avec de nombreuses erreurs d'organisation de mes fichiers. L'apparition des XREF pour mon organisation du travail à été vraiment un gros + Mais bon je ne veux pas te convetir a une méthode de travail, mais des fois ça vaut la peine d'y réfléchir au bon moment pour s'éviter du travail inutile ou fastidieux qui n'avait pas lieu d'être.
  21. Oui, Au lieu de faire une multitude de lisp similaires en faire un unique regroupant tes modif sera plus rapide. Au moins tu parcours la base de donnée qu'une seule fois ;) Les 2 précédent fusioné, a completer encore! (defun DATEO () (menucmd "M=$(edtime,$(getvar,date),DD/MO/YY)") ) (defun c:MAJATT ( / AncVal LstEnt NomEnt) (setq NomEnt (entnext)) (while NomEnt (setq LstEnt (entget NomEnt)) (if (member '(0 . "ATTRIB") LstEnt) (cond ((member '(2 . "DATEO") LstEnt) (setq AncVal (cdr (assoc 1 LstEnt))) (setq LstEnt (subst (cons 1 (DATEO)) (cons 1 AncVal) LstEnt)) (entmod LstEnt) (entupd NomEnt) ) ((member '(2 . "NOM2") LstEnt)) (setq AncVal (cdr (assoc 1 LstEnt))) (setq LstEnt (subst (cons 1 "Serge") (cons 1 AncVal) LstEnt)) (entmod LstEnt) (entupd NomEnt) ) ;;Autant de condition que l'on veut ici ;; sous la forme ;; ((condition vrai) ici member ;; (subst)(entmod)(entupd) ;; ) ) ) (setq NomEnt (entnext NomEnt)) ) (princ) )
  22. Comme ceci: (defun c:MAJNOM ( / AncVal LstEnt NomEnt) (setq NomEnt (entnext)) (while NomEnt (setq LstEnt (entget NomEnt)) (if (and (member '(0 . "ATTRIB") LstEnt) (member '(2 . "NOM2") LstEnt)) (progn (setq AncVal (cdr (assoc 1 LstEnt))) (setq LstEnt (subst (cons 1 "Serge") (cons 1 AncVal) LstEnt)) (entmod LstEnt) (entupd NomEnt) ) ) (setq NomEnt (entnext NomEnt)) ) (princ) ) Juste en remarque, Pas très utile de parcourir toute la base de donnée du dessin pour mettre à jour ton bloc. Parcourir une sélection ciblée serait mieux et plus rapide [Edité le 4/1/2006 par bonuscad]
  23. As tu essayé une autre voie? J'ai l'impression que de micropiste tu as généré ton DXF depuis le module de tracage en ayant configuré un traceur en DXF. Dans ce cas tu obtiens un DXF qui est l'image de ta sortie papier. Mais en passant par le module "Utilitaires" -> "Fichiers PISTE" -> "Exporter" -> "Fichier DXF" Tu exportes à ce moment là un DXF en coordonnées réelles, et là plus de problème de recalage de projet. Il me semble donc que la 2ème méthode serait plus simple, le seul désaventage et que tu n'as pas les caractéristique technique de l'axe en plan comme tu peux l'avoir par la 1ère méthode. [Edité le 4/1/2006 par bonuscad]
  24. Ma 1ère réflexion sans aucun test me ferait pencher sur un problème de l'interpretation du code 66 des entité INSERT. Si zero faire un ENDBLK autrement une serie de ENDSEQ (autant que necessaire) [surligneur] AVANT[/surligneur] de faire un ENDBLK
  25. bonuscad

    Edition d\'attributs

    Tu peux regarder ce SUJET en remplaçant l'ensemble de la fonction (defun c:subtitutexte .........) par (defun c:subtitutexte ( / new_text old_text dxf1 dxf2) (setq old_text (extract_txt nil (setq dxf1 (sel_obj "à Modifier")) nil)) (extract_txt T dxf1 (getstring T "\nNouveau texte: ")) (prin1) ) Ce n'est pas forcément exactement ce que tu cherches à faire, mais ça pourrait peut être s'adapter.
×
×
  • 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é