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. Récapitulatif _ (underscore) pour que la commande soit international, c'est à dire que votre code pourra s'executer sur n'importe quelque version linguistique d'AutoCAD. - (tiret) pour que la commande s'execute en ligne de commande et non en boite de dialogue. il faut noter qu'une commande appelée depuis le lisp se fera toujours en ligne de commande. ex (command "_.layer") ou (command "_.-layer) appelera la commande calque en ligne de commande. Donc on peut penser que cette option est inutile dans du code, mais peut être une bonne habitude à avoir.
  2. Super, Ca me rappelle que j'avais vu sur un forum US une fonction interressante pour faire une sélection "bout à bout", c'est à dire que tu sélectionnais par exemple la 1ère ligne et le programme se chargait de faire la sélection comme si c'était un polyligne jointe. Couplé a ton code, cela pourrait être d'enfer :cool: J'essayes de retrouver les liens si ça t'interresse. Voilà c'est ici, la fonction : SSEnd2End [Edité le 2/2/2006 par bonuscad]
  3. A faire appel à la commande "originelle" d'autocad. Sans l'usage de ce point tu peux apeller une commande redéfinie (qui porte le même nom, mais ne fait pas forcément la même chose). Je t'invite a regarder l'aide à propos de la commande "NONDEF" ("_UNDEFINE") et "REDEF" ("_REDEFINE")
  4. Une forme d'appel à (ssget) est interessante pour régler ce problème de sélection multiple. C'est l'option :S (Single/Simple) Ex : (entget (ssname (ssget "_:S") 0)) Tu peut noter que dans ce cas on peut utiliser directement (ssname) avec un index 0 (puisqu'il n'y a qu'une seule entité dans le jeu de séléction) Rappel une entité ne peut se trouver qu'une fois dans un jeu de sélection sauf exeception par l'usage d'une option non documentée, l'option :D (Double)
  5. bonuscad

    Select or not select ?

    Regarde cette discussion J'avais relevé le même problème, cela rejoint la réponse de Christian.
  6. J'ai pris la peine d'essayer ton code. Et bien je n'ai rien remarqué, tout a fonctionné, que ce soit pour les ellipses ou les splines. J'ai même essayé de créer des groupes avec celles-ci, ca fonctionne aussi. Ne pouvant reproduire ton cas particulier, je ne peux t'en dire plus. Bonne chance! ;)
  7. Voici les formules que je connais, en espérant que cela te soit utile:
  8. bonuscad

    Superbe jeux d\'énigmes...

    Celui là, mon fils l'a essayé, je crois qu'il a fait 17 ou 19 niveaux. J'ai participé sur quelques uns, dans les premiers niveaux, cela m'a paru sympa! Tu connais déjà peut être? http://www.ouverture-facile.com/
  9. Une bidouille en lisp pour tourner une fenetre de présentation de 90° en + ou -. NB: ne fonctionne pas si la vue est verrouillé, j'ai pas paufiné. ;) (defun c:r_viewport ( / e_vport dxf_vport base_pt lg_view ht_view h_vue pt_ctr-view pt_dl pt_ur) (cond ((zerop (getvar "TILEMODE")) (setvar "CMDECHO" 0) (command "_.undo" "_begin") (if (/= (getvar "CVPORT") 1) (command "_.pspace") ) (setq e_vport nil dxf_vport nil) (while (null e_vport) (setq e_vport (ssget "_+.:E:S" '((0 . "VIEWPORT")))) (if e_vport (setq e_vport (ssname e_vport 0))) ) (setq dxf_vport (entget e_vport) base_pt (cdr (assoc 10 dxf_vport)) lg_view (cdr (assoc 40 dxf_vport)) ht_view (cdr (assoc 41 dxf_vport)) h_vue (cdr (assoc 45 dxf_vport)) ) (command "_.mspace") (setvar "CVPORT" (cdr (assoc 69 dxf_vport))) (setq pt_ctr-view (getvar "VIEWCTR")) (initget "+ -") (if (eq (getkword "\nRotation de +90° ou -90°? [+/-] <+>: ") "-") (command "_.dview" "" "_twist" (angtos (rem (- (getvar "VIEWTWIST") (/ pi 2)) pi) 0 5) "") (command "_.dview" "" "_twist" (angtos (rem (+ (getvar "VIEWTWIST") (/ pi 2)) pi) 0 5) "") ) (command "_.-view" "_save" "$bascul_vue") (command "_.-layer" "_state" "_save" "$bascul_vue" "" "" "") ; (command "_.-layer" "_state" "_save" "$bascul_vue" "_on" "_froze" "_lock" "_plot" "_newvp" "_color" "_linetype" "_weight" "_plotstyle" "" "" "") (command "_.pspace") (setq pt_dl (list (- (car base_pt) (/ ht_view 2.0)) (- (cadr base_pt) (/ lg_view 2.0)) (caddr base_pt) ) ) (setq pt_ur (list (+ (car base_pt) (/ ht_view 2.0)) (+ (cadr base_pt) (/ lg_view 2.0)) (caddr base_pt) ) ) (entdel e_vport) (command "_.mview" pt_dl pt_ur) (command "_.mspace") (command "_.-view" "_restore" "$bascul_vue") (command "_.-view" "_delete" "$bascul_vue") (command "_.-layer" "_state" "_restore" "$bascul_vue" "_delete" "$bascul_vue" "" "") (if (zerop (logand 1 (getvar "viewmode"))) (command "_.zoom" "_ce" pt_ctr-view (strcat (rtos (/ ht_view h_vue)) "XP")) ) (command "_.pspace") (command "_.undo" "_end") (setvar "CMDECHO" 1) ) (T (prompt "\n*** Commande non autorisée dans l'espace objet ***")) ) (prin1) )
  10. Je pense que pour la demande simple de MartinF l'action de verrouiller le calque est ce qui convient. Les objet ne sont pas sélectionnables (le message te donne le nombre d'objet verrouillés) S'ils semblent sélectionnés lors de sélections avec les Grips, aucune action ne sera effectuée sur eux (le message est après l'action). La méthode de Ludwig est plutôt quand tu veux toujours voir un calque mais jamais qu'il ne soit imprimé. La sélection sur le calque "DefPoints" a un comportement particulier (doit être lié, je pense, aux reacteurs des cotations.)
  11. bonuscad

    Plug-in ERMAPPER

    Merci de ta proposition. Mais mes options ne sont pas constantes. Bon, ben , je voulais automatiser la création d'un gabarit aux caractéristiques bien précises, beaucoup d'images avec un nom logique mais seulement numérique :casstet: Je vais le faire manuellement, en esperant que le temps que j'ai perdu, soit retrouvé par la suite par l'utilisation de ce gabarit + du lisp pour gérer facilement mes zones d'images par simple click!
  12. Bonjour, Je suis embêté par la commande ERMATTACH. Ce que je veux faire, c'est l'utiliser en ligne de commande sans boite de dialogue pour la sélection de fichier image compressée ".ECW". Bien sur j'ai fixé la variable "FILEDIA" mais cela ne change rien. Un script (fichier .scr) ne résoud pas le problème non plus. Si quelqu'un avait la solution miracle, ça serait Top! :cool: Mon avis est que cela n'est pas possible car la variable filedia doit être gérée à l'intérieur de la commande ERMATTACH. Mais..... j'espère une réponse salutaire.
  13. bonuscad

    Dessin d\'isolation

    Ou alors ceci qui résoud le problème des échelles, mais pas le poids du fichier. Ce n'est pas de moi, je vous le livre comme j'ai pu le trouver (mise à part peut être l'adaption au language international) Merci à l'auteur ;) ;*** Isolant.LSP ; ;*** adapté à Autocad 14 Français le 16/03/99 par roule.@wanadoo.fr ; ;*** Written by Don J. Buschert (c) 1992, 1997 ; ; courriel: don.buschert@sait.ab.ca ; buschert@spots.ab.ca ; AutoCAD Page: http://www.spots.ab.ca/~buschert/ ; ; Disclaimer: ; Permission to use, copy, modify, and distribute this software ; for any purpose and without fee is hereby granted, provided ; that the above copyright notice appears in all copies and ; that both that copyright notice and the limited warranty and ; restricted rights notice below appear in all supporting ; documentation. ; ; THIS PROGRAM IS PROVIDED "AS IS" AND WITH ALL FAULTS. THE AUTHOR ; SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR ; FITNESS FOR A PARTICULAR USE. THE AUTHOR ALSO DOES NOT WARRANT THAT ; THE OPERATION OF THE PROGRAM WILL BE UNINTERRUPTED OR ERROR FREE. ; ; Version 4.1 01/06/97 ; Added OSNAP controls. ; Version 4.0 08/14/92 ; Initial release... ; ; This program draws a polyline in the shape of insulation. ; The user enters or picks the insulation width; and enters or ; picks the insulation length and angle. ; ;*** Function INSUL ; (princ "\nChargement, attendez s'il vous plait...") (defun C:ISOLANT (/ svbm ;"BLIPMODE" sv_osmode ;"OSMODE" poi1 ;Points which calculate the arcs and lines of the ;first batt. poi2 poi3 poi4 poi5 poi6 poi7 iang ;Angle. idis ;Approximate insulation length iinc ;Increment distance. ;iwid ;Insulation width (global) poic ;Center point of arc. stpt ;Start point of insulation ) (graphscr) (setvar "CMDECHO" 0) (command "_UNDO" "_M") (setq svbm (getvar "BLIPMODE")) (setq sv_osmode (getvar "OSMODE")) (setq stpt (getpoint "\nPoint de départ de l'isolant: ")) (if iwid (setq prom (strcat " <" (rtos iwid) ">")) (setq prom "") ) (setq flag (getdist (strcat "\nEpaisseur de l'isolant" prom ": "))) (if flag (setq iwid flag) ) (setq endp (getpoint stpt "\nPointer ou donner le point d'arrivée: ") ) (setq iang (angle stpt endp)) (setq idis (distance stpt endp)) (setvar "OSMODE" 0) (princ "\nDessin de l'isolant en cours...") (setvar "BLIPMODE" 0) (setvar "TRACEWID" 0) (setq poi1 (polar stpt iang (* iwid 0.05))) (setq iinc (distance poi1 stpt)) (setq poi2 (polar poi1 (+ (dtor 90) iang) (* iwid 0.30))) (setq poi2 (polar poi2 (+ (dtor 180) iang) (* iwid 0.05))) (command "_PLINE" poi1 poi2) (while (< iinc idis) (setq poic (polar poi2 iang (* iwid 0.20))) (setq iinc (+ (distance poic poi2) iinc)) (if (< iinc idis) (progn (setq poi3 (polar poic (+ (dtor 90) iang) (* iwid 0.20))) (setq poi4 (polar poic iang (* iwid 0.20))) (setq iinc (+ (distance poi4 poic) iinc)) (if (< iinc idis) (progn (command "_ARC" "CE" poic "A" "-180") (setq poi5 (polar poi4 (+ (dtor -90) iang) (* iwid 0.60))) (setq poi5 (polar poi5 (+ (dtor 180) iang) (* iwid 0.10))) (command "_Line" poi5) (setq poic (polar poi5 iang (* iwid 0.20))) (setq iinc (+ (* iwid 0.10) iinc)) (if (< iinc idis) (progn (setq poi6 (polar poic (+ (dtor -90) iang) (* iwid 0.20))) (setq poi7 (polar poic iang (* iwid 0.20))) (setq iinc (+ (* iwid 0.20) iinc)) (if (< iinc idis) (progn (command "_ARC" "CE" poic poi7) (setq poi2 (polar poi7 (+ (dtor 90) iang) (* iwid 0.60))) (setq poi2 (polar poi2 (+ (dtor 180) iang) (* iwid 0.10))) (command "_Line" poi2) (setq iinc (- iinc (* iwid 0.10))) ) (command "_ARC" "CE" poic poi6) ) ) ) ) (command "_ARC" "CE" poic "A" "-90") ) ) ) ) (command "") (princ "\nDessin isolant terminé...") (setvar "BLIPMODE" svbm) (setvar "OSMODE" sv_osmode) (princ) ) ; ;*** End of Program ;*** Support Programs ;*** Function DTOR ;Converts degrees to radians, where degr is degrees; returns a ;radian value. ; (defun DTOR (degr) (/ (* degr pi) 180) )
  14. bonuscad

    draw arc

    Ca ne parle pas de VBA, mais vois cette DISCUSSION ,elle est instructive. ;)
  15. bonuscad

    Clic droit perdu

    Essayes de remettre la variable "SHORTCUTMENU" à sa valeur par défaut (11) ;)
  16. Quand même, Y-a un truc qui ne vas pas. Ton idée est bonne, mais je crois que tout les fichiers à la racine seront ignoré. Tu devrais faire la même ligne à "blanc" avant la boucle pour traiter la racine.
  17. Oups Excuse :exclam: J'avais pas vu que tu avais intégré ta ligne d'affichage dans la boucle. En effet comme ça on voit qui se passe quelque chose au fur et à mesure ;) Mon (mapcar 'print folder_list) est mal conçu je parcours 2 fois la liste, dans la boucle c'est mieux! D'ailleurs on peut peut être supprimer cette liste qui ne sert plus à rien a part "bouffer" de la mémoire pour rien. A moins que l'on veuille récupérer cette liste pour une autre utilisation....
  18. Salut Patrick_35 J'ai fais le même exercice que toi! C'est similaire a ce que tu as fais, mais je crois qu'une coquiile c'est glissé. Tu fais: (foreach rep lst_str folder_list à la place lst_str serait plus sûr et puis j'aurais vu un argument en plus pour la fonction. ; exemple (list_directory "c:" "/program files/" "*.lin") pour limiter (quand c'est possible) le temps de recherche. L'emploi de caractère génériques à l'air de fonctionner. ;)
  19. Avec mes doigts je plis en quatre la feuille en superposant le perimètre du cercle, en dépliant, l'intersection des pliures me donne le centre ;)
  20. ^C^C(if (not c:prog-lisp) (load "prog-lisp.lsp"))(c:prog-lisp)(setvar "USERS5" var-lisp)(command "_vbaload" "prog-vba.dvb")(command "_-vbarun" "prog-vba.dvb!prog_vba.prog")(command "_vbaunload" "prog-vba.dvb")^Z PS:Les programmes sont censés être dans un dossier faisant parti du chemin de recherche. Autrement il faut compléter le nom du fichier avec son chemin pour les chargements "load" NB:Tout ça sur 1 seule ligne.
  21. Salut Patrick_35 Je me suis un peu amusé a chercher une solution. :casstet: Je t'avoue qu'a un moment mes neurones se mélangaient dans les imbriquation de while mapcar foreach avec fonction récursive.:P Mais au final, voilà l'algorithme! Sur ma machine il a mis 2mm pour me lister tous les dossiers de C:\ :mad: Bien sûr si tu vises au départ un sous-dossier de plus en plus éloigné dans l'aborescence, les résultats seront de plus en plus rapides. :cool: Il est facile d'ajouter une ou 2 lignes d'entrées utilsateur pour définir la variable disk_unit et la variable folder_name. ;) (defun extract_folder (lst_fold / l_dir l) (setq l_dir '()) (foreach n lst_fold (setq l (vl-directory-files n nil -1)) (if (eq (car l) ".") (setq l (cddr l)) ) (cond (l (setq l_dir (append (mapcar '(lambda (x) (strcat n x "/") ) l ) l_dir ) ) ) ) ) l_dir ) (defun c:list_directory ( / disk_unit folder_name folder_list lst_str) (setq disk_unit "C:" folder_name (strcat disk_unit "/") folder_list (list folder_name) lst_str folder_list ) (while (setq lst_str (extract_folder lst_str)) (setq folder_list (append folder_list lst_str ) ) ) (textscr) (mapcar 'print folder_list) (prin1) )
  22. Ben toi aussi tu reviens en arrière! ;) A l'heure du numérique, l'unité mondialisé est le Bit, (ou Byte au choix) Donc des : Bit_longueur Bit_poids Bit_temps Etc... Bruno qui est à 1000 Méga Bit Lumière de la réponse
  23. Depuis que je connais AutoCAD (9.0) , j'ai toujours connu AutoLisp comme étant intégré au noyau d'AutoCAD. Même si certaines applications Lisp demandent quelque fois une révision de code, la plupart se portent facilement d'une version à l'autre. A mon avis c'est même celui qui pose le moins de problème par rapport aux autres: VBA ARX C++, qui ont subit beaucoup plus d'évolution ex: ADS -> ARX (bonjours les mises à jours) Les DLL du VBA sont aussi souvent problématique. Par contre s'il est bien adapté pour traiter les entités graphique, il est beaucoup moins pour du calcul complexe (lenteur d'execution par rapport aux autres languages) Mais vu la rapidité des machines, on peut se permettre de l'utiliser encore pour du calcul complexe. Et je dirais pour finir que cela reste un language relativement facile d'accés pour permettre de faire des petites (ou grandes) choses qui améliorent pas mal la productivité. ;)
  24. bonuscad

    Variable \"USERS5\"

    Bon tu as trouvé Mais, Cela te t'empêche pas de le "chainer" lors de son execution. Ex: (defun c:ma_fonction_libre ( / ) ;;vérifier que la fonction protégé est chargé en mémoire, si NON, on la charge (if (not ma_fonction_protege) (load "ma_fonction_protégé")) ;;On lance l'application protégé) (c:ma_function_protégé) ;;L'application rend la main, on sauvegade la variable dans USERS5 (setvar "USERS5" nomdelavariable) ) Volià ta nouvelle fonction sans modifier l'original. Tu fais ton prog VBA en relisant la variable autocad "users5" Les variables d'autocad se modifie par (setvar) Les variables (globale ou locale) de fonction lisp se définisse ou modifie par (setq)
  25. Moi j'utilise "RegSeeker", si il est très efficace, il est un peu destructeurs au niveaux des clés concernant la personalisation d'AutoCAD. Une fois qu'on a pu personnaliser le Soft en excluant certaine clés, plus de problèmes!. J'ai toujours pus quand même remettre rapidement mon environnement d'aplomb après un nettoyage radical. Au pire, ces "softs" font généralement par défaut un backup du registre pour pouvoir revenir en arrière. Donc je pense que tu as tout a gagner a utiliser ces "nettoyeurs", virer des clés obsolète ou inutile accélère l'initialisation de windows au démarrage et parfois son fonctionnement. Sur un poste "pro" dont l'environnement change peu, 1 à 2 fois par an me semble suffisant comme fréquence. Il faut reconnaitre qu'à la 1ère utilisation, on est jamais rassuré sur la suite des événements.
×
×
  • 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é