-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bonuscad
-
Bien vu pour le symbole length ;) Mais sous qu'elle version travailles tu? car je ne me souviens pas d'avoir eu le message. L'erreur malgré tout, en reste une. Je CORRIGE à la place de l'auteur dans le post précédent.
-
Ouais ça va! :) Il ne chante pas plus faux que moi ;)
-
Ou si tu le désire, tu peux essayer ceci: Tu pourras choisir un style de texte existant ou en créer un nouveau et ceci sera appliqué a tout les blocs de même "nom". (defun c:chg_style_att ( / js ent dxf_ent nam_blk flag_att lst_sty def_style new_sty all_path n end_pos id_path fonts_path file_shx s_e dxf_e) (princ "\nChoix du bloc avec attribut: ") (setq js (ssget "_+.:E:S" '((0 . "INSERT")))) (cond (js (setq ent (ssname js 0) dxf_ent (entget ent) nam_blk (cdr (assoc 2 dxf_ent)) flag_att (cdr (assoc 66 dxf_ent)) ) (cond ((and flag_att (not (zerop flag_att))) (setq lst_sty (list (strcase (cdr (assoc 2 (tblnext "STYLE" T)))))) (while (setq def_style (tblnext "STYLE")) (setq lst_sty (append (list (strcase (cdr (assoc 2 def_style)))) lst_sty)) ) (initget "Existant Nouveau _Existing New") (if (eq (getkword "\nStyle [Existant/Nouveau]?: ") "New") (progn (while (member (setq new_sty (strcase (getstring "\nNom du style à créer?: "))) lst_sty) (princ "Nom du style existe déjà") ) (setq all_path (getenv "ACAD") n 0) (while (setq end_pos (vl-string-position (ascii ";") all_path)) (setq id_path (substr all_path 1 end_pos)) (if (wcmatch (strcase id_path) "*FONTS*") (setq fonts_path (strcat id_path "\\")) ) (setq all_path (substr all_path (+ 2 end_pos))) ) (setq file_shx (getfiled "Selectionnez un fichier de police" fonts_path "shx" 8)) (if (not file_shx) (setq file_shx "txt.shx") ) (entmake (append '( (0 . "STYLE") (5 . "40") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 2.5) (4 . "") ) (list (cons 3 file_shx)) (list (cons 2 new_sty)) ) ) ) (progn (foreach n lst_sty (princ n) (princ " / ") ) (while (not (member (setq new_sty (strcase (getstring "\nNom du style?: "))) lst_sty)) (princ "Nom du style incorrect") ) ) ) (setq js (ssget "_X" (list '(0 . "INSERT") (cons 2 nam_blk))) n 0) (repeat (sslength js) (setq s_e (cdar (setq ent (entget (ssname js n))))) (while (/= (cdr (assoc 0 (entget (setq s_e (entnext s_e))))) "SEQEND") (setq dxf_e (entget s_e)) (if (eq (cdr (assoc 0 dxf_e)) "ATTRIB") (progn (setq dxf_e (entmod (subst (cons 7 new_sty) (assoc 7 dxf_e) dxf_e))) ) ) (entupd (cdar ent)) ) (setq n (1+ n)) ) ) (T (princ "\nCe bloc ne possède pas d'attribut") ) ) ) (T (princ "\nSélection vide ou ce n'est pas une insertion de bloc")) ) (prin1) )
-
Est ce que ce lisp trouvé ICI pourrait faire l'affaire. Le même en language internationalisé: ;------------------------------------------------------------------- ; THREAD.LSP Creates 3D solid (ACIS) threads. 3/3/98 ; ; Corrected 3/4/98 ; Corrected again 3/6/98 ; ; written by: Jim Fitzgerald ; ; Credit goes to Bernd Hoffmann and Ken Shearron for showing ; me this modeling technique and helping me spot ; some bugs. ; ;------------------------------------------------------------------- ; ; This is a way to make 3D solid external threads in ; AutoCAD R13 and R14. Just so you know, it's not ; geometrically correct, but it's pretty darn close. ; There is no error trapping or anything like that. ; ; You are prompted for the Nominal thread size ; (actual size like .190 or .112, not #10, #4, etc..), ; threads per inch (tpi), the total length of the thread, and a ; center point. The program works by creating a single thread ; and then arraying it out to the proper length. The threads are ; drawn a little long and then sliced off to the correct length. ; This program only draws the thread, you're on your own drawing ; the rest of the screw. For internal threads, just subtract this from ; another solid. ; ; Note, the threads created by this can make for some rather big files, ; so make sure your system is up to it. Also, it might take a while ; to union all of the single threads together so be patient. ; ;------------------------------------------------------------------- ; This is gratuiciel. Do what you want with it. If you modify it, ; please take my name off of it so I don't have to support your ; software. ; ; All the typical legal stuff applies. I make no claims that ; this actually works. Use it at your own risk. You can't sue me ; for any problems that you have as a result of using this ; (either personal or professional). Don't drink and ; drive. Eat your vegetables, and call your mother. ;------------------------------------------------------------------- (defun c:thread ( / nom pitch length_t cpt total pt1 pt1z pt2 pt3 ang pt1a pt1az pt3a pt1b pt1bz pt3b pt4 pt4 pt6 pt7 pt8 pt9 pt10 pt11 pt12 ss osm) ;------------------------------------------------------------------- ; Gets the nominal size, tpi, and total length ; then calculates a bunch of geometry points. ; All running osnaps are turned off as well. ;------------------------------------------------------------------- (setq nom (getdist "\nNominal size: ") pitch (/ 1.0 (getreal "\nThreads per Inch: ")) length_t (getdist "\nTotal thread length: ") cpt (getpoint "Center point: ") total (+ (fix (/ length_t pitch)) 2) pt1 (list (- (car cpt) (/ nom 2.0)) (cadr cpt)) pt1z (list (- (car cpt) (/ nom 2.0)) (cadr cpt) 1.0) pt2 (polar pt1 (/ (* 30.0 pi) 180.0) 0.1) pt3 (list (+ (car pt1) nom) (+ (cadr pt1) (/ pitch 2.0))) ang (angle pt1 pt3) pt1a (polar pt1 (+ ang (/ pi 2.0)) pitch) pt1az (list (car pt1a) (cadr pt1a) 1.0) pt3a (polar pt1a ang nom) pt1b (polar pt1 (- ang (/ pi 2.0)) pitch) pt1bz (list (car pt1b) (cadr pt1b) 1.0) pt3b (polar pt1b ang nom) pt4 (polar pt3 (/ (* 150.0 pi) 180.0) 0.1) pt5 (inters pt1 pt2 pt3 pt4 nil) pt6 (list (car pt5) (cadr cpt)) pt7 (polar pt1 (/ (* 330.0 pi) 180.0) 0.1) pt8 (polar pt3 (/ (* 210.0 pi) 180.0) 0.1) pt9 (inters pt1 pt7 pt3 pt8 nil) pt10 (list (car pt9) (cadr pt3)) pt11 (polar cpt (/ pi 2.0) pitch) pt12 (polar pt11 (/ pi 2.0) length_t) osm (getvar "osmode") ) (setvar "osmode" 0) ;------------------------------------------------------------------- ; Draws two cones which are inverted and offset 1/2 the pitch. ; The cones are each sliced at the angle of the crest line ; and then unioned together ;------------------------------------------------------------------- (princ "\nCreating thread...this might take a while.") (command "_.pline" pt1 pt5 pt6 "_c") (command "_.revolve" "_l" "" pt5 pt6 "") (command "_.slice" "_l" "" pt1 pt3 pt1z pt5) (command "_slice" "_l" "" pt1a pt3a pt1az pt3) (setq ss (ssadd (entlast))) (command "_.pline" pt3 pt9 pt10 "_c") (command "_.revolve" "_l" "" pt9 pt10 "") (command "_.slice" "_l" "" pt1 pt3 pt1z pt9) (command "_.slice" "_l" "" pt1b pt3b pt1bz pt3) (setq ss (ssadd (entlast) ss)) (command "_.union" ss "") ;------------------------------------------------------------------- ; This above solid is sliced in half and then mirrored. This ; creates the "helix" in the thread. The height of the single ; thread is actually equal to twice the pitch, but the ; excess is either absorbed or cut off in the last step ;------------------------------------------------------------------- (command "_.slice" ss "" "xy" cpt "_b") (setq ss (ssadd (entlast) ss)) (command "_.mirror" "_l" "" pt1 "@10<0" "_y") (command "_.union" ss "") ;------------------------------------------------------------------- ; The thread is arrayed and then unioned together (this part can ; take a while). The resulting solid is cut to the specified length. ;------------------------------------------------------------------- (setq e (entlast)) (command "_.-array" ss "" "_r" total 1 pitch) (repeat (1- total) (setq e (entnext e) ss (ssadd e ss) ) ) (command "_.union" ss "") (command "_.slice" "_l" "" "_zx" pt11 pt12) (command "_.slice" "_l" "" "_zx" pt12 pt11) (princ "\nDone") (setvar "osmode" osm) (princ) ) [Edité le 24/10/2005 par bonuscad]
-
fmult avec boite de dialogue
bonuscad a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Zébulon, J'ai essayé rapidement ton programme qui m'a l'air prometteur. Tu as rencontré le même problème que moi (les vues en perpectives) Je te conseillerais plutôt: [surligneur] (if (zerop (logand 1 (getvar "viewmode")))[/surligneur] au lieu de (if (= (cdr (assoc 71 (tblsearch "view" VNAME))) 0) Je me sers aussi de la variable "ViewTwist" pour faire tourner ma vue. Voilà une routine pour faire tourner une fenêtre de 90°, peut être te donneras t-elle des idées! Je me demande si des fonctions (vl- ...)ou (vlax-...) ne permettrait pas des actions plus simple et plus sures? Mais un pro du VL va nous dire ça ;) (defun c:r_viewport ( / e_vport dxf_vport base_pt lg_view ht_view h_vue pt_ctr-view pt_dl pt_ur) (cond ((zerop (getvar "TILEMODE")) (setvar "CMDECHO" 0) (command "_.undo" "_begin") (if (/= (getvar "CVPORT") 1) (command "_.pspace") ) (setq e_vport nil dxf_vport nil) (while (null e_vport) (setq e_vport (ssget "_+.:E:S" '((0 . "VIEWPORT")))) (if e_vport (setq e_vport (ssname e_vport 0))) ) (setq dxf_vport (entget e_vport) base_pt (cdr (assoc 10 dxf_vport)) lg_view (cdr (assoc 40 dxf_vport)) ht_view (cdr (assoc 41 dxf_vport)) h_vue (cdr (assoc 45 dxf_vport)) ) (command "_.mspace") (setvar "CVPORT" (cdr (assoc 69 dxf_vport))) (setq pt_ctr-view (getvar "VIEWCTR")) (initget "+ -") (if (eq (getkword "\nRotation de +90° ou -90°? [+/-] <+>: ") "-") (command "_.dview" "" "_twist" (angtos (rem (- (getvar "VIEWTWIST") (/ pi 2)) pi) 0 5) "") (command "_.dview" "" "_twist" (angtos (rem (+ (getvar "VIEWTWIST") (/ pi 2)) pi) 0 5) "") ) (command "_.-view" "_save" "$bascul_vue") (command "_.-layer" "_state" "_save" "$bascul_vue" "" "" "") ; (command "_.-layer" "_state" "_save" "$bascul_vue" "_on" "_froze" "_lock" "_plot" "_newvp" "_color" "_linetype" "_weight" "_plotstyle" "" "" "") (command "_.pspace") (setq pt_dl (list (- (car base_pt) (/ ht_view 2.0)) (- (cadr base_pt) (/ lg_view 2.0)) (caddr base_pt) ) ) (setq pt_ur (list (+ (car base_pt) (/ ht_view 2.0)) (+ (cadr base_pt) (/ lg_view 2.0)) (caddr base_pt) ) ) (entdel e_vport) (command "_.mview" pt_dl pt_ur) (command "_.mspace") (command "_.-view" "_restore" "$bascul_vue") (command "_.-view" "_delete" "$bascul_vue") (command "_.-layer" "_state" "_restore" "$bascul_vue" "_delete" "$bascul_vue" "" "") (if (zerop (logand 1 (getvar "viewmode"))) (command "_.zoom" "_ce" pt_ctr-view (strcat (rtos (/ ht_view h_vue)) "XP")) ) (command "_.pspace") (command "_.undo" "_end") (setvar "CMDECHO" 1) ) (T (prompt "\n*** Commande non autorisée dans l'espace objet ***")) ) (prin1) ) -
Pour revenir sur GSVIEW Il fait aussi simplement des convertions vers des formats images (menu fichier, puis convert). J'ai essayé le format Jpeg sans problème en 300 dpi (qualité aussi bonne que le PDF) Tu auras moins de soucis qu'avec le format DXF. Celui peut ne pas fonctionner sous Autocad, j'ai l'impression que cela dépend du contenu de départ du Pdf. Un pdf généré sur Autocad donnera un bon résultat en DXF sous Gsview, par contre une image ou du texte seras beaucoup moins probant, voir même non lu par autocad en dxf. Rappel: Gsview est sous licence GNU public, solution interressante pour ceux qui ne veulent pas investir dans un autre logiciel. [Edité le 22/10/2005 par bonuscad]
-
[Ctrl + A] fonction qui permutte les groupes en Actif/Inactif
-
Bonjour, La longueur retournée par la procédure qui suit, est celle de la ligne de [surligneur]BASE[/surligneur] de de la multiligne. (defun c:ml_length ( / js ent dxf_ent closed lst l_dist) (princ "\nChoix de la multiligne : ") (setq js (ssget "_+.:E:S" '((0 . "MLINE")))) (cond (js (setq ent (ssname js 0) dxf_ent (entget ent) closed (boole 1 (cdr (assoc 71 dxf_ent)) 2) lst (mapcar '(lambda (x) (trans x ent 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 11)) dxf_ent))) l_dist (mapcar 'distance (reverse (cdr (reverse lst))) (cdr lst)) ) (if (not (zerop closed)) (setq l_dist (cons (distance (last lst) (car lst)) l_dist))) (princ (strcat "\nLa longueur de la ligne de base de la multiligne est de: " (rtos (apply '+ l_dist)))) ) (T (princ "\nSélection vide ou ce n'est pas une multiligne")) ) (prin1) )
-
Comme dit CDL Tu peux le faire avec les entités%Product, j'ai essayé ça fonctionne. Le problème ne pas changer le facteur de zoom entre les opérations de collage. Utilise PAN et non le zoom si tu as besoin de te déplacer pour donner l'insertion à la suite.
-
Peut être en regardant les variables suivantes, normalement plus propice pour les insertions, mais sait-on jamais vu qu'il y a des xrefs ! INSUNITS INSUNITSDEFSOURCE INSUNITSDEFTARGET
-
Je fais une supposition de réponse car je n'ai pas de LT Dans Excel fait une selection ta plage de cellule de ta feuille pour le copier dans le presse-papier. Dans Autocad menu "Edition" option "Collage spécial..." (LT Oui/Non?) Tu devrais pouvoir choisir "l'option Excel" mais tu peux prendre aussi l'option "Entités Product" Celle génère automatquement le tableau en entité Autocad (lignes et textes) qui peuvent se modifier comme tout autre objet Autocad et tu n'es plus attaché avec un fichier OLE (Avantage à mon goût) Mais ci ceci n'est pas possible sous une LT, alors désolé :casstet:
-
Une solution que j'utilise. Elle n'est pas parfaite (mais c'est mieux que rien) Pour créer mes PDF j'utilise GSVIEW. Je fais des fichier PS (Traceur PostScript) d'autocad dans des grands formats (A0 en mode rouleau) que je transforme en PDF avec GSview. Un module appelé PStoEdit permet de gsview de convertir un PS ou PDF vers du vectoriel DXF. La qualité est bien sur lié à la résolution du PDF d'origine (300, 600 dpi ....) En résumé il te faut GSVIEW et PStoEdit pour réaliser cela. NB: Pas toujours simple d'installer ces "open source" en manuel, mais il y a des tutos sur le net.
-
Salut! A ma connaissance, en script cela n'est pas possible (aucune saisie utilisateur possible) "_QSELECT" et "_FILTER" passe obligatoirement par une boite de dialogue pour une saisie utilisateur, ce qui rend impossible l'execution en script ou en macro. Il va falloir te tourner vers (ssget (liste de filtre)) en lisp ou son équivalent en VBA, pour pouvoir automatiser la chose.
-
Une réponse à propros des espaces en fin de macro et le moyen d'y remèdier.
-
Je ne suis pas froissée :) Ma réponse est ajustée à la question Donc il me semble normal qu'une poly3D (ouverte ou fermée soit écartée) En résumé pour arriver à simuler le code [surligneur] (cons 100 "AcDb2dPolyline") [/surligneur] Le filtre le plus approprié serait celui-ci: (met les poignées si "pickfirst" actif) (sssetfirst nil (ssget "_X" '( (0 . "POLYLINE") (-4 . "< OR") (-4 . "<") (70 . 8) (-4 . "&=") (70 . 128) (-4 . "OR>") ) ) ) ATTENTION "espace" rajouté après le 1er < dans le code POLYLINE (avec VERTEX, LWPOLYLIGNES écartées) ayant le bit < 8 : ceci comprendra les polylignes; 0 ouverte, 1 fermée, 2 lissée, 4 splinée (donc maxi 1+2+4 <8) OU ayant le bit 128 (typeligne généré): Avantage seule les polylignes 2D peuvent avoir ce bit actif ce qui simplifie le filtre Ceci pour tout le dessin: on peut facilement compléter le filtre avec d'autre code (8 . "calque") (62 . "couleur") etc...
-
Hé bien elle ne seras pas sélectionnée car le drapeau 70 sera strictement supérieur à 8. 9 étant le drapeau pour une 3Dpoly fermée (8 [3Dpoly] +1 [fermée]) Si l'on veut inclure les 3dpoly, mais pas les maillages on change le 8 du filtre en 16 Le seul bit qui peut poser probléme est le bit 128 pour la génération du type de ligne. Des polylignes 2D ayant ce bit seront ecartés. On pourait compliqué en faisant une opération booléenne pour les inclures, ou plus simplement un (rem bit 128) J'ai bon?
-
Voici un filtre qui va par exemple séléctionner que les POLYLIGNES anciennes et en 2D. (ssget "_X" '((0 . "POLYLINE") (-4 . "<") (70 . 8))) Une discussion ou tu retrouve un emploi de filtre pour ecarter tout objet qui ne pourrait être sousmis aux hachures. Le code 100 est un code de groupe qui se retouve plusieurs fois dans la définition d'une entité. Un (assoc 100 ...) te retournera le 1er trouvé dans la définition. En lisp j'écarte (en général) l'utilisation de ces groupes de code de définition multiple, en (vl-) c'est peut être plus facile?
-
Si tu défini la variable HPNAME avant de lancer les hachures. Soit redéfinir le bouton standard ou un nouveau. ^C^C_.hpname;_user;_.bhatch;
-
Pour la valeur retournée, je ne vois pas comment avoir l'info à part de constater les résultats Tiens une routine (qui n'est plus trop récente!) qui aide bien pour découvrir des fonctions non soupconnées. Tu lance la fonction tu reponds "Toutes" au premier message, tu peux choisir de trier le résultat Après l'affichage du listing des Commande externe... Choisis "Oui" au message -> Les options suivantes sont plutôt destinées à des programmeurs LISP. Voulez voulez la liste des fonction et variables [Oui/Non]? : Là ça devient interressant car tu auras la liste des variables et des FONCTIONS qui sont chargée en mémoire. Tu trouveras encore des fonctions ACET et d'autres. (defun fclerr (ch) (cond ((eq ch "Function cancelled") nil) ((eq ch "quit / exit abort") nil) ((eq ch "console break") nil) (T (princ ch)) ) (if f (close f)) (setq *error* olderr) (princ) ) (defun c:fc-load ( / olderr list_a elem cmpt nwlist cod cmmt extlst temp listnw slist f a ch fc_lst vr_lst) (setq list_a (atoms-family 1) cmpt 0 nwlist () extlst () temp () fc_lst () vr_lst ()) (setq olderr *error* *error* fclerr) (textpage) (while list_a (setq elem (car list_a)) (if (= (substr elem 1 2) "C:") (setq nwlist (cons elem nwlist)) (setq listnw (cons elem listnw)) ) (setq list_a (cdr list_a)) ) (prompt "\nListe de toutes les commandes en mémoires, ou celle chargée depuis le début de") (prompt "\nla session graphique-") (initget "Toutes Session") (setq cmmt (getkword "[Toutes/Session] ?< S >: ")) (if (or (= cmmt "Session") (= cmmt nil)) (progn (initget "Oui Non") (setq cod (getkword "\nExclure les fonction autochargée par AutoCAD, [Oui/Non]? < O > : ")) (prompt "\nExamem de la mémoire en cours ...|") (if (= cod "Non") (setq f (open (findfile "atomlst0.ori") "r")) (setq f (open (findfile "atomlst1.ori") "r")) ) (if f (progn (setq a (read-line f)) (while a (setq extlst (cons a extlst)) (setq a (read-line f)) ) (while extlst (setq cmpt (1+ cmpt)) (cond ((eq cmpt 0) (prompt (strcat (chr 08) (chr 124)))) ((eq cmpt 1) (prompt (strcat (chr 08) (chr 47)))) ((eq cmpt 2) (prompt (strcat (chr 08) (chr 45)))) ((eq cmpt 3) (prompt (strcat (chr 08) (chr 92)))(setq cmpt -1)) ) (if (member (car extlst) nwlist) (setq nwlist (subst nil (car extlst) nwlist)) ) (if (member (car extlst) listnw) (setq listnw (subst nil (car extlst) listnw)) ) (setq extlst (cdr extlst)) ) (prompt (strcat (chr 08) (chr 32))) (setq cmpt 0) (while nwlist (if (/= (car nwlist) nil) (setq temp (cons (car nwlist) temp)) ) (setq nwlist (cdr nwlist)) ) (setq nwlist temp temp ()) (while listnw (if (/= (car listnw) nil) (setq temp (cons (car listnw) temp)) ) (setq listnw (cdr listnw)) ) (setq listnw temp) (close f) ) (progn (prompt "\nLe fichier ATOMLST1.ORI n'a pas été trouvé utilise l'option Toutes") (prompt "\nUtilisez le programme FC-INIT.LSP pour le définir") ) ) ) ) (initget "Oui Non") (setq cod (getkword "\nTrier les commandes dans l'odre alphabétique, [Oui/Non] ? < O > : ")) (if (or (= cod "Oui") (= cod nil)) (progn (if (not (null nwlist)) (setq list_a (acad_strlsort nwlist)) (setq list_a nwlist)) (if (not (null listnw)) (setq slist (acad_strlsort listnw)) (setq slist listnw)) ) (setq list_a nwlist slist listnw) ) (prompt "\nListe des commandes actuellement chargées :") (while list_a (setq elem (car list_a)) (if (= cmpt 23) (progn (prompt "\n<-- Tapez une touche pour la suite -->") (grread) (prompt "\nListe des commandes actuellement chargées :") (setq cmpt 0) ) ) (cond ((= (type (eval (read elem))) 'EXSUBR) (prompt "\nCommande externe (ARX).... ") ) (T (prompt "\nCommande externe (LISP)... ") (setq fc_lst (cons elem fc_lst)) ) ) (prin1 (read (substr elem 3))) (setq cmpt (1+ cmpt)) (setq list_a (cdr list_a)) ) (prompt "\n\n-> Les options suivantes sont plutôt destinées à des programmeurs LISP.") (initget "Oui Non") (setq cod (getkword "\nVoulez voulez la liste des fonction et variables [Oui/Non]? < N > : ") cmpt 0) (if (= cod "Oui") (progn (prompt "\nListe des fonctions et variables actuellement définies :") (while slist (setq elem (car slist)) (if (= cmpt 23) (progn (prompt "\n<-- Tapez une touche pour la suite -->") (grread) (prompt "\nListe des fonctions et variables actuellement définies :") (setq cmpt 0) ) ) (cond ((= (type (eval (read elem))) 'SUBR) (prompt "\nFonction interne .... ") ) ((= (type (eval (read elem))) 'EXSUBR) (prompt "\nFonction externe (ARX).... ") ) ( (and (= (type (eval (read elem))) 'LIST) (or (= (type (car (eval (read elem)))) 'LIST) (null (type (car (eval (read elem))))) ) ) (if (or (= (type (caar (eval (read elem)))) 'SYM) (= (type (caar (eval (read elem)))) nil) ) (progn (prompt "\nFonction utilisateur .... ") (setq fc_lst (cons elem fc_lst)) ) (progn (prompt "\nVariable .... ") (setq vr_lst (cons elem vr_lst)) ) ) ) (T (prompt "\nVariable .... ") (setq vr_lst (cons elem vr_lst)) ) ) (prin1 (read elem)) (setq cmpt (1+ cmpt)) (setq slist (cdr slist)) ) (prompt "\n\n** ATTENTION ** une variable représentant une liste débutant par nil,") (prompt "\nest considérée comme une fonction.\n") (initget "Oui Non") (setq cod (getkword "\nProcéder pour le LISP à un nettoyage de la mémoire [Oui/Non]? : ")) (if (= cod "Oui") (progn (prompt "\nDes variables OU de tout (variables+fonctions+commandes)-") (initget "Variables Tout") (setq cod (getkword "[Variables/Tout]? : ")) (prompt "\n\n** ATTENTION ** pour les variables représentant un descripteur de fichier,") (prompt "\nelles ne seront pas traitées (impossible de s'assurer que le fichier est fermé.)\n") (prompt "\n** Etat de la mémoire avant nettoyage **") (mem) (cond ((= cod "Tout") (setq fc_lst (append vr_lst fc_lst)) (while fc_lst (if (and (/= (car fc_lst) "PI") (/= (car fc_lst) "PAUSE") (/= (car fc_lst) "T") (/= (car fc_lst) "FC_LST") (/= (car fc_lst) "OLDERR") (/= (car fc_lst) "FCLERR") (/= (car fc_lst) "C:FC-LOAD") (/= (type (eval (read (car fc_lst)))) 'FILE) (/= (type (eval (read (car fc_lst)))) 'EXSUBR) ) (eval (read (strcat "(setq " (car fc_lst) " nil)"))) (prompt (strcat "\n ->" (if (member (car fc_lst) vr_lst) "Variable " (if (= (substr (car fc_lst) 1 2) "C:") "Commande " "Fonction " ) ) (car fc_lst) " ignorée." ) ) ) (setq fc_lst (cdr fc_lst)) ) ) (T (while vr_lst (if (and (/= (car vr_lst) "PI") (/= (car vr_lst) "PAUSE") (/= (car vr_lst) "T") (/= (car vr_lst) "VR_LST") (/= (car vr_lst) "OLDERR") (/= (type (eval (read (car vr_lst)))) 'FILE) ) (eval (read (strcat "(setq " (car vr_lst) " nil)"))) (prompt (strcat "\n-> Variable " (car vr_lst) " ignorée.")) ) (setq vr_lst (cdr vr_lst)) ) ) ) (gc) (prompt "\n\n** Etat de la mémoire après nettoyage **") (mem) ) ) ) ) (setq *error* olderr) (princ) )
-
Je ne peux te répondre précisement. Par curiosité j'ai visité "AcetUtil.Arx" et j'ai trouvé tout ça dedans: (ACET-UTIL-VER) (ACET-UI-TXTED) (ACET-UI-PICKDIR) (ACET-UI-MESSAGE) (ACET-SYS-WAIT) (ACET-SYS-TERM) (ACET-SYS-SPAWN) (ACET-SYS-SLEEP) (ACET-SYS-PROCID) (ACET-SYS-LASTERR) (ACET-SYS-KEYSTATE) (ACET-SYS-FOREGROUND) (ACET-SYS-COMMAND) (ACET-SYS-BEEP) (ACET-STR-REPLACE) (ACET-STR-FORMAT) (ACET-STR-FIND) (ACET-REG-PUT) (ACET-REG-PRODKEY) (ACET-REG-GET) (ACET-REG-DEL) (ACET-INI-SET) (ACET-INI-GET) (ACET-FILE-RMDIR) (ACET-FILE-REMOVE) (ACET-FILE-MOVE) (ACET-FILE-MKDIR) (ACET-FILE-CWD) (ACET-FILE-COPY) (ACET-FILE-CHDIR) (ACET-FILE-ATTR) (ACET-ENT-GEOMEXTENTS) Si tu fais appel aux fonctions sans arguments alors qu'ils sont requis, tu obtiens une erreur ADS qui te retourne la forme de la syntaxe qui doit être soumis. Le type de l'argument n'est pas toujours facile à identifier. Exemple pour: (ACET-UI-MESSAGE) Utilisation: (acet-ui-message [< saisie > [< type >]]) ; erreur:Demande ADS erronée NB: L'arx regardé correspond à une version française de démo des express. Une version intégrale anglaise à peut être encore d'autres fonctions?[Edité le 14/10/2005 par bonuscad] [Edité le 14/10/2005 par bonuscad]
-
Je ne sais pas la syntaxe en VB, mais tu as l'info (en lecture seule) stocké dans la variable Autocad "LOGINNAME". Je supose que cela doit être simple a récuperer en VB
-
C'est "^Z" et pas "Z" Tu peux l'enlever au lieu de le remplacer par une annulation "^C" Assures toi simplement de ne pas avoir d'ESPACE après le dernier ";" ;)
-
En fait ton problème n'est pas intégralement résolu. En effet tu as 157 objet qui ont été construit dans un SCU sécant au SCG. Ex: un arc tracé dans un scu non parallèle aura maintenant son centre à 0,0,0 dans le scg mais l'arc sera positionné en 3Dfilaire. Attentions ce genre d'objet (en vue de dessus) se déplace en XY si le Z est/=0 avec la macro Ce n'est pas un applatissement, mais une mofications des Z Un raccord/ajustement/prolongement entre 2 lignes ou arcs dont l'un fait partie des 157 objets ne fonctionnera pas. Si ton dessin est essentiellement 2D, mets toi en vue de face pour reperer les objets à problèmes. (peut être des blocs?)
-
Une anomalie en Diesel, normal, pas normal?
bonuscad a répondu à un(e) sujet de bonuscad dans Personnalisation, macros, DIESEL
Extrait de l'aide: Je l'emploi surtout quand je communique des macros. En effet, en faisant un copier-coller directement dans la zone de création des boutons, si des espaces en fin de ligne sont pris en plus lors du copier, ta macro va contenir autant d'entrées qu'il y a d'espaces. Le ^Z arrête l'évaluation des caractères espaces après lui. Et c'est pour ça que je préfère (pour la clarté) l'emploi de ";" ou "^M" dans les macros au lieu des "espaces" pour générer les validations. [Edité le 13/10/2005 par bonuscad] -
Le sujet de cette Discussion pourrait être une solution. La réponse de Zébulon à propos de "*" devant le nom du fichier à inserer peut permettrell''insertion d'un fichier posant problème (j'y ai déjà eu recours parfois avec succés).
