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. Suite à cette Discussion , cela m'a donné une idée pour essayer de faire une fonction pour remonter dans le sens inverse de création du dessin afin de voir les dernière entités crées. Je pensais que la dernière entité dessiné (entlast) me donnerais l'identificateur de maintien le plus élevé. Mais après quelque test, j'ai l'impression que non. Donc j'aurais voulu plus d'amples renseignements à ce sujet. (rien trouvé dans l'aide) :( Je vous livre le code (certainement imparfait), normalement ce code ne modifie rien dans la base de donnée du dessin. Il active simplement l'espace objet, car je n'ai ciblé que l'espace objet pour faire une exploration. Dans un dessin ou de nombreux "U" ou effacements ont été effectués, il peut y avoir un temps de latence avant qu'il ce passe quelquechose lors de l'appui sur la touche "-/+". La touche "-" remonte vers le début du dessin et "+" dans le sens inverse. Dans la barre d'état vous pouvez voir le nom de la dernière entité affiché et son calque . Les fonctions de convertion Hexadécimal < - > Décimal ne sont pas de moi. (defun dechex (nb / r i) (setq r "") (while (and (= (type nb) 'INT) (> nb 0)) (setq i (rem nb 16)) (setq nb (lsh nb -4)) (setq r (strcat (if (< i 10) (itoa i) (chr (+ 55 i )) ) r ) ) ) ) (defun hexdec (nb / r i s) (if (= (type nb) 'INT) (setq nb (itoa nb)) ) (setq r 0 i 0) (while (and (= (type nb) 'STR) (< i (strlen nb))) (setq i (1+ i)) (setq s (strcase (substr nb i 1 ))) (setq r (+ (lsh r 4) (- (ascii s) (if (<= s "9") 48 55 ) ) ) ) ) ) (defun c:back_trace ( / js_swap n_swap ent hd_ent op dxf_ent dxf_67 dxf_0 dxf_8 key) (setvar "cmdecho" 0) (setq js_swap (ssget "_X" '((-4 . ""))) n_swap 0) (cond (js_swap (setvar "ctab" "Model") ; (command "_.zoom" "_all") (repeat (sslength js_swap) (setq ent (ssname js_swap n_swap)) (redraw ent 2) (setq n_swap (1+ n_swap)) ) ) ) (if (entlast) (setq hd_ent (cdr (assoc 5 (entget (entlast)))) op '1-)) (princ "\n<+/-> pour choix; /[Espace] pour finir!.") (while hd_ent (setq ent (handent hd_ent)) ;(print hd_ent) (setq hd_ent (dechex ((eval op) (hexdec hd_ent)))) (if ent (progn (setq dxf_ent (entget ent) dxf_67 (assoc 67 dxf_ent) dxf_0 (cdr (assoc 0 dxf_ent)) dxf_8 (cdr (assoc 8 dxf_ent)) ) (cond ((and (or (not dxf_67) (zerop (cdr dxf_67))) (member dxf_0 (list "3DFACE" "3DSOLID" "ACAD_PROXY_ENTITY" "ARC" "ARCALIGNEDTEX" "ATTDEF" "ATTRIB" "BODY" "CIRCLE" "DIMENSION" "ELLIPSE" "HATCH" "IMAGE" "INSERT" "LEADER" "LINE" "LWPOLYLINE" "MLINE" "MTEXT" "OLEFRAME" "OLE2FRAME" "POINT" "POLYLINE" "RAY" "REGION" "RTEXT" "SHAPE" "SOLID" "SPLINE" "TEXT" "TOLERANCE" "TRACE" "WIPEOUT" "XLINE" ) ) ) (setq key (grread nil 2 1)) (cond ((member key '((2 13) (2 32))) (setq hd_ent nil) ) ((eq (cadr key) 43) (setq op '1+) (redraw ent 2) ) ((eq (cadr key) 45) (setq op '1-) (redraw ent) ) ) (grtext -1 (strcat "Entité: " dxf_0 " - Calque: " dxf_8)) ) ) ) ) (if (eq (hexdec hd_ent) "1") (setq hd_ent nil)) (if (> (hexdec hd_ent) (hexdec (cdr (assoc 5 (entget (entlast)))))) (setq hd_ent (cdr (assoc 5 (entget (entlast)))) op '1-) ) ) (command "_.regenall") (setvar "cmdecho" 1) (prin1) )
  2. Tu peux essayer ceci, en espérant que cela fonctionne pour toi. Necessite un programme de Kamal Boutora nommé "QBRICK". Modifier le code suivant la version de Qbrick utilisé Voir ICI (defun def_bub_pl (ls lb flag_closed / ls lb rad a l_new) (if (not (zerop flag_closed)) (setq ls (append ls (list (car ls))))) (while (cadr ls) (if (zerop (car lb)) (setq l_new (append l_new (list (car ls)))) (progn (setq rad (/ (distance (car ls) (cadr ls)) (sin (* 2.0 (atan (abs (car lb))))) 2.0) a (- (/ pi 2.0) (- pi (* 2.0 (atan (abs (car lb)))))) ) (if (< a 0.0) (setq a (- (* 2.0 pi) a))) (if (or (and (< (car lb) 0.0) (> (car lb) -1.0)) (> (car lb) 1.0)) (setq l_new (append l_new (reverse (cdr (reverse (buble_pts (polar (car ls) (- (angle (car ls) (cadr ls)) a) rad) (car ls) (cadr ls) rad (car lb))))))) (setq l_new (append l_new (reverse (cdr (reverse (buble_pts (polar (car ls) (+ (angle (car ls) (cadr ls)) a) rad) (car ls) (cadr ls) rad (car lb))))))) ) ) ) (setq ls (cdr ls) lb (cdr lb)) ) (append l_new (list (car ls))) ) (defun buble_pts (pt_cen pt_begin pt_end rad sens / inc ang nm p1 p2 lst) (setq inc (angle pt_cen (if (< sens 0.0) pt_end pt_begin)) ang (+ (* 2.0 pi) (angle pt_cen (if (< sens 0.0) pt_begin pt_end))) nm (fix (/ (rem (- ang inc) (* 2.0 pi)) (/ (* pi 2.0) 72.0))) ) (repeat nm (setq p1 (polar pt_cen inc rad) inc (+ inc (/ (* pi 2.0) 72.0)) lst (append lst (list p1)) ) ) (setq p2 (polar pt_cen ang rad) lst (append lst (list p2)) ) (if (< sens 0.0) (reverse lst) lst) ) (defun make_fence ( / ) (cond ((eq typent "LWPOLYLINE") (setq closed (boole 1 (cdr (assoc 70 dxf_ent)) 1) lst (mapcar '(lambda (x) (trans x (car ent) 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent))) l_bub (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_ent)) lst (def_bub_pl lst l_bub closed) ) ) ((eq typent "POLYLINE") (setq closed (boole 1 (cdr (assoc 70 dxf_ent)) 1) e_next (entnext (car ent)) ) (while (= "VERTEX" (cdr (assoc 0 (setq dxf_next (entget e_next))))) (if (zerop (boole 1 223 (cdr (assoc 70 dxf_next)))) (setq lst (cons (trans (cdr (assoc 10 dxf_next)) (car ent) 1) lst) l_bub (cons (cdr (assoc 42 dxf_next)) l_bub) ) ) (setq e_next (entnext e_next)) ) (setq lst (reverse lst) l_bub (reverse l_bub) lst (def_bub_pl lst l_bub closed) ) ) ((eq typent "CIRCLE") (setq lst (buble_pts (trans (cdr (assoc 10 dxf_ent)) (car ent) 1) (polar (trans (cdr (assoc 10 dxf_ent)) (car ent) 1) 0.0 (cdr (assoc 40 dxf_ent))) (polar (trans (cdr (assoc 10 dxf_ent)) (car ent) 1) (- (* 2.0 pi) (/ (* pi 2.0) 36.0)) (cdr (assoc 40 dxf_ent))) (cdr (assoc 40 dxf_ent)) 1 ) lst (append lst (list (car lst))) closed 1 ) ) (T (princ "\nN'est pas un Cercle ou une Polyligne!")) ) ) (defun c:evider ( / ent dxf_ent typent closed lst l_bub e_next osmd n pt_g e_fence ss l_ent js_all ssb key tmp) (while (null (setq ent (entsel "\nChoix du contour d'évidement: ")))) (setq typent (cdr (assoc 0 (setq dxf_ent (entget (car ent)))))) (make_fence) (cond ((and lst (not (zerop closed))) (if (equal (last lst) (car lst)) (setq lst (cdr lst))) (setq osmd (getvar "osmode")) (setvar "osmode" 0) (setvar "cmdecho" 0) (command "_.undo" "_group") (command "'_.zoom" "_window" (list (eval (cons min (mapcar 'car lst))) (eval (cons min (mapcar 'cadr lst)))) (list (eval (cons max (mapcar 'car lst))) (eval (cons max (mapcar 'cadr lst)))) ) (setq n (float (length lst))) (setq pt_g (list (/ (apply '+ (mapcar 'car lst)) n) (/ (apply '+ (mapcar 'cadr lst)) n))) (command "_.offset" "0.25" ent (polar (cadr ent) (angle (cadr ent) pt_g) (distance (cadr ent) pt_g)) "") (setq e_fence (entlast)) (if (not (member "qbrick2000.arx" (arx))) (arxload "qbrick2000.arx")) (command "_.qbrick" "_fence") (foreach n lst (command n)) (command (car lst) "" "") (setq typent (cdr (assoc 0 (setq dxf_ent (entget e_fence))))) (make_fence) (setq ss (ssget "_CP" lst)) (setq l_ent (if ss (ssnamex ss)) js_all (ssget "_X") ) (foreach n l_ent (if (eq (type (cadr n)) 'ENAME) (setq ssb (ssdel (cadr n) js_all)))) (if (zerop (getvar "pickfirst")) (setvar "pickfirst" 1)) (if (and ss ssb (= 0 (getvar "CMDACTIVE"))) (progn (princ "\n pour inverser la sélection; /[Espace]/Click+droit pour finir!.") (while (and (not (member (setq key (grread T 4 2)) '((2 13) (2 32)))) (/= (car key) 25)) (sssetfirst nil ss) (cond ((eq (car key) 3) (setq tmp ss ss ssb ssb tmp) ) ) ) ) ) (command "_.erase" ss "") (command "_.zoom" "_previous") (command "_.undo" "_end") (setvar "cmdecho" 1) (setvar "osmode" osmd) ) ) (prin1) )
  3. L'idée d'Autospeed me plait beaucoup aussi, jusqu'à présent je faisais avec une méthode similaire à Jalna Tu peux déjà te servir de l'apercu d'impression, puis annuler ton tracage ... ;)
  4. bonuscad

    IMAGE JPEG

    Merci Patrick, J'ai compris! Le quiproquo dans ma tête était: Par taille j'avais compris dans le sens poids du fichier alors qu'il fallait comprendre dans le sens des dimensions des bords de l'image.
  5. Confronté à un problème de discussion par téléphone sur deux plans diffèrents de part et d'autres. J'ai créer une solution en lisp d'un cartouche mis à jour automatiquement. Celui ci comporte des champs automatique et fixe. Les automatiques: * date création * date de modification * date de tracé (ou impression) * nom du fichier DWG * nom du dossier (ou chemin des répertoires informatique) où se trouve ce dessin * Le nom de l'onglet où est inseré ce cartouche automatique (il peut l'être plusieurs fois) * nom du login de la machine * L'échelle du dessin si le cartouche est inséré dans l'espace papier (dans l'espace objet c'est un champ fixe dont la valeur est demandé à l'insertion) * La version d'AutoCAD utilisé. * La version de la plateforme où est installé le logiciel. Les fixes: * Un champ pour un numéro (ou autres) de classement * L'échelle du dessin à fixer au départ si le cartouche est dans l'espace objet. L'insertion se fait à travers une boite de dialogue. Il est possible d'en mettre autant que l'on en veut, leurs mise à jour se fera à l'ouverture du dessin, et avant l'impression. L'insertion dans l'espace papier, vous demanderas d'y associer une fenêtre afin de restituer l'échelle. Si vous changez le facteur de zoom de la fenêtre, l'échelle sera mis à jour dans le cartouche pour l'impression. 2006 je pense dois pouvoir faire la même chose sans programmation, ou peu. Si cela t'interesse, fais le savoir (le code est long)
  6. bonuscad

    IMAGE JPEG

    Oui, mais encore, Excuse moi Patrick, je ne comprends pas ce que tu as voulu expliquer! Je comprends vite mais il faut, dès fois, m'expliquer longtemps :P Pourrais tu être plus explicite ou un lien qui m'en dirait d'avantage. Je risque professionnellement de "moullier" dans l'usage d'image imposantes, donc le sujet m'interresse vivement. Merci
  7. bonuscad

    Probleme de fichier topo

    Je pense que ton fond de plan posède des type de ligne employant des formes. Si cette représentation n'a pas d'importance pour toi, il te faut redéfinir tes objets ou tes calques avec un autre type de ligne que celui-ci. Une fois cette redéfinition effectuée, purge ton dessin. NB:Tu peux utiliser la commande filtre pour retrouver les objets concernés.
  8. Un exemple de code, pour te montrer ce qu'il est possible de faire. 2 Fonctions que tu vas appeler en ligne de commande: DANIELITO pour associer tes x-datas à une polyligne optimisée I-DANIELITO pour afficher les données des x-datas de l'objet correspondant a ton application (ici nommée "DANIELITO" Voilà comme base de départ. NB: Ce qui faut bien garder à l'esprit, ce les x-datas peuvent contenir plusieurs fois le même code 1010 1040 1070 etc... Donc pour extraire les données il faut les extraire dans l'ordre d'attribution pour retrouver ses petits. ;) (defun c:danielito ( / js dxf_ent phi nb_vanne pente pt_haut pt_bas) (if (null (tblsearch "appid" "DANIELITO")) (regapp "DANIELITO") ) (while (not (setq js (ssget "_:S" '((0 . "LWPOLYLINE") (67 . 0) (410 . "Model") (100 . "AcDbPolyline")))))) (setq dxf_ent (entget (ssname js 0))) (initget 7) (setq phi (getreal "\nDiametre buse?: ")) (initget 5) (setq nb_vanne (getint "\nNombre de vanne?: ")) (initget 1) (setq pente (getreal "\nPente en %?: ")) (initget 1) (setq pt_haut (getpoint "\nPoint haut du reseau?: ")) (initget 1) (setq pt_bas (getpoint "\nPoint bas du reseau?: ")) (entmod (append dxf_ent (list (list -3 (list "DANIELITO" (cons 1000 "RESEAUX TUYAUX") (cons 1002 "{") (cons 1040 phi) (cons 1070 nb_vanne) (cons 1040 pente) (cons 1010 pt_haut) (cons 1010 pt_bas) (cons 1002 "}") ) ) ) ) ) (prin1) ) (defun c:i-danielito ( / esel ename elist xd_list cnt10 cnt40 app_list app_sub_list xd_code xd_data ) (while (not (setq esel (entsel))) ) (setq ename (car esel)) (redraw ename 3) (setq elist (entget ename (list "DANIELITO"))) (if (not (setq xd_list (assoc -3 elist))) (princ "\nAucune donnée d'objet étendue n'est associée a cette polyligne.") (setq xd_list (cdr xd_list) cnt10 0 cnt40 0) ) (while xd_list (setq app_list (car xd_list)) (textscr) (princ "\nApplication enregistrée : \t") (princ (car app_list)) (setq app_list (cdr app_list)) (while app_list (setq app_sub_list (car app_list)) (setq xd_code (car app_sub_list)) (setq xd_data (cdr app_sub_list)) (cond ((= 1010 xd_code) (cond ((= cnt10 1) (setq cnt10 (1+ cnt10)) (princ "\nPoint bas : \t") ) ((= cnt10 0) (setq cnt10 (1+ cnt10)) (princ "\nPoint haut : \t") ) ) (princ (strcat (rtos (car xd_data) 2 3) " , " (rtos (cadr xd_data) 2 3) " , " (rtos (caddr xd_data) 2 3) ) ) ) ((= 1040 xd_code) (cond ((= cnt40 1) (setq cnt40 (1+ cnt40)) (princ "\nPente en % : \t") (princ (rtos xd_data 2 3)) ) ((= cnt40 0) (setq cnt40 (1+ cnt40)) (princ "\nDiamètre du tuyau : \t") (princ (rtos xd_data 2 3)) ) ) ) ((= 1070 xd_code) (princ "\nNombre de vannes : \t") (princ (itoa xd_data)) ) ) (setq app_list (cdr app_list)) ) (setq xd_list (cdr xd_list)) ) (redraw ename 4) (prin1) )
  9. CTRL+R pour passer d'une fenêtres à l'autre. ;)
  10. bonuscad

    ralentissements mortels

    Essayes de regarder la variable "SORTENTS" et voir si cela améliore le processus, a moins que tu ais déjà exploré cette voie! :P
  11. Suite à ce POST , j'ai cherché et pense avoir découvert un bug sous la version 2000 (peut être 2000i, à tester) Exemple dessinez une polyligne avec quelque sommets. Si vous aplliquez le code suivant, et qu'au message "Donnez un point" vous vous accrochez à l'extrémité (ou intersection) d'un sommet, la distance retournée est fausse. Si vous utilisez "proche" ou "milieu", là le résultat est correct. :casstet: ((lambda ( / ) (vl-load-com) (vlax-curve-getDistAtPoint (vlax-ename->vla-object (car (entsel "\nChoix d'une polyligne: "))) (getpoint "\nDonnez un point: ")) )) Si quelqu'un pouvait tester sous une 2000 ou 2000i pour confirmer ce qui pourrait être un bug lisp C'est le 2 ème que je découvre depuis que j'utilise le lisp, le 1er concernait les matrices retourné par (nentsel), une inversion dans la matrice avait été faite entre la 12 et 14 sur les valeur sin et cos de la rotation)
  12. bonuscad

    fenetre de capture

    Oui justement utilise la commande "REPERE" ("_PLAN"), a partir de là, ta fenêtre de capture se fera dans le scu courant.
  13. Je reviens sur cette fonction (qui me sert énormément). Je l'avais testé sous 2002 et 2005 sans surprise. Je viens d'avoir l'occasion de la testée sur une 2000 (pas 2000i) et là chose étrange, elle fonctionne avec un sommet +1 de décalage, donc sur le dernier ça plante en erreur lisp. Je n'ais pas compris ce comportement, je soupconne peut être les fonctions (vlax-....) qui auraient un comportement différent sur une 2000.?! :casstet: Quelqu'un aurait une idée? mon code est-il mal monté? NB: suite à une autre discussion, j'ai déjà essayé de changer: perim_obj (vlax-curve-getDistAtParam obj_vlax (+ param_start param_end)) en perim_obj (vlax-curve-getDistAtParam obj_vlax param_end) cela ne change rien a ce problème propre à une 2000. Bon vous direz! Quoi encore une 2000? Je sais, je sais... est ce que ça vaut le coup de résoudre le problème
  14. bonuscad

    Sens d\'une polyligne

    Merci d'avoir retrouvé le lien ;) J'efface le post précédent, le lien est beaucoup mieux...
  15. bonuscad

    Sens d\'une polyligne

    Voici une routine que j'ai trouvé naguère, comme je ne retrouve pas de liens, j'en fais une copie "texto". Elle a l'air très efficace, je vous laisse juger... Copie du code supprimée lors de l'édition, voir lien sur post-suivant. [Edité le 8/2/2006 par bonuscad]
  16. bonuscad

    Joindre polylignes 3D

    Je reconnais que ta routine est bien aboutie. Tu as le gros mérite de commenter tes codes, ce qui n'est pas du tout mon cas :mad: Et puis MERCI pour ta générosité, que dire de plus ;) Je conserve parmi ma bibliothèque épisodique, mais bien utile quand le cas se présente. Donc peut être commentaires dans le futur....
  17. Un petit coup d'oeil sur ce SUJET ;)
  18. Les modes de sélections (Capture, Fenêtre, Trajet....) ne sont pas toujours bien executés lors de l'utilisation de PAN (roulette ou autres) lors de la saisie des différents points. Le résultat final se limite à la dernière sélection contenu à l'écran indépendement des points fournis. J'évite pour ma part lors de l'utilisation de ces options, de recourir au pan ou zoom transparent.
  19. Une autre macro pour une LT: Point milieu et demi-longueur: ^C^C_.snapbase;\_.line;_none;@;\;_.lengthen;_last;_percent;200;_none;$M=$(getvar,"SNAPBASE");;_.snapbase;_none;0,0;^Z Le même en répétition: *^C^C_.snapbase;\_.line;_none;@;\;_.lengthen;_last;_percent;200;_none;$M=$(getvar,"SNAPBASE");;_.snapbase;_none;0,0; Point milieu et longueur: ^C^C_.snapbase;\_.line;_none;@;\;_.lengthen;_percent;50;_none;$M=$(getvar,"LASTPOINT");;_.lengthen;_percent;200;_none;$M=$(getvar,"SNAPBASE");;_.snapbase;_none;0,0;^Z Malgré la désactivation temporaire des accrochobjets, il se peut que ces macros réagissent mal lors de la sélection pour la commande Modiflong. Ceci est dut à la limite des possibilités des macos Avec une version pleine ou LT-Extender, voir se SUJET [Edité le 7/2/2006 par bonuscad]
  20. Un truc étrange de mémorisation, mais qui me rends bien service. Quand j'ai un trou de mémoire de mon code bancaire, il faut que je visionne le déplacement de mes doigts sur le clavier en train de composer pour me rappeler mon code. Comme quoi les automatismes.... :P
  21. En version pleine, tu peux essayer de coller ceci dans la definition d'un bouton: ^C^C((lambda ( / js n) (setq js (ssget "_X" (list (cons 0 "INSERT") (cons 410 (getvar "CTAB")))) n 0) (if js (repeat (sslength js) (command "_.explode" (ssname js n)) (setq n (1+ n))))))
  22. Je répond à la place de Christian car j'ai eu le même problème que toi lorsque j'ai voulu essayer. J'ai réussi a charger le menu après avoir effacé le MNC et le MNR fournis. En effet la recompilation du MNS a alors pu s'effectuer et se charger, chose que je ne pouvais faire avant d'avoir effacé les MNC et MNR. L'impossibilité de recompilé le MNS est dut aux dates des fichiers MNC et MNR qui sont PLUS RECENT que le MNS, donc AutoCAD ne le recompile pas.
  23. Ma réponse était destinée à Jalna pour modifier légèrement le lisp de MNT. Sur ton code le problème ne se pose pas en effet. Excuse du quiproquo ;) Le problème est que la sélection dans ce cas ne pourras être multiple comme auparavant et donc vite fastidieux :mad: Donc les autres solutions ont leurs intérêts [Edité le 2/2/2006 par bonuscad]
  24. bonuscad

    Crrrraaack!

    Je ne suis pas AutoDesk, mais c'est bien la seule exception que je pourrais t'accorder (bien qu'une version éducative existe ;) ) Mais je partage un peu ton avis, tant qu'il n'y a pas de production rétribuées, un usage commercial quoi! je suis d'avis que cela ne porte guère préjudice à AutoDesk, bien au contraire. Mai attention la loi U.S. ne le voit peut être sous cet angle :mad: Euh, ca ne serait pas simplement aussi le PRIX qui pourrait expliquer cet état de chose.
  25. bonuscad

    en passant par la fenetre

    Autre voie sans passer par les fonctions (vla-) (setq dxf_vport (entget (ssname (ssget "_:S" '((0 . "VIEWPORT"))) 0))) (/ (cdr (assoc 41 dxf_vport)) (cdr (assoc 45 dxf_vport)))
×
×
  • 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é