-
Compteur de contenus
6 374 -
Inscription
-
Dernière visite
-
Jours gagnés
30
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Patrick_35
-
On approche de la perfection ;) @+
-
Dessiner des hachures entre Points connus
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Salut En faisant un jeu de sélection (setq js (ssadd)) (command "calque....") (command "_pline....") (setq js (ssadd (entlast) js)) ..... ..... (command "_.hatch" "" "" "" js) @+ -
Sauvegarde d\'une constante dans DWG
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Si tu l'as compris, maintenant tu es capable de le créer ;) C'est ce qui permet de détourner une commande ou d'avoir des liaisons dynamiques dans le dessin. Par exemple, j'associe un texte à une polyligne fermé pour avoir sa surface. dès que je modifie ma poly avec les grips, le texte se met à jour automatiquement; Un exemple ici Pour ce qui est de commandes, tu as un exemple ici -
Comment faire des fenêtre de dialogues (DCL) ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Avec l'aide Voici un exemple simple Fichier MIM.DCL // =================================================== // // MIM.DCL V1.00 // // Copyright (C) Patrick_35 // // =================================================== mim : dialog { key = "titre"; fixed_width = true; alignment = centered; is_cancel = true; width = 60; : popup_list {label= "Origine"; key = "mim";} spacer; : list_box {label= "Destination" ; key="dest"; height = 10; multiple_select=true;} spacer; ok_cancel; } Et le fichier MIM.LSP ;;;=================================================== ;;; ;;; MIM.LSP V1.00 ;;; ;;; Changer l'imprimante des Présentations ;;; ;;; Copyright (C) Patrick_35 ;;; ;;;=================================================== (defun c:mim(/ s) ;;;--------------------------------------------------------------- ;;; ;;; Gestion des erreurs ;;; ;;;--------------------------------------------------------------- (defun *errmim* (msg) (if (/= msg "Function cancelled") (if (= msg "quit / exit abort") (princ) (princ (strcat "\nErreur : " msg)) ) (princ) ) (setq *error* s) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (princ) ) ;;;--------------------------------------------------------------- ;;; ;;; Routine principale ;;; ;;;--------------------------------------------------------------- (defun multiplie_pre(/ config doc init_mim liste_lay n position positiondests resultat tra) (setq init_mim (load_dialog (findfile "mim.dcl"))) (setq liste_lay (layoutlist) n 0 position "0" positiondest "0" doc (vla-get-activedocument (vlax-get-acad-object))) (setq tra (vlax-safearray->list (vlax-variant-value (vla-getplotdevicenames (vla-get-layout (vla-get-modelspace doc)))))) (if (vl-position "Aucun" tra) (setq tra (vl-remove "Aucun" tra)) ) (if (vl-position "Model" liste_lay) (setq liste_lay (vl-remove "Model" liste_lay)) ) (new_dialog "mim" init_mim "") (start_list "mim") (mapcar 'add_list tra) (end_list) (start_list "dest") (mapcar 'add_list liste_lay) (end_list) (set_tile "titre" "Sélection Imprimante V1.00") (set_tile "mim" position) (mode_tile "mim" 2) (while (and (/= resultat 1)(/= resultat 0)) (action_tile "mim" "(setq position $value)") (action_tile "dest" "(setq positiondest $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq resultat (start_dialog)) ) (unload_dialog init_mim) (if (eq resultat 1) (while (not (eq positiondest "")) (setq n (read positiondest)) (vlax-for lay (vla-get-layouts doc) (if (eq (nth n liste_lay) (vla-get-name lay)) (progn (vla-put-ConfigName lay (nth (atoi position) tra)) (princ (strcat "\nPrésentation " (vla-get-name lay) " Configurée avec " (nth (atoi position) tra))) ) ) ) (setq positiondest (substr positiondest (+ 2 (strlen (itoa n))) (strlen positiondest))) ) ) ) ;;;--------------------------------------------------------------- ;;; ;;; Routine de lancement ;;; ;;;--------------------------------------------------------------- (vl-load-com) (setq s *error*) (setq *error* *errmim*) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (multiplie_pre) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (setq *error* s) (princ) ) (princ "\nMIM.LSP chargé. Tapez MIM pour l'exécuter") (princ) -
Sauvegarde d\'une constante dans DWG
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
J'auroi plutôt écrit cette partie comme ceci (if (not (setq Ech (vlax-ldata-get "Phalene" "Echel1"))) (if (setq Ech (getreal "Échelle du dessin (1/")) (vlax-ldata-put "Phalene" "Echel1" Ech) ) ) (if Ech (princ (strcat "Echelle = 1/" (rtos Ech))) ) (princ) au lieu de (setq Ech (vlax-ldata-get "Phalene" "Echel1")) (if (= Ech nil) (progn (setq Ech (getreal "Échelle du dessin (1/")) (vlax-ldata-put "Phalene" "Echel1" Ech) (princ (strcat "Echelle = 1/" (vlax-ldata-get "Phalene" "Echel1"))) ) ) [Edité le 22/5/2006 par Patrick_35] -
Oui @+
-
Sauvegarde d\'une constante dans DWG
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Pour la modifier, rien de plus simple, il suffit de la réecrire Le nom de clés doit être illimitées. Je n'ai jamais testé. Je fais des listes avec des objets vla (environ 100 vla par liste) sur une dizaine de listes et ça fonctionne bien Et justement ce qui est intérressant, c'est que c'est inscrit dans le dwg pour pouvoir les réutiliser ensuite. Je m'en sert surtout pour mes réacteurs, de manière à ce que ce q'ils soient toujours actifs quand on ouvre son dessin @+ -
Salut Didier Ca fait plaisir de te revoir de nouveau Tes jeux de mots à deux balles commencaient à nous manquer @+
-
Sauvegarde d\'une constante dans DWG
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Salut Si c'es pour conserver une valeur dans un dessin sans passer par les blocs, il est possible de se servir des vlax-ldata Donc pour conserver la valeur 200, je peux faire (vlax-ldata-put "Mon_appli" "Ma_cle" 200) Pour lire ma valeur (vlax-ldata-get "Mon_appli" "Ma_cle") Pour l'effacer (vlax-ldata-delete "Mon_appli" "Ma_cle") Et encoe pour voir la liste de toutes mes valeurs avec leurs ckes (vlax-ldata-list "Mon_appli") @+ -
Salut Oui Le chemin relatif se fait par rapport à l'emplacment du dessin appelant sur le disque Un rep1\mon_xref.dwg veux dire que le dessin doit regarder dans le sous répertoire rep1 un ..\rep1\mon xref.dwg veux dire que le dessin doit remonter d'un cran et ensuite dans le répertoire rep1 @+
-
demande de correction d\'un programme
Patrick_35 a répondu à un(e) sujet de doua dans Débuter en LISP
Salut Ok, à cette adresse -
Merci beaucoup BTO J'avais bien pensé au vlr-commandended de l'editor-reactor mais passant par la fin de la commande "ATTEDIT" et non en regardant la liste modifiée, ce qui est loin d'être idiot et en plus j'utilise :vlr-modified et non le :vlr-subObjModified vu que je n'utilisais pas l'editor-reactor Mais cela me pose une question. Si on modifie un attribut qui appartient à un object-reactor par le biais d'un lisp ou en vba, le réacteur va réagir ? Et tant que j'y suis. J'ai constaté quand utilisant le _undo avec des réacteurs, Autocad réagissait parfois mal. @+ ps : Bonne vacances
-
Bonjour BTO et merci de ta réponse Je lie un ensemble d'objet (dans ce cas des attributs) en vlr-reactors-object et que je conserve aussi en vlax-ldata (et pour faire au plus simple, je ne fais dans mes tests, qu'une seul chaîne d'"attributs) Je modifie un attribut avec attedit (donc que du texte en modif), mon vlr-reactor-object réagit et me renvoi à ma routine et ce que je constate, c'est que cette routine est appelée plusieurs fois ??? Si je décortique un peu plus en profondeur le réacteur fait un appel à ma routine avec comme argument l'objet édité, le réacteur (que l’on peut encore décortiquer en vlr-data et vlr-owners). Je vérifie mon vlr-owners avec mon vlax-ldata et je constate que ça correspond parfaitement (sauf que la liste est inversée, mais bon…) Je ne comprends pas quand je modifie dans ma routine le texte d’un attribut faisant partie du vlr-reactor-object , je me retrouve avec une erreur automation : Aucune description.... Je peux l’inhiber avec un vl-catch-all-apply, mais ça ne me satisfait qu’à moitié En espérant être clair @+
-
http://www.cadxpLisp et selection de répertoire
Patrick_35 a répondu à un(e) sujet de temm dans AutoCAD 2004
Salut Si tu as les express tools d'installé (if (member "acetutil.arx" (arx)) (setq rep (acet-ui-pickdir "Message fenêtre répertoire" "C:\\" "Message Titre")) (setq rep (getstring T "\nRépertoire : ")) ) @+ -
Juste un point de détail, c'est le nom des variables qui pourraient être un peut plus clair pour la compréhention du lisp, sinon, rien à redire @+
-
passer d\'1 fichier Excel vers AutoCAD
Patrick_35 a répondu à un(e) sujet de JUJUZAZA dans Débuter en LISP
Ah oui, c'est exact, c'"est l'inverse, j'ai confondu avec extattr @+ -
passer d\'1 fichier Excel vers AutoCAD
Patrick_35 a répondu à un(e) sujet de JUJUZAZA dans Débuter en LISP
Salut Oui, c'est faisable et par plusieurs méthodes La plus simple avec attextr ou une autre plus compliqué mais nettement plus souple avec ce sujet et celui-ci Et si tu fais une recherche dans les forums, tu trouveras ton bonheur ps : Inutile de crier, on n'est pas sourd et on est entre des gens calmes ;) @+ [Edité le 18/5/2006 par Patrick_35] -
demande de correction d\'un programme
Patrick_35 a répondu à un(e) sujet de doua dans Débuter en LISP
Non, la sélection va se faire sur tous les blocs dont le nom commence par "List*" Si tu cherches les attributs ayant comme Etiquette "List*", il faut balayer la table des blocs pour retrouver le nom des blocs ou on peut retrouver "List*" et ensuite faire un jeu de sélection dans le dessin de ces blocs que l'on re-balaye pour faire ce que tu désires A te lire, je ne saisi pas tout. Peut tu redonner une explication plus clair de ce que tu souhaites faire exactement :casstet: @+ -
Salut Pour parcourir une liste, un (foreach toto b .... ou toto prend un élément de la liste un par un Sinon, comme tu es en vla, un (vla-put-layer objet-vla "MON_CALQUE") permet de changer le calque de ton objet @+
-
Ah oui, au fait, la routine que je te donne décompose le bloc ainsi que tous les blocs qui peuvent être imbriqué dedans @+
-
Ah oui, c'est un peu plus compliqué (defun InsBlocdecl(pt nom rot / a b c d) (setq a (vla-InsertBlock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point pt) nom 1 1 1 rot) b T) (setq b (vlax-safearray->list (vlax-variant-value (vla-explode a)))) (vla-delete a) (while b (setq d nil) (foreach n b (if (eq (vla-get-objectname n) "AcDbBlockReference") (progn (setq c (vlax-safearray->list (vlax-variant-value (vla-explode n))) d (append d c)) (vla-delete n) ) ) ) (setq b d) ) (princ) ) La variable qu'a donné Tramber sert pour décomposer un bloc qui n'a pas une échelle X uniforme avec l'échelle Y @+
-
Pour créer le \"témoin de notre temps\"
Patrick_35 a répondu à un(e) sujet de Ckycia dans AutoCAD 2006
Les pyramides me rappelle cette citation de Will Cuppy - La forme même des pyramides d'Egypte montre que déjà les ouvriers avaient tendance à en faire de moins en moins. @+ -
Encore mieux, avec un (command "-inserer" (strcat "*" chem) pt "1" "1" Rot) c'est décomposé, ou en vla (vla-explode (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point pt) chem 1 1 1 rot)) @+
-
J'ai déjà fait un comparatif entre cette méthode et celle d'autodesk (dont le lisp s'appelait julian il me semble) et que je trouvais comme résultat une seconde d'écart. C'est surement le résultat de toutes les opérations avec leurs précisions plus ou moins grandes @+
-
En un peu plus simple pour la date (setq ma_date (menucmd "M=$(edtime,$(getvar,date),DD/MO/YYYY HH:MM)")) @+
