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

    reduction de texte de cote

    A toi d'ajuster si ça ne convient pas ((lambda ( / js n ent obj_vla) (setq js (ssget "_X" (list (cons 0 "DIMENSION") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) (cond (js (vl-load-com) (setq n -1) (repeat (sslength js) (setq ent (ssname js (setq n (1+ n)))) (setq obj_vla (vlax-ename->vla-object ent)) (if (< (vla-get-Measurement obj_vla) 1.0) (progn (vla-put-LinearScaleFactor obj_vla 1000) (vla-put-PrimaryUnitsPrecision obj_vla 0) (vla-put-SuppressLeadingZeros obj_vla -1) ) ) ) ) ) (prin1) ))
  2. bonuscad

    Angle d\'un hachurage.

    Je vais essayer de te donner une piste qui est peut être erronée. A ma connaissance le code 53 concerne l'angle du MOTIF et non pas l'angle utilisateur pour la mise en place. Cet angle de motif m'a déjà posé problème car il est retourné en conséquence du SCO (système de coordonée de l'objet hachuré) et celui ci est déterminé par autocad suivant un algorithme dont je n'ai pas encore bien saisi le fonctionnement. Voilà pour les première infos (à prendre avec des pincettes) que je peux te donner. :casstet: PS: Si c'est l'angle utilisateur qui t'interesses, essayes avec le code 52 (* (cvunit (cdr (assoc 52 (entget (car (entsel))))) "radian" "grade") -1) [Edité le 24/7/2006 par bonuscad]
  3. bonuscad

    reduction de texte de cote

    Une occasion pour moi d'explorer les fonctions (vla) ;) ((lambda ( / obj_vla) (vl-load-com) (setq obj_vla (vlax-ename->vla-object (car (entsel)))) (vla-put-LinearScaleFactor obj_vla 1000) (vla-put-PrimaryUnitsPrecision obj_vla 0) (vla-put-SuppressLeadingZeros obj_vla -1) (prin1) )) Tu peux encore creuser la chose...
  4. J'ai débuté au temps ou l'aide était sur support papier. Celle-ci était fournie en Français en grande partie pour la partie développement. Pour la version R14, elle n'était plus fournie en support papier, je l'ai eu avec un supplément financier en Français de la part d'AutoDesk: Mon employeur avait pris le financement à sa charge :cool: . (C'est la dernière version que je possède sur papier) Peut être que cette démarche est toujours possible pour les version actuelle et qu'il est alors possible de l'avoir en Français en version papier. Mais ceci n'est pas très commercial de la part d'AutoDesk et nous mets pas sur un pied d'égalité avec les anglo-saxons. :mad:
  5. bonuscad

    reduction de texte de cote

    Je pense que le seul moyen est de créer un autre style de cote qui serait une copie de celui employé et auquel tu change juste (dans l'onglet "unités principales") le facteur d'échelle dans "l'échelle de mesure": ici un facteur de 100 serait approprié. Tu change aussi la précision des unités de mesure en la passant à zéro (pas de décimales) Une fois ce style créé tu change manuellement ou par une routine les cotes voulues. Si tu veux faire une routine, je pense qu'il faut tester l'interdistance entre les points d'attaches, et si celui-ci est inférieur à 1, changer le style de cote....
  6. Un voici un très simple. Pour définir le sens du rectangle, inverser l'entrée des points de la base. (defun c:rect_by_surf ( / p1 p2 surf p3 p4) (initget 9) (setq p1 (getpoint "\n1er coin: ")) (initget 41) (setq p2 (getpoint p1 "\n2ème coin adjacent: ")) (grdraw p1 p2 7) (initget 7) (setq surf (getreal "\nSurface souhaitée: ") p3 (polar p2 (+ (angle p1 p2) (/ pi 2)) (/ surf (distance p1 p2))) p4 (polar p3 (angle p2 p1) (distance p2 p1)) ) (redraw) (setvar "cmdecho" 0) (command "_.PLINE" "_none" p1 "_none" p2 "_none" p3 "_none" p4 "_CLOSE") (setvar "cmdecho" 1) (prin1) )
  7. Avec ce POST Il suffit de l'adapter un peu pour faire un truc de ce genre. Vite fait, pour débrouissailler, en reprenant ce code, (ce que tu aurais pu essayer de faire, il y a déjà beaucoup de solution sur CadXP, il suffit d'adapter ou d'approfondir) (defun des_vec (lst col / lst_sg) (setq lst_sg (list (cadr lst) (car lst))) (setq lst (cdr lst)) (while lst (if (cadr lst) (setq lst_sg (cons (cadr lst) (cons (car lst) lst_sg))) (setq lst_sg (cons (last lst_sg) (cons (car lst) lst_sg))) ) (setq lst (cdr lst)) ) (setq lst_sg (cons col lst_sg)) (grvecs lst_sg) ) (defun c:auto_array ( / ent obj ll ur pt_ins dx dy pt_tmp n key pt_key e_last) (while (null (setq ent (entsel "\nChoix de l'objet à copier: ")))) (setq Obj (vlax-ename->vla-object (car ent))) (vla-GetBoundingBox Obj 'll 'ur) (setq ll (safearray-value ll)) (setq ur (safearray-value ur)) (setq dx (- (car ur) (car ll)) dy (- (cadr ur) (cadr ll)) pt_ins ll pt_tmp pt_ins ) (initget 7) (setq n (getint "\nNombre de copies à mettre en place?: ")) (command "_.zoom" "_window" "_none" pt_ins "_none" (list (+ (car pt_ins) (* dx n)) (+ (cadr pt_ins) (* dy n)))) (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (setq pt_key (cadr key)) (redraw) (repeat n (des_vec (list (list (car pt_ins) (cadr pt_ins)) (list (+ (car pt_ins) dx) (cadr pt_ins)) (list (+ (car pt_ins) dx) (+ (cadr pt_ins) dy)) (list (car pt_ins) (+ (cadr pt_ins) dy)) ) 3 ) (if (> (car pt_key) (car pt_ins)) (setq pt_ins (list (+ (car pt_ins) dx) (cadr pt_ins))) (setq pt_ins (list (car pt_tmp) (+ (cadr pt_ins) dy))) ) ) (setq pt_ins pt_tmp) ) ) ) (redraw) (setvar "cmdecho" 0) (setq pt_ins ll) (command "_.copy" (car ent) "" "_none" pt_ins "_none" pt_ins) (setq e_last (entlast)) (repeat n (command "_.copy" (entlast) "" "_none" pt_ins) (if (> (car pt_key) (car pt_ins)) (setq pt_ins (list (+ (car pt_ins) dx) (cadr pt_ins))) (setq pt_ins (list (car pt_tmp) (+ (cadr pt_ins) dy))) ) (command "_none" pt_ins) ) (entdel (entlast)) (entdel e_last) (setvar "cmdecho" 1) (prin1) ) [Edité le 25/7/2006 par bonuscad]
  8. Voici un lisp sans aucune prétention, car imparfait, qui est dans cette optique évoqué par Tramber: Il est relativement facile de monter un lisp de ce type, mais car il y a un MAIS. Lors d'un décalage, si l'interdistance entre sommets est inférieure à la distance de décalage, certain sommets sont supprimés pour obtenir un nouveau sommet calculé. Ce cas de figure pose un problème, le sommet pourrait être identifié, mais le code s'en trouverait énormément alourdi. Voilà les limitations du code suivant (vous en serez averti). Une PMaille est proposée si ce décalage est exact. (defun pm_dec (lpo lpn / l n1 n2) (setq l (append lpo lpn) n1 1 n2 (length l)) (command "_pface") (repeat (* 2 (length lpo)) (command (car l)) (setq l (cdr l)) ) (command "") (repeat (1- (length lpo)) (command n1) (setq n1 (1+ n1)) (command n1) (command (1- n2)) (command n2) (setq n2 (1- n2)) (command "") ) (command "") ) (defun m_lpl (ent / l l1 x y z) (setq l_2d '() l_3d '()) (setq l (entget (car ent))) (if (eq (cdr (assoc 0 l)) "LWPOLYLINE") (setq l_2d (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) l))) (progn (setq l1 (entget (entnext (cdr (assoc -1 l))))) (while (/= "SEQEND" (cdr (assoc 0 l1))) (setq x (cadr (assoc 10 l1)) y (caddr (assoc 10 l1)) z (cadddr (assoc 10 l1)) ) (setq pt_scur (trans (list x y z) 0 1)) (setq x (car pt_scur) y (cadr pt_scur) z (caddr pt_scur)) (setq l_2d (append l_2d (list (list x y))) l_3d (append l_3d (list z)) l1 (entget (entnext (cdr (assoc -1 l1)))) ) ) ) ) ) (defun c:decal3d ( / ent_or typpol dec_z dec_xy c_curr l_3do l_3dn key_md counter l_3d l_2d ent_m ent_nw l_nw) (while (null (setq ent_or (entsel "\nChoix de la 3Dpoly à décaler: ")))) (setq typpol (entget (car ent_or))) (cond ((and (= (cdr (assoc 0 typpol)) "POLYLINE") (eq (boole 1 (cdr (assoc 70 typpol)) 12) 8)) (initget 1) (setq dec_z (getdist "\nDécalage en Z: ")) (if (zerop dec_z) (progn (initget "Uniforme Variable") (setq key_md (getkword "\nDelta Z [uniforme/Variable] < U >: ")) ) ) (initget 71) (setq dec_xy (getdist "\nDécalage dans le plan XY: ")) (setvar "cmdecho" 0) (command "_.undo" "_begin") (setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384))) (setq c_curr (getvar "clayer")) (setvar "clayer" (cdr (assoc 8 typpol))) (m_lpl ent_or) (setq l_3do (mapcar 'append l_2d (mapcar 'list l_3d)) counter 0) (setq l_3dn (reverse (mapcar '(lambda (x) (if (eq key_md "Variable") (progn (setq counter (1+ counter)) (initget 1) (+ x (getdist (strcat "\nDelta Z au " (itoa counter) "(er)(eme) point: "))) ) (+ x dec_z) ) ) l_3d ) ) ) (command "_.pline") (repeat (length l_2d) (command (car l_2d)) (setq l_2d (cdr l_2d)) ) (command "") (setq ent_m (entlast)) (setvar "cmdecho" 1) (command "_.offset" dec_xy ent_m pause "") (setvar "cmdecho" 0) (setq ent_nw (entlast)) (m_lpl (list ent_nw '(0.0 0.0 0.0))) (setq l_nw (mapcar 'append l_2d (mapcar 'list l_3dn))) (cond ((zerop (- (length l_2d) (length l_3do))) (initget "Oui Non") (if (eq (getkword "\nCréer une maille dans le calque courant? [Oui/Non] < Non >: ") "Oui") (progn (setvar "clayer" c_curr) (pm_dec l_3do (reverse l_nw)) (setvar "clayer" (cdr (assoc 8 typpol))) ) ) ) (T (alert "\nATTENTION présence de segments courts (< au décalage); résultat en Z erroné!")) ) (entdel ent_m) (entdel ent_nw) (command "_.3dpoly") (repeat (length l_nw) (command (car l_nw)) (setq l_nw (cdr l_nw)) ) (command "") (setvar "clayer" c_curr) (command "_.undo" "_end") (setvar "cmdecho" 1) ) (T (prompt "\nEntité choisie n'est pas une polyligne 3D, ou celle ci est Splinée.")) ) (prin1) ) (prompt "\nDECAL3D chargé! - Décalage d'une 3DPOLY en 3D dans le CALQUE et le SCU courrant")(prin1) Je pense qu'il peut satisfaire quelque besoins simples, est bien sur qu'il pourrait être encore mieux! [Edité le 22/7/2006 par bonuscad]
  9. bonuscad

    creation d\'attribut

    ((lambda (... / ... ) ... )) est à remplacer par (defun c:trucmuch (... / .. ) ... ) Un couple de paranthèse en moins ;)
  10. bonuscad

    creation d\'attribut

    Fraid, ceci ferait-il l'affaire ((lambda ( / sel n ent) (if (not (tblsearch "LAYER" "Altitudes")) (entmake '((0 . "LAYER") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "Altitudes") (70 . 0) (62 . 7) (370 . -3) (6 . "Continuous") ) ) ) (if (not (tblsearch "STYLE" "TCPOINT")) (entmake '((0 . "STYLE") (5 . "40") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "TCPOINT") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 0.75) (3 . "simplex.shx") (4 . "") ) ) ) (if (not (tblsearch "BLOCK" "TCPOINT")) (progn (entmake '((0 . "BLOCK") (8 . "0") (2 . "TCPOINT") (70 . 2) (4 . "") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (10 0.0 0.0 0.0)) ) (entmake '( (0 . "POINT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPoint") (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) ) ) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Altitudes") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbText") (10 0.25 0.0 0.0) (40 . 0.75) (1 . "0.00") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "TCPOINT") (71 . 0) (72 . 0) (11 0.25 0.75 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (3 . "Altitude ?:") (2 . "Z_POINT") (70 . 0) (73 . 0) (74 . 3) ) ) (entmake '((0 . "ENDBLK") (8 . "0") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2))) ) ) (setq sel (ssget "_X" (list (cons 0 "POINT") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ))) (cond (sel (setvar "attdia" 0) (setvar "cmdecho" 0) (setq n 0) (repeat (sslength sel) (setq ent (ssname sel n)) (progn (setvar "CLAYER" (cdr (assoc 8 (entget ent)))) (command "_.-insert" "TCPOINT" "_none" (cdr (assoc 10 (entget ent))) "1" "1" "0" (rtos (cadddr (assoc 10 (entget ent))) 2 3)) (setq n (+ 1 n)) ) ) (command "_.erase" sel "") (setvar "attdia" 1) (setvar "cmdecho" 1) ) ) (prin1) ))
  11. bonuscad

    Copie multiple

    Pour en revenir à la question originale de Barbichette, il y avait eu un souhait similaire ICI
  12. Peut être une solution en utilisant 2 type de lignes dont le 1er s'appuierais sur le modele "CACHE2" de AcadIso.lin et en supposant l'echelle à 1 par défaut. Tu crées un fichier "Ligne EDF.lin" dans un dossier de recherche et tu places ce qui suit dedans: Après ce que tu peux faire, est de tracer un objet quelconque; ligne, arc, polylignes ..... et d'utiliser la routine suivante: (defun c:line_EDF ( / js e_edf e_typ dxf_ent dxf_last) (princ "\nSélectionner l'objet à tranformer en ligne EDF: ") (while (not (setq js (ssget "_+.:E:S" (list (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) (cons -4 "< NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") ) ) ) ) ) (redraw (setq e_edf (ssname js 0)) 3) (setq e_typ (cdr (assoc 0 (setq dxf_ent (entget e_edf))))) (if (null (tblsearch "LTYPE" "CACHE2")) (command "_.-linetype" "_load" "cache2" "AcadIso.lin" "") ) (if (null (tblsearch "LTYPE" "BT")) (command "_.-linetype" "_load" "bt,mt,ht" "Ligne EDF.lin" "") ) (if (or (eq e_typ "LWPOLYLINE") (eq e_typ "POLYLINE")) (setq dxf_ent (entmod (subst (cons 70 (+ (rem (cdr (assoc 70 dxf_ent)) 128) 128)) (assoc 70 dxf_ent) dxf_ent))) ) (if (null (assoc 6 dxf_ent)) (setq dxf_ent (append dxf_ent (list (cons 6 "CACHE2")))) (setq dxf_ent (subst (cons 6 "CACHE2") (assoc 6 dxf_ent) dxf_ent)) ) (entmod dxf_ent) (if (/= e_typ "POLYLINE") (entmake (cdr dxf_ent)) (command "_.copy" js "" "_none" "*0,0,0" "_none" "*0,0,0") ) (setq dxf_last (entget (entlast))) (initget 1 "BT MT HT") (entmod (subst (cons 6 (getkword "\nLigne EDF [bT/MT/HT]?: ")) (assoc 6 dxf_last) dxf_last)) (prin1) ) NB: Enlever l'espace dans "< NOT" On pourrait envisager de "grouper" de façon anonyme les 2 objets ainsi modifiés dans la routine. [Edité le 20/7/2006 par bonuscad]
  13. Installe un nouveau traceur en choisissant le modéle "Format des fichiers trames" et choisis le format qui correspond à ton besoin (JPG, TIFF, BMP ....) Tu n'auras plus qu'à faire une sortie traditionnelle sur fichier pour obtenir ton image.
  14. bonuscad

    Copie multiple

    BrunoMu, Je voudrais te faire part d'une option de la commande réseau (donc aucune trace n'apparait dans l'aide) mais qui pourrait te simplifié la vie. Imaginons par exemple ta marche (de forme triangulaire pour un colimaçon), mesure d'abord l'angle d'ouverture de ta marche. Puis avec "_ARRAY" choisi ta marche et valide. Au message "Entrez le type de réseau [Rectangulaire/Polaire] :" tape "C" ou "_C" pour Copie (étrangement l'option n'a qu'une seule lettre?!?! et ne figure nulle part.) :exclam: Donne le centre de ton réseau. Au message "Angle entre les copies (+=trigo, -=horaire):" donne l'angle formé par ta marche que tu as mesuré précédemment. " Nombre de copies ou -(angle en degrés à décrire):" puis ton nombre de copies. Et répondre "Oui" "_Yes" pour la rotation des objets. Volilà tes marches mis en place circulairement. :)
  15. bonuscad

    FILTER

    Pour voir si cette manip est possible, (je n'ai pas de LT à disposition) il serait bien que tu fasse un filtre un peu compliqué (employant des AND ou NOT), que tu enregistre ce type de fitre et que tu donne ensuite le contenu du fichier.nfl. Cela me permettrait de voir la syntaxe utilisée sur une LT, et, si elle est similaire à une version pleine. LT ne permet pas le lisp, celui-ci est bridé, mais je pense cependant que des accés réservés soient possibles. C'est ce que fait LT-EXTENDER. Donc je serais à moitié surpris de voir que la commande FILTER dans une LT se réserve un accés pour l'appel à des fonctions lisp interne. Mais bon tout ça n'est que des suppositions. Un extrait du fichier NFL pourra peut être m'éclairer un peu plus à ce sujet et voir ainsi les possibilités qui pourraient s'ouvrir pour une LT. Si cette magouille est possible, cela peut ouvrir la porte à des manipulations de sélections interressantes sous une version "Ligth" en bidouillant ce fichier filter.nfl A suivre ..... (70 . 113) : 70 est le code DXF des drapeaux de polylignes. Il contient un bit de controle, qui suivant sa valeur, renseigne sur la nature de la polyligne. Ici par exemple 113 représente soit (dans le sens OU inclusif) une Pmaille, une Maille3D (fermée ou non dans direction N ou M) et toute autres polylignes fermées: 64 + 32 + 16 + 1 = 113 (voir l'aide DXF) Celles ci sont donc écartées par le NOT du filtre. Il ne restera donc que des polyligne2D ou 3D pouvant être lissées ou splinées ET étant ouvertes.
  16. bonuscad

    FILTER

    Ta demande sous LT m'a fait essayer quelque chose. Si ça ne sert pas à toi sa pourra peut être servir à d'autre. Je m'explique, (je suis sous une version 2002 pleine). La commande selectrap (_qselect) permet de filtrer les polylignes fermées ou ouvertes. 'Filter lui ne le permet pas, bien qu'on puisse utiliser certain filtre logique, mais pas forcément là où on le désire. Par contre filter permet (en tout cas sous une version pleine) d'enregister le filtre nommé. Ceci est écrit alors dans un fichier "FILTER.NFL" Malgré la recommendation en début de fichier J'ai effectué des modifications en y plaçant ceci Filter.nfl -- ne modifiez pas ce fichier. :ai_lisp|filtre polylignes ouvertes (0 . "*POLYLINE") (-4 . "[color=red]< [/color]NOT") (-4 . "&") (70 . 113) (-4 . "NOT>") :ai_str|filtre polylignes ouvertes Objet = Polyligne ** Début NOT ** Début & ID 70 = 113 ** Fin NOT ENLEVER l'ESPACE APRES < J'ai quitté Autocad, puis relancé celui-ci et "Miracle le filtre fonctionne" et est acessible dans les dessins. Est ce que LT permet aussi ceci ??? Attention c'est de la bidouille, mais si ça fonctionne ça peut être utile. N.B.: Bien sûr si vous tentez l'expérience, gardez bien précieusement votre fichier original "FILTER.NFL Surtout si celui-ci est déjà personnalisé. Au pire on l'efface complétement en cas de problème, il sera recréé par la commande FILTER. [Edité le 18/7/2006 par bonuscad]
  17. Je pense qu'il faut fixer la variable "EXPERT" au minimun à 2 ou plus. Regarde l'aide pour les différentes valeurs possibles [Edité le 18/7/2006 par bonuscad]
  18. J'ai vraiment fait une erreur de débutant, merci pour la remarque. Là je ne saisi pas trop car la fonction dégéle aussi les entités dans les xrefs, mais il faut passer systématiquement par Option et Imbriqué. Il faudrait peut être que l'option soit conservée d'une utilisation à l'autre ou alors ma démarche n'est pas claire...
  19. Merci pour tes encouragements, 1) Ben..., pour pouvoir pointer les entités, je suis bien obligé de dégeler tous les calques gelés. Mais ceci est temporaire pour l'action de la commande. Les calques sont remis à l'état initial, sauf bien sûr ceux qui ont été selectionnés. 2) Je supose que tu voulais dire "Dégeler" une entité d'un Xref. Si c'est possible, mais il faut passer par les options d'abords et choisir "Imbriqué". Nota; cette option N'EST PAS conservé lors d'une utilisation suivante, toujours l'option simple utilisé par défaut. 3) Bien noté chef ;) par encore tous les réflexes ! 4) idem
  20. Pour m'aguerrir avec les fonctions Vlax, je me suis lancer dans une routine pour "Allumer/Dégeler" des calques par pointage façon ExpressTools. Cela peut être pratique quand les noms de calques ne sont pas "parlants", qu'il y a une liste interminable de calques et qu'on voudrait réactiver un/des calques par visualisations de ce qu'il y a dans les calques éteints ou gelés. Il suffit alors de pointer un objet pour réactiver le calque. Voici le code (defun c:layer_on-thaw ( / tbl_lay lst_lay lst_frz lst_thw lst_off lst_on key msg mod_sel ent name lst_sel) (vl-load-com) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (defun switch_lay (l_lay action table_lay statut / why) (setq why (if statut ':vlax-true ':vlax-false)) (foreach n l_lay (cond ((eq action "Freeze") (vla-put-Freeze (vla-item table_lay n) why) ) ((eq action "Off") (vla-put-Layeron (vla-item table_lay n) why) ) ) ) ) (setq tbl_lay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-for x tbl_lay (setq lst_lay (cons (vla-get-name x) lst_lay)) ) (setq lst_lay (reverse lst_lay)) (foreach n lst_lay (if (eq (vla-get-Freeze (vla-item tbl_lay n)) ':vlax-true) (setq lst_frz (cons n lst_frz)) (setq lst_thw (cons n lst_thw)) ) (if (eq (vla-get-Layeron (vla-item tbl_lay n)) ':vlax-false) (setq lst_off (cons n lst_off)) (setq lst_on (cons n lst_on)) ) ) (switch_lay lst_frz "Freeze" tbl_lay nil) (switch_lay lst_on "Off" tbl_lay nil) (initget "Allumer Libérer 2actions _On Thaw 2actions") (setq key (getkword "\nVoulez vous [Allumer/Libérer/2actions] les calques? < 2actions > : ")) (cond ((eq key "On") (switch_lay lst_off "Off" tbl_lay T) (setq msg "Allumer") ) ((eq key "Thaw") (switch_lay lst_frz "Off" tbl_lay T) (setq msg "Libérer") ) (T (switch_lay lst_off "Off" tbl_lay T) (switch_lay lst_frz "Off" tbl_lay T) (setq msg "Allumer & Libérer") ) ) (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acAllViewports) (setq mod_sel '(entsel (strcat "\nSélectionnez une entité sur le calque à " msg " [Option/Annuler]: "))) (initget "Option Annuler U _Set Undo U") (while (setq ent (eval mod_sel)) (cond ((eq ent "Set") (initget "Entité Imbriqué _Entity Nested") (if (eq (getkword "\nChoix par du calque par [Entité/Imbriqué]? < Entité > : ") "Nested") (setq mod_sel '(nentsel (strcat "\nSélectionnez une entité imbriqué sur le calque à " msg " [Option/Annuler]: "))) (setq mod_sel '(entsel (strcat "\nSélectionnez une entité sur le calque à " msg " [Option/Annuler]: "))) ) ) ((or (eq ent "Undo") (eq ent "U")) (if lst_sel (setq lst_sel (cdr lst_sel)) (princ "\nRien à annuler.") ) ) (T (setq lst_sel (cons (setq name (cdr (assoc 8 (entget (car ent))))) lst_sel)) (princ (strcat "\nLe calque " name " sera réactivé.")) ) ) (initget "Option Annuler U _Set Undo U") ) (cond ((eq key "On") (foreach n lst_sel (setq lst_off (vl-remove n lst_off)) ) ) ((eq key "Thaw") (foreach n lst_sel (setq lst_frz (vl-remove n lst_frz)) ) ) (T (foreach n lst_sel (setq lst_off (vl-remove n lst_off)) (setq lst_frz (vl-remove n lst_frz)) ) ) ) (switch_lay lst_on "Off" tbl_lay T) (switch_lay lst_frz "Freeze" tbl_lay T) (switch_lay lst_off "Off" tbl_lay nil) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (prin1) ) Appels à (command) modifiés avec les remarques de Patrick_35 et variable prompt changé en msg [Edité le 18/7/2006 par bonuscad]
  21. bonuscad

    Grouper les calques

    Tu pourrais essayer Ceci . Cette routine (famillle de calques) permet de créer des groupes nominatif de calques que tu peux manipuler d'un seul ensemble par la suite. Un avantage est que tes groupe peuvent être constituer de n'importe quel calque, ils n'ont pas forcément des caractéristiques communes. Je l'ai déjà essayé, mais jamais utilisé à long terme pour dire que c'est une solution interressante. La définition des groupes est peut être fastidieuse, a voir....
  22. Dans notre société ou l'on doit penser qu'a soi même, doit donner un sentiment de "nombrilisme" du monde. On voit le soleil se lever à l'Est est se coucher à l'Ouest, la déduction en est vite faite: Le soleil tourne autour de la terre car je suis le centre du monde. Pitoyable !!! :mad: Remarquez quand je vois le foin fait autour du Mondial..., "Du Pain et des Jeux" pour la populace, difficile ne pas régresser..... à l'époque Romaine. A quand la chute de l'empire Occidental ? :o
  23. Ceci est un atout majeur du lisp! Pour te rassurrer, j'ai mis longtemps avant de les utiliser à bon escient (je fais encore des "bourdes") Autant il peut être relativement simple de comprendre (mapcar) (apply) (foreach) (lambda) individuellement et les fonctions récursives en théorie, qu'il est beaucoup plus difficile de les mettre en oeuvre en pratique . Leurs imbrications donne un aspect "magique" aux fonctions, mais il n'est pas toujours facile de percevoir cet imbrication que l'on peux faire quand on doit construire sa fonction. Seule la pratique et l'expérience d'autrui t'ammène peu à peu à ce genre de construction de code. Moi je suis encore émerveillé par les fonctions récursive de Yevgeny Yelpanov que j'ai du mal à saisir. Voir une de ces leçon (en russe traduite en anglais par automatisme)
  24. Une manière! (defun toto (lst el / count) (setq count 0) (foreach n lst (if (apply 'eq (list n el)) (setq count (1+ count)) ) ) (print count) (prin1) ) (toto (list "vis" "vis" "ecrou" "vis" "vis" "ecrou") "vis") -> 4
  25. bonuscad

    selection de hachures

    Si tu fais ce genre de sélection vraiment souvent, tu peux te faire un bouton de sélection contenant cette macro: (if (zerop (getvar "CMDACTIVE")) (sssetfirst nil (ssget '((0 . "HATCH") (2 . "SOLID")))) (ssget '((0 . "HATCH") (2 . "SOLID"))) ) De cette manière tu n'attraperas que les hachures solide quelque soit ta sélection effectuée!
×
×
  • 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é