Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    208

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

  1. je ne suis pas sûr d'avoir bien compris la question, mais les attributs en .dcl définissent la boite de dialogue initiale, c'est par le LISP qu'on peut modifier leurs valeurs.
  2. Salut, Dans ton LISP qui commande la boite de dialogue, tu ajoute une conditionnelle : (if ([i]condition[/i]) (mode_tile "cle_bouton" 1) ; le bouton est désactivé (mode_tile "cle_bouton" 0) ; le bouton est activé ) Le tout devant être inclus dans une boucle pour remettre à jour l'activation du bouton après les interventions de l'utilisateur.
  3. Et pourtant, si je met la nouvelle commande avant tous les sous-menus : http://img396.imageshack.us/img396/9817/mc20pn.png si je la met après les sous-menus : http://img396.imageshack.us/img396/6834/mc13hb.png :casstet:
  4. Bonsoir, Il est possible d'ajouter la commande style_cot définie plus haut dans le menu contextuel des cotes (***POP504 dans AutoCAD.mns), mais la position à laquelle on place la commande dans ce menu peut perturber son fonctionnement, voir là. Ensuite, un clic droit après avoir sélectionné une cote ouvre le menu contextuel dans lequel il suffit de cliquer sur "Rendre le style de la cote courant".
  5. N'exagérons pas ! Tout çà est trés bien documenté dans l'aide d'AutoCAD : Guide de personnalisation -> Personnalisation de base -> Définition de commandes personnalisées -> Création d'alias de commande
  6. C'est en voulant ajouter au menu contextuel des cotations (clic droit après sélection d'une cote) la commande définie par ce LISP que j'ai découvert une "curiosité". Si ajoute la commande avant les sous-menus "Précision" et "Style de cote", les styles de cote apparaissent dans le sous-menu "Précision" mais fonctionnent comme le degrés de précision dont ils ont pris la place, et le sous-menu "Style de cote" n'affiche plus rien :cool: En fait si on veut ajouter une commande dans ce menu, il faut la placer à la fin : ***POP504 **OBJECTS_DIMENSION [Menu contextuel des cotes] ID_DimText [->Position du te&xte de cote] ID_DimAbove [&Au-dessus de la ligne de cote]^C^C_ai_dim_textabove ID_DimTxtCen [&Centré]^C^C_ai_dim_textcenter ID_DimHome [&Début]^C^C_ai_dim_texthome ID_DimTxtMove2 [&Déplacer texte seul]^C^C_aidimtextmove _2 ID_DimTxtMove1 [Déplacer a&vec repère]^C^C_aidimtextmove _1 ID_DimTxtMove0 [ID_DimPrec [->Préci&sion] ID_DimPrec0 [0]^C^C_aidimprec _0 ID_DimPrec1 [0.0]^C^C_aidimprec _1 ID_DimPrec2 [0.00]^C^C_aidimprec _2 ID_DimPrec3 [0.000]^C^C_aidimprec _3 ID_DimPrec4 [0.0000]^C^C_aidimprec _4 ID_DimPrec5 [0.00000]^C^C_aidimprec _5 ID_DimPrec6 [ID_DimSty1 [->St&yle de cote] ID_DimSty2 [E&nregistrer comme nouveau style...]^C^C_aidimstyle _S [--] ID_DimSty3 [style de cote MRU1]^C^C_aidimstyle _1 ID_DimSty4 [style de cote MRU2]^C^C_aidimstyle _2 ID_DimSty5 [style de cote MRU3]^C^C_aidimstyle _3 ID_DimSty6 [style de cote MRU4]^C^C_aidimstyle _4 ID_DimSty7 [style de cote MRU5]^C^C_aidimstyle _5 ID_DimSty8 [style de cote MRU6]^C^C_aidimstyle _6 ID_DimSty9 [[surligneur]ID_Style_Cot [Rendre le style de la cote courant]^C^Cstyle_cot [/surligneur] J'ai vu çà sur une version 2005, je ne sais pas pour d'autres versions, en particulier 2006 qui n'a plus de fichier *.MNS
  7. Salut, Pour créer des alias personnalisés, il faut, comme tu semble l'avoir fait, les ajouter à la fin du fichier AutoCAD.pgp en respectant la syntaxe : CER, *CERCLE Puis, pour activer le fichier AutoCAD.pgp modifié, il faut taper sur la ligne de commande : soit REINIT (commande) puis cocher "fichier pgp" dans la boite de dialogue soit RE-INIT (variable système) puis entrer 16. Attention tout de même, utiliser des alias déjà définis écrase ces derniers. À plus... [Edité le 18/9/2005 par (gile)]
  8. Merci Patrick_35 pour les explications et le gentil compliment ;) Je commence à peine à me dépatouiller avec le vlisp, alors les réacteurs, je pensais garder çà pour plus tard. À plus ...
  9. Houlà, jai du m'égarer dans la cour des grands :exclam: Désolé, je n'avais pas dû comprendre la question. Je ne comprends pas bien la réponse non plus :( Je ne peux même pas essayer, je n'ai qu'Intellidesk 2005 sous la main et il comprend encore moins bien que moi le VisualLISP, c'est pas peu dire ! Mais quand même, ils viennent d'où les deux arguments Rea et Pt ? J'ai raté un épisode ? :casstet:
  10. Salut, J'ai peur que tu n'ai perdu un des rares plus des versions LT sur les versions pleines! Tu peux aller voir là. [Edité le 13/9/2005 par (gile)]
  11. (gile)

    Presentations

    Salut, Je ne sais pas si cette commande existe dans la 2002LT. Mais dans version la pleine, dans la barre d'outils "Fenêtres" il y a un bouton "Convertir l'objet en fenêtre" qui permet de transformer un objet fermé (cercle ellipse polyligne) dessiné dans la présentation en fenêtre.
  12. Re, Si ta version de M2S ne marchait pas c'est uniquement un problème de mauvaise traduction : Remplacement de "POLYLINE" (type d'objet) par "_pline" (commande) dans le test sur l'objet au début : et d'utilisation de l'anglais dans des appels de commandes dans la sous routine LOFT : "pline" "c" "extrude" ainsi que l'option "end" de la commande "_undo" à la fin. Il eut fallu écrire "_pline" "_c" "_extrude" "_end" et aussi "_3points" "_area" même si les 2 dernières sont les mêmes en anglais et en français. À ce sujet
  13. Salut, Là tout de suite je n'ai pas le temps de le décortiquer, mais voilà une version que j'ai très légèrement modifiée et qui fonctionne. si tu veux faire une comparison. ;; M2S (Mesh-to-Solid) ;; ;; Crée un solide ACIS à partir d'une surface maillée 3D ouverte. ;; Modifié le 10/04/05 - Gilles Chanteau - ;; Ajout des fonctions getval / std_err / save&set_var / restore_var ;; Traduction des invites ;; ;; Take 2 - Updated 7/7/1998 ;; - Works with REVSURF'd meshes that touch or cross axis of revolution. ;; - Works even if solid being constructed is not fully visible on screen. ;; - Works with all open meshes created with REVSURF, RULESURF, ;; EDGESURF, TABSURF, AI_MESH, and 3DMESH. Most of the stock 3D ;; surfaces will work if you use DDMODIFY to open them in the M ;; and N directions. ;; - Does not work with polyface entities. ;; ;; (c) Copyright 1998 Bill Gilliss. ;; All rights reserved... such as they are. ;; ;; bill.gilliss@aya.yale.edu gilliss@iglou.com ;; ;; I wrote this to create sculptable ACIS terrain models ;; for architectural site renderings. It could also be used ;; to create thin shells from meshes, by subtracting a moved ;; copy of the solid from the original solid. Let me know of ;; other uses you find for it, or problems you encounter. ;; ;; The solid is created by projecting each mesh facet "down" ;; the current z-axis to a plane a user-specified distance below ;; the lowest vertex. To assure that all parts of the mesh are ;; generated as solids, this distance can not be zero, but the ;; solid can be SLICEd later if need be. ;; ;; The solid will match the displayed mesh: if the mesh has ;; been smoothed and SPLFRAME is set to 0, the solid will be ;; smoothed. Otherwise, it will not be. The mesh itself is not ;; changed at all. ;;; Redéfinition de *error* (defun STD_ERR (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (command) (command "_undo" "_end") (RESTORE_VAR) (setq *error* m:err m:err nil ) (princ) ) ;;; SAVE&SET_VAR & RESTORE_VAR ;;; ;;; SAVE&SET_VAR Enregistre la valeur initiale de la variable système dans une liste associative ;;; et lui attribue sa nouvelle valeur ;;; ex: (SAVE&SET_VAR "osmode" 0) -> !varlist (("osmode" . 43)) (getvar "osmode") 0 (defun SAVE&SET_VAR (var val) (cond ((not (getvar var)) (princ (strcat "\nErreur: variable AutoCAD rejetée: " var)) (princ) ) ((/= (getvar var) val) (if (not (member (assoc var lst_var) lst_var)) (setq lst_var (cons (cons var (getvar var)) lst_var)) ) (setvar var val) ) ) ) ;;; RESTORE_VAR Restaure leurs valeurs initiales aux variables système de "varlist" (defun RESTORE_VAR () (foreach pair varlist (if (/= (getvar (car pair)) (cdr pair)) (setvar (car pair) (cdr pair)) ) ) (setq varlist nil) ) ;;; GETVAL (Reini Urban) Retourne la première valeur du groupe d'une entité. ;;; Accepte tous les genres de représentations de l'entité ;;; (ename, les listes entget, les listes entsel) ;;; NOTE: Ne peut obtenir que le premier groupe 10 dans LWPOLYLINE ! (defun getval (grp ele) ; "valeur dxf" de toute entité. (cond ((= (type ele) 'ENAME) ; ENAME (cdr (assoc grp (entget ele))) ) ((not ele) nil) ; pas d'élément ((not (listp ele)) nil) ; élément invalide ((= (type (car ele)) 'ENAME) ; liste entsel (cdr (assoc grp (entget (car ele)))) ) (T (cdr (assoc grp ele))) ; liste entget ) ) ;;; M2S Fonction principale (defun c:m2s (/ ent M N MN SN SM ST smooth vtx d1 low vtxcnt vtxmax bot bottom p1 p2 p3 p4 c1 c2 c3 c4 b1 b2 b3 b4 soldepth ssall ssrow ) (setq m:err *error* *error* STD_ERR ) (command "_undo" "_begin") (SAVE&SET_VAR "cmdecho" 0) (SAVE&SET_VAR "osmode" 0) (SAVE&SET_VAR "blipmode" 0) (princ "M2S") ;;select the mesh (setq ent (car (entsel "\nSélectionnez une maille polygonale à solidifier: " ) ) ) (if (not (= (getval 0 ent) "POLYLINE")) (progn (alert "Ce n'est pas une maille polygonale.") (exit) (princ) ) ) (if (not (or (= (getval 70 ent) 16) ;open 3d polygon mesh (= (getval 70 ent) 20) ;open mesh w/ spline-fit vertices ) ) (progn (alert "Ce n'est pas une maille polygonale \"ouverte\".") (exit) (princ) ) ) ;; decide whether to use smoothed or unsmoothed vertices (setq M (getval 71 ent) ;M vertices N (getval 72 ent) ;N vertices SM (getval 73 ent) ;smoothed M vertices SN (getval 74 ent) ;smoothed N vertices ST (getval 75 ent) ;surface type ) (if (or (= (getvar "splframe") 1) ;use MxN vertices when splframe = 1 (= ST 0) ;or mesh has not been smoothed ) (setq smooth 0 MN (* M N) ) (setq smooth 1 ;use SMxSN vertices when mesh is smoothed MN (* SM SN) ;and SPLFRAME = 0 M SM N SN ) ) ;; determine lowest vertex (grtext -2 "Contrôle de la maille...") (setq vtx ent vtx (entnext vtx) d1 (entget vtx) bottom (caddr (trans (cdr (assoc 10 d1)) 0 1)) ) (repeat (1- MN) ;compare with each vertex's z coord (setq vtx (entnext vtx) d1 (entget vtx) low (caddr (trans (cdr (assoc 10 d1)) 0 1)) bottom (min bottom low) ) ) ;; get desired thickness of solid (setq soldepth 0) (while (zerop soldepth) (setq soldepth (getdist "\nEntrez l'épaisseur du solide sous le point le plus bas : " ) ) (if (not soldepth) (setq soldepth 1.0) ) (if (zerop soldepth) (princ "\nL'épaisseur peut être faible, mais pas égale à zéro.\n(Couper ensuite, si nécessaire.)" ) ) ) (setq bot (- bottom (abs soldepth))) (setq p1 ent) (if (= smooth 1) (setq p1 (entnext p1)) ) ;skip 1st vtx of smoothed mesh - not true vtx (setq ssrow (ssadd) ;initialize set of extruded segments to be unioned as a row ssall (ssadd) ) ;initialize set of rows to be unioned into the whole (grtext -2 "Création de la rangée...") (setq vtxmax (- MN N) vtxcnt 1 ) ;;create row of solid segments (while ( (if (= 0 (rem vtxcnt N)) ;at end of each row... (progn (setq rowmsg (strcat "Union de la rangée... " (itoa (/ vtxcnt N)) " de " (itoa (1- M)) "... " ) ) (grtext -2 rowmsg) (command "_union" ssrow "") (setq row (entlast)) (ssadd row ssall) (setq ssrow (ssadd) p1 (entnext p1) ;skip to the next vertex vtxcnt (1+ vtxcnt) ) ) ) (grtext -2 "Création de la rangée...") (setq p1 (entnext p1) ;first vertex of mesh square p2 (entnext p1) ;second vertex p3 p2 ) (repeat (1- n) (setq p3 (entnext p3))) ;walk along to 3rd (p1 + N) vertex (setq p4 (entnext p3) ;4th vertex of mesh square c1 (trans (cdr (assoc 10 (entget p1))) 0 1) ;top coordinates c2 (trans (cdr (assoc 10 (entget p2))) 0 1) c3 (trans (cdr (assoc 10 (entget p3))) 0 1) c4 (trans (cdr (assoc 10 (entget p4))) 0 1) b1 (list (car c1) (cadr c1) bot) ;bottom coordinates b2 (list (car c2) (cadr c2) bot) b3 (list (car c3) (cadr c3) bot) b4 (list (car c4) (cadr c4) bot) ) (LOFT c1 c2 c3 b1 b2 b3) (LOFT c2 c3 c4 b2 b3 b4) (setq vtxcnt (1+ vtxcnt)) ) (grtext -2 "Union de la denière rangée...") (command "_union" ssrow "") (setq row (entlast)) (ssadd row ssall) (if (> M 2) ;bypass final union for N x 1 meshes (i.e., RULESURF) (progn (grtext -2 "Union de toutes les rangées...") (command "_union" ssall "") ) ) ;;cleanup (command "_undo" "_end") (RESTORE_VAR) (setq ssall nil ssrow nil *error* m:err m:err nil ) (princ) ) ;;============== SUBROUTINE ==================== (defun LOFT (r1 r2 r3 s1 s2 s3 / e1 extr highest) (command "_area" s1 s2 s3 "") (if (not (equal (getvar "area") 0.0 0.00000001)) (progn (command "_pline" s1 s2 s3 "c") (setq highest (max (caddr r1) (caddr r2) (caddr r3))) (setq extr (- highest bot)) (command "_extrude" (entlast) "" extr 0.0) (command "_slice" (entlast) "" "_3points" r1 r2 r3 s1) (setq e1 (entlast)) (ssadd e1 ssrow) ) ) ) [Edité le 13/9/2005 par (gile)] [Edité le 26/12/2005 par (gile)]
  14. Salut, Si c'est bien dans le menu contextuel des cotations que tu veux glisser une commande, je te propose ce petit LISP. Il doit pouvoir marcher dans un bouton aussi, il accepte la sélection avant ou après le lancement de la commande comme "Rendre le calque courant". ;;; Rend le style de cote de l'objet sélectionné courant (defun c:style_cot (/ echo set1 ent) (setq echo (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (= 1 (getvar "pickfirst")) (setq set1 (ssget "_i")) (= 1 (sslength set1)) ) (progn (setq ent (ssname set1 0)) (sssetfirst nil nil) ) (progn (sssetfirst nil nil) (while (not ent) (setq ent (car (entsel "\nSélectionnez la cote dont vous voulez rendre le style courant: " ) ) ) ) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (command "_-dimstyle" "_r" (cdr (assoc 3 (entget ent)))) (progn (princ "\nL'objet sélectionné n'est pas une cote.") (exit) ) ) (setvar "cmdecho" echo) (princ) ) En espérant avoir répondu à tes attentes. Code édité (rajout d'un controle de sélection d'objet) [Edité le 13/9/2005 par (gile)]
  15. (gile)

    POSTE DAO

    Salut, Tu peux déjà regarder ici et puis là et aussi là. A plus.
  16. N'hésite pas, demande.
  17. Et ensuite, Contour, Extruder, Déplacer, Rotation3D, Aligner, Vuedyn .... Mais çà, vous connaissez par coeur ! http://img361.imageshack.us/img361/2934/balancement50pb.jpg
  18. Re, Si les objets ont étés créés dans le LISP, tu dois pouvoir situer un point sur chacun à l'aide des listes (entget). Ou encore en VisualLISP : (trans (vlax-curve-getStartPoint (vlax-ename->vla-object EntAvant)) 0 1) retourne le point de départ de la plupart des objets.
  19. Salut, Si les autres objets sont déjà déterminés il faut donner un point sur chaque objet. Si ces objets ont été choisis précédemment par un (entsel), le (cadr (entsel)) de chaque objet est un point valable.
  20. (gile)

    Plus lisible

    Oc, (command "LINHA")
  21. (gile)

    ECHLTP et TILEMODE

    Non, tu n'est pas le seul :cool: Je m'étais même fait une petite boite de dialogue pour éviter d'ouvrir à chaque fois celle de gestion des types de ligne. Mais ton code est plus performant à condition de toujours travailler avec des objets de même ordre de grandeur dans l'espace objet.
  22. (gile)

    Plus lisible

    Comme, dans ce cas, je suis le "donneur de conseil", je vais répondre en essayant de ne pas trop dire d'âneries. Il ne s'agissait pas d'opposer le français à l'américain ou à l'anglais, mais à l'internationnal et ce, dans du code AutoLISP. Code dont on ne peut dire qu'il soit le fleuron de la langue française ;) La traduction des noms de commandes ne me semble pas être la principale difficulté de lisibilité du LISP. C'est pour avoir récupéré, sur le web, des routines LISP dont les noms de commandes (ou des options) étaient écrites dans une autre langue (souvent l'anglais) que celle de la version sur laquelle je travaillais que je me suis permis de donner ce conseil. J'imagine que des étrangers naviguent sur CADxp :) (les canadiens francophones ne travaillent peut-être pas tous sur des versions françaises) et que certains y glanent des routines. C'est donc dans un soucis d'universalité que j'avais fait cette remaque. Pour aller plus loin, il me semble qu'il est même préférable d'écrire (command "_.line") pour être sûr de lancer la commande originelle d'AutoCAD sur n'importe quelle version même si cette commande a été redéfinie par ailleurs par l'utilisateur du code (le underscore pour l'international et le point pour la commande non-redéfinie). [Edité le 12/9/2005 par (gile)]
  23. (gile)

    ECHLTP et TILEMODE

    Bien vu, çà m'apprendra à faire des copier/coller. En plus, ironie du sort "ltscale" c'est la version anglaise de la commande "echltp" :cool: Y'a des fois je ferais mieux de réfléchir avant de jouer au donneur de leçons :mad2: [Edité le 12/9/2005 par (gile)]
  24. (gile)

    ECHLTP et TILEMODE

    Salut, Zebulon ta solution semble bonne, surtout si elle te convient ;) Il ya sûrement moyen de faire la même chose avec une macro et du diesel pour la conditionnelle, mais je suis plutôt nul en diesel. Juste une petite remarque quant à la syntaxe de ton lisp (question de style) : Tu pourrais remplacer (command "PSLTSCALE" "1") et (command "ECHLTP" "0.02") par (setvar "PSTLTSCALE" 1) et (setvar "ECHLTP" 0.02) pour éviter les echos sur la ligne de commande. D'autre part, il est toujours préférable d'utiliser les noms de commande en version internationale pour des raisons de compatibilité : (command "_REGENAUTO" "_OFF") et (command "_REGENAUTO" "_ON") En toute amitié
  25. La suite ... http://img287.imageshack.us/img287/9247/balancement36gq.jpg Après avoir ajouté sur la vue en plan les saillies de nez (recouvrement généralement autour de 40 mm) et l'épaisseur de contre-marches (absentes sur le dessin), le tracé des limons en élévation se fait par rabattement des marches (et contre-marches) auxquelles on donne leurs hauteurs respectives et leur épaisseur. Les rives des limons se tracent en menant une parallèle à la ligne des nez de marches (ou des fonds de marches) à une distance de 40 à 50 mm (le bandeau). C'est là qu'intervient la "bidouille" : en trichant sur le balancement et/ou sur le paraléllisme du bandeau on va pouvoir "optimiser" la ligne des limons soit pour des raisons esthétiques, soit pour des raisons plus triviales. Dans l'exemple du petit dessin, il n'y aurait pas grand chose à modifier pour que les limons intérieurs soient rectilignes (donc leurs mains courantes aussi), ce qui présenterait un intérêt éconmique évident (matière et main d'oeuvre). Je pense que tu peux en tirer un exercice assez complèt, tant du point de vue de l'apprentissage d'AutoCAD que de celui du dessin technique et de la vision dans l'espace tout en faisant appel au sens pratique et esthétique de chacun. A plus. [Edité le 11/9/2005 par (gile)]
×
×
  • 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é