Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. Pour info! Il m'arrive d'avoir ce message d'avertissement avec Firefox, mais géneralement je contourne ce problème facilement en faisant Arrêter (croix rouge), puis en actualisant la page (les 2 flèches enroulées). Et ça roule de nouveau sans problème. Par contre il m'arrive, lors d'un changement de page, d'atterrir sur une page spéciale de google, que je n'ai pas pris le temps d'étudier (succession de nom de site à la queue leu-leu présenté en 1 colonne étroite). Bizzare autant qu'étrange.
  2. Bonjour, Je cherche à faire une routine pour incrementer un nombre entier, réel, alphabétique ou alphanumérique. Si les nombres ne me posent pas de problème, j'ai plus de dificulté avec les lettres. Je vous livre le bout de code en ébauche concernant celle-ci, cela "merdouille" à partir de la chaine "azz". Si quelqu'un avait l'idée d'un algorithme, ou comment modifié le mien ou encore aborder le problème autrement. Une suggestion ? (defun inc_str (a_int / ) (cond ((and (> (ascii a_int) 47) (< (ascii a_int) 57)) (chr (1+ (ascii a_int))) ) ((and (> (ascii a_int) 64) (< (ascii a_int) 90)) (chr (1+ (ascii a_int))) ) ((and (> (ascii a_int) 96) (< (ascii a_int) 122)) (chr (1+ (ascii a_int))) ) ((= (ascii a_int) 57) (chr 48) ) ((= (ascii a_int) 90) (chr 65) ) ((= (ascii a_int) 122) (chr 97) ) (T nil) ) ) (defun c:numeroter ( / ) (setq n_ini "a") (while n_ini (setq a_ret (inc_str (substr n_ini (strlen n_ini) 1)) n 0) (while (or (= a_ret "A") (= a_ret "a") (= a_ret "0")) (setq n (1+ n)) (if (> (strlen n_ini) n) (setq l_tmp '() n_ini (strcat (substr n_ini 1 (- (strlen n_ini) n)) (apply 'strcat (repeat n (setq l_tmp (cons a_ret l_tmp))))) a_ret (inc_str (substr n_ini (- (strlen n_ini) n) 1)) n_ini (strcat (if (> (strlen n_ini) (1+ (length l_tmp))) (substr n_ini 1 (- (strlen n_ini) (1+ (length l_tmp)))) "") a_ret (substr n_ini (strlen n_ini) 1) ) a_ret (if (and (/= a_ret "A") (/= a_ret "a") (/= a_ret "0")) "" a_ret) ) (setq l_tmp '() n_ini (apply 'strcat (repeat (1+ (strlen n_ini)) (setq l_tmp (cons a_ret l_tmp)))) a_ret "" ) ) ) (if (/= a_ret "") (setq n_ini (strcat (substr n_ini 1 (1- (strlen n_ini))) a_ret)) ) (grread) (print n_ini) ) (prin1) ) Bien sûr à l'achèvement de cette routine (si j'y arrive !), elle sera publiée sur CADxp.
  3. bonuscad

    Dessiner un trapèze

    HiHi, Que tu dis :P Un prog n'est jamais parfait, ni achevé. Je suis sûr que tu apporteras encore des modifs, surtout si tu as été piqué par le "vice". En tout cas tu te débrouille bien! Des remarques seraient possibles, mais bon si t'arrête.... :o
  4. bonuscad

    moulinette XYZ

    Je suis étonné que tu rencontre une telle erreur, je ne me l'explique pas car cette routine a déjà beaucoup servie et sous plusieurs version. Concue sous une version 10 DOS, elle a subie peu de modifications, ce qui explique qu'elle ne lit pas les fichiers Excel (pour Patrick 35) et je deviens flemmard pour l'améliorer. La raison est qu'il est facile de générer un fichier ASCII a partir d'excel et que même si je le faisais, il faudrait aussi envisager OpenOffice ou autre tableur. En restant avec le fichier ASCII, c'est une compatibilité assurée. Pour en revenir à nos moutons, est ce que le code suivant directement collé en ligne de commande pose problème? ((lambda ( ) (cond ((null (tblsearch "STYLE" "$SPEC-LSP")) (command "._style" "$spec-lsp" "simplex" "0.0" "1.0" "0.0" "_No" "_No" "_No" ) ) ) (setvar "textstyle" "$SPEC-LSP") )) Car ton message d'erreur est relatif au style de texte, as tu fait un "U" à un moment donné qui aurait annulé ce style de texte créé? Essayes dans un dessin vierge... et dis moi si c'est couronné de succés! Si ca ne fonctionne pas, donnes moi "pas à pas" ta démarche d'utilisation. NB: Il est necessaire de recharger la routine si l'on veut implanter plusieurs fichiers XYZ. En effet la commande TOPO est vidée de la mémoire après son utilisation. J'avais trouvé utile de récupérer, à l'époque, de l'espace mémoire utilisé par une commande qui ne sert généralement qu'une fois.
  5. bonuscad

    moulinette XYZ

    Salut, Vas faire un tour dans la zone téléchargement. Tu y trouveras BonusCad, dans le zip tu pouras récupérer seulement "topo.lsp" & "topo.dcl". Cette routine te permettra d'impoter un fichier ASCII de point avec l'écriture su Z a coté du point. Normalement cette routine est capable de lire plusieurs sortes de fichiers (mais pas tous) soit avec l'espace ou la virgule comme séparateur et un fichier de type N° X Y Z cod ou N° X Y Z ou XYZ ou XY. Tu a aussi la routine "semfic.lsp" a récupérer qui fait l'inverse (crée un fichier ASCII XYZ) avec les point 3D sélectionnés dans le dessin NB:Topo.lsp et topo.DCL sont à placer dans un dossier de recherche (à cause de la boite de dialogue").
  6. bonuscad

    Dessiner un trapèze

    J'applause aussi, Si tu débute, on peut dire que tu assimiles très vite, car ton lisp à l'air de bien tenir la route pour les souhaits que tu avais formulé. Sans l'avoir testé à fond, j'ai quand même remarqué que tu es passé par les fonctions trigo que tu as controler (divizion par zéro) pour l'orientation , mais oublié d'appliqué pour (grvecs) ce qui fait planter la routine si le curseur se retrouve à un endroit innaproprié pendant ses déplacements. (J'ai préféré utiliser (inters) pour ne pas avoir à faire de test sur les fonctions trigos) Mis à part ce petit souci que tout pourra certainement corriger, tu peut dire que tu 'as fait un bon outil. Sans vouloir te faire de l'ombre, je me permet de monter une solution plus aboutie que la précédente. Elle fonctionne à l'instard de la commande rectangle (options d'elevation, hauteur (2D-1/2), raccord ou chanfrein et largeur de "trait" et la possibilté de rentrer les dimensions (longueur des 2 bases et hauteur, dans ce cas un "tronc" de triangle isocèle est mis en place) En dynamique si l'accrobj est actif possibilité de taper la longueur pour mettre en place par rapport à l'orientation accrochée ou simplement valider la dernière longueur utilisée) Je penses qu'on aura droit bientot d'autre réalisations, encore BRAVO ;) NB:Je ne suis aussi qu'un programmeur qui laisse certainement la possibilité de bugs dans mon code (defun gr-osmode (pt-i str-md / n pt md rap pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt56 pt67 pt78 pt85 one_o) (setq n (/ (cadr (getvar "screensize")) 5.0)) (setq pt (osnap pt-i str-md)) (while (and (eq (strlen (setq md (substr str-md 1 4))) 4) (not one_o)) (repeat 2 (setq rap (/ (getvar "viewsize") n) pt1 (list (- (car pt) rap) (- (cadr pt) rap) (caddr pt)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap) (caddr pt)) pt3 (list (+ (car pt) rap) (+ (cadr pt) rap) (caddr pt)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap) (caddr pt)) pt5 (list (car pt) (- (cadr pt) rap) (caddr pt)) pt6 (list (+ (car pt) rap) (cadr pt) (caddr pt)) pt7 (list (car pt) (+ (cadr pt) rap) (caddr pt)) pt8 (list (- (car pt) rap) (cadr pt) (caddr pt)) pt56 (polar pt (- (/ pi 4.0)) rap) pt67 (polar pt (/ pi 4.0) rap) pt78 (polar pt (- pi (/ pi 4.0)) rap) pt85 (polar pt (+ pi (/ pi 4.0)) rap) n (- n 16) ) (if (equal (osnap pt-i md) pt) (setq one_o T)) (cond ((and (eq "_end" md) one_o) (grdraw pt1 pt2 1) (grdraw pt2 pt3 1) (grdraw pt3 pt4 1) (grdraw pt4 pt1 1) ) ((and (eq "_mid" md) one_o) (grdraw pt1 pt2 1) (grdraw pt2 pt7 1) (grdraw pt7 pt1 1) ) ((and (eq "_cen" md) one_o) (grdraw pt5 pt56 1) (grdraw pt56 pt6 1) (grdraw pt6 pt67 1) (grdraw pt67 pt7 1) (grdraw pt7 pt78 1) (grdraw pt78 pt8 1) (grdraw pt8 pt85 1) (grdraw pt85 pt5 1) (grdraw pt5 pt7 7) (grdraw pt6 pt8 7) ) ((and (eq "_nod" md) one_o) (grdraw pt5 pt56 1) (grdraw pt56 pt6 1) (grdraw pt6 pt67 1) (grdraw pt67 pt7 1) (grdraw pt7 pt78 1) (grdraw pt78 pt8 1) (grdraw pt8 pt85 1) (grdraw pt85 pt5 1) (grdraw pt1 pt3 1) (grdraw pt2 pt4 1) ) ((and (eq "_qua" md) one_o) (grdraw pt5 pt6 1) (grdraw pt6 pt7 1) (grdraw pt7 pt8 1) (grdraw pt8 pt5 1) ) ((and (eq "_int" md) one_o) (grdraw pt1 pt3 1) (grdraw pt2 pt4 1) ) ((and (eq "_ins" md) one_o) (grdraw pt5 pt2 1) (grdraw pt2 pt6 1) (grdraw pt6 pt8 1) (grdraw pt8 pt4 1) (grdraw pt4 pt7 1) (grdraw pt7 pt5 1) ) ((and (eq "_per" md) one_o) (grdraw pt1 pt2 1) (grdraw pt1 pt4 1) (grdraw pt8 pt 1) (grdraw pt pt5 1) ) ((and (eq "_tan" md) one_o) (grdraw pt5 pt56 1) (grdraw pt56 pt6 1) (grdraw pt6 pt67 1) (grdraw pt67 pt7 1) (grdraw pt7 pt78 1) (grdraw pt78 pt8 1) (grdraw pt8 pt85 1) (grdraw pt85 pt5 1) (grdraw pt3 pt4 1) ) ((and (eq "_nea" md) one_o) (grdraw pt1 pt2 1) (grdraw pt2 pt4 1) (grdraw pt4 pt3 1) (grdraw pt3 pt1 1) ) ) ) (setq str-md (substr str-md 6) n (/ (cadr (getvar "screensize")) 5.0)) ) ) (defun c:trapeze_dyn ( / o mod ptx key p1 p2 pt_ext a_dir l1 l2 h f f2 e th w v1 v2 det_or ang_sp p1b p2b) (setq o (getvar "osmode")) (if (or (zerop o) (eq (boole 1 o 16384) 16384)) (setq mod "_none") (progn (setq mod "") (mapcar '(lambda (xi xs) (if (not (zerop (boole 1 o xi))) (if (zerop (strlen mod)) (setq mod (strcat mod xs)) (setq mod (strcat mod "," xs)) ) ) ) '(1 2 4 8 16 32 64 128 256 512) '("_end" "_mid" "_cen" "_nod" "_qua" "_int" "_ins" "_per" "_tan" "_nea") ) ) ) (initget 1 "COtes CHanfrein Elévation Raccord Hauteur Largeur _Dimensions Chamfer Elevation Fillet Thickness Width") (while (not (listp (setq ptx (getpoint "\nSpécifiez le point de base du trapèze ou [COtes/CHanfrein/Elévation/Raccord/Hauteur/Largeur]: ")))) (cond ((eq ptx "Dimensions") (setq l1 (getdist (strcat "\nLongueur de la 1ère base du trapèze <" (rtos (getvar "USERR1")) ">:"))) (if l1 (setvar "USERR1" l1) (setq l1 (getvar "USERR1"))) (setq l2 (getdist (strcat "\nLongueur de la 2ème base du trapèze <" (rtos (getvar "USERR2")) ">:"))) (if l2 (setvar "USERR2" l2) (setq l2 (getvar "USERR2"))) (setq h (getdist (strcat "\nHauteur du trapèze <" (rtos (getvar "USERR3")) ">:"))) (if h (setvar "USERR3" h) (setq h (getvar "USERR3"))) ) ((eq ptx "Chamfer") (setq f (getdist (strcat "\nSpécifiez l'écart du premier chanfrein des trapèzes <" (rtos (getvar "CHAMFERA")) ">: "))) (if f (setvar "CHAMFERA" f)) (setq f2 (getdist (strcat "\nSpécifiez l'écart du deuxième chanfrein des trapèzes <" (rtos (getvar "CHAMFERB")) ">: "))) (if f2 (setvar "CHAMFERB" f2)) (setvar "USERS1" "#CHAMFER") ) ((eq ptx "Elevation") (setq e (getdist (strcat "\nSpécifiez l'élévation des trapèzes <" (rtos (getvar "ELEVATION")) ">: "))) (if e (setvar "ELEVATION" e)) ) ((eq ptx "Fillet") (setq f (getdist (strcat "\nSpécifiez le rayon du raccord des trapèzes <" (rtos (getvar "FILLETRAD")) ">: ")) f2 nil) (if f (setvar "FILLETRAD" f)) (setvar "USERS1" "") ) ((eq ptx "Thickness") (setq th (getdist (strcat "\nSpécifiez la hauteur des trapèzes <" (rtos (getvar "THICKNESS")) ">: "))) (if th (setvar "THICKNESS" th)) ) ((eq ptx "Width") (setq w (getdist (strcat "\nSpécifiez la largeur de ligne des trapèzes <" (rtos (getvar "PLINEWID")) ">: "))) (if w (setvar "PLINEWID" w)) ) ) (initget 1 "COtes CHanfrein Elévation Raccord Hauteur Largeur _Dimensions Chamfer Elevation Fillet Thickness Width") ) (if (and (not l1) (not l2) (not h)) (progn (setq pt_ext (getpoint ptx (strcat "\nSpécifiez l'extrémité de la 1ère base <" (rtos (getvar "USERR1")) ">:"))) (if (null pt_ext) (progn (setq pt_ext (osnap (cadr (grread T)) mod)) (if pt_ext (setq pt_ext (list (car pt_ext) (cadr pt_ext) (caddr ptx)) pt_ext (polar ptx (angle ptx pt_ext) (getvar "USERR1")) l1 (distance ptx pt_ext) a_dir (angle ptx pt_ext) ) (setq a_dir (angle ptx (cadr (grread T))) pt_ext (polar ptx a_dir (getvar "USERR1")) ) ) ) (setq pt_ext (list (car pt_ext) (cadr pt_ext) (caddr ptx)) l1 (distance ptx pt_ext) a_dir (angle ptx pt_ext) ) ) (if l1 (setvar "USERR1" l1) (setq l1 (getvar "USERR1"))) (grvecs (list ptx pt_ext)) (setq h (getdist (list (/ (+ (car ptx) (car pt_ext)) 2) (/ (+ (cadr ptx) (cadr pt_ext)) 2) (caddr ptx)) (strcat "\nSpécifiez la hauteur du trapèze <" (rtos (getvar "USERR3")) ">:")) loop T value "") (if h (setvar "USERR3" h) (setq h (getvar "USERR3"))) (princ (strcat "\nSpécifiez le point déterminant le 1er angle du trapèze <" (angtos (getvar "USERR4")) ">: ")) (while (and (setq key (grread T 4 0)) (/= (car key) 3) loop) (cond ((eq (car key) 5) (redraw) (if (and (/= mod "_none") (osnap (cadr key) mod)) (progn (gr-osmode (cadr key) mod) (setq key (list (car key) (list (car (osnap (cadr key) mod)) (cadr (osnap (cadr key) mod)) (caddr ptx)))) ) (setq key (list (car key) (list (caadr key) (cadadr key) (caddr ptx)))) ) (setq v1 (mapcar '- ptx pt_ext) v2 (mapcar '- (cadr key) ptx) det_or (apply '(lambda (x1 y1 z1 x2 y2 z2) (- (* x1 y2) (* y1 x2))) (append v1 v2)) ) (cond ((< det_or 0.0) (setq ang_sp (/ pi 2))) ((> det_or 0.0) (setq ang_sp (- (/ pi 2)))) (T (setq ang_sp nil)) ) (cond (ang_sp (setq p1b (polar ptx (+ (angle ptx pt_ext) ang_sp) h) p2b (polar pt_ext (+ (angle ptx pt_ext) ang_sp) h) p1 (inters p1b p2b ptx (cadr key) nil) ) (if p1 (grvecs (list ptx pt_ext pt_ext p2b p2b p1 p1 ptx 1 ptx (cadr key) ) )) ) ) ) ((or (member key '((2 13) (2 32))) (eq (car key) 25)) (if (and (not (zerop (strlen value))) (or (eq (type (read value)) 'INT) (eq (type (read value)) 'REAL))) (setvar "USERR4" (angtof value)) ) (setq p1 (polar ptx (+ a_dir (getvar "USERR4")) (/ h (sin (getvar "USERR4")))) p2b (polar pt_ext (- (+ a_dir pi) (getvar "USERR4")) (/ h (sin (getvar "USERR4")))) loop nil ) (grvecs (list ptx pt_ext pt_ext p2b p2b p1 p1 ptx ) ) (princ "\n") ) (T (if (eq (cadr key) 8) (progn (setq value (substr value 1 (1- (strlen value)))) (princ (chr 8)) (princ (chr 32)) ) (setq value (strcat value (chr (cadr key)))) ) (princ (chr (cadr key))) ) ) ) (setq loop T value "") (princ (strcat "\nSpécifiez le point déterminant le 2ème angle du trapèze <" (angtos (getvar "USERR5")) ">: ")) (while (and (setq key (grread T 4 0)) (/= (car key) 3) loop) (cond ((eq (car key) 5) (redraw) (if (and (/= mod "_none") (osnap (cadr key) mod)) (progn (gr-osmode (cadr key) mod) (setq key (list (car key) (list (car (osnap (cadr key) mod)) (cadr (osnap (cadr key) mod)) (caddr ptx)))) ) (setq key (list (car key) (list (caadr key) (cadadr key) (caddr ptx)))) ) (setq p2b (polar pt_ext (+ (angle ptx pt_ext) ang_sp) h) p2 (inters p1b p2b pt_ext (cadr key) nil) ) (if p2 (grvecs (list ptx pt_ext pt_ext p2 p2 p1 p1 ptx 1 pt_ext (cadr key) ) )) ) ((or (member key '((2 13) (2 32))) (eq (car key) 25)) (if (and (not (zerop (strlen value))) (or (eq (type (read value)) 'INT) (eq (type (read value)) 'REAL))) (setvar "USERR5" (angtof value)) ) (setq p2 (polar pt_ext (- (+ a_dir pi) (getvar "USERR5")) (/ h (sin (getvar "USERR5")))) loop nil ) (grvecs (list ptx pt_ext pt_ext p2 p2 p1 p1 ptx ) ) (princ "\n") ) (T (if (eq (cadr key) 8) (progn (setq value (substr value 1 (1- (strlen value)))) (princ (chr 8)) (princ (chr 32)) ) (setq value (strcat value (chr (cadr key)))) ) (princ (chr (cadr key))) ) ) ) (redraw) ) (progn (setq pt_ext (list (+ (car ptx) l1) (cadr ptx) (caddr ptx)) p1 (list (+ (car ptx) (/ (- l1 l2) 2.0)) (+ (cadr ptx) h) (caddr ptx)) p2 (list (+ (car ptx) l2 (/ (- l1 l2) 2.0)) (+ (cadr ptx) h) (caddr ptx)) ) ) ) (if (not (zerop (getvar "ELEVATION"))) (setq e (getvar "ELEVATION"))) (setq th (getvar "THICKNESS") w (getvar "PLINEWID")) (if (eq (getvar "USERS1") "#CHAMFER") (setq f (getvar "CHAMFERA") f2 (getvar "CHAMFERB")) (setq f (getvar "FILLETRAD") f2 nil)) (cond ((and ptx pt_ext p1 p2) (setvar "USERR1" (distance ptx pt_ext)) (setvar "USERR2" (distance p1 p2)) (setvar "USERR3" h) (setvar "USERR4" (- (angle ptx p1) (angle ptx pt_ext))) (setvar "USERR5" (- (angle pt_ext ptx) (angle pt_ext p2))) (setvar "cmdecho" 0) (command "_.undo" "_group") (setvar "osmode" 0) (command "_.pline" ptx "_width" w w (list (car ptx) (cadr ptx)) (list (car pt_ext) (cadr pt_ext)) (list (car p2) (cadr p2)) (list (car p1) (cadr p1)) "_close") (cond ((and f f2) (setvar "trimmode" 1) (command "_.chamfer" "_polyline" (entlast)) ) ((and f (not f2)) (setvar "trimmode" 1) (command "_.fillet" "_polyline" (entlast)) ) ) (if e (command "_.change" (entlast) "" "_properties" "_elevation" e "")) (if th (command "_.change" (entlast) "" "_properties" "_thickness" th "")) (setvar "osmode" o) (command "_.undo" "_end") (setvar "cmdecho" 1) (if (not a_dir) (command "_.rotate" (entlast) "" "_none" ptx)) ) ) (prin1) ) Code modifié à l'édition: Les angles peuvent être introduits au clavier ou graphiquement et leur valeur peuvent reservir à la prochaine utilisation. <font class=edite>[Edité le 13/5/2005 par bonuscad]</font>
  7. Sur les machines Win-98 et Win-Me, j'avais trouvé un fichiers BAT créé parc Gérard Mélone qui m'a fois ne m'a jamais créé de graves problèmes sous cet envirronnement et a toujours bien nettoyé et almélioré le fonctionnement de windows. Pour XP je n'ai jamais osé et essayer de m'en servir. Mais je ne pense pas qu'il fonctionne. Mais sa lecture peut donné quelques infos sur des fichiers qu'on doit pouvoir éliminés (pour les avertis de la syntaxe DOS et la structure XP) De souvenir il effacait les .DAT qui ont tendance à grossir lors de l'utilisations de Windows et que Windows est capable de reconstruire vierge (à vérifier avec XP) http://gerard.melone.free.fr/Delindex/Delindex40/Delindex.html
  8. Bonjour; En effet l'usage de tablette remonte à loin, De souvenir il faut d'abord configurer la tablette (opération a ne réaliser qu'une seule fois) ou tu vas déterminer tes zones de menu en cliquant les coins bas gauche et haut droit et en fournissant les nombres de colones et rangées que la zone de menu utilise. pui la zone de pointage écran. Normalement le menu tablette est fourni en DWG, tu n'as qu'a l'imprimer et a le scotcher sur ta tablette. Pour la zone graphique en mode digitalisation tu peut fournir la zone totale de ta tablette, ou repointer ta zone écran minuscule de ton menu tablette (en faisant comme ceci tu as toujours à disposition tes commande sur la tablette et évite de basculer du mode actif à inatif) Pour une digitalisation il faut toujours calibrer sa tablette par rapport a des points connus sur le plan à digitaliser. Mais la posibilité d'utiliser l'insertion d' images raster est à mon gout beaucoup plus pratique pour faire de la digitalisation à l'écran, quitte à remettre la reproduction à l'échelle et bien orientée. D'ailleurs l'usage des tablettes a eu tendance à disparaitre depuis cette posibilité d'insertion d'image.
  9. Merci RebCAO d'avoir fait la recherche à ma place ;) Je savais avoir répondu déjà a cette question, mais comme tu le dis si bien, il faut savoir choisir le mot clé le plus pertinent et ce n'est pas le plus évident!
  10. Voici un extrait de l'aide:
  11. bonuscad

    sens du décalage

    En tout cas, ta découverte de l'usage de valeur négative avec vlax-invoke-method, permet de faire une routine sympa pour décaler de chaque cotés, c'est peut être ce que tu voulait faire, mais en plus en capsulant les extémités, d'ou ton problème de parcours. Mais il y a quand même quelque chose qui m'échappe, en sachant qu'une valeur négative pour "OFFSETDIST" correspond a l'option "Par le point", je me demande bien comment vlax fait pour traiter cette valeur d'une autre manière. En tout cas le code suivant fonctionne bien et est très court, Merci Tramber ;) (defun c:dbl_offset ( / val_offset ent vla_obj) (setq val_offset (getdist (strcat "\nLargeur du décalage <" (rtos (getvar "USERR1")) ">:"))) (if (not val_offset) (setq val_offset (getvar "USERR1")) (setvar "USERR1" val_offset)) (while (null (setq ent (entsel "\nChoix de l'objet à décaler de part et d'autre: ")))) (setq ent (car ent)) (setq vla_obj (vlax-ename->vla-object ent)) (vlax-invoke-method vla_obj "Offset" (- (/ val_offset 2.0))) (vlax-invoke-method vla_obj "Offset" (/ val_offset 2.0)) (entdel ent) (princ) )
  12. bonuscad

    Dessiner un trapèze

    Voici une ébauche de ce qu'on pourrait faire avec (ggread) La routine permettra de dessiner un trapeze en forme de "tronc de triangle" , c'est à dire quel les angles seront déterminés par la position du curseur. Enfin le mieux c'est d'essayer! C'est le corps principal, tout ceci peut être amélioré, gestions d'erreurs , accrobjet avec (grread).... (defun c:trapeze ( / ) (setq ptx (getpoint "\nSpécifiez le point de base du trapèze: ")) (setq pt_ext (getpoint ptx "\nSpécifiez l'extrémité de la grande base: ")) (grvecs (list ptx pt_ext)) (setq h (getdist (list (/ (+ (car ptx) (car pt_ext)) 2) (/ (+ (cadr ptx) (cadr pt_ext)) 2) (/ (+ (caddr ptx) (caddr pt_ext)) 2)) "\nSpécifiez la hauteur du trapèze: ")) (princ "\nSpécifiez le point déterminant les angles du trapèze.") (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (redraw) (setq v1 (mapcar '- ptx pt_ext) v2 (mapcar '- (cadr key) ptx) det_or (apply '(lambda (x1 y1 z1 x2 y2 z2) (- (* x1 y2) (* y1 x2))) (append v1 v2)) ) (cond ((< det_or 0.0) (setq ang_sp (/ pi 2))) ((> det_or 0.0) (setq ang_sp (- (/ pi 2)))) (T (setq ang_sp nil)) ) (cond (ang_sp (setq p1b (polar ptx (+ (angle ptx pt_ext) ang_sp) h) p2b (polar pt_ext (+ (angle ptx pt_ext) ang_sp) h) p1 (inters p1b p2b ptx (cadr key) nil) p2 (inters p1b p2b pt_ext (cadr key) nil) ) (grvecs (list ptx pt_ext pt_ext p2 p2 p1 p1 ptx ) ) ) ) ) ) ) (prin1) )
  13. bonuscad

    Créer calque

    Une méthode plus sure. (make_layer "toto") crer un calque toto avec la couleur 7 et type de ligne "Continuous" en s'assurant qu'il n'existe déjà! (defun make_layer (name / ) (if (not (tblsearch "LAYER" name)) (entmake (append '((0 . "LAYER") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord")) (list (cons 2 name)) '((70 . 0) (62 . 7) (370 . -3) (6 . "Continuous") )) ) ) )
  14. bonuscad

    gestion d\'erreur

    Peut être, j'ai pas fait le test, la variable "ERRNO"
  15. bonuscad

    SCU de nouveau

    Une macro que j'utilise pour basculer une vue. ^C^C^P$M=$(if,$(!=,$(getvar,cvport),2),_.mspace;)_.ucs;_3point;\\\_.plan;_current;_.ucs;_world;^Z
  16. Cela sert que lorsque la routine est achevée de remettre les variables déclarées à "nil" (rien, vide) Tu récupère ainsi de l'espace mémoire qui a servi au stockage des variables et évite aussi lors d'un appel ultérieur de la routine d'utiliser la valeur d'une variable (si le lisp n'est pas très bien monté) qui pourrait fausser le déroulement du code. Si ceci n'est pas fait ex (defun c:limul ( / ) tu pourras interroger tes variables utilisées à la fin de ta routine par !def_color (par exemple) au message commande: qui te retournera 100 (dernière valeur utilisée). Ce mode peut être utile en phase de débug
  17. Bonjour Un utilisateur a posé une question sur le forum d'AutoDesk pour savoir comment inactiver ou activer une image rapidement en lisp pour éviter de passer la boite de propriété ou autre menu en cascade. Ayant trouvé l'idée interessante, en réponse je lui ai joint cette routine qu'on peut associer à un bouton si l'on en fait un usage fréquent. NB: C'est une commande à bascule (defun c:imag_on-off ( / ent dxf_ent flag_display new_flag) (while (not (setq ent (entsel "\nSélectionner une image: ")))) (setq dxf_ent (entget (car ent))) (cond ((eq (cdr (assoc 0 dxf_ent)) "IMAGE") (setq flag_display (cdr (assoc 70 dxf_ent))) (if (zerop (boole 1 flag_display 1)) (setq new_flag (1+ flag_display)) (setq new_flag (1- flag_display)) ) (entmod (subst (cons 70 new_flag) (assoc 70 dxf_ent) dxf_ent)) ) (T (princ "\nN'est pas une image!") ) ) (prin1) )
  18. C'est vrai que cette doc en ligne en anglais exclu toute les personnes pas famillère avec l'english. Mais l'exclusion de nos jour est monnaie courante :mad: Tiens un nouveau jus, justement concernant initget, cela te permet de valider la dernière largeur, d'en entrer une nouvelle, ou de quitter la procédure. (defun c:limul (/ old_color old_plw w_pl def_color) (setq old_color (getvar "CECOLOR") old_plw (getvar "PLINEWID")) (initget 4 "Quitter _Quit") (while (/= (setq w_pl (getdist (strcat "\nLargeur de la polyligne/[Quitter] <" (rtos (getvar "PLINEWID")) ">: "))) "Quit") (if w_pl (setvar "PLINEWID" w_pl)) (setq def_color 50) (repeat 2 (setvar "CECOLOR" (itoa def_color)) (command "_.pline") (while (not (zerop (getvar "cmdactive"))) (command pause) ) (setq def_color 100) ) (initget 4 "Quitter _Quit") ) (setvar "CECOLOR" old_color) (setvar "PLINEWID" old_plw) (prin1) ) En voyant l'évolution, on comprend mieux. ;)
  19. (initget [bits] [chaine]) sert de fonction de controle d'entrée utilisateur pour toute les fonctions (get????) sauf (getstring) ainsi que (?entsel?) Suivant comment est amé le bit de controle, une réponse ne répondant pas aux exigences sera refusé et redemandé. ici (initget 4) refuse toute entrée négative car PLINEWID refuserait une telle valeur. Voir l'aide sur iniget pour les bit de controle
  20. Ou encore cela ne rejoint-il pas ce sujet
  21. Pour écrire sur tout type de courbes il y a CURVTEXT de Jacque Cedille disponible dans la zone de téléchargement. Seul problème, c'est que c'est un ARX, il n' est peut être pas portable sur les différentes version d'Autocad.
  22. Oli553, ta routine encore un peu amélioré. Elle permet en fait de boucler tant que tu rentre une largeur pour la polyligne à tracer, cela évite ton (repeat 100 que tu devras "Breaker" par un "ESC". Pour introduire une longueur cela serait possible, mais l'ennui et que la commande "_pline" option "_length" s'appui sur la valeur de la variable "LASTANGLE" (qui est en lecture seule) pour diriger le segment, et cela n'est pas forcément l'orientation que tu désire. Toujours est il que tu peux travailler avec les longueurs avec la routine si tu connais tes angles d'orientation. Il te suffit d'introduire par ex: "@142.5<<45" cela te donnera un segment de 142.5 de long avec un angle de 45° absolu. (defun c:limul (/ old_color old_plw w_pl def_color) (setq old_color (getvar "CECOLOR") old_plw (getvar "PLINEWID")) (initget 4) (while (setq w_pl (getdist "\nLargeur de la polyligne: ")) (setvar "PLINEWID" w_pl) (setq def_color 50) (repeat 2 (setvar "CECOLOR" (itoa def_color)) (command "_.pline") (while (not (zerop (getvar "cmdactive"))) (command pause) ) (setq def_color 100) ) (initget 4) ) (setvar "CECOLOR" old_color) (setvar "PLINEWID" old_plw) (prin1) )
  23. Merci Zebulon pour la piste fournie concernant le mode "osnap". J'irais fouiller dans ce sens voir si je trouve des fonction interressantes que je pourrrais exploitées..
  24. Tu t'attaques à un problème ardu. Tu as fair référence un une routine que j'ai écrite, je te conseille de regardé plutôt celle-ci http://www.cadxp.com/sujetXForum-4728.htm qui seras un peu plus facile à décortiquer. De toute façon dans les 2 j'ai résolu partiellement l'accrobj en utilisant (osnap) et il possible aussi de taper un réel pour donner une distance fixe dans la direction de la position du curseur, donc je pense qu'il serait possible de le faire pour des coordonnées. Mais il faut reconnaitre que cela necessite un code relativement lourd pour faire pas grand chose... et par forcément fiable à 100% Si tu veux te plus amples explications pour décortiquer le code, fait signe ;)
  25. Où tout simplement en modifiant légèrement le lisp de tramber, SI j'ai bien compris la question d'alternance. (defun c:limul (/ old_color def_color) (setq old_color (getvar "CECOLOR") def_color 50 ) (repeat 2 (setvar "CECOLOR" (itoa def_color)) (command "_.pline") (while (not (zerop (getvar "cmdactive"))) (command pause) ) (setq def_color 100) ) (setvar "CECOLOR" old_color) (prin1) )
×
×
  • 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é