-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
208
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
Salut Zebuon_, J'ai complètement adopté ta commande, Texte miultiligne de longueur indéterminée. Je me suis même fait une icone à partir du A de l'icone d'origine auquel j'ai rajouté un z pour Zebulon_ :)
-
Salut, dans le même onglet, tu peux choisir séparateur décimal : espace.
-
Salut, À tout hasard, as tu essayé une autre souris ? Sinon, pour le zoom, tu peux aussi changer la valeur de la variable ZOOMFACTOR, elle est à 60 par défaut, tu peux la faire varier de 3 à 100.
-
sélectionner des objets à partir d\'une Polyligne
(gile) a répondu à un(e) sujet de rebcao dans AutoCAD, liste de souhaits
Intellidesk 2005 l'a fait : http://img14.imageshack.us/img14/682/select8kk.png -
Ton nouveau code marche bien et il est plus simpe que ce que j'avais fait. ;) Çà ne m'explique pas pourquoi ce que j'avais fait ne marchait pas chez toi, j'ai pu le tester sur AutoCAD 2005 AutoCAD 2006 et même sur Intellidesk 2005 (en remplaçant vl-remove), çà fonctionne partout. :casstet: D'autre part j'ai trouvé un moyen pour conserver les angles de départ et de fin sur un arc. Je modifie mon code à partir de tes dernières découvertes et des miennes.
-
Bizarre... hier çà marchait chez moi. Ici je ne peux pas essayer ils n'ont qu'une LT. Je verrai çà ce soir... Pour les histoires d'arcs, j'ai la mémoire qui flanche, c'est exactement l'inverse de ce que je disais : La tangente de l'angle est égale à la tangente du paramètre multipliée par le rapport entre les deus axes (0.75 dans l'exemple ci dessous). http://img61.imageshack.us/img61/6452/sanstitre9ia.jpg [Edité le 18/1/2006 par (gile)]
-
Je réponds un peu tardivement, mais ton LISP m'interréssait et des tests un peu poussés m'ont fait remarquer un dysfonctionnement ; dans les SCU très "biscornus" (pivotés sur les 3 axes), la distance de décalage (au niveau des quadrants) n'est pas respectée. Je te propose une modification de ton LISP utilisant (trans ... qui semble fonctionner : Nouvelle mouture, sans (trans... et avec redéfinition des paramètres (codes dxf 41 et 42) (defun c:offset_ellipse (/ ent dxf_ent lg_axe dis_off new_11 new_40 new_41 new_42) (while (not (setq ent (entsel "\nChoix de l'ellipse à décaler: "))) ) (setq dxf_ent (entget (car ent))) (cond ((eq (cdr (assoc 0 dxf_ent)) "ELLIPSE") (setq lg_axe (distance '(0.0 0.0 0.0) (cdr (assoc 11 dxf_ent))) ) (if ( (initget 7) (initget 6) ) (setq dis_off (getdist (strcat "\nDistance de décalage (rtos (getvar "offsetdist")) "> : " ) ) ) (if (not dis_off) (setq dis_off (getvar "offsetdist")) (setvar "offsetdist" dis_off) ) (initget "Interieur Exterieur _Intern Extern") (if (eq (getkword "\nDécalage [interieur/Exterieur]? : ") "Intern" ) (setq new_11 (mapcar '(lambda (x) (* (/ x lg_axe) (- lg_axe dis_off))) (cdr (assoc 11 dxf_ent)) ) new_40 (/ (- (* lg_axe (cdr (assoc 40 dxf_ent))) dis_off) (- lg_axe dis_off) ) ) (setq new_11 (mapcar '(lambda (x) (* (/ x lg_axe) (+ lg_axe dis_off))) (cdr (assoc 11 dxf_ent)) ) new_40 (/ (+ (* lg_axe (cdr (assoc 40 dxf_ent))) dis_off) (+ lg_axe dis_off) ) ) ) (cond ((equal (rem (cdr (assoc 41 dxf_ent)) (/ pi 2)) 0.0 1e-009) (setq new_41 (cdr (assoc 41 dxf_ent))) ) (T (setq new_41 (atan (* (/ (sin (cdr (assoc 41 dxf_ent))) (cos (cdr (assoc 41 dxf_ent))) ) (/ (cdr (assoc 40 dxf_ent)) new_40) ) ) ) (if minusp (cos (cdr (assoc 41 dxf_ent)))) (setq new_41 (+ new_41 pi)) ) ) ) (cond ((equal (rem (cdr (assoc 42 dxf_ent)) (/ pi 2)) 0.0 1e-009) (setq new_42 (cdr (assoc 42 dxf_ent))) ) (T (setq new_42 (atan (* (/ (sin (cdr (assoc 42 dxf_ent))) (cos (cdr (assoc 42 dxf_ent))) ) (/ (cdr (assoc 40 dxf_ent)) new_40) ) ) ) (if (minusp (cos (cdr (assoc 42 dxf_ent)))) (setq new_42 (+ new_42 pi)) ) ) ) (setq dxf_ent (subst (cons 11 new_11) (assoc 11 dxf_ent) dxf_ent) dxf_ent (subst (cons 40 new_40) (assoc 40 dxf_ent) dxf_ent) dxf_ent (subst (cons 41 new_41) (assoc 41 dxf_ent) dxf_ent) dxf_ent (subst (cons 42 new_42) (assoc 42 dxf_ent) dxf_ent) ) (entmake (foreach n '(-1 330 5) (setq dxf_ent (vl-remove (assoc n dxf_ent) dxf_ent)) ) ) ) (T (princ "\nObjet n'est pas une Ellipse!.") ) ) (princ) ) PS : on peut aussi remplacer : (setq ucszdir (trans '(0 0 1) 1 0 T)) par : (setq ucszdir (cdr (assoc 210 dxf_ent))) PPS : Il me semble qu'il reste un petit problème avec les arcs. En conservant les codes dxf 41 et 42 on conserve les paramètres de départ et de fin de l'ellipse qui sont différents des angles spécifiés lors de la création de l'arc. De mémoire, la tangente du paramètre serait égale à la tangente de l'angle multipliée par le rapport entre le petit et le grand axe (code 40). J'essayerais de voir çà demain.[Edité le 17/1/2006 par (gile)] PPPS : les PS précédents sont maintenant caduques. PPPPS : j'ai simplifié les tests sur le signe des cosinus des paramètres [Edité le 19/1/2006 par (gile)]
-
On peut aussi utiliser la méthode de Bonuscad mais sans LISP, avec la calculatrice géométrique d'AutoCAD. Exemple pour un tétraèdre de une unité de côté Commande: _extrude Densité courante de la représentation filaire: ISOLINES=4 Choix des objets: 1 trouvé(s) Choix des objets: Spécifiez la hauteur de l'extrusion ou [Chemin]: 'cal >>>> Expression: sqrt(6)/3 Reprend la commande EXTRUSION. Spécifiez la hauteur de l'extrusion ou [Chemin]: 0.81649658092773 Spécifiez l'angle d'extrusion : 'cal >>>> Expression: atan(sqrt(3)/(sqrt(6)*2)) Reprend la commande EXTRUSION. Spécifiez l'angle d'extrusion : 19.471220634491 NOTA : dans cet exemple, je donne la hauteur juste, il faut, en fait, spécifier une hauteur au moins égale à celle-ci, en spécifiant la longueur du côté on est sûr d'être suffisamment haut. J'ai aussi réduit l'expression pour l'arc tangent, on peut faire de même dans le LISP.
-
Pour la méthode de Bonuscad, les cotes de hauteur et d'angle d'extrusion sont plus haut. Le code pour que toutes les arrêtes soient égales est donc : (command "_.polygon" 3 "_edge" "_none" "*0.0,0.0,0.0" "_none" "@1.0,0.0") (command "_.extrude" (entlast) "" (/ (sqrt 6) 3) "_none" "*0.0,0.0,0.0" (polar '(0.0 0.0 0.0) (atan (/ (/ (sqrt 3) 6) (/ (sqrt 6) 3))) 1.0 ) ). La méthode que je voulais proposer est moins "facile" que celle du lien donné par Eric, mais elle est aussi entièrement graphique (pas de trigo ni autres calculs) et permet peut-être plus facilement de choisir la longuer des arrêtes. Le but est de trouver la hauteur du sommet projeté sur la vue en plan. Tout d'abord, on dessine la vue de dessus du tétraèdre et de placer l'origine du SCU au milieu d'un des côtés : http://img35.imageshack.us/img35/9376/tetra17fc.png Ensuite, dans une vue isométrique, on fait une rotation du SCU de 90° sur l'axe qui contient la projection d'une arrête. De la projection du sommet, on dessine une ligne d'une longueur au moins égale à la longueur d'un côté (ou une demi droite). Du sommet situé sur l'axe du SCU (ici Y) on dessine un cercle ayant pour rayon la longueur d'un côté. Le sommet du tétraèdre est situé à l'intersection de la ligne et du cercle. http://img35.imageshack.us/img35/1017/tetra29eb.png Le sommet ainsi défini, on peut faire le tétraèdre en filaire, surfacique ou soilde (extrusion et section). http://img68.imageshack.us/img68/1763/tetra33zo.png
-
Là tout de suite, je n'ai pas le temps d'expliquer une méthode, mais je donne une piste pour que le jeu continue : Règle N°1 : pour faire de la 3D il ne faut pas hésiter à bouger son SCU ! Une explication en images ce soir (après le boulot).
-
Deux petits exemples pour essayer de préciser "où je voulais en venir". À la ligne de commande : (while (not ang) (setq ang ([b]STR2ANG[/b] (getstring "\nEntrez un angle: "))) ) (princ ([b]ANG2STR[/b] ang)) Ou pour une edit_box d'une boite de dialogue : (action_tile "ang_box" (strcat "(if (angtof $value)" "(progn (setq ang ([b]STR2ANG[/b] $value))" "(set_tile \"ang_box\" ([b]ANG2STR[/b] ang)))" "(progn (alert \"Entrée non valide\")" "(mode_tile \"ang_box\" 2)))" ) ) Mais il est fort probable que ces routines n'aient d'autre utilité que celle qui m'a motivé. PS : J'ai rajouté un controle dans STR2ANG pour que la routine retourne nil dans tous les cas d'entrée non valide.
-
Au départ c'était pour pouvoir spécifier des angles supérieurs à 360° (pour le réseau hélicoïdal), et çà m'arrangeait de ne pas tenir compte de ANGDIR et ANGBASE, ensuite j'ai voulu que çà marche pour toutes les unités angulaires, même les unités géodésiques pour lesquelles on ne peut spécifier d'angles supérieurs à un tour complet.
-
J'ai modifié les deux routines pour qu'elles fonctionnent aussi avec les unités géodésiques. Certes ce type d'unité ne permet pas de spécifier des angles supérieurs à un tour. Mais, pensant que ces deux routines pouvaient offrir une alternative intéressante à ANGTOF et ANGTOS (vu leur comportement par rapport à ANGDIR et ANGBASE), j'ai voulu qu'elles fonctionnent avec tous les types d'unités angulaires.
-
Salut Mac, Je crains que pour choisir une cellule tu ne sois obligé de passer par VisualLISP (ou VBA, peut-être, je ne connais pas). Un exemple en VisualLISP ici, très bien commenté par Patrick_35.
-
(angtof "360") retourne 0.0 et (angtos (* 2 pi)) retourne "0.0" Voici donc deux petites routines aux fontionnements proches de ANGTOS et ANGTOF, mais qui permettent de convertir les angles supérieurs ou égaux à 360 degrés, 400 grades ou 2 pi radians, sans les arrondir à 2 k pi près. STR2ANG accepte les chaines numériques (dans ce cas, convertit en fonction de la valeur courante de AUNITS) comme les chaines du type "150g" "22d30'" (dans ce cas, convertit depuis l'unité spécifiée) Modifié le 20/01/06 ;;; STR2ANG Convertit une chaine de caractères représentant un angle ;;; en sa valeur en radians (nombre réel) ;;; (STR2ANG "540" 0) ou (STR2ANG "600g" nil) retournent 9.42478 soit 3*pi radians (defun STR2ANG (str unt / ang) (if (= (type str) 'STR) (progn (if (not unt) (setq unt (getvar "AUNITS")) ) (cond ((numberp (read str)) (setq ang (float (read str))) (cond ((or (= unt 0) (= unt 1) (= unt 4)) (* (/ ang 180) pi) ) ((= unt 2) (* (/ ang 200) pi) ) ((= unt 3) ang ) ) ) ((and (= unt 4) (angtof str)) (if (= (getvar "ANGDIR") 1) (- (getvar "angbase") (angtof str)) (- (angtof str) (getvar "angbase")) ) ) ((angtof str) (if (not (member "geomcal.arx" (arx))) (arxload "geomcal") ) (* (/ (cal str) 180) pi) ) ) ) (princ "\n; erreur: type d'argument incorrect: stringp nil") ) ) ANG2STR convertit un angle en radians en une chaine du type "525.00g" "540d0'" en fonction des variables AUNITS et AUPREC courantes (les unités géodésiques ne permettent pas d'utiliser des angles supérieurs ou egaux à 360°). ANG2STR ne prend pas en compte la valeur de ANGBASE (contrairement à ANGTOS), (ANG2STR (getangle)) retourne donc directement l'angle spécifié quelque soit la valeur de ANGBASE. ;;; ANG2STR Convertit une valeur d'angle en radians en chaine de caractère ;;; représentant l'angle dans l'unité spécifiée ;;; (ANG2STR (* 3 pi) 2 2) -> "600.00g" ;;; (ANG2STR (* 3 pi) nil nil) -> "540.00" pour AUNITS=0 et AUPREC=2 (defun ang2str (ang unt prec / d m s) (if (numberp ang) (progn (if (not unt) (setq unt (getvar "AUNITS")) ) (if (not prec) (setq prec (getvar "AUPREC")) ) (cond ((= unt 0) (rtos (* (/ ang pi) 180) 2 prec) ) ((= unt 1) (setq d (* (/ ang pi) 180) m (* 60 (- d (setq d (fix d)))) s (* 60 (- m (setq m (fix m)))) ) (if (equal (abs s) 60 1e-009) (progn (setq s 0.0) (if (minusp m) (setq m (1- m)) (setq m (1+ m)) ) ) ) (if (= (abs m) 60) (progn (setq m 0) (if (minusp m) (setq d (1- d)) (setq d (1+ d)) ) ) ) (strcat (itoa d) "d" (if ( (strcat (itoa m) "'") "" ) (if ( (if ( (strcat (itoa (fix s)) "\"") (strcat (rtos s 2 (- prec 4)) "\"") ) "" ) ) ) ((= unt 2) (strcat (rtos (* (/ ang pi) 200) 2 prec) "g") ) ((= unt 3) (strcat (rtos ang 2 prec) "r") ) ((= unt 4) (if (= (getvar "ANGDIR") 1) (setq ang (- ang)) ) (angtos (+ (getvar "ANGBASE") ang) 4 prec) ) ) ) (princ "\n; erreur: type d'argument incorrect: numberp: nil") ) ) [Edité le 15/1/2006 par (gile)][Edité le 16/1/2006 par (gile)][Edité le 20/1/2006 par (gile)] [Edité le 21/1/2006 par (gile)]
-
Tant que j'y suis, je vide mon tiroir (je vous fais grâce du cube ;) ) : http://img527.imageshack.us/img527/7185/octaedre4yo.png http://img527.imageshack.us/img527/8955/icosaedre3iv.png http://img527.imageshack.us/img527/5328/dodecaedre6ht.png ;)
-
Apprendre en s'amusant Cette pyramide est un solide particulier : le tétraèdre régulier, il constitue avec le cube, l'octaèdre (huit faces triangulaires), l'isocaèdre (vingt faces triangulaires) et le dodécaèdre (douze faces pentagonales) les solides de Platon, les seuls solides dont toutes les faces sont constituées d'un même polygone régulier. En 3D : http://img11.imageshack.us/img11/4600/tetra9aw.png Et, sorti du fond d'un tiroir, vue de dessus et de côté avec les proportions en projection : http://img11.imageshack.us/img11/184/tetraedre0zo.png [Edité le 14/1/2006 par (gile)]
-
Salut, Je ne suis pas sûr d'avoir compris ta demande, mais pour forcer le texte d'une cote tu peux utiliser la commande DDEDIT et remplacer dans l'éditeur de texte ta cote par une autre. Personnellement, en amoureux de la géométrie, quand j'ai appris cette méthode, çà m'a fait penser à de la "triche". ;)
-
Salut, Et, quelque soit la méthode choisie pour désactiver l'accrochage aux objets (celle de zebulon_ ou celle de bonuscad) tu n'auras plus besoin de spécifier ton second point à 100 unités du premier : "@0,1" est suffisant.
-
ERRATUM Des tests plus poussés m'ont révélé un oubli pouvant provoquer un dysfonctionnement en cas d'entrée de nombres entiers dans les cases pour le décalage en hauteur et la rotation. Cet oubli génère l'erreur de dédutant (dixit Tramber) du type : (/ 10 3) -> 3 au lieu de (/ 10.0 3) ->3.33333 Le code ci-dessus est corrigé. Sinon, on peut remplacer les lignes : (setq ang (/ ang *nb_res_hel*)) et (setq ht (/ ht *nb_res_hel*)) par, respectivement : (setq ang (/ (float ang) *nb_res_hel*)) et (setq ht (/ (float ht) *nb_res_hel*))
-
Salut, Dans la fenêtre Menu principal (en haut à gauche de la page d'accueil) -> Les ressources -> Télécharg. Membres -> AutoCAD -> Blocs,bibliothèques. Sinon, c'est là
-
Salut, Comme je ne sais pas ce que tu connais ou pas de l'utilisation des LISP je vais expliquer comme si tu étais un débutant complet, ne t'en offusque pas si ce n'est pas le cas. Tu fais un copier/coller du code de Bonuscad dans le bloc note (attention de ne pas oublier une paranthèse !). Tu l'enregistres avec l'extention .lsp (typline.lsp par exemple) Dans le menu outils d'AutoCAD, choisis Charger une application... et charge le fichier que tu viens de créer. À la ligne de commande, tape : model_typline (ce qui écrit après (defun c: dans le code). Puis tu réponds aux invites comme pour les commandes AutoCAD.
-
On peut remplacer les sous-routines CREAT_HELICOIDE, HEL_ERR et ADD_Z par VL-CREAT_HEL, l'exécution de la commande sera plus rapide (environ 10 fois), ce qui peut être sensible pour des hélicoïdes ayant de nombreux segment et/ou de nombreuses spires. Dans ce cas, il faut remplacer les lignes : (CREAT_HELICOIDE sp *seg_hel* ray pas *sens_hel* *axe_hel*) et (CREAT_HELICOIDE sp seg ray pas sens axe) par : (VL-CREAT_HEL sp *seg_hel* ray pas *sens_hel* *axe_hel*) et (VL-CREAT_HEL sp seg ray pas sens axe) La nouvelle fonction VL-CREAT_HEL : (defun VL-CREAT_HEL (seg long sens pas ray cen / AcDoc ModSp dist1 dist2 AngRot AngArc MinAx MajAx ucszdir arc ) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) ModSp (vla-get-ModelSpace AcDoc) ) (vla-StartUndoMark AcDoc) ;; Définition des points et des angles de l'ellipse dans le SCU (if (equal sens "Gauche") (setq pas (- pas) seg (- seg) ) ) (setq dist1 (distance (polar cen 0.0 ray) (polar cen (/ (* 2 pi) seg) ray) ) AngRot (atan dist1 (/ pas seg)) dist2 (* ray (cos (/ pi seg))) AngArc (atan (/ dist1 (* 2 (sin AngRot))) dist2) cen (list (car cen) (cadr cen) (+ (caddr cen) (/ pas (* seg 2))) ) minax (polar cen (/ pi seg) ray) majax (polar cen (+ (/ pi seg) (/ pi 2)) (/ ray (sin AngRot))) ) ;; Conversion des points dans le SCG (setq ucszdir (trans '(0 0 1) 1 0 T) Cen (trans cen 1 0) MinAx (trans minax 1 0) MajAx (mapcar '- (trans majax 1 0) Cen) ) ;; Tracé d'un segment de l'hélicoïde (setq arc (vla-addEllipse ModSp (vlax-3d-point Cen) (vlax-3d-point MajAx) (sin AngRot) ) ) (vla-put-StartAngle arc (- (/ pi -2) AngArc)) (vla-put-EndAngle arc (+ (/ pi -2) AngArc)) (vla-Rotate3d arc (vlax-3d-point Cen) (vlax-3d-point MinAx) (if (= sens "Gauche") (+ (/ pi 2) AngRot) (- (/ pi 2) AngRot) ) ) ;; Création des autres segments (if ( (repeat (1- long) (vla-Copy arc) (vla-Rotate arc (vlax-3d-point Cen) (/ (* 2 pi) seg)) (vla-Move arc (vlax-3d-point '(0 0)) (vlax-3d-point (trans (list 0 0 (/ pas seg)) ucszdir 0)) ) ) ) (vla-EndUndoMark AcDoc) ) [Edité le 5/1/2006 par (gile)]
-
Salut, Quand tu dessines dans AutoCAD, ou autre, c'est toi qui decides si une unité de dessin représente 1 mm, 1cm ou 1m, c'est au moment de ta mise en page qu'intervient la question de l'échelle pour faire rentrer ton dessin, ou une partie, dans un format de papier déterminé.
-
Filtre avec test relationnels
(gile) a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Il existe quelque chose ici, mais chez moi les résultats ne sont pas probants :cool:
