-
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)
-
Re, Ton code n'était pas si loin d'être fonctionnel. La principale erreur vient de la manière dont tu définis les points : l'apostrophe avant les paranthèses est l'équivalent de la fonction (quote) qui retourne une expression sans l'évaluer. C'est nécessaire, par exemple, quand un point est définis par des nombres réels ou entiers '(0 0) ou (quote (0 0)) retourne (0 0), mais '(aile1 0) retourne (aile1 0) sans évaluer aile1. Il eut fallu écrire (list aile1 0) pour définir un point avec la valeur de aile1. la routine aurait pu être (sans définir de nouvelles variable pour chaque point) : (defun c:corniere (/ accrobj aile1 aile2 ep long) (setq accrobj (getvar "osmode")) (setvar "osmode" 0) (setq aile1 (getint "longueur de la premiere aile:")) (setq aile2 (getint "longueur de la deuxieme aile:")) (setq ep (getint "epaisseur:")) (setq long (getint "longueur de la corniere:")) (command "_pline" '(0 0) (list aile1 0) (list aile1 ep) (list ep ep) (list ep aile2) (list 0 aile2) '(0 0) "" ; Équivalent de "Entrée" pour clore la commande ) (setvar "osmode" accrobj) ) Le choix que j'ai fait d'utiliser la fonction (polar) plutôt que les coordonnée absolues, est lié au fait que cette fonction est plus facile à utiliser en cas de point de départ défini par l'utilisateur, comme pourrait l'être l'angle de la première ailette par exemple. Tu pourrais insérer dans ton code : (setq pt0 (getpoint "\nCoin de la cornière: ") angle (getangle pt0 "\nAngle de la première ailette: ") pt1 (polar pt0 angle aile1) pt2 (polar pt1 (+ angle (/ pi 2)) ep) pt3 (polar pt2 (+ angle pi) (- aile1 ep)) etc... La fonction polar est un peu l'équivalent de la saisie des coordonnées polaires relative (quand on fait : @40 Je ne peux pas te dire par rapport à une machine cn (commandes numériques, c'est çà ?), je n'en ai jamais utilisé. Çà veut dire pi (3.14159...) divisé par 2, pour pi sur 2 radians soit 90°.
-
Petite précision les vis dynamiques d'Éric (super boulot entre paranthèses) sont des blocs dynamiques pour AutoCAD 2006, donc des blocs 2D. Hélas, pas encore de 3D dynamique/paramétrique dans AutoCAD !
-
Salut, La commande pline nécessite des points, soit sous la forme de coordonées absolues dans le SCU (x y [z]) soit sous la forme de coordonnées polaires (polar PointDépart AngleRadians Distance). Au vu des entrées utilisateurs de ton code la seconde méthode s'impose. D'autre part, il est prudent, de désactiver l'accrochage aux objets pour éviter qu'un accrochage actif (extrémité par exemple) ne prime sur les coordonnées définies dans le code. Il est aussi préférable de déclarer les variables locales (après le slash) pour qu'elle soient "anihilées" (renvoyée à nil) à la fin de la routine. Ton code "corrigé" : (defun c:corniere (/ accrobj aile1 aile2 ep long pt1 pt2 pt3 pt4 pt5); Déclaration des variables locales ;; Enregistrement de l'accochage aux objets (setq accrobj (getvar "osmode")) ;; Désactivation des accrochages aux objet (setvar "osmode" 0) ;; Entrées utilisateur (setq aile1 (getint "longueur de la premiere aile:")) (setq aile2 (getint "longueur de la deuxieme aile:")) (setq ep (getint "epaisseur:")) (setq long (getint "longueur de la corniere:")) ;; Positionnement des points (setq pt1 (polar '(0 0) 0 aile1)) (setq pt2 (polar pt1 (/ pi 2) ep)) (setq pt3 (polar pt2 pi (- aile1 ep))) (setq pt4 (polar pt3 (/ pi 2) (- aile2 ep))) (setq pt5 (polar pt4 pi ep)) ;; Création de la polyligne fermée, "_c" pour clore (command "_pline" '(0 0) pt1 pt2 pt3 pt4 pt5 "_c") ;; Restauration de l'accrochage aux objets (setvar "osmode" accrobj) (princ) ) Il serait aussi possible de faire choisir à l'utilisateur le point d'origine de la cornière avec un (setq pt0 (getpoint "\nCoin de la cornière: ")) pour remplacer le '(0 0).
-
Salut, Une suggestion : la variable PELLIPSE à 1 avant de faire une ellipse génère une ellipse sous forme de polyligne 2D. Une autre : une polyligne lissée (commande PEDIT) à la place d'une spline, dans ce cas, soit option Lissage soit option sPline avec la variable SPLINETYPE à 5 pour une courbe Quadratic ou à 6 pour une courbe Cubic. En espérant avoir répondu à tes attentes. [Edité le 22/10/2005 par (gile)]
-
Salut et bienvenue, La question que tu pose est récurente parce qu'on touche là les limites d'AutoCAD en 3D. Une recherche sur hélicoïde, hélice, colimaçon, spirale, ressort... te permettra de lire plusieurs sujets à ce propos. Il va falloir passer par de la programation, pour l'instant AutoCAD ne permet pas l'extusion sur un chemin en spline 3D. Je te propose la méthode que j'utilise pour les limons d'escaliers en colimaçon. Tu vas trouver ici un LISP pour dessiner une hélicoïde en plusieurs segments (en fait des arcs d'ellipse). En dessinant un segment d'hélicoïde par arrête du filet, avec la commande surface réglée, tu peux faire une "portion" de filet en surfacique. Si tu veux du solide, il faudra solidifier les surfaces avec M2S et faire une soustraction. Ensuite tu peux reproduire cette portion en réseau hélicoïdal avec ce LISP : Nouvelle version Ammélioration des entrées utilisateurs concernant les angles, accepte désormais : - soit l'angle décrit, soit l'angle entre les éléments - des angles supérieurs à un tour complet - des entrés directement sous forme de formules mathématiques (du types de celles utilisées avec la calculatrice géométrique d'AutoCAD). En attendant une petite boite de dialogue... ;;; C:RES_HEL Crée un réseau hélicoïdal ;;; Redéfinition de *error* (defun RES_HEL_ERR (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (command) (command "_undo" "_end") (setvar "cmdecho" v1) (setvar "osmode" v2) (setq *error* m:err m:err nil ) (princ) ) ;;;Fonction principale (defun C:RES_HEL (/ ss nb ang ht axe) (setq m:err *error* *error* RES_HEL_ERR v1 (getvar "cmdecho") v2 (getvar "osmode") ) (command "_undo" "_begin") (setvar "cmdecho" 0) (while (not (setq ss (ssget)))) (initget 7) (setq nb (getint "\nEntrez le nombre d'éléments du réseau: ")) (initget 1) (setq ht (getdist "\nSpécifiez le décalage en hauteur: ")) (initget 1) (setq axe (getpoint "\nSpécifiez le centre du réseau: ")) (initget "Décrit Elément") (if (= (getkword "\nPrécisez : angle décrit ou angle entre les éléments [Décrit/Elément] : " ) "Elément" ) (setq ang_t "angle entre les éléments") (setq ang_t "angle décrit") ) (initget 4) (if (not (setq ang (getreal (strcat "\nEntrez l'" ang_t " ou : ") ) ) ) (setq ang (atof (angtos (+ (getangle axe "\nSpécifiez le second point: ") (getvar "ANGBASE") ) ) ) ) ) (if (= ang_t "angle décrit") (setq ang (/ ang nb)) ) (initget "Horaire Trigonométrique") (if (= (getkword "\nSpécifiez le sens de rotation [Horaire/Trigonométrique] : " ) "Horaire" ) (setq ang (- ang)) ) (if (= (getvar "ANGDIR") 1) (setq ang (- ang)) ) (setvar "osmode" 0) (repeat (1- nb) (command "_copy" ss "" axe axe) (command "_rotate" ss "" axe ang) (command "_move" ss "" '(0 0) (list 0 0 ht)) ) (command "_undo" "_end") (setvar "cmdecho" v1) (setvar "osmode" v2) (setq *error* m:err m:err nil ) (princ) ) C'est fastidieux, mais le résultat est correct. Une autre routine dessine une polyligne 3D qui peut servir de chemin d'extrusion mais les objets extrudés ont tendance à partir en vrille (du moins avec moi). En espérant avoir répondu, ne serait-ce que partiellement, à tes attentes.[Edité le 31/12/2005 par (gile)] [Edité le 1/1/2006 par (gile)]
-
Encore une petite précision : si la variable système STARTUP est à 0 AutoCAD ouvre directement le fichier de gabarit spécifié dans le chemin de recherche de RAPNOUV, sans passer par la boite de dialogue.
-
fmult avec boite de dialogue
(gile) a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Au temps pour moi, j'ai répondu un peu vite :mad2: À part, peut être, en VisualLISP (et là je ne maitrise plus du tout), je ne vois pas. -
fmult avec boite de dialogue
(gile) a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Re, Tu peux enregistrer la vue courante au début de ton code : (command "_-view" "_s" "courant") Puis la traiter comme les autres vues enregistrées, et la suprimer à la fin: (command "_-view" "_d" "courant") -
Salut, D'abord tu devrais enregistrer ton gabarit au format *.DWT : Fichier -> Enregistrer sous ... -> Type de fichier -> Gabarit de dessin AutoCAD (*.dwt) Ensuite : Outils -> Options ... ->Fichiers -> Paramètre du gabarit -> nom de fichier par défaut pour RAPNOUV
-
fmult avec boite de dialogue
(gile) a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Salut' J'ai eu le même message d'erreur que jalna. Çà marche si j'efface à la fin de la ligne 34. -
Salut, Tu peux faire un peu plus court en cumulant les arguments avec (initget) : (while (/= (type DEP) 'LIST) [surligneur](initget 1 "Epaisseur")[/surligneur] (setq DEP (getpoint "\nPoint gauche semelle ou [Epaisseur] ")) (if (= DEP "Epaisseur") (setq EP (getdist "\nEpaisseur : ")) ) ) À la place de : [surligneur] [/surligneur]
-
Re, Je pense que ceci doit répondre à ta question : (mapcar '+ (trans (cdr (assoc 10 ent)) (cdr (assoc 210 ent)) 1) (list 0 0 (cdr (assoc 38 ent))) ) Attention ! Çà ne marche que si le SCU courant est parallèle au SCO. [Edité le 21/10/2005 par (gile)]
-
Salut, Si çà peut t'aider, j'avais mis au point une façon de créer une LWPOLYLINE avec entmake. J'ai aussi été confronté au problème de SCU, voilà comment j'ai résolu le problème (il y a sûrement moyen de faire plus élégant) : (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 4) ; nombre de sommets '(70 . 1) ; ouverte (0) ou fermée (1) (cons 38 (- (caddr pt1) (caddr (trans '(0 0) 0 1)))) ; élévation (cons 10 (trans pt1 1 (EXTR_DIR))) (cons 10 (trans pt4 1 (EXTR_DIR))) (cons 10 (trans pt2 1 (EXTR_DIR))) (cons 10 (trans pt3 1 (EXTR_DIR))) (cons 210 (EXTR_DIR)) ; direction d'extrusion ) ) avec : ;;; EXTR_DIR Retourne la direction d'extrusion du SCU courant (defun EXTR_DIR () (mapcar '- (trans '(0 0 1) 1 0) (trans '(0 0 0) 1 0)) ) C'est, si j'ai bien compris, l'inverse de ce que tu veux faire, mais avec la direction d'extrusion et l'élévation tu dois arriver à traduire les coordonnées des sommets. À plus.
-
Salut, Je ne suis pas sûr d'avoir compris : plan et 3D, alors plusieurs méthodes : Si ta 3D est constituée de solides, dans une présentation : SOLPROF ou SOLVIEW et SOLDRAW, dans le menu Dessin -> Solides -> Configuration. Si tu veux "applatir" une 3D tu peux aller voir là. Sinon, pour coter un dessin en 3D dans l'espace objet, il faut placer ton SCU dans le plan dans lequel tu veux voir s'afficher ta cote (et ce pour chaque "plan de cote") En espérant avoir répondu à tes questions.
-
Une désinstallation / réinstallation a résolu le problème.
-
Re, La réponse est là
-
Salut, C'est la façon d'écrire en macro (ou en LISP) les unités scientifiques : 1 multiplié par 10 puissance 99.
-
Salut, Sur AutoCAD 2002, malgré avoir placé (vl-load-com) au début de ma routine, j'ai le message d'erreur suivant : ; erreur: no function definition: VLAX-GET-ACAD-OBJECT Je n'arrive pas à comprendre pourquoi.
-
Salut, C'est là. Tu y peux y accéder par : "Menu principal -> Les ressources -> Telecharg. Membres -> AutoCAD -> Blocs dynamiques". [Edité le 11/10/2005 par (gile)]
-
Il ne s'agit que d'un léger ralentissement (quelques secondes de page blanche), rien de vraiment génant.
-
Ah, l'eau stagne quelque peu chez moi aussi ce soir. Rien à voir cependant avec ce qui a pu se produire avec "En attente de sms.rentabiliweb.com..." la semaine passée !
-
Salut, Le même, mais avec la possibilité de lancer la commande après avoir sélectionné le motif de hachures: (defun C:HPSTART (/ ent set1 base echo pt1 pt2) (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 le motif de hachures à modifier. " ) ) ) ) ) ) (setq base (getvar "snapbase") echo (getvar "cmdecho") ) (command "_undo" "_begin") (setvar "cmdecho" 0) (cond ((eq (cdr (assoc 0 (entget ent))) "HATCH") (setq pt1 (getpoint "\nPoint d'origine à établir aux hachures: ")) (setq pt2 (list (car pt1) (cadr pt1))) (setvar "SNAPBASE" pt2) (if (zerop (cdr (assoc 76 (entget ent)))) (command "_.-HATCHEDIT" ent "" "" "" "" "") (command "_.-HATCHEDIT" ent "" "" "" "") ) (setvar "snapbase" base) ) (T (princ "\nL'objet n'est pas une hachure.")) ) (command "_undo" "_end") (setvar "cmdecho" echo) (princ) ) Il est donc possible de mettre cette commande dans le menu contextuel des hachures (sélection +clic droit) en modifiant le fichier *.mns courant : ***POP509 **OBJECT_HATCH [Menu contextuel de l'objet HACHURES] ID_Hatchedit [Edition des h&achures...]^C^C_hatchedit ID_Hpstart [&Modifier l'origine]^C^Chpstart
-
Salut, D'abord mon avis : BRAVO ! Un super boulot ! Sinon j'aurais rajouté au best of quelques variables à connaitre pour la 3D : SURFTAB1 et SURFTAB2 à paramétrer avant de lancer les commandes de surfaces réglées, gauches ... DISPSILH et UCSORTHO respectivement à 0 et 1 par défaut, parce que, personnellement, je préfère l'inverse ! [Edité le 8/10/2005 par (gile)]
-
Salut, C'est exactement ce qui m'est arrivé hier soir.
-
vue isométrique 3D sans zoom étendu
(gile) a répondu à un(e) sujet de argilles dans AutoCAD 2000 à 2002
Salut Didier, Tu as raison, je pensais améliorer la routine avec le VisualLISP (exécution plus rapide) mais il n'en est rien ! Il est vrai que je ne maitrise pas ce langage, et qu'il est souvent plus "lourdingue" que l'AutoLISP. Çà m'aura fait un exercice :cool:
