Aller au contenu

usegomme

Membres
  • Compteur de contenus

    621
  • Inscription

  • Dernière visite

Tout ce qui a été posté par usegomme

  1. Il y a aussi ce lisp de (gile) qui est top pour pivoter orthogonalement le scu, j'ai juste doublé des commandes pour les avoir sur le clavier coté gauche. ;; SCU orthogonaux (gile) ;s0 = Bas ;s2 = Avant ;s4 = Gauche ;s5 = Haut ;s6 = Droite ;s8 = Arrière (mapcar '(lambda (f v) (eval (list 'defun f nil (list 'command "_.ucs" "_orthog" v) '(princ) ) ) ) '(c:s0 c:s2 c:s4 c:s5 c:s6 c:s8 c:sF c:sD c:sG c:sT c:sB ) '("_bottom" "_front" "_left" "_top" "_right" "_back" "_front" "_right" "_left" "_top" "_back" ) )
  2. Un gadget de plus que j'aime bien pour tracer et placer des platines rectangulaires. On donne le point de base (au centre de la face inférieure) et la direction Z. La modif des dimensions est optionnelle (faire Espace ou Entrée pour y accéder) ;;version 02 03 2012 ;; 25 06 2012 ;; Usegomme (defun c:platine (/ p d n) (if (not (and lgx lgy lgz)) (setq lgx 400 lgy 400 lgz 20)) ;; valeur par défaut (while (not p) (setq p (getpoint (strcat "\n platine " (rtos lgx 2 4)"x"(rtos lgy 2 4)"x"(rtos lgz 2 4)", Point de départ: <ou modifier dimensions>"))) (if (not p) (progn (setq d (getdist (strcat "\n longueur <"(rtos lgx 2 4)">:"))) (if d (setq lgx d )) (setq d (getdist (strcat "\n largeur <"(rtos lgy 2 4)">:"))) (if d (setq lgy d )) (setq d (getdist (strcat "\n hauteur <"(rtos lgz 2 4)">:"))) (if d (setq lgz d )) ) ) ) (if p (progn (setvar "CMDECHO" 0) (setq n 2) (command "_ucs" "_non" p "") (setq p (getpoint '(0. 0. 0.) "\n Direction <>")) (if p (command "_ucs" "_zaxis" "" "_non" p) (setq n 1)) (command "_box" "_non" (list (* -1 (/ lgx 2)) (* -1 (/ lgy 2))) "_non" (list (/ lgx 2)(/ lgy 2) lgz )) (repeat n (command "_ucs" "_p")) (setvar "CMDECHO" 1) ) ) (princ) )
  3. Salut, si définir ton cercle par centre, direction Z puis rayon peut convenir, c'est trés facile à faire en lisp ou même dans le sens que tu indiques, je pense à un bricolage simple, si ça t'intéresse! Bon c'est sûr que pour toutes les formes ça complique mais sur la base point de départ et direction Z, on peut enchainer un choix de commandes de dessin sans difficulté.
  4. Une petites routines pour connaitre le poids total, pour de l'acier, des solides sélectionnés et aussi leurs volumes en litres. Le code en vlisp est d'origine cadxp. ;;;; Poids solide(s) 3 d en Kg d'acier ;;; et volume en litre ;;; version 04 04 2012 ;;; Usegomme (defun c:poids (/ js i ent vl_ent vol poids ) (vl-load-com) (setq js (ssget) vol 0.0 i 0 ) (repeat (sslength js) (setq ent (ssname js i) i (+ i 1)) (setq vl_ent (vlax-ename->vla-object ent)) (if (= (vla-get-ObjectName vl_ent) "AcDb3dSolid") (setq vol (+ vol (vla-get-Volume vl_ent))) ) ) (setq vol ( * vol 0.000001) ;;; en dm3 poids (* vol 7.85) ;;; poids Acier poids (strcat "Si Acier Poids = " (rtos poids 2 3) " Kg") vol (strcat "Volume = " (rtos vol 2 3) " litres ") ) (princ vol) (princ poids) (alert poids) (prin1) )
  5. Arc 3D via accrochage 3 points dans forum autocad 11 que je remet ici pour ceux qui l'auraient loupé. ;; Arc 3 D (atd) en 3 points ;;Usegomme ;;01 02 2012 (defun c:atd (/ p1 p2 p3 p2_SCG p3_SCG) (setq p1 (getpoint "\n Point de départ de l'arc:")) (setq p2 (getpoint p1 "\n 2eme point:")) (setq p3 (getpoint p2 "\n 3eme point:")) (setq p2_SCG (trans p2 1 0)) (setq p3_SCG (trans p3 1 0)) (command "_.ucs" "_non" p1 "_non" (trans p2_SCG 0 1 ) "_non" (trans p3_SCG 0 1 )) (command "_.arc" "_non" '(0. 0. 0.) "_non" (trans p2_SCG 0 1 ) "_non" (trans p3_SCG 0 1 )) ;; (command "_.ucs" "_P") (princ) ) et ;; Cercle 3 D en 3 points ;;usegomme ;;01 02 2012 (defun c:ctd (/ p1 p2 p3 p2_SCG p3_SCG) (setq p1 (getpoint "\n Cercle par 3 pts, 1er point:")) (setq p2 (getpoint p1 "\n 2eme point:")) (setq p3 (getpoint p2 "\n 3eme point:")) (setq p2_SCG (trans p2 1 0)) (setq p3_SCG (trans p3 1 0)) (command "_.ucs" "_non" p1 "_non" (trans p2_SCG 0 1 ) "_non" (trans p3_SCG 0 1 )) (command "_.circle" "_3p" "_non" '(0. 0. 0.) "_non" (trans p2_SCG 0 1 ) "_non" (trans p3_SCG 0 1 )) ;; (command "_.ucs" "_P") (princ) )
  6. Cotation linéaire 3d dans l'espace objet. Edit: nouvelle version 11 04 2012 ;; Pour mettre des cotes linéaires dans l'ESPACE OBJET ;; Pour la bonne orientation du texte la cotation se fait de gauche à droite (sauf cotes verticales) ;; si le SCU DYNAMIQUE est INACTIF ;; l'axe Y est automatiquement orienté vers le haut (Z) ;; les cotes pivotent autour de l'axe Y suivant l'orientation du 2eme point. ;; les cotes verticales se placent selon l'axe X à régler manuellement avant de coter ;; ;, si le SCU DYNAMIQUE est ACTIF ;; les cotes sont dans le plan XY ou dans le plan YZ ;; 11 04 2012 ;; usegomme (defun c:cot3d (/ n p2 p2_scg ydir) (setvar "CMDECHO" 0) (prompt "\n Specifiez le Point de départ") (command "_ucs" pause "") (setq n 1) ;; nombre chg scu (setvar "CMDECHO" 1) (if (= 0 (getvar "UCSDETECT")) (progn (setq ydir (getvar "ucsydir") n (1+ n)) ;;; orientation axe y à la verticale si besoin (cond ((= 1.0 (nth 2 ydir)) (setq n (1- n))) ((= -1.0 (nth 2 ydir)) (command "_ucs" "_x" "180")) ((= -1.0 (nth 1 ydir)) (command "_ucs" "_x" "270")) ((or (= 1.0 (nth 1 ydir))(= 1.0 (nth 0 ydir))(= -1.0 (nth 0 ydir)))(command "_ucs" "_x" "90")) ) ;;;; (setq p2 (getpoint '(0. 0. 0.) "\n 2eme point:")) (setq p2_scg (trans p2 1 0)) (if (and (equal 0 (nth 0 p2) 0.001) (equal 0 (nth 2 p2) 0.001)) ;; vertical () ;; pas de changement de scu (progn (command "_ucs" "_non" '(0. 0. 0.) "_non" (list (nth 0 p2) 0 (nth 2 p2)) "") (setq n (1+ n)) (if (= (nth 2 (getvar "ucsydir")) -1.0) (progn (command "_ucs" "_x" "180") (setq n (1+ n)))) ) ) ) ;;;;;;; scu dyn actif (progn (setq p2 (getpoint '(0. 0. 0.) "\n 2eme point:")) (setq p2_scg (trans p2 1 0)) (cond ((and (equal 0.0 (nth 0 p2) 0.01) (< 0 (nth 2 p2))) (command "_ucs" "_y" "90") (setq n (1+ n)) ) ((and (equal 0.0 (nth 0 p2) 0.01) (> 0 (nth 2 p2))) (command "_ucs" "_y" "270") (setq n (1+ n)) ) ) ) ) (command "_dimlinear" "_non" '(0. 0. 0.) "_non" (trans p2_scg 0 1)) (while (not (zerop (getvar "cmdactive")))(command pause)) (repeat n (command "_ucs" "_p")) (princ) )
  7. Cotation de niveau en 3D dans espace objet. Edit: nouvelle version, n'est plus utilisable en mode coordonnée mais redresse automatiquement l'axe Y est indique correctement en 3D les niveaux + ou - , j'avais mal testé la version précédente. ;; Pour mettre des cotes de niveau dans l'ESPACE OBJET ;; le 06 04 2012 ;; Usegomme (defun c:cotniv (/ p ydir yp lent n) (setq ydir (getvar "ucsydir") n t) ;;; orientation axe y à la verticale si besoin (cond ((= 1.0 (nth 2 ydir)) (setq n nil)) ((= -1.0 (nth 2 ydir)) (command "_ucs" "_x" "180")) ((= -1.0 (nth 1 ydir)) (command "_ucs" "_x" "270")) ((or (= 1.0 (nth 1 ydir))(= 1.0 (nth 0 ydir))(= -1.0 (nth 0 ydir)))(command "_ucs" "_x" "90")) ) (setq p (getpoint "\n point à coter :")) (setq yp (nth 1 p)) (command "_ucs" (list 0 0 (nth 2 p)) "") (command "_dimordinate" "_non" (list (nth 0 p) (nth 1 p) 0)) (while (not (zerop (getvar "cmdactive")))(command pause)) (command "_ucs" "_p") (setq lent (entget (entlast))) (if (< yp 0) (entmod (setq lent (subst (cons 1 "EL -<>") (assoc 1 lent) lent ))) ; <-- Ici préfixe cotation modifiable (entmod (setq lent (subst (cons 1 "EL +<>") (assoc 1 lent) lent ))) ; <-- Ici préfixe cotation modifiable ) (if n (command "_ucs" "_p")) (princ) )
  8. usegomme

    Bibli Lisp 2D en 3D?

    Salut Nounours44, sauf erreur, il te faut au minimum passer à la version 2007 d'autocad et sa 3D volumique. Pour rappel à cette adresse on retrouve les lisps pour la tuyauterie et chaudronnerie 3 D dont les brides. J'ai d'ailleurs quelques mises à jour à faire.
  9. J'ai trouvé fastidieuse la cde chanfrein pour couper les coins des ailes d'un fer aussi je me suis essayé avec cette routine qui permet de couper les 2 ailes en même temps et également plusieurs fers ou solides en même temps quand ils sont dans le même alignement. On peut laisser les écarts à 0 et donner la distance en même temps que la direction. Si le 1er écart est défini, la coupe à 45° et les fers orientés orthogonalement, il n'est pas utile d'indiquer de quel coté. ;; chanfreiner des solides ;; Usegomme ;; 02/02/2012 (defun c:cfr (/ p ph solides d s c px py ax ay ) (if (not ec1) (setq ec1 0 ec2 0 hcfr 1000)) ;; valeurs par défaut (princ " Sélectionnez les solides à chanfreiner :") (setq solides (ssget '((0 . "3DSOLID")))) (while (not p) (setq p (getpoint (strcat "\n Point de départ chanfrein " (rtos ec1 2 4)" x "(rtos ec2 2 4)" ou <Ecarts>:"))) (if (not p) (progn (setq d (getdist (strcat "\n Ecart1 <"(rtos ec1 2 4)">:"))) (if d (setq ec1 d )) (if (= ec2 0) (setq ec2 ec1)) (if (= ec1 0) (setq ec2 0) (progn (setq d (getdist (strcat "\n Ecart2 <"(rtos ec2 2 4)">:"))) (if d (setq ec2 d )))) ) ) ) (if (> hcfr 0) (setq ph (getpoint p (strcat "\n Direction et Hauteur du solide(s) à couper : <" (rtos hcfr 2 4) ">"))) (setq ph (getpoint p "\n Direction et Hauteur du solide(s) à couper :")) ) (if ph (setq hcfr (distance p ph))) (cond ((and p ph) (command "_ucs" "_zaxis" "_non" p "_non" ph)(setq p '(0. 0. 0.))) ((and p (> hcfr 0)) (command "_ucs" "_non" p "")(setq p '(0. 0. 0.))) (t (setq p nil) (exit)) ) (if (and (> ec1 0) (> ec2 0)) (progn (setq px (getpoint p (strcat "\n Orient coté chanfrein = "(rtos ec1 2 4)" <égal & ortho>:"))) (if px (setq ax (angle p px) py (getpoint p (strcat "\n orient 2eme coté chanfr = "(rtos ec2 2 4)" <ou "(rtos ec1 2 4)">:")))) (if py (setq ay (angle p py))) (if (and ax ay) (command "_PLINE" "_non" p "_non" (polar p ax ec1) "_non" (polar p ay ec2) "_c") (progn (if (not ax)(setq ax 0)) (command "_PLINE" "_non" (polar p ax ec1 )) (repeat 3 (command "_non" (polar p (setq ax (+ ax (* 0.5 pi))) ec1 )) ) (command "_c") ) ) ) (progn ;;; dimensions non définies 0x0, la longueur à couper est redemandée chaque fois (setq px (getpoint p "\n 1er coté Direction et Longueur à couper :")) (setq py (getpoint p "\n 2eme coté Direction et Longueur à couper :")) (if (and px py) (command "_PLINE" "_non" p "_non" px "_non" py "_c") (progn (command "_ucs" "_p") (exit)) ) ) ) (if (= 0 (getvar "delobj")) (setq c (entlast)) (setq c nil)) (command "_.extrude" "_last" "" hcfr ) (if c (entdel c)) (setq s (entlast)) (repeat (setq n (sslength solides)) (cond ((> n 1) (command "_copy" s "" "" "") (command "_subtract" (ssname solides (setq n (1- n ))) "" "_last" "") ) (t (command "_subtract" (ssname solides (1- n )) "" s "")) ) ) (if p (command "_ucs" "_p")) (princ) )
  10. Bonjour. Ouf, merci, j'ai eu peur de ne pas pouvoir refourguer ma routine. :D ;; Cercle 3 D en 3 points ;;Usegomme ;;01 02 2012 (defun c:ctd (/ p1 p2 p3 p2_SCG p3_SCG) (setq p1 (getpoint "\n Cercle par 3 pts, 1er point:")) (setq p2 (getpoint p1 "\n 2eme point:")) (setq p3 (getpoint p2 "\n 3eme point:")) (setq p2_SCG (trans p2 1 0)) (setq p3_SCG (trans p3 1 0)) (command "_.ucs" "_non" p1 "_non" (trans p2_SCG 0 1 ) "_non" (trans p3_SCG 0 1 )) (command "_.circle" "_3p" "_non" '(0. 0. 0.) "_non" (trans p2_SCG 0 1 ) "_non" (trans p3_SCG 0 1 )) ;; (command "_.ucs" "_P") (princ) )
  11. Bon, trés bien j'en suis ravi et ça va faire un petit outil à rajouter à ma liste. En fait les petites routines comme celle-ci sont simples à construire, dans ce cas la seule "subtilité" c'est la conversion des points d'un scu à l'autre, aprés il faut fouiller un peu dans la bibliothèque de lisp pour retrouver des syntaxes et quelques formules "magiques". C'est ce que je fais car je lispe trés peu et j'oublie. En passant t'aurais pas besoin de cercles par 3 points en 3d, parce que c'est pareil.
  12. Salut Dinosor, je t'ai fait la petite routine ci-dessous à voir si ça te convient. ;; Arc 3 D (atd) en 3 points ;;Usegomme ;;01 02 2012 (defun c:atd (/ p1 p2 p3 p2_SCG p3_SCG) (setq p1 (getpoint "\n Point de départ de l'arc:")) (setq p2 (getpoint p1 "\n 2eme point:")) (setq p3 (getpoint p2 "\n 3eme point:")) (setq p2_SCG (trans p2 1 0)) (setq p3_SCG (trans p3 1 0)) (command "_.ucs" "_non" p1 "_non" (trans p2_SCG 0 1 ) "_non" (trans p3_SCG 0 1 )) (command "_.arc" "_non" '(0. 0. 0.) "_non" (trans p2_SCG 0 1 ) "_non" (trans p3_SCG 0 1 )) ;; (command "_.ucs" "_P") (princ) )
  13. Un petit lisp qui est parfois bien pratique pour ajuster des solides entre eux, sans pour autant supprimer les éléments soustraits. ;; Soustraire, sans les effacer, des solides à d'autres solides ;; Usegomme ;; 30-01-2012 (defun c:as (/ saa ce sas csas n elast) ;; -> as = "ajuster" solides (princ " Sélectionnez les solides à ajuster.") (setq saa (ssget '((0 . "3DSOLID")))) (princ " Sélectionnez les solides à soustraire :") (setq sas (ssget '((0 . "3DSOLID")))) (cond ((and saa sas) (setq elast (entlast)) (repeat (setq n (sslength saa)) (command "_copy" sas "" "" "") (setq csas nil csas (ssadd)) (while (entnext elast) (ssadd (entnext elast) csas) (setq elast (entnext elast)) ) (command "_subtract" (ssname saa (setq n (1- n))) "" csas "") ) (princ) ) ) )
  14. Salut, je pense que tu as raison. Ci-joint un extrait qui ne parle pas du plafond, mais qui fait état de la raison d'être de cette pyramide et qui dit qu'elle est d'avant le déluge comme déjà évoqué. le secret de la pyramide Bonne fête et bonne année à tous
  15. Bonjour, je veux juste signaler que j'ai remplacé trou.lsp par percer.lsp qui peut percer plusieurs "solides" en une seule passe, pourvu que les perçages soient sur le même axe.
  16. Une version de XBOX.lsp pour crée des solides Edit 31 07 2012, quelques modifications (améliorations) pour essayer d'en faire un peu plus qu'un gadget. ;; XBT ;; XBoite 3D ;; fonctionne avec SCU Dyn si actif ;; Variante de XBOX.lsp 2D ;; dessine rectangle par diagonale et si a et b horiz ou vertical, rectangle,carré,triangle équilatéral,losange équil. ;; selon orientation et position du 3 eme point ou selon l'option choisie ;; la ligne de construction est une ligne normale pour pouvoir se raccrocher dessus . ;; Si point 3 = point 2 -> carré ;; Si point 3 = point 1 -> hexagone ;; si sur la même ligne ordre pts 1 2 3 -> rectangle ;; si sur la même ligne ordre pts 1 3 2 -> triangle ;; si sur la même ligne ordre pts 3 1 2 -> losange ;; usegomme ;; 06 03 2012 parallèlogramme supprimé ;; 08 03 2012 ortho (shift) permet d'aligner le 2em point sur un point décalé sans tracé boite, svt le coté le plus long (correction 02 06) ;; ortho et polaire désactivé -> commande "boite" standart pour diagonale 3D ;; 10 04 2012 démarrage avec mode polaire actif ;; 31 05 2012 SI touche shift maintenu lors du premier point -> commande "boite" standart pour diagonale 3D ;; 31 07 2012 accepte "m2p" milieu entre 2 points. (defun c:XBt (/ lp xa ya xb yb a b tolang angl_base long dg n ud boite er:xbt cvcp rectxbt) (defun er:xbt (msg) (if n (repeat n (command "_ucs" "_p"))) (if pw (setvar "plinewid" pw))(setvar "CMDECHO" 1) (setq *error* m:err m:err nil) (princ) ) (defun cvcp (coord1 coord2) (= (rtos coord1 2 4) (rtos coord2 2 4))) (defun rectxbt (a b / c d angl_base long angl_haut larg nc tpz) (setvar "CMDECHO" 0) (setq angl_base (angle a b ) long (distance a b ) tpz nil nc nil) (if (not hxbox) (setq hxbox long)) (command "_line" "_none" a "_none" b "" ) ; ligne de construction remplace grdraw (initget "Polygone Carré tRiangle Losange Hexagone Trapèze") (setq c (getpoint (strcat "\nLargeur ou [Trapèze/Polygone/Hexagone/Carré/Losange/tRiangle] <"(rtos hxbox 2 4)"> :") b )) (cond ((= c "Carré") (setq c nil nc 4)) ((= c "Hexagone") (setq c nil nc 6)) ((= c "tRiangle")(setq c (polar b (+ angl_base pi)(* 0.5 long)))) ((= c "Losange")(setq c (polar b (+ angl_base pi)(* 1.5 long)))) ((= c "Polygone") (setq c nil) (if (not (setq nc (getint "\nNombre de cotés ou <5>]: "))) (setq nc 5)) ) ((= c "Trapèze") (setq c nil) (if (not (setq tpz (getpoint b "\n3eme sommet du trapèze ou <auto>]: " ))) (setq tpz (polar b (+ angl_base (/ pi 1.5)) (* 0.5 long))) ) ) ((equal c a) (setq c nil nc 6)) ;;; Hexagone pt c = pt a ) (entdel (entlast)) (if c (if (and (= (rtos (car b ) 2 2) (rtos (car c) 2 2)) ;;; carré pt c = pt b (= (rtos (cadr b ) 2 2) (rtos (cadr c) 2 2)) ) (setq c nil nc 4) ) ) (cond ((and (not c)(not nc)(not tpz) );;; -> rectangle hauteur= hxbox (setq c (polar b (+ angl_base (* 0.5 pi)) hxbox)) (setq d (polar a (+ angl_base (* 0.5 pi)) hxbox)) ;(setq hxbox (abs (- (cadr c)(cadr b )))) ) ((and (not c)(not nc) tpz );;; -> trapèze (setq c tpz) (setq d (polar a (- (+ pi (* 2 (angle a b ))) (angle b c )) (distance b c ))) ) (c ;; if c (setq angl_haut (angle b c )) (setq ab (angle a b )) (cond ((= (angtos angl_haut 0 1) (angtos angl_base 0 1)) ;;; orientation incorrecte pour rectangle ou parallèlogr. (setq larg (distance b c )) (setq c (polar b (+ angl_base (* 0.5 pi)) larg)) ; replacé à 90° (setq d (polar c (+ angl_base pi) long)) ) ((or (= (angtos (+ angl_haut pi) 0 1) (angtos angl_base 0 1)) (= (angtos (- angl_haut pi) 0 1) (angtos angl_base 0 1)) ) ;;; orientation incorrecte pour rectangle ou parallèlogr. (setq larg (distance b c )) (setq c (polar a (+ angl_base (/ pi 3)) long ));;; ->triangle équilatéral (cond ((> larg long) (setq d (polar a (+ angl_base (* 5 (/ pi 3))) long )) ;;-> losange ;;permutation des points (setq pt c c b b pt pt nil) ) ) ) (t ;; rectangle ou parallèlogr. depuis 3 pts ; (setq d (polar c (+ angl_base pi) long)) ; (setq hxbox (abs (- (cadr c)(cadr b )))) ;(if (or (= angl_haut 0.0) (= angl_haut pi)(= angl_haut (* 0.5 pi)) (= angl_haut (* 1.5 pi))) (setq dg c)) ;; -> faire rectangle avec _box ; parallèlogramme changé en rectangle ;; 06 03 12 (if (= (cadr a) (cadr B)) (progn (setq c (list (car b ) (cadr c ))) (setq d (list (car a ) (cadr c ))) (setq hxbox (abs (- (cadr c)(cadr b )))) ) (progn (setq c (list (car c ) (cadr b ))) (setq d (list (car c ) (cadr a ))) (setq hxbox (abs (- (car c)(car b )))) ) ) (setq dg c ) ;; -> faire rectangle avec _box ; 06 03 12 ;;;; ) ) ) ; fin if c ) (cond ((and a b c d) (if epaisseur_box (setvar "plinewid" epaisseur_box)(setvar "plinewid" 0)) (command "_PLINE" "_non" a "_non" b "_non" c "_non" d "_c") (setvar "plinewid" pw) ) ((and a b c ) (if epaisseur_box (setvar "plinewid" epaisseur_box)(setvar "plinewid" 0)) (command "_PLINE" "_none" a "_non" b "_non" c "_c") (setvar "plinewid" pw) ) ((and a b nc ) (if (< nc 3) (setq nc 3)) (setq xnc nc) (if epaisseur_box (setvar "plinewid" epaisseur_box)(setvar "plinewid" 0)) (command "_PLINE" "_non" a "_non" b ) (repeat (- nc 2) (command "_non" (setq b (polar b (setq angl_base (+ angl_base (/ (* 2 pi) nc))) long))) ) (command "_c") (setvar "plinewid" pw) ) ) (setvar "CMDECHO" 1) ) ;;; fin defun rectxbt ;;;; *** début defun c:XBt *** ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq m:err *error* *error* er:xbt dg nil boite nil) (setvar "CMDECHO" 0) (cond ((<= (getvar "autosnap") 39) (setvar "autosnap" 47)) ((= 55 (getvar "autosnap")) (setvar "autosnap" 63)) ) (prompt "\n Specifiez le Point de départ") (command "_ucs" pause ) ;; ligne ci-dessous pour "m2p" si problème mettre un ; devant pour la désactiver. (while (not (equal (getvar "lastpoint") '(0.0 0.0 0.0) 0.01))(command pause)) (command "") (setq n 1) (if (= 1 (getvar "orthomode"))(setq boite t)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1er option demande axe X et Y scu *** FACULTATIVE *** (if (/= 1 (getvar "orthomode")) (if (= 0 (getvar "ucsdetect")) (progn (setq n 2)(setvar "CMDECHO" 1) (command "_ucs" "_non" '(0. 0. 0.)) (while (not (zerop (getvar "cmdactive")))(command pause)) ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2eme option demande axe Z scu *** FACULTATIVE *** ; (if (/= 1 (getvar "orthomode")) ; (if (= 0 (getvar "ucsdetect")) ; (progn ; (setq n 2) ; (prompt "\n Direction <>") ; (command "_ucs" "_zaxis" "" pause) ; ) ; ) ; ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fin options (setvar "cmdecho" 1) (cond (boite (command "_BOX" "_non" '(0. 0. 0.))(while (not (zerop (getvar "cmdactive")))(command pause))) (t ;;;****** (setq pw (getvar "plinewid") ; svgd epais polylign lp (getvar "lastpoint") ;pour controle cde rectang ud (getvar "UCSDETECT") ) (setvar "UCSDETECT" 0) (setq a '(0. 0. 0.)) (cond ((and (= (getvar "orthomode") 0 ) (or (<= (getvar "autosnap") 39) (= (getvar "autosnap") 55 )) ) (command "_box" "_non" '(0. 0. 0.))(while (not (zerop (getvar "cmdactive")))(command pause)) ) (t (setvar "CMDECHO" 0) (command "_rectang" "_t" (getvar "thickness")"_c" "0" "0" "_f" "0" "_w" (if epaisseur_box epaisseur_box 0.0) "_non" a ) (if (> (atof (substr (getvar "ACADVER")1 4)) 16.1) ;; ok si supérieur à autocad 2005 (command "_r" "0" ) ) (prompt "\n Specifiez le 2eme sommet") (while (not (zerop (getvar "cmdactive")))(command pause)) (setq b (getvar "LASTPOINT")) (if (or (equal a b )(equal lp b )) (setq b nil)) (if b (entdel (entlast))) (setvar "CMDECHO" 1) ) ) ;;;;;********* ) ) (cond (b ;; if b (setq tolang 1.5) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; TOLERANCE ANGULAIRE + ou - 1,5° (setq xa (car a) ya (cadr a) xb (car b ) yb (cadr b )) (setq angl_base (* (angle a b ) (/ 180 pi))) (cond ((or (= angl_base 0.0) (or (= angl_base 0.0)(and (< angl_base (+ 0.0 tolang))(> angl_base (- 0.0 tolang)))(> angl_base (- 360.0 tolang))) (or (= angl_base 180.0)(and (< angl_base (+ 180.0 tolang))(> angl_base (- 180.0 tolang)))) ) (setq b (list xb ya)) (rectxbt a b ) (cond ;;;; la commande BOX crée un solide avec toutes les poignées mieux qu' EXTRUDE (dg (entdel (entlast))(command "_BOX" "_non" a "_non" dg)(while (not (zerop (getvar "cmdactive")))(command pause))) (t (command "_.extrude" "_last" "") (while (not (zerop (getvar "cmdactive")))(command pause))) ) ) ((or (or (= angl_base 90.0)(and (< angl_base (+ 90.0 tolang))(> angl_base (- 90.0 tolang)))) (or (= angl_base 270.0)(and (< angl_base (+ 270.0 tolang))(> angl_base (- 270.0 tolang)))) ) (setq b (list xa yb )) (rectxbt a b ) (cond (dg (entdel (entlast))(command "_BOX" "_non" a "_non" dg)(while (not (zerop (getvar "cmdactive")))(command pause))) (t (command "_.extrude" "_last" "") (while (not (zerop (getvar "cmdactive")))(command pause))) ) ) ((= 1 (getvar "orthomode")) ;; 08 03 12 (setq b (if (> xb yb) (list xb ya ) (list xa yb ))) (rectxbt a b ) (cond (dg (entdel (entlast))(command "_BOX" "_non" a "_non" dg)(while (not (zerop (getvar "cmdactive")))(command pause))) (t (command "_.extrude" "_last" "") (while (not (zerop (getvar "cmdactive")))(command pause))) ) ) (t ;; rectangle par diagonale (setq hxbox (abs (- (cadr b )(cadr a)))) (command "_BOX" "_non" a "_non" b )(while (not (zerop (getvar "cmdactive")))(command pause)) ) ) ) ) (repeat n (command "_ucs" "_p")) (if pw (setvar "plinewid" pw)) (if ud (setvar "UCSDETECT" ud)) (setq *error* m:err m:err nil) (princ) )
  17. Bonjour, j'ai fait quelques petits outils pour la 3D d'un intérêt limité, mais le fait de les faire fonctionner avec le SCU dynamique via la commande SCU ( dans les lisp ), me les a rendus sympathiques aussi je les met en lignes. Edit: Finalement quelques uns me sont bien utiles et j'agrandie la liste quand j'ai du nouveau. Rotation référence pour la 3D Edit: Ajout option copie multiple ;; rotation angle reference ;; fonctionne avec SCU Dyn si actif ;; version 12/12/2011 ;; 27/06/2012 ;; 31 07 2012 accepte "m2p" milieu entre 2 points. ;; usegomme (defun c:Rar (/ cp p2 n cm rp p) (ssget) (setvar "CMDECHO" 0) (prompt "\n Specifiez le Centre de Rotation") (command "_ucs" pause ) ;; ligne ci-dessous pour "m2p" si problème mettre un ; devant pour la désactiver. (while (not (equal (getvar "lastpoint") '(0.0 0.0 0.0) 0.01))(command pause)) (command "") (setq n 1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*** FACULTATIF *** 1er option demande axe X et Y scu (if (= 0 (getvar "ucsdetect")) (progn (setq n 2)(setvar "CMDECHO" 1) (command "_ucs" "_non" '(0. 0. 0.)) (while (not (zerop (getvar "cmdactive")))(command pause)) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*** FACULTATIF *** 2eme option demande axe Z scu ; (if (= 0 (getvar "ucsdetect")) ; (progn ; (setq n 2 p (getpoint '(0. 0. 0.) "\nDirection axe Z ou <valider>: ")) ; (if p (command "_ucs" "_zaxis" "" "_non" p) (setq n 1)) ; ) ; ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fin options (setvar "CMDECHO" 1) (initget "Copier Multiple") (setq p2 (getpoint '(0. 0. 0.) "\n Orientation de référence [Copier/Multiple]:")) (cond ((= p2 "Copier") (setq cp t cm nil)(setq p2 (getpoint '(0. 0. 0.) "\n Orientation de référence:"))) ((= p2 "Multiple") (setq cm 0 cp nil)(setq p2 (getpoint '(0. 0. 0.) "\n Orientation de référence:"))) (t (setq cp nil cm nil)) ) (if (not cm) (progn (if cp (command "_rotate" "_p" "" "_non" '(0. 0. 0.) "_c" "_r" "_non" '(0. 0. 0.)) (command "_rotate" "_p" "" "_non" '(0. 0. 0.) "_r" "_non" '(0. 0. 0.)) ) (command "_non" p2) (while (not (zerop (getvar "cmdactive")))(command pause)) ) ) (while cm (command "_rotate" "_p" "" "_non" '(0. 0. 0.) "_c" "_r" "_non" '(0. 0. 0.) "_non" p2) (while (not (zerop (getvar "cmdactive")))(command pause)) (setq cm (1+ cm)) (if (> cm 1) (progn (initget "Oui Non") (setq rp (getkword "\nCopie supplémentaire ? [Non] <Oui> : ")) (if (= rp "Non") (setq cm nil)) ) ) ) (repeat n (command "_ucs" "_p")) (princ) ) Un tube avec rayon int et ext ou vis versa. Re edit, la direction est demandée si scu dyn est inactif ; "cylindre creux" en 3d ;; fonctionne avec SCU Dyn si actif ; 12/04/12 ;; 31 07 2012 accepte "m2p" milieu entre 2 points. ; usegomme (defun c:cyc (/ c1 c2 cy1 cy2 r1 r2 n p) (setq n 1) (setvar "CMDECHO" 0) (prompt "\n Specifiez le point d'insertion") (command "_ucs" pause) ;; ligne ci-dessous pour "m2p" si problème mettre un ; devant pour la désactiver. (while (not (equal (getvar "lastpoint") '(0.0 0.0 0.0) 0.01))(command pause)) (command "") (if (= 0 (getvar "ucsdetect")) (progn (setq n 2 p (getpoint '(0. 0. 0.) "\nDirection ou <valider>: ")) (if p (command "_ucs" "_zaxis" "" "_non" p) (setq n 1)) ) ) (setvar "cmdecho" 1) (command "_circle" "_non" '(0. 0. 0.)) (while (not (zerop (getvar "cmdactive")))(command pause)) (setq c1 (entlast) r1 (cdr (assoc 40 (entget c1)))) (command "_circle" "_non" '(0. 0. 0.)) (while (not (zerop (getvar "cmdactive")))(command pause)) (setq c2 (entlast) r2 (cdr (assoc 40 (entget c2)))) (command "_extrude" c2 "") (while (not (zerop (getvar "cmdactive")))(command pause)) (setq cy2 (entlast)) (command "_extrude" c1 "" "") (setq cy1 (entlast)) (if (> r1 r2) (command "_subtract" cy1 "" cy2 "") (command "_subtract" cy2 "" cy1 "") ) (repeat n (command "_ucs" "_p")) (princ) ))) Edit : simplifier, les options de la commande cylindre sont utilisables ;; Percer un ou plusieurs solides ;; fonctionne avec SCU Dyn si actif ;;Usegomme ;; 27-02-2012 (defun c:percer (/ solides cyl n) (princ " Sélectionnez les solides à percer.") (setq solides (ssget '((0 . "3DSOLID")))) (cond (solides (setvar "cmdecho" 1) (command "_cylinder" ) (while (not (zerop (getvar "cmdactive")))(command pause)) (setq cyl (entlast)) (repeat (setq n (sslength solides)) (cond ((> n 1) (command "_copy" cyl "" "" "") (command "_subtract" (ssname solides (setq n (1- n))) "" "_last" "") ) (t (command "_subtract" (ssname solides (1- n)) "" cyl "")) ) ) (princ) ) ) )
  18. usegomme

    Ou se cachent t'ils?

    Merci pour le rappel, (gile), j'en étais resté à la version 1. Et merci pour tes programmes et ta présence sur le forum.
  19. Un autre exemple avec sélection multiple. (defun c:rot () ;; rotation référence (ssget) (command "_rotate" "_p" "" pause "_ref" "_non" "@" pause) (princ) )
  20. Salut, perso je n'ai jamais utilisé l'enregistreur d'action, ça a l'air effectivement pas mal. Pour en revenir au lisp, voici une version réellement simple qui reprend en fait les séquences de la commande. (defun c:coup1 () (command "_break" pause "_f" pause "_non" "@") ) Cela peut bien sûr être en français. pause, permet une entrée utilisateur, point ou autre. _non, stoppe momentanément l'accroche objet automatique pour que le dernier point donné par @, ne parte on ne sait où.
  21. Il faut apprendre à lire ... le lisp. Dans (defun TUY tu trouveras ;(creercalqueaxe ) pas utilisé qu'il faut remplacer par: (creercalqueaxe ) dans (defun creercalqueAXE tu trouveras (command "_-layer" "_n" calqax "_co" "6" calqax "_lt" "axes2" calqax "") remplace le 6 par un 7 pour la couleur blanche ensuite il faut renommer la fonction (defun tubage en (defun tubage-old par exemple et la fonction (defun tubage1 en (defun tubage pour la rendre active si tu tiens à n'avoir qu' un seul calque AXES dans (defun creercalqueAXE il faut remplacer (setq calqax (strcat (getvar "clayer") "-AXE")) par (setq calqax "AXES") Voilà ça devrait faire ton affaire ( je n'ai pas refait de test).
  22. Pour ça : je te pardonne de m'avoir fait travailler ce week-end .
  23. Voilà mon cher, le lisp épicerie est envoyé (post au dessus), j'ai rajouté les commandes TUYCB et TSACB qui modélisent les tubes en "solide" et les coudes en "bloc".
  24. J'ai rajouté une gestion d'erreur (version 5.2) , si je n'ai pas raté mon copier/coller, ça devrait être corrigé.
  25. salut, Fraxa, sur la 2009 je n'ai pas ton erreur, mais effectivement par Echap on ne sort pas correctement de la Cde, en attendant que je corrige sort en faisant Entrée, ça doit marcher. Les coudes en bloc directement avec "tuy" ça doit pouvoir se faire, mais comme d'hab. il faudra patienter ,faut trouver le temps et les imbrications compliquent le lisp . Titi95fr, merci. Dardenne, je viens de m'apercevoir que les cdes deplacer3d et rotation3d permettent des déplacer et pivoter les faces 3d, voir l'aide. Alors pour ce qui est des lacunes !!! a+
×
×
  • 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é