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. Salut, Tu veux parler de l'icone "Layer freeze" des express-tools ?
  2. (gile)

    cotation espace papier

    Post Scriptum : À propos des ajouts dans le menu contextuel des cotations, il faut rajouter les nouvelles commandes après le sous-menu "Style de cotes". Voir ce sujet http://img211.imageshack.us/img211/5861/sanstitre2rt.jpg [Edité le 2/12/2005 par (gile)]
  3. (gile)

    cotation espace papier

    Salut, Quitte à me faire traiter à nouveau de "bidouilleur" je persiste : exepté pour la cotation des vues en 3D (isométries, perspectives...) je cote toujours dans l'espace papier. C'est effectivement en formation que j'ai appris la possibilité de coter directement dans l'espace papier. Je trouve cette manière de faire simple et logique à condition de vérouiller la vue dans les fenêtres après mise à l'échelle (l'espace objet pour la création des objets, l'espace papier pour les annotations et la cotation en vue de l'impression). Je n'ai, dans mes gabarits, que 2 styles de cotes ("objet" et "présentation") et 2 calques de cotes correspondants. Le style de cote "objet" me sert aux cotations en 3D (comme dit plus haut) et comme style de cotation de "travail" (pour vérifier ou rechercher des dimensions pendant la création des objets). Pour ce qui est de l'échelle de ce style de cote, je me suis fait une commande en LISP que j'ai ajouté au menu contextuel des cotations (clic droit "Modifier l'échelle des cotes") : ;;; Change l'échelle globale des cotes (defun c:ech_cot (/ js1 ech sts stc) (if (and (= 1 (getvar "pickfirst")) (setq js1 (ssget "_i" '((0 . "DIMENSION")))) (= 1 (sslength js1)) ) (progn (setq elst (entget (ssname js1 0))) (sssetfirst nil nil) ) (progn (sssetfirst nil nil) (setq elst (entget (car (entsel "\nSpécifiez la cote à modifer: ")))) ) ) (setq sts (cdr (assoc 3 elst))) (initget 7) (setq ech (getreal (strcat "\nFacteur d'échelle du style de cote: " (rtos (cdr (assoc 40 (tblsearch "DIMSTYLE" sts)))) "\nSpécifiez le nouveau facteur d'échelle: " ) ) ) (initget "Oui Non") (if (/= (getkword "\nAppliquer l'échelle au style de cote ? [Oui/Non] : " ) "Non" ) (progn (setq stc (getvar "DIMSTYLE")) (if (/= sts stc) (command "_-dimstyle" "_r" sts) ) (setvar "dimscale" ech) (command "_-dimstyle" "_s" sts "_y") (if (/= sts stc) (command "_-dimstyle" "_r" stc) ) (setq js1 (ssget "_X" (list '(0 . "DIMENSION") (cons 3 sts)))) ) ) (command "_dimoverride" "dimscale" ech "" js1 "") (princ) ) [Edité le 2/12/2005 par (gile)]
  4. (gile)

    Ajout à la BARRE D\'OUTILS

    Salut, Dans la partie en haut à gauche de la fenêtre de personnalisation, tu développes l'arborescence des barres d'outil, dans la partie en dessous (bas gauche) tu sélectionne ta commande et tu la dépose dans tas barre d'outil par cliquer/glisser.
  5. C'est celui-là que j'ai édité.
  6. Suite à un échange avec Esbe, j'ai modifié le dernier LISP (herse de balancement) pour pouvoir l'utiliser pour des escaliers "demi-tournants". Il faut dessiner une ligne sur l'axe de symétrie pour simuler des limons formant un angle de 360°. Un petit dessin vaut mieux qu'un discours confus : http://img336.imageshack.us/img336/8861/bal0ws.jpg NOTA : si les points au premier et dernier collet ne sont pas confondus, la première volée de point sera forcée en rouge la seconde en vert. [Edité le 1/12/2005 par (gile)]
  7. Re, Vraiment, je ne vois pas... Chez moi çà marche.
  8. Salut Esbe, D'abord, merci d'essayer mes LISP et de m'en dire les dysfonctionnements, çà me permet de réparer les défauts que je n'avais pas vus. Les points que tu spécifies (point de départ et point de fin du balancement), doivent se trouver sur la polyligne que tu as d'abord sélectionnée (objet à diviser sur le petit dessin), est-ce bien le cas ? Sinon, ce LISP sert plutôt si les limons intérieurs ne sont pas droits ou se raccordent sur un "noyau" courbe (comme sur le petit dessin), pour les limons se raccordant en angle, il est plus pratique d'utiliser le deuxième LISP (utilisant la méthode de la herse de balancement). PS : Je corrige une imperfection dans le filtre de sélection de l'objet à diviser, ce ne peut être une ligne. [Edité le 29/11/2005 par (gile)]
  9. J'avoue ne pas encore tout comprendre avec la fonction trans Moi non plus, je finis souvent par trouver à force de tâtonnements.
  10. Salut, À ma connaissance, pas beaucoup de différence entre un pied américain et un pied : 1 pied américain (survey foot) = 304.8006096 mm 1 pied (foot) = 304.8000 mm Le problème doit venir d'ailleurs.
  11. Par exemple, en remplaçant dans ton LISP: (setq bl (subst (cons 50 0) (assoc 50 bl) bl)) par : (setq bl (subst (cons 50 (angle '(0 0) (trans (getvar "UCSXDIR") 0 (ucszdir)))) (assoc 50 bl) bl) ) avec UCSZDIR comme défini plus haut, les textes s'affichent parallèlement à l'axe des X du SCU courant quelqu'il soit, même s'il n'est pas parallèle au SCG. Et encore, un grand bravo, les réacteurs, c'est de la bombe !!!
  12. (gile)

    dessiner au diamètre

    Salut, À ma connaissance AutoCAD fonctionne dans un repère orthonormé, donc une unité en X fait la même longueur qu'une unité en Y. Mais si tu tiens à travailler avec des diamètres , tu peux dessiner d'abord une vue dans l'axe de ta pièce tournée (cercles concentriques, option "diamètre") et faire ta coupe en utilisant REPEROBJ avec les points d'intersection de ta vue de face et du plan de coupe : http://img391.imageshack.us/img391/708/coupecyl0gw.jpg Tu peux aussi faire des droites de construction horizontales à partir des mêmes points d'intersection et les effacer ou les ajuster ensuite.
  13. (gile)

    dessiner au diamètre

    Un cylindre en 2D ???? :casstet:
  14. Salut Patrick_ 35, Je n'ai pas encore décortiqué ton lisp (que je ne suis pas sûr de comprendre), mais j'ai peut-être une piste pour ta question : Bonuscad en parle ici où il définit une variable : (setq dxf_210 (list (caddr (trans '(1.0 0.0 0.0) 0 1 0)) (caddr (trans '(0.0 1.0 0.0) 0 1 0)) (caddr (trans '(0.0 0.0 1.0) 0 1 0)) ) ) Pour ma part, j'avais déjà été confronté au problème ici ou là et j'avais préféré un (defun) pour pouvoir m'en servir dans plusieurs routines. La "synthèse" de nos deux méthode se résume simplement à ce qui s'appellerait UCSZDIR si c'était une variable système, c'est le vecteur normal du plan XY du SCU courant: (defun ucszdir () (trans '(0 0 1) 1 0 T) ) Çà me sert pour créer des entités en 3D quelque soit le scu courant, avec (entmake) ou, en Vlisp : (vla-put-Normal ent (vlax-3d-point (ucszdir)) ) [Edité le 25/11/2005 par (gile)]
  15. Les dysfonctionnements en 3D (SCU non paralèlles au SCG) sont maintenant résolus (enfin je pense...)
  16. Dans le cas présent, je pencherais plutôt pour quelque chose comme celà (ici un touret à meuler) : http://img117.imageshack.us/img117/7082/2351102508nw.jpg [Edité le 24/11/2005 par (gile)]
  17. Suite à cette discussion j'ai modifier le dernier LISP (le plus abouti) pour y intégrer la gestion de ANGBASE.
  18. Projectionniste ? ;) Non, c'est déjà pris !
  19. Non, non, pas scrongneugneu du tout, çà a bien marché du premier coup, et je suis tout simplement impressionné. Je n'ose même envisager de tenter quelque chose d'équivalent en lisp/dcl (je ne suis qu'un piètre "bidouilleur" et le dcl est fort ingrat). Je ne connais pas du tout le VBA, mais je vais quand même essayer d'y jeter un coup d'oeil. Juste un petit truc, quand on quitte la boite de dialogue avec le bouton "quitter", l'effet est saisissant, mais si on veut relancer la commande, de la boite n'apparaît plus que le coin supérieur gauche : http://img511.imageshack.us/img511/3885/didier6il.png PS : ANGBASE au Nord, ANGDIR à 1 et AUNITS à 2 c'est un truc de géomètre ? Excuse l'incurie, je suis néophyte. Mais je me rend compte qu'il faut que j'intègre ces parmètres dans certain de mes LISP ! [Edité le 19/11/2005 par (gile)]
  20. En regardant la manière dont tu définis dxf_210, j'ai trouvé encore plus simple pour la direction d'extrusion du SCU courant : (setq dxf_210 (trans '(0 0 1) 1 0 0))
  21. (gile)

    cotation

    Salut, Difficile de répondre comme çà. Si tu veux seulement changer le texte des cotes (pour qu'un objet de n unités de dessin soit coté 10 X n) Tu peux créer un nouveau style de cotes et dans l'onglet "unités principales", dans "Echelle de mesure" mettre le facteur d'échelle à 10. Ensuite tu sélectionne toutes tes cotes (Sélection rapide), clic droit et dans le menu contextuel tu choisis le style de cote que tu as créé. Si tu veux modifier l'échelle globale de ton dessin pour que une unité de dessin = 1 millimètre. Tu peux faire CTRL+A clic droit "Echelle" point de base : 0,0 facteur d'échelle 10. Si les cotes sont associatives elles suivront (il te faudra quand même modifier l'echelle globale dans l'onglet "Ajuster" du style de cote. MAIS, si ton dessin contient des Présentations tu vas être obligé de les reprendre (changement d'échelle). J'ai été un peu lent ;) [Edité le 19/11/2005 par (gile)]
  22. Encore une fois : BRAVO ! Je vais décortiquer calmement cette équation de Newton, j'avais déjà essayé de trouver le rapport entre arc et corde, je butais toujours sur une équation trigonométrique à 2 inconnues... D'autre part, beaucoup plus modestement, j'avais commis 2 petits LISP pour tracer un arc d'après le centre, le départ (ou le départ, le centre) et la longueur de l'arc. Je l'ai mis ici. J'avais trouvé un autre moyen de déterminer la direction d'extrusion du SCU courant : ;;; EXTR_DIR Retourne la direction d'extrusion du SCU courant (vecteur) (defun EXTR_DIR () (mapcar '- (trans '(0 0 1) 1 0) (trans '(0 0 0) 1 0)) ) [Edité le 19/11/2005 par (gile)]
  23. Voici deux (trois) petites routines pour tracer un arc de cercle d'après son centre, son départ (ou son départ, son centre) et sa longueur. (plus une d'après le départ, la fin et la longueur de l'arc) La longueur de l'arc peut être spécifiée à l'écran, au clavier, à l'aide de la calculatrice géométrique (CAL) ou d'après la longueur ou le périmètre de l'objet sélectionné. ;;; ARC_CDL, ARC_DCL et ARC_DEL Pour tracer des arcs d'après leur longueur -22/12/05- ;;; GETLONG Demande à l'utilisateur de spécifier une longueur, soit avec GETDIST, soit en ;;; sélectionnant un objet, soit en utilisant la calculatrice géométrique. ;;; NOTA : init_lst est la liste des arguments pour la fonction initget ;;; ex: (GETLONG '(7 "Objet Calcul") "\nSpécifiez la longueur ou [Objet/Calcul]: ") (defun GETLONG (init_lst msg / long) (apply 'initget init_lst) (setq long (getdist msg) ) (cond ((= long "Objet") (while (not (numberp long)) (setq long (LONGOBJT (entsel))) ) ) ((= long "Calcul") (if (not (member "geomcal.arx" (arx))) (arxload "geomcal") ) (setq long (C:CAL)) ) ) long ) ;;; GETVAL Retourne la valeur dxf pour le code spécifié de l'entité ;;; Fonctionne avec des entités de type ENAME, liste ENTSEL ou liste ENTGET (defun GETVAL (grp ele) (cond ((= (type ele) 'ENAME) (cdr (assoc grp (entget ele))) ) ((not ele) nil) ((not (listp ele)) nil) ((= (type (car ele)) 'ENAME) (cdr (assoc grp (entget (car ele)))) ) (T (cdr (assoc grp ele))) ) ) ;;; LONGOBJT Retourne la longueur ou le périmètre d'un objet (defun LONGOBJT (objt) (cond ((= (GETVAL 0 objt) "LINE") (distance (GETVAL 10 objt) (GETVAL 11 objt)) ) ((= (GETVAL 0 objt) "ARC") (* (ANGARC objt) (GETVAL 40 objt)) ) ((member (GETVAL 0 objt) '("CIRCLE" "ELLIPSE" "LWPOLYLINE" "SPLINE") ) (command "_area" "_object" objt) (getvar "perimeter") ) ((= (type (car objt)) 'ENAME) (princ "\nLa longueur de cet objet n'est pas définie.") ) ) ) ;;; ANGARC Retourne l'angle décrit par un arc de cercle (en radians). (defun ANGARC (arc / ang) (setq ang (- (GETVAL 51 arc) (GETVAL 50 arc) ) ) (if (minusp ang) (setq ang (+ (* 2 pi) ang)) ) ang ) ;;; FACTOR Détermination du demi angle de l'arc à partir de sa corde et de sa longueur (defun factor (arclen chordlen / k n c e) (setq k (/ chordlen arclen)) (setq n 0) (repeat 6 (if (= n 0) (setq c (sqrt (- 6 (* 6 k)))) (setq c (- c (/ (- (sin c) (* k c)) (- e k)))) ) (setq e (cos c)) (setq n (1+ n)) ) c ) ;;; LST_DEL Constitution de la liste entmake de l'arc pour arc_del (defun lst_del (dep ext long / ucszdir cord ang ray mid cen ang0 ang1) (setq ucszdir (trans '(0 0 1) 1 0 0) cord (distance dep ext) ang (factor long cord) ray (abs (/ cord 2 (sin ang))) mid (mapcar '/ (mapcar '+ dep ext) '(2.0 2.0 1.0)) ) (if (equal (/ pi 2) ang 1e-009) (setq cen mid ray (/ cord 2) ) (setq cen (polar mid (+ (angle dep ext) (/ pi 2)) (* ray (cos ang))) ) ) (foreach pt '(cen dep ext) (set pt (trans (eval pt) 1 ucszdir)) ) (setq ang0 (angle cen dep) ang1 (angle cen ext) ) (list '(0 . "ARC") (cons 10 cen) (cons 40 ray) (cons 50 ang0) (cons 51 ang1) (cons 210 ucszdir) ) ) ;;; LST_CDL Constitution de la liste entmake de l'arc pour arc_cdl et arc _dcl (defun LST_CDL (cn dep long / ray ang ang0 ang1 ucszdir) (setq ucszdir (trans '(0 0 1) 1 0 0) ray (distance cen dep) ang0 (angle (trans cen 1 ucszdir) (trans dep 1 ucszdir)) ang (/ long ray) ucszdir (trans '(0 0 1) 1 0 0) cen (trans cen 1 ucszdir) ) (initget "Horaire Trigonométrique") (if (= (getkword "\nEntrez le sens de rotation [Horaire/Trigonométrique] < T >: " ) "Horaire" ) (setq temp ang0 ang0 (- ang0 ang) ang1 temp temp nil ) (setq ang1 (+ ang0 ang)) ) (list '(0 . "ARC") (cons 10 cen) (cons 40 ray) (cons 50 ang0) (cons 51 ang1) (cons 210 ucszdir) ) ) ;;; C:ARC_CDL Crée un arc à partir d'un centre, d'un point de départ et de la longueur de l'arc (defun c:arc_cdl (/ cen dep long) (initget 1) (setq cen (getpoint "\nSpécifiez le centre de l'arc: ")) (initget 1) (setq dep (getpoint cen "\nSpécifiez le point de départ de l'arc: ")) (setq long (GETLONG '(7 "Objet Calcul") "\nSpécifiez la longueur de l'arc ou [Objet/Calcul]: " ) ) (command "_regen") (entmake (LST_CDL cen dep long)) (princ) ) ;;; C:ARC_DCL Crée un arc à partir d'un point de départ, d'un centre et de la longueur de l'arc (defun c:arc_dcl (/ cen dep long) (initget 1) (setq dep (getpoint "\nSpécifiez le point de départ de l'arc: ")) (initget 1) (setq cen (getpoint dep "\nSpécifiez le centre de l'arc: ")) (setq long (GETLONG '(7 "Objet Calcul") "\nSpécifiez la longueur de l'arc ou [Objet/Calcul]: " ) ) (command "_regen") (entmake (LST_CDL cen dep long)) (princ) ) ;;; C:ARC_DEL Crée un arc à partir d'un point de départ, d'un point d'arrivée et de la longueur de l'arc (defun c:arc_del (/ dep ext long) (initget 1) (setq dep (getpoint "\nSpécifiez le point de départ de l'arc: ")) (initget 1) (setq ext (getpoint dep "\nSpécifiez l'extrémité de l'arc: ")) (setq long (GETLONG '(7 "Objet Calcul") "\nSpécifiez la longueur de l'arc ou [Objet/Calcul]: " ) ) (command "_regen") (entmake (LST_DEL dep ext long)) (princ) ) Les sous-routines GETVAL, GETLONG, LONGOBJT et ANGARC peuvent servir à d'autres routines, il peut être avantageux de les mettre (avec d'autres) dans un fichier "Mes_Utils.lsp" chargé à chaque démarrage, pour les appeler dans différents LISP sans avoir à les redéfinir à chaque fois. Elles me servent, par exemple, dans cette routine qui modifie la longueur d'un objet d'après la longueur ou le périmètre d'un objet sélectionné : ;;; C:LONG_OBJT 10/04/05 ;;; Modifie la longueur totale en fonction de la longueur (ou du périmètre) de l'objet sélectionné. ;;; [surligneur]NOTA : GETVAL, LONGOBJT et ANGARC doivent être chargés [/surligneur] ;;; Redéfinition de *error* (defun STD_ERR (msg) (if (/= msg "quitter / sortir abandon") (princ (strcat "\nErreur: " msg)) ) (command) (command "_undo" "_end") (if lst_var (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) -> !lst_var = (("osmode" . 43)) osmode = 0 (defun SAVE&SET_VAR (var val) (if (getvar var) (if (/= (getvar var) val) (progn (if (not (member (assoc var lst_var) lst_var)) (setq lst_var (cons (cons var (getvar var)) lst_var)) ) (setvar var val) ) ) (princ (strcat "\nErreur: variable AutoCAD rejetée: " var)) ) ) ;;; RESTORE_VAR Restaure leurs valeurs initiales aux variables système de "lst_var" (defun RESTORE_VAR () (foreach pair lst_var (if (/= (getvar (car pair)) (cdr pair)) (setvar (car pair) (cdr pair)) ) ) (setq lst_var nil) ) ;;; Fonction principale (defun C:LONG_OBJT (/ dist) (setq m:err *error* *error* STD_ERR ) (command "_undo" "_begin") (SAVE&SET_VAR "cmdecho" 0) (sssetfirst nil) (while (not (numberp dist)) (setq dist (LONGOBJT (entsel "\nChoix de l'objet déterminant la longueur totale: " ) ) ) ) (princ dist) (command "_lengthen" "_total" dist) (command "_undo" "_end") (RESTORE_VAR) (setq *error* m:err m:err nil ) (princ) ) PS : les sous-routines STD_ERR, SAVE&SET_VAR et RESTORE_VAR pourraient aussi être définies dans "Mes_Utils.lsp".[Edité le 19/11/2005 par (gile)][Edité le 19/11/2005 par (gile)] [Edité le 22/12/2005 par (gile)]
  24. (gile)

    Ca sent le bug

    Salut, Si les accrobj sont désactivé le temps de l'excution du LISP, ce n'est pas parceque l'utilisiteur n'en aurait pas besoin, c'est pour éviter qu'ils n'interfèrent dans les commandes utilisées dans le LISP.
  25. Salut, Je pense que si on utilise une fonction *error* redéfinie dans un LISP qui ouvre un groupe "_undo" elle doit contenir une commande de fermeture du groupe, elle peut, en outre, annuler les actions depuis le début du groupe, comme tu le propose. Mais de la façon dont tu as écrit ton code tu as redéfini la fonction *error* non seulement pour le LISP mais pour toute la session du dessin en cours. Je pense qu'il est préférable d'utiliser la méthode consistant en sauvegarder la fonction originelle dans une variable et de la restaurer à la fin du LISP et de la fonction redéfinie : (defun MAFONC_ERR (msg) (command "_.undo" "_end") (command "_.undo" "1") ;; annuler tout ce qui a été fait par MAFONC (alert (strcat "\nErreur : " msg)) (setq *error* m:err ;; restaurer *error* m:err nil ) (princ) ) (defun C:MAFONC (/) (setq m:err *error* ;;sauvegarder *error* *error* MAFONC_ERR ;;redéfinir *error* ) (command "_.undo" "_group") ;; créer des entités (command "_LINE" '(0 0) '(1 1) "") (setq ET1 (entlast)) (command "_LINE" '(1 1) '(2 0) "") (setq ET2 (entlast)) (setvar "filletrad" 2) ;; passe par la fonction error ;; (setvar "filletrad" 0.50) ;; ne provoque pas d'erreur (command "_fillet" ET1 ET2) ;; ligne qui provoque une erreur si filletrad trop grand (command "_.undo" "_end") (setq *error* m:err ;; restaurer *error* originel m:err nil ) (princ) )
×
×
  • 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é