gile
Membres-
Compteur de contenus
89 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par gile
-
Joli coup Bonuscad ! Mais c'est pas un peu grobsétionnel ! Tu devrais peut-être prendre un nouveau pseudo genre grlisp
-
Salut, Comme les icones (et leurs codes) ont changé entre 2002 et 2004 la migration ne se fait pas. Certaines icones que tu cites existent bien dans 2004 mais aligner, par exemple, n'a pas d'icone ni en 2002 ni en 2004 il doit s'agir d'une icone personnalisée. Essaye "Rechercher dans les forums" tape "icone" il y a déjà eu plusieurs post sur ce sujet. A plus.
-
Comme je ne peux pas rester connecté et puisqu'on parle de traçage d'arcs, j'avais çà au fond d'un tiroir: http://img72.echo.cx/img72/8334/cintres4xy.jpg J'espère avoir répondu à tes attentes. [Edité le 22/6/2005 par gile]
-
Voilà : http://img57.echo.cx/img57/2663/chapeau2gf.png si l'arc central n'est pas un arc simple (anse de panier) fais moi signe, mais le principe est le même : les arcs sont tangents si leurs rayons au point de jonction sont situé sur la même droite. [Edité le 22/6/2005 par gile]
-
En règle générale, les arcs aux extrémités démarrent tangents à l'horizotale et l'arc central leur est tangent, donc les centres d'un arc de départ et de l'arc central sont situés sur la même droite que leur point de raccordement. C'est ce que fait polyligne option arc ou arc option continuer. Je te fais un petit shéma.
-
Salut, Qu'est ce que tu entends par la méthode, mon premier patron (ébéniste) les traçaient avec des couvercles de pots de différents diamètres. Plus sérieusement, quel style de chapeau de gendarme ? A plus [Edité le 22/6/2005 par gile]
-
Auriez vous une explication sur (vlax-curve ?
gile a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
La solution de Titifonky semble marcher dans tous les cas, personnellement je ne vois aucune explication mathématique mais ce type de langage "objet" m'est très obscur. -
je peux plus ajuster prolonger et effacer
gile a répondu à un(e) sujet de samiste dans AutoCAD 2000 à 2002
Salut, Les variables système sont décrites dans l'aide d'AutoCAD -> Sommaire -> Présentation des commandes -> Variables système -
Auriez vous une explication sur (vlax-curve ?
gile a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Salut, Je ne sais pas si çà t'aide vraiment mais dans le même esprit (sans ActiveX) j'avais pondu çà : ;;; LONGOBJT Retourne la longueur ou le périmètre d'un objet (type entsel ou ename) (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. (defun ANGARC (arc / ang) (setq ang (- (GETVAL 51 arc) (GETVAL 50 arc))) (if (minusp ang) (setq ang (+ (* 2 pi) ang)) ) ang ) ;;; 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 (vl-consp ele)) nil) ; élément invalide ((= (type (car ele)) 'ENAME) ; liste entsel (cdr (assoc grp (entget (car ele)))) ) (T (cdr (assoc grp ele))) ; liste entget ) ) -
Ce programme ne contient pas de code pour la gestion des erreurs (il oublie aussi de remettre cmdecho à 1). Il suffit donc qu'il y ait une erreur (ou un "echap") en cours d'exécution pour que les variables ne soient pas remises à leurs valeurs initiales. Il faut donc redéfinir *error* : (defun compteur_err (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (setvar "filedia" 1) (setvar "cmddia" 1) (setvar "cmdecho 1") (setq *error* m:err m:err nil ) (princ) ) et charger la nouvelle définition au début de "compteur" (avant les premiers "setvar") en sauvegardant l'ancienne dans une variable (m:err) : (setq m:err *error* *error* compteur_err) qu'on restaure à la fin (après les derniers "setvar") : (setq *error* m:err m:err nil) Il se peut aussi que la commande U n'annule pas tout le groupe de commandes. Pour çà va voir dans ce message et dans celui-ci, plusieurs solutions y sont proposées.
-
Tu peux coller le code suivant avant (setq position T) par exemple : (initget "Aligne Fixé Centre Milieu Droite HG HC HD MG MC MD BG BC BD") (setq justif (getkword "\nChoisissez une option de justification [Aligne/Fixé/Centre/Milieu/Droite/HG/HC/HD/MG/MC/MD/BG/BC/BD]: " ) ) et ensuite : (command "_text" "_style" nom_style "_justify" justif position ht_style 0 lib_texte) (command "_text" "_style" nom_style "_justify" justif position 0 lib_texte)
-
Salut, Je ne pense pas qu'on puisse créer des alias pour les sous-commandes, mais pour un accrochage à la perpendiculaire (par exemple) il suffit de taper PER. Et, attention en créant de nouveaux alias tu risque d'en écraser des existants (P est l'alias de la commande pan) [Edité le 16/6/2005 par gile]
-
Salut Manuk, Pour modifier la justification, il faut ajouter aux lignes : (command "texte" "st" nom_style position ht_style 0 lib_texte) (command "texte" "st" nom_style position 0 lib_texte) l'option Justifier et un mode (Mileu Centre par exemple) (command "_text" "_style" nom_style [surligneur]"_justify" "_mc"[/surligneur] position ht_style 0 lib_texte) (command "_text" "_style" nom_style [surligneur]"_justify" "_mc"[/surligneur] position 0 lib_texte) Il est aussi préférable d'écrire en langage international ("_text" plutôt que "texte") Bonuscad m'a coiffé au poteau, mais j'ai vérifié, çà marche. [Edité le 16/6/2005 par gile]
-
Serge, Je viens seulement de voir ta réponse. Il me semble que nous sommes d'accord quand à l'utilisation de différents styles suivant les circonstances. Je voulais livrer, dans ce forum (routines LISP), le résultat de ce que m'avait apporté l'aide fournie dans un autre forum (Débuter en LISP) sous une forme directement utilisable. Je pense que ce programme peut être utile à d'autre (il l'est pour moi), mais peut être que tous les "vieux Autocadiens" ont déjà quelque chose de similaire dans leur caisse à outils. En tous cas, merci encore. Aplus.
-
C'est tout à fait cela ! Que ce soit avec Vlisp ou Autolisp, quand une fonction appelle une autre fonction si ce n'est pas une fonction pré-définie dans AutoCAD (celle qui apparaissent en bleu dans l'éditeur VisualLisp) il faut qu'elle soit chargée (dans le dessin en cours ou dans la session). il y a plusieurs façons de charger des fonctions à chaque démarrage pour qu'elles soient disponibles : à partir de la boite dialogue "charger une application..." cliquer sur le bouton "contenu" et "ajouter", copier les codes dans certains fichiers acaddoc200*.lsp, *.mnl...L'aide explique assez bien comment faire (guide de la personnalisation). Sinon tu trouveras beaucoup d'informations ici
-
Dans l'onglet "Outils" -> "Charger une application..." par exemple ou la copier dans l'éditeur VisualLISP et la charger à partir de là
-
Avant le premier appel à une fonction VL il faut activer la fonctionalité ActiveX en faisant un (vl-load-com) Il faut aussi, bien sûr que VxGetInters soit chargé. Là çà devrait marcher.
-
Re-salut Attention, VxGetInters retourne une liste de points, eh oui, il peut y avoir plusieurs intersections. Donc, pour ton (ou tes) point(s) d'intersection il faut faire, pour un point à la première intersection : (command "_point" (car (VxGetInters (vlax-ename->vla-object (car (entsel "\nPremier objet: "))) (vlax-ename->vla-object (car (entsel "\nDeuxième objet: "))) 0 ) ) ) ou, pour un point sur chaque intersection : (foreach pt (VxGetInters (vlax-ename->vla-object (car (entsel "\nPremier objet: "))) (vlax-ename->vla-object (car (entsel "\nDeuxième objet: "))) 0 ) (command "_point" pt) ) Bon courrage avec le vlisp, moi je patauge !
-
Salut mlon, Si tu veux te servir du mode d'accrochage aux objets "_int" il faut utiliser la foncton LISP (osnap) : (command "_point" (osnap pt "_int")) Dans ce cas pt est point qui doit être défini suffisamment proche de l'intersection pour que l'accrochage fonctionne. Un autre moyen, meilleur il me semble, est d'utiliser (inters). C'est une fonction LISP qui nécessite 4 arguments : des points. (inters pt1 pt2 pt3 pt4) retourne le point d'intersection du segment entre pt1 et pt2 et du segment entre pt3 et pt4. (inters pt1 pt2 pt3 pt4 nil) retourne le point d'intersection prolongé. A plus
-
Merci Serge, J'apprécie beaucoup la concision et je suis sensible au "style" d'un code lisp, mais mon propos ici est de fournir une fonction qui ressemblerait à une fonction AutoCAD et qui ne planterait pas en cas de fausse manoeuvre de l'utilisateur. Le but étant de placer un point un point sur le centre de gravité d'un ensemble d'objets pouvant avoir des densités différentes, je suis bien obligé de décomposer le code que tu propose pour faire des tests conditionnels sur la nature de l'objet (région, solide 3D ou autre) pour permettre la sélection d'autres objets (de même nature que le premier) et l'indication pour chacun de sa densité. Dans cet esprit, pour être complète, la fonction devrait aussi contenir une redéfinition de *errror* du style : (defun CENTROID_ERR (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)) ) (setq *error* m:err m:err nil ) (princ) ) et la constitution d'un groupe "undo" avec, au début de la définiton de C:CENTROID : (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)) ) (setq m:err *error* *error* CENTROID_ERR ) et (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)) ) (setq *error* m:err m:err nil ) à la fin. Merci encore, à plus
-
Encore une correction ! Je viens de m'apercevoir que "vla-get-centroid" retourne les coordonnées du centre de gravité d'une région dans le SCU alors qu'il retourne celles d'un solide dans le SCG ! J'ai [surligneur]corrigé[/surligneur] le code ci-dessus en conséquence et j'en ai profité pour l'améliorer un peu (mise en sur brillance de l'objet sélectionné). A plus. [Edité le 10/6/2005 par gile]
-
Création de calque: geler dans les autres fenêtres?
gile a répondu à un(e) sujet de toch dans AutoCAD LT 2000 à LT 2002
Salut toch, Pour chaque fenêtre activée tu peux geler des calques : "geler les calques dans la fenêtre courante ou "geler dans les nouvelles fenêtres" à partir du gestionnaire des calques. A plus. [Edité le 8/6/2005 par gile] -
Mille excuses, la routine ne pouvait fonctionner : j'avais oublié d'y inclure la définition de ADD_Z. L'erreur est maintenant réparée.
-
Salut, S'il s'agit de dessiner une hélicoïde, voici un LISP qui utilise des arcs d'ellipse plutôt que des segments de droite. Le nombre de segments elliptiques, donné par l'utilisateur, définit la "résolution" de la courbe. Cette fonction est la base du ressort 3D ;;; 10/04/05 Fonction Hélicoïde ;;; c:helicoide Crée une succession d'arcs elliptiques jointifs figurant une hélicoïde. ;;; Le nombre d'arcs décrivant la longueur d'une spire est défini par l'utilisateur. ;;; Redéfinition de *ERROR* (defun hel_err (msg) (if (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (command) (command "_ucs" "_restore" "scu_init") (command "scu" "_del" "scu_init") (command "_undo" "_end") (RESTORE_VAR) (setq *error* m:err m:err nil var_lst 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 value) (if (getvar var) (progn (setq varlist (cons (cons var (getvar var)) varlist)) (setvar var value) ) (princ (strcat "\nErreur: variable AutoCAD rejetée: " var)) ) ) ;;; 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) ) ;;; ADD_Z Ajoute "val" à la coordonnée Z du point "pt" -accepte les points type (x y)- (defun ADD_Z (pt val) (setq pt (trans pt 0 0)) (list (car pt) (cadr pt) (+ (caddr pt) val)) ) ;;; Fonction principale (defun c:helicoide (/ seg sp long sens pas ray axe pt1 pt2 pt3 ang pointA point1 point2 point3 arc) (setq m:err *error* *error* hel_err ) (command "_undo" "_begin") (SAVE&SET_VAR "cmdecho" 0) (command "_ucs" "_save" "scu_init") (princ "helicoide") ;; Saisie des données (if (not (numberp *seg_prec*)) (setq *seg_prec* 12) ; Nombre de segments par défaut ) (if (setq seg (getint (strcat "\nEntrez le nombre de segments par spire <" (itoa *seg_prec*) ">: " ) ) ) (setq *seg_prec* seg) ; Nouvelle valeur du nombre de segments (setq seg *seg_prec*) ; Valeur précédente (ou défaut) ) (while (< seg 2) (alert "Le nombre de segments par spire ne peut être inférieur à 2." ) (setq seg (getint "\nEntrez le nombre de segments par spire: ") *seg_prec* seg ) ) (initget "Segments" 7) (if (= (setq sp (getint "\nEntrez le nombre de spires ou [segments]: ")) "Segments" ) (progn (initget 7) (setq long (getint "\nEntrez le nombre de segments à tracer: ")) ) (setq long (* sp seg)) ) (initget "Droite Gauche") (if (not (setq sens (getkword "\nIndiquez le sens du pas (Droite/Gauche) : ")) ) (setq sens "Droite") ; Sens du pas par défaut (Droite) ) (initget 7) (setq pas (getdist "\nSpécifiez la valeur du pas de l'hélice: ")) (initget "Diamètre" 7) (if (= (setq ray (getdist "\nSpécifiez le rayon de l'hélice ou [Diamètre]: ")) "Diamètre" ) (progn (initget 7) (setq ray (/ (getdist "Spécifiez le diamètre de l'hélice: ") 2)) ) ) (initget 1) (setq axe (getpoint "\nSpécifiez le point à la base de l'axe: ")) ;; Conversion des données (if (equal sens "Gauche") ; Pas à gauche (setq pas (- pas) seg (- seg) ) ) (setq pt2 (polar axe 0 ray) pt1 (polar axe (+ (angle axe pt2) (/ (* 2 pi) seg)) ray) ang (atan (distance pt2 pt1) (/ pas seg)) ; Angle de l'ellipse axe (ADD_Z axe (- (/ pas (* seg 2)))) ) ;; Tracé de l'hélicoïde (SAVE&SET_VAR "osmode" 0) (repeat long (setq pt1 pt2 axe (ADD_Z axe (/ pas seg)) pt2 (polar axe (+ (angle axe pt1) (/ (* 2 pi) seg)) ray) pt2 (ADD_Z pt2 (/ pas (* seg 2))) pt3 (polar axe (+ (angle axe pt1) (/ pi seg)) ray) pointA (trans axe 1 0) point1 (trans pt1 1 0) point2 (trans pt2 1 0) point3 (trans pt3 1 0) ) (command "_ucs" "_new" "3" axe pt1 pt3) (command "_ellipse" "_arc" "c" (trans pointA 0 1) ; Centre de l'ellipse (trans point3 0 1) ; Extrémité du petit axe (/ ray (sin ang)) ; Demie longueur du grand axe (trans point1 0 1) ; Départ de l'arc (trans point2 0 1) ; Fin de l'arc ) (command "_ucs" "_restore" "scu_init") ) (command "_ucs" "_delete" "scu_init") (command "_undo" "_end") (RESTORE_VAR) (setq *error* m:err m:err nil ) (princ) ) S'ils'agit de dessiner les pales d'une hélice, j'essayerais en transformant des surfaces réglées en solides avec le LISP Maille2S ou M2S qu'on doit pouvoir trouver sur le net (mais je ne sais pas où). Et ensuite je "taillerais" dans ces solides avec les opérations booléennes. Un ou des segments d'helicoide (CF ci-dessus) pourraient servir de base pour les surfaces réglées. A plus... [Edité le 2/6/2005 par gile]
-
Salut, Clic droit dans la fenêtre de texte multiligne," Masque d'arrière-plan..." dans le menu contextuel. Nouveauté 2005 A plus...
