-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bonuscad
-
Salut, Le type du fichier .fas et du lisp compilé, et donc immodifiable, Si tu veut l'adapter a tes besoins je peux t' envoyer (donne moi ton adresse) le fichier source si tu te sens à l'aise avec le lisp pour le modifier. Mais c'est vrai que 2004 propose la commande bannière (2005 aussi je suppose) avec des champs personnalisables. Si cette commande te convient, il va de soit que ce n'est pas la peine de se casser la tête
-
Très bonne remarque. :D Ce cas particulier est appelé PAIRE POINTEE. Il ne peut donc s'appliquer au point 3D qui comporte 3 atomes. Cet méthode de paire pointée est beaucoup utilisé dans la base de données d'Autocad car cette forme de liste est moins gourmande en espace mémoire. Vous retrouvez cette forme de liste par un appel à (enget). exemple (entget (car (entsel))) NB: (assoc) fonctionne avec ces 2 type de liste
-
Si, si: c'est du pur Lisp ;) Voir l'aide en ligne "Aide aux développeurs" Malheureusement cette aide est en Anglais, l'avantage que j'ai sur vous :P c'est que je dispose du bouquin de la R14 en Français, il ne manque que les fonctions vlx et vla apparue à la 2000.
-
Le CAR et CDR sont la base des pointeurs en lisp (car) retourne le 1er élément d'une liste (cdr) retourne la liste moins le 1er élément c'est avec ses 2 fonctions imbriquées qu'on construit les CADR CADDR CDADR ect.. (4 niveaux maxi.) donc: (CADR) = (CAR (CDR )) (CADDR)=(CAR (CDR (CDR))) donc pour un point 3D (CAR pt) retourne le X (CADR pt) retourne le Y (CADDR pt) retourne le Z Si tu demande le CDDR tu obtient un atome dans une liste et pas l'atomer lui même, dans ton cas le Z sous forme de list.
-
Avec l'option fenêtre: (foreach n (layoutlist) (setvar "CTAB" n) (command "_.zoom" "_window" '(1000.0 1000.0 0.0) '(1010.0 1010.0 0.0)))
-
Essai de coller la ligne suivante sur ta ligne de commande (foreach n (layoutlist) (setvar "CTAB" n) (command "_.zoom" "_extent"))
-
Redéfinir une commande
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Salut Serge, J'ai bien compris que cela ne pouvait se faire. ;) D'aiileur à mon désespoir je comprend pas pourquoi l'appel à la commande est différente (sans le point, et avec) suivant où on la pioche dans les menu déroulant, contextuel ou icone. Cela enlève complétement l'intérêt de la commande "_.REDEFINE" :( Je ne veux en aucun cas modifier la commande "_PLOT" mais simplement éxecuter une procédure de mise à jour avant l'impression. Seul moyen pour moi d'être sur de la validité des objets imprimés. Bien sur cette mise à jour peut être faite manuellement avant, mais tellement facilement "zappé" par l'utilisateur que je cherchais un moyen plus sûr. Alors une idée géniale pour contourner ce problème ? :P Moi je sèche :( Bruno -
Salut Je pense que la commande "EVOLDYN" ("_DRAGMODE") doit résoudre ce problème.
-
Je dirais même plus, à voir comment Microsoft plombe ces propres logiciels, c'est à MDR. :D :D :D
-
Bonjour, J'aurais besoin de redéfinir la command "_PLOT" et "_PAGESETUP". Je sais me servir de la commande "_REDEFINE", là n'est pas le problème. Mon problème est que si la commande imprimer du menu fichier ou l'icône impression appellent bien la commande _PLOT, ce n'est pas le cas du bouton imprimer de la commande "_PAGESETUP" ou par le click droit sur un onglet de présentation, qui eux appellent la commande "_.PLOT" :casstet: Est ce que quelqu'un saurait comment je pourrais "shunter" cet appel de commande non redéfinissable (c'est à dire précédé d'un point) Mon but final étant d'insérer une procédure avant l'appel de l'impression.
-
création de lignes complexes
bonuscad a répondu à un(e) sujet de dilack dans AutoCAD LT 2000 à LT 2002
Tu y es presque, seul quelques fautes de syntaxe: Oubli d'une , (virgule) après .5 (deux fois) Mauvais point décimal pour le premier R=0.0 (tant ton cas, une virgule) Un espace supplémentaire avant = pour le second R=0.0 *CADxp,cadxp --->---<--- A,.5,-.20,["<",STANDARD,S=.1,R=0.0,x=-.1,Y=-.05],.5,-.25,[">",STANDARD,S=.1,R=0.0,X=-.1,Y=-.05],-.2 -
Salut Dfbiagio Je ne fais pas de copier coller du code, car trop volumineux. Donc tu récupère le zip, tu extrait les 2 fichiers dans un dossier de recherche d'Autocad. Tu peux choisir le dossier "support" mais un autre dossier serait conseillé pour ne pas mélanger les torchons et les serviette, quitte à rajouter un nouveau dossier de recherche dans les options d'autocad. Pour faire un essai en tout 1er lieu charge le fichier "tatouage.fas" . Manuellement tu peux faire ça par (load "tatouage") au message commande. Tu auras alors à disposition la commande "TATOUAGE" pour insérer un cartouche prédéfini, et la commande (RECORD) ...avec les parenthèses, pour mettre à jour ce cartouche. On peut automatiser la mise à jour grace aux lignes suivantes dans un fichier approprié: (load "tatouage.lsp") (if s::startup (setq s::startup (append s::startup '((record)))) (defun-q s::startup () (record)) ) Mais avant de faire ceci regarde si ca te convient, ou si ça fonctionne sous 2005..... Si le code source t'interresse, je peux te le faire passer
-
j'ai fait ça vite fait. Ca a l'air de fonctionner même pour les caractères accentués (à é è ù ect....) mais dans un seul sens; de miniscule vers majuscule . L'inverse ne fonctionne pas. Est ce le cas aussi de TCASE ??? (defun conv_string (str / new_str) (setq new_str "") (while (/= (substr str 1 1) "") (cond ((/= (substr str 1 1) "\\") (if (member (ascii (substr str 1 1)) '(65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90)) (setq new_str (strcat new_str (strcase (substr str 1 1) T))) (setq new_str (strcat new_str (strcase (substr str 1 1) nil))) ) ) (T (setq new_str (strcat new_str (substr str 1 2))) (setq str (substr str 2)) ) ) (setq str (substr str 2)) ) new_str ) (defun c:vice-versa ( / ent val_txt new_txt) (while (not (setq ent (entsel "\nSélectionner un texte ")))) (setq ent (entget (car ent))) (cond ((or (eq (cdr (assoc 0 ent)) "TEXT") (eq (cdr (assoc 0 ent)) "MTEXT")) (setq val_txt (cdr (assoc 1 ent))) (setq new_txt (conv_string val_txt)) (setq ent (subst (cons 1 new_txt) (assoc 1 ent) ent)) (entmod ent) ) (T (princ "\nCe n'est pas du texte") ) ) (princ) )
-
Extremités de lignes d\'un bloc
bonuscad a répondu à un(e) sujet de dr.loveless dans Pour aller plus loin en LISP
Bonjour Elle se comporte comme la fonction (entsel) sauf que si une entité complexe est sélectionnée comme un bloc ou une 3dpoly par exemple, elle retourne l'entité constituante. Essaye la ligne suivante sur la ligne de commande pour comprendre: (alert (strcat "\n Vous avez sélectionné une entité " (cdr (assoc 0 (entget (car (nentsel"\nSélectionner une entité "))))))) Sur 1 seule ligne -
Ha! si ça concerne un cartouche, je viens justement de proposer quelque chose sur http:// http://discussion.autodesk.com/thread.jspa?threadID=345372 Tu peux essayer et me dire ce que tu en pense.
-
Salut à tous Ben j'ai pas trouvé de solution autre que par itération (comme Kamal et Didier) J'ai essayé d' établir une fourchette de recherche en augmentant la précision lors de l'approche du résultat. Donc cette routine sera plus rapide que la boucle de la mort de Didier ;) La gestion des erreurs est peut être aussi plus complète. (defun c:rec_inscrit ( / ent ent_rec ptlst old_icusc l h l1 h1 h2 old_osm da db n alpha p1 p2 p3 p4 flag) (setvar "cmdecho" 0) (while (null (setq ent (entsel "\nSélectionner un rectangle: ")))) (setq ent_rec (entget (car ent))) (cond ((eq (cdr (assoc 0 ent_rec)) "LWPOLYLINE") (setq ptlst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) ent_rec))) (setq old_icusc (getvar "UCSICON")) (setvar "UCSICON" 0) (command "_.ucs" "_object" (cadr ent)) (setq ptlst (list (trans (car ptlst) 0 1) (trans (cadr ptlst) 0 1) (trans (caddr ptlst) 0 1) (trans (cadddr ptlst) 0 1))) (setq ptlst (list (list (eval (cons min (mapcar 'car ptlst))) (eval (cons min (mapcar 'cadr ptlst)))) (list (eval (cons max (mapcar 'car ptlst))) (eval (cons min (mapcar 'cadr ptlst)))) (list (eval (cons max (mapcar 'car ptlst))) (eval (cons max (mapcar 'cadr ptlst)))) (list (eval (cons min (mapcar 'car ptlst))) (eval (cons max (mapcar 'cadr ptlst)))) ) ) (cond ((and (= (length ptlst) 4) (zerop (rem (- (angle (car ptlst) (cadr ptlst)) (angle (car ptlst) (cadddr ptlst))) (/ pi 2))) (zerop (rem (- (angle (cadr ptlst) (car ptlst)) (angle (cadr ptlst) (caddr ptlst))) (/ pi 2))) (zerop (rem (- (angle (caddr ptlst) (cadr ptlst)) (angle (caddr ptlst) (cadddr ptlst))) (/ pi 2))) (zerop (rem (- (angle (cadddr ptlst) (car ptlst)) (angle (cadddr ptlst) (caddr ptlst))) (/ pi 2))) ) (setq l (distance (car ptlst) (cadr ptlst)) h (distance (cadr ptlst) (caddr ptlst)) l1 (max l h) h1 (min l h) ) (initget 7) (while (< h1 (setq h2 (getdist "\nHauteur du rectangle à incrire: "))) (princ "\nHauteur plus grande à celle du rectangle sélectionné.") (initget 7) ) (setq old_osm (getvar "osmode")) (setvar "osmode" 0) (setq da (sqrt (/ (* h2 h2) 2)) db (sqrt (- (* h2 h2) (* da da))) n 0.1 alpha 0.0) (while alpha (setq p1 (polar (car ptlst) (angle (car ptlst) (cadr ptlst)) da) p3 (polar (caddr ptlst) (angle (caddr ptlst) (cadddr ptlst)) da) p2 (polar (caddr ptlst) (angle (caddr ptlst) (cadr ptlst)) db) p4 (polar (car ptlst) (angle (car ptlst) (cadddr ptlst)) db) ) (setq alpha (rem (- (angle p1 p4) (angle p1 p2)) (/ pi 2))) (if (equal alpha 0.0 n) (setq flag T) (setq flag nil)) (cond ((and (< alpha 0.0) flag) (setq n (- (/ n 10.0))) ) ((and (> alpha 0.0) flag) (setq n (+ (/ n 10.0))) ) ) (if (equal alpha 0.0 1E-12) (progn (command "_.pline" p1 p2 p3 p4 "_close") (setq alpha nil) ) ) (setq da (- da n) db (sqrt (- (* h2 h2) (* da da)))) ) (setvar "osmode" old_osm) ) (T (princ "\nN'est pas un rectangle parfait!") ) ) (command "_.ucs" "_previous") (setvar "UCSICON" old_icusc) ) (T (princ "\nEntité non valide!") ) ) (setvar "cmdecho" 1) (princ) )
-
Extremités de lignes d\'un bloc
bonuscad a répondu à un(e) sujet de dr.loveless dans Pour aller plus loin en LISP
Salut, Soit plus précis dans ton but à atteindre, veux tu mettre ton bloc à jour? Cependant la fonction (nentsel) te permet d'accéder directement à une sous-entité d'un bloc, ou segment de POLYLINE (VERTEX) pas de LWPOLYLINE par contre. A partir de là il est facile de récupérer les points de la ligne. -
Bonjour, Tu peux obtenir le facteur de zoom XP d'une fenêtre comme ceci (setq group_dxf (entget (car (entsel "\nSélectionner une fenêtre")))) (setq factor_zoomxp (/ (cdr (assoc 41 group_dxf)) (cdr (assoc 45 group_dxf))))
-
Bonjour, En fait les Xrefs sont partagés sur le réseau ? Essaye de voir les variables XLOADCTL, XLOADPATH et PROJECTNAME (regarder l'aide associée) Mais le problème peut venir d'ailleurs :(
-
Désolé pour tes déboires. Je ne connais pas de logiciel pour ouvrir un PLT à part pour imprimer directement (ce n'est pas ce qui t'interesse) J' ai refait un essai avec des solides 3D en vue dynanamique dans une fenetre de présentation en cachant les objets, aucun problème sous 2002. Cependant j'ai remarqué qu'il fallait désactiver l'accroche objet avant de lancer la commande, autrement il créer des lignes de longueurs nulles. C'est peut être tout simplement la cause de ton problème. Autrement pas de solutions. @+
-
Salut, J'ai entendu parlé récemment de LX-Viewer qui est un viewer pour linux de fichier autocad. Je crois qu'il accepte jusqu'a la 2004. J'ai essayer la version beta pour windows 32, mais ca me plante souvent l'ordi. Fait une recherche avec google, je pense que la version linux est plus aboutie et plus fiable. A voir ;)
-
3dspiral LISP / section diverse
bonuscad a répondu à un(e) sujet de Thomas59290 dans AutoCAD 2000 à 2002
Rendons a César ce qui est à César C'est nickel MFUCCARO Pour la traduc et les corrections mineures, c'était pas bien dur. :P -
3dspiral LISP / section diverse
bonuscad a répondu à un(e) sujet de Thomas59290 dans AutoCAD 2000 à 2002
Bon déjà le code corrigé avec messages traduit, on ne sait jamais ;) ; SPIRAL EXTRUSION ; ; mfuccaro@hotmail.com ; ;;;;;;;;- 17.05.2003 -;;;;; (defun c:spirex( / m3 m4 plist pts nwpt nwpts rad ang dist i mm pln ax ang1 s ss h1 pt) (defun m3(a b c / p1 p2 p3 m1 m2 m3) (setq p1 (* (car a) (cadr b) (caddr c)) p2 (* (car b) (cadr c) (caddr a)) p3 (* (car c) (cadr a) (caddr b)) m1 (* (car c) (cadr b) (caddr a)) m2 (* (car a) (cadr c) (caddr b)) m3 (* (car b) (cadr a) (caddr c))) (- (+ p1 p2 p3) (+ m1 m2 m3))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun m4(x a b c / arg1 arg2 arg3) (setq arg1 (list (cadr a) (caddr a) 1) arg2 (list (cadr b) (caddr b) 1) arg3 (list (cadr c) (caddr c) 1) p (* (car x) (m3 arg1 arg2 arg3)) arg1 (list (car a) (caddr a) 1) arg2 (list (car b) (caddr b) 1) arg3 (list (car c) (caddr c) 1) p (- p (* (cadr x) (m3 arg1 arg2 arg3))) arg1 (list (car a) (cadr a) 1) arg2 (list (car b) (cadr b) 1) arg3 (list (car c) (cadr c) 1) p (+ p (* (caddr x) (m3 arg1 arg2 arg3))) p (- p (m3 a b c)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq pln (car (entsel "\n Sélectionner la forme à extruder: ")) ax (getpoint " Point origine des axes?") ang1 (/ (* pi (getreal "\nAngle de rotation (degrés): ")) 180.0) h1 (getdist " Hauteur: ") s (max 5 (getint " Nombre de segments: ")) ang1 (/ ang1 s) h1 (/ h1 s) ss (ssadd)) (setq plist (entget pln) pts nil nwpts nil i 0 rad 0) (repeat (length plist) (if (= (car (nth i plist)) 10) (setq pt (cdr (nth i plist)) pts (cons (list (car pt) (cadr pt) 0) pts) dist (distance pt ax) rad (max rad dist) ang (+ ang1 (atan (- (cadr pt) (cadr ax)) (- (car pt) (car ax)))) nwpt (polar ax ang dist) rad (max rad (distance ax nwpt)) nwpts (cons (list (car nwpt) (cadr nwpt) h1) nwpts))) (setq i (1+ i))) (setq rad (* 1.5 rad) old (getvar "osmode")) (setvar "cmdecho" 0) (setvar "osmode" 0) (command "._undo" "_begin") (command "._sphere" (list (car ax) (cadr ax) 0) rad) (command "._zoom" "_w" (list (+ (car ax) rad) (+ (cadr ax) rad)) (list (- (car ax) rad) (- (cadr ax) rad))) (command "._plan" "") (command "._slice" "_l" "" (car pts) (cadr pts) (caddr pts) (car nwpts)) (command "._slice" "_l" "" (car nwpts) (cadr nwpts) (caddr nwpts) (car pts)) (setq mm (1- (length pts)) i 0) (repeat (1+ mm) (setq j (1+ i)) (if (> j mm) (setq j 0)) (setq k (1- i)) (if (< k 0) (setq k mm)) (if (minusp (* (m4 (nth j nwpts) (nth i pts) (nth j pts) (nth i nwpts)) (m4 (nth k pts) (nth i pts) (nth j pts) (nth i nwpts)))) (progn (command "._slice" "_l" "" (nth i pts) (nth j pts) (nth j nwpts) (nth k pts)) (command "._slice" "_l" "" (nth i nwpts) (nth j nwpts) (nth i pts) (nth k pts))) (progn (command "._slice" "_l" "" (nth i pts) (nth j pts) (nth i nwpts) (nth k pts)) (command "._slice" "_l" "" (nth i nwpts) (nth j nwpts) (nth j pts) (nth k pts)))) (setq i (1+ i))) (setq ss (ssadd (entlast) ss)) (repeat (1- s) (command "._copy" "_l" "" (list 0 0 0) (list 0 0 h1)) (command "._rotate" "_l" "" ax (/ (* ang1 180.0) PI)) (setq ss (ssadd (entlast) ss))) (command "._union" ss "") (setvar "osmode" old) (command "._undo" "_end") (setvar "cmdecho" 1) (princ) ) (princ "\nProgramme EXTRUSION en SPIRALE chargé.") (princ "\tTaper SPIREX pour execution.") (princ) Une fois chargé et executé, tu auras le message Sélectionner la forme à extruder: Choisir alors la section de ta rampe (un rectangle par exemple) Point origine des axes? point de rotation de ton escalier en colimacon (devrait être a environ 1.0m de ta section) Angle de rotation (degrés): Donne la révolution de ta rampe (exemple 360° pour un tour complet Hauteur: Donne la hauteur verticale que va parcourir ta rampe (exemple 4.50) Nombre de segments: Donne le nombre facettes que tu veux obtenir en final (exemple 64) Plus ce nombre sera élevé, plus la représentation sera fine. -
Bon si tu es sur de ton PLT fait avec du HPGL générique. Dans un nouveau dessin, charge le lisp, execute le avec ton plt et une fois au message commande fais un zoom etendu Tu devrait avoir ton dessin constituer essentiellement de lignes rouge (choix du programmeur). Si ça ne fonctionne pas désolé, c'est pas moi qui ai écrit cela. J'en possède un autre qui fait la même chose mais avec des polylignes et des épaisseur différentes pour représenter les couleurs différentes.
-
Rectification, ce n'est pas mon lisp ;) Le message est tout à fait normal, cela veut dire que le fichier PLT est ouvert ET est en cours de lecture. A mon souvenir cela peut être très long si ton plt est volumineux (il n'y a aucun indice sur la progression de la commande) Si tu veux voir comment il progresse tu peut remettre la variable CMDECHO à 1 dans le code ou enlever le ";" en début de la ligne appropriée.
