-
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
-
http://img138.exs.cx/img138/143/gnocide.jpg
-
Voilà un sujet qui m’a intéressé à plus d’un titre. Associer un texte avec une polyligne avec une interactivité (dans le cas présent, indiquer les surfaces) Cette routine est à mettre en startup pour qu’à chaque ouverture de dessin, les réacteurs soient toujours actifs Et comme c’est la première fois que je fais ce type d’exercice, toute critique est bienvenue Pour faire une liaison, lancer la commande rea @+ (defun modif_poly(obj rea arg-list) (if (and (vlax-read-enabled-p obj)(vlax-read-enabled-p (vlr-data rea))) [b]; (vla-put-textstring (vlr-data rea) (rtos (vla-get-area obj))) (vla-put-textstring (vlr-data rea) (strcat (rtos (vla-get-area obj) 2 2) "M2"))[/b] (vlr-remove rea) ) ) (defun effacer_pt(obj rea arg-list) (vlax-ldata-delete obj "Patrick_35" (vlr-data rea)) (vlax-ldata-delete (vlr-data rea) "Patrick_35" obj) (vlr-remove rea) ) (defun c:rea(/ n sel_poly sel_text) (while (not sel_poly) (setq sel_poly (car (entsel "\nSélection de la polyligne/spline/cercle : "))) (if sel_poly (if (or (= (cdr (assoc 0 (entget sel_poly))) "POLYLINE") (= (cdr (assoc 0 (entget sel_poly))) "LWPOLYLINE") (= (cdr (assoc 0 (entget sel_poly))) "SPLINE") (= (cdr (assoc 0 (entget sel_poly))) "CIRCLE")) (progn (setq sel_poly (vlax-ename->vla-object sel_poly)) (if (/= (vla-get-objectname sel_poly) "AcDbCircle") (if (= :vlax-false (vla-get-closed sel_poly)) (progn (alert "Cette Polyligne/Spline n'est pas fermée") (setq sel_poly nil) ) ) ) (if sel_poly (if (vlax-ldata-get sel_poly "Patrick_35") (progn (alert "Polyligne/Spline/Cercle déjà associé à un texte") (setq sel_poly nil) ) ) ) ) (progn (alert "Ce n'est pas une Polyligne/Spline/Cercle") (setq sel_poly nil) ) ) ) ) (if sel_poly (progn (while (not sel_text) (setq sel_text (car (entsel "\nSélection du texte : "))) (if sel_text (if (or (= (cdr (assoc 0 (entget sel_text))) "TEXT") (= (cdr (assoc 0 (entget sel_text))) "MTEXT")) (progn (setq sel_text (vlax-ename->vla-object sel_text)) (if (vlax-ldata-get sel_text "Patrick_35") (progn (alert "Texte déjà associé à une Polyligne/Spline/Cercle") (setq sel_text nil) ) ) ) (progn (setq sel_text nil) (alert "Ce n'est pas un texte") ) ) ) ) (if sel_text (progn (vlr-object-reactor (list sel_poly) sel_text '((:vlr-modified . modif_poly)(:vlr-erased . effacer_pt))) (vlr-object-reactor (list sel_text) sel_poly '((:vlr-erased . effacer_pt))) (vlax-ldata-put sel_poly "Patrick_35" sel_text) (vlax-ldata-put sel_text "Patrick_35" sel_poly) ) ) ) ) (princ) ) (defun refaire_reacteurs(/ entp entt n) (vl-load-com) (if (not appli_patrick_35) (progn (setq appli_patrick_35 (ssget "x" (list (cons 102 "{ACAD_XDICTIONARY")))) (if appli_patrick_35 (progn (setq n 0) (while (setq entp (ssname appli_patrick_35 n)) (setq entp (vlax-ename->vla-object entp)) (setq entt (vlax-ldata-get entp "Patrick_35")) [b] (vla-put-textstring entt (strcat (rtos (vla-get-area entp) 2 2) "M2"))[/b] (vlr-object-reactor (list entp) entt '((:vlr-modified . modif_poly)(:vlr-erased . effacer_pt))) (vlr-object-reactor (list entt) entp '((:vlr-erased . effacer_pt))) (setq n (1+ n)) ) ) ) ) ) (princ) ) (refaire_reacteurs)[Edité le 24/12/2004 par Patrick_35] [Edité le 30/5/2006 par Patrick_35]
-
Je suis bien d'accord averc toi Tramber, d'autant plus qu'il existe les commandes fichjournac et fichjournin Pour bonuscad De souvenir aussi, il me semble que modemacro c'est pour faire du diesel en autolisp @+
-
Merci Maximilien, mais ce n'est pas exactement mon souhait. Le but de l'opération est qu'en exécutant ses commandes autocad, elles s'inscrivent directement dans un fichier script Par exemple je dessine une ligne de 10,10 à 50,50 et le tout en ducalque et en étant sur la couche 0 Ca écrit dans le fichier _.line 10,10 50,50 ou en plus évolué (entmake (list (cons 0 "LINE") (cons 100 "AcDbEntity") (cons 10 (list 10.0 10.0 0.0))(cons 11 (list 50.0 50.0 0.0)))) C'est aussi valable pour les commandes effacer, déplacer, copier, etc... @+
-
Routine Lisp pouvant être simplifiée
Patrick_35 a répondu à un(e) sujet de BIM G CO dans Pour aller plus loin en LISP
Salut, Une routine pour forcer tous les styles de texte en Arial Narrow (defun c:sty(/ cmd reg ts st) (setq cmd (getvar "cmdecho") reg (getvar "regenmode")) (setvar "cmdecho" 0) (setvar "regenmode" 0) (command "_.undo" "_group") (setq ts "Arialn.ttf") ; c'est le style Arial Narrow (setq st (tblnext "style" t)) (princ "\nTraitement en cours...")(princ) (while st (command "_.style" (cdr (assoc 2 st)) ts "" "" "" "" "") (setq st (tblnext "style")) ) (command "_.regen") (command "_.undo" "_end") (setvar "cmdecho" cmd) (setvar "regenmode" reg) (princ) ) Je me suis servi de la commande style d'autocad pour changer le style de texte, ce qui me parait un peu plus simple que de sélectionner toutes les entités et de changer la police @+ -
Ce qui serait bien, au vu de ce que l’on peut faire avec les réacteurs, se serait de trouver une fonction qui permette comme dans Excel d’enregistrer une Macro Par exemple, je clique ou je lance une fonction play, je fais mes commandes sur autocad (lignes, textes, etc...) puis je lance la fonction arrêt et j’enregistre-le tout dans un fichier script. Et tant qu’à faire, il serait aussi possible d’affecter un groupe de fichier au script afin de faire un traitement par lot. @+
-
Ah, oui, c'est une routine qui sert à substituer un bloc par un autre. Très utile Si tu le permets, Serge, il manque un (vl-load-com) dans ta routine (eh oui, je suis encore en 2000 ;)) Je pensais que c'était, comme demandais notre ami Ludwig, une routine qui sert à recomposer un bloc qui à été décomposé par une comparaison dans la table des blocs. Là j'aurai dit, Monsieur s'il vous plait :cool: @+
-
Et encore une chose, bravo pour ton premier lisp, il n'est rien de plus plaisant de constater que ça fonctionne @+
-
Salut Tu affectes une variable à l'ouverture de ton fichier (setq fichier (open "mon_fichier.txt" "w")) Tu noteras que le w (write) est pour écrire dans un fichier en effaçant l'ancien s'il existe Un a (append) est pour continuer à écrire dans le fichier sans effacer l'ancien Et un r (read) est pour la lecture du fichier Ensuite un (write-line "valeur à écrire" fichier) pour écrire ta valeur dans ton fichier Un write-line écrit une ligne complète et fais un retour chariot (enter--> on passe à la ligne suivante) Un write écrit dans le fichier et en faisant un autre write à la suite, on continu à écrire sur la même ligne @+
-
Salut, tu n'as plus qu'à faire ton choix @+
-
Salut, j'ai trouvé deux trucs qui pourraient correspondre CDList et LauncherCCD @+
-
Merci Tramber, effectivement, ça ne fait pas très longtemps que j'ai retroussé les manches et que je m'y suis mis. De plus, comme je vois régulièrement des demandes concernant un dialogue entre Autocad et Excel, maintenant, c'est fait. il ne reste plus qu'à s'en inspirer @+
-
La boucle est faites dans c:regpol et de plus, tu ne fais pas un (setq a (ssname region 0)), mais un (setq a (ssname region n)) ou n est la variable à incrémenter. Au début elle à la valeur 0 Ta boucle doit commencer juste après ta sélection (setq region (ssget "_X" '((0 . "REGION")))) @+
-
Exact, exact Serge, et je suis persuadé que ça se trouve dans les registres Pour l'instant je trouve par ce type de code (setq a (vl-registry-read "HKEY_CLASSES_ROOT\\Excel.sheet\\CLSID")) (setq b (vl-registry-read (strcat "HKEY_CLASSES_ROOT\\CLSID\\" a "\\Typelib"))) (setq c (vl-registry-read (strcat "HKEY_CLASSES_ROOT\\Typelib\\" b "\\1.2\\0\\win32"))) Mais je ne suis pas persuadé que ça fonctionne quelle que soit la plate forme, la version et que j'utilise les bonnes clés. Et comme je n’ai qu’un type de config. , difficile de comparer :casstet: @+
-
Un exemple pour lire/ecrire des valeurs dans Excel depuis Autocad Pour activer les fonctions visual-lisp (vl-load-com) Lancer Excel (setq xl (vlax-get-or-create-object "Excel.Application")) (vlax-import-type-library :tlb-filename "C:/Program Files/Microsoft Office/Office/Excel8.olb" :methods-prefix "xl-" :properties-prefix "xlp-" :constants-prefix "xlc-") (setq xl_wks (vlax-get xl "Workbooks")) Ouvrir le fichier test.xls sur la racine du c, ou sinon, l'active dans Excel (setq xl_fichier (xl-open xl_wks [b]"c:\\test.xls"[/b])) Rendre Excel visible (vla-put-visible xl 1) Choisir la feuil1 du classeur (setq xl_classeur (vlax-get xl_fichier "Sheets")) (setq xl_feuille (xlp-get-item xl_classeur [b]"feuil1"[/b])) Choisir la cellule A10 de la feuille (setq rng (xlp-get-range xl_feuille [b]"A10"[/b])) Lire la valeur dans la cellule et la mettre dans la variable valeur (setq [b]valeur[/b] (vlax-variant-value (xlp-get-value rng))) Ecrire une valeur dans la cellule (xlp-put-value rng [b]"VALEUR A ECRIRE"[/b]) Copier la feuil1 (setq xl_feuille (xlp-get-item xl_classeur [b]"feuil1"[/b])) (setq xl_dernier xl_feuille) ; xl_dernier=xl_feuille par défaut (xl-copy xl_feuille xl_dernier) ; si :vlax-true, ça s'est bien passé Déplacer la feuille copié (setq xl_deplace (xlp-get-item xl_classeur [b]"feuil1 (2)"[/b])) (xl-move xl_feuille xl_deplace) ; si :vlax-true, ça s'est bien passé Renommer la feuille feuil1 (2) en TEST (xlp-put-name xl_deplace [b]"TEST"[/b]) Sauvegarder le fichier Test1.xls sur la racine du c (xl-saveas xl_feuille [b]"c:\\Test1.xls"[/b]); si :vlax-true, ça s'est bien passé Fermer le fichier (xl-close xl_wks) Voila, c'est déjà un commencement pour travailler à la fois sur Autocad et Excel @+
-
Salut Avec un entmake, mais je ne vois pas l'utilité de créer un bloc sans nom ? @+
-
Salut Ta boucle, il faut que tu la fasses sur ton jeu de sélection grace à une incrémentation tu défini pas exemple n à 0 (setq n 0) puis ta boucle sur la valeur de a tant que a n'est pas nil (while (setq a (ssname region [b]n[/b])) Puis ton prog et à la fin de on incrémente de 1 dans le jeu de sélection et on ferme la boucle while (command "changer" regionexp1 "" "p" "ca" calqueorigine "") (setq n (1+ n)) ) @+
-
Salut Patrick Essaye avec un*, c'est ce que j'ai fait pour importer les gabarits en lisp, mais du coup, tu les as tous. Impossible de savoir ce qui se cache dans ces fichiers (nombre, nom, etc..) @+
-
Bien, bien Patrick, et tu vas rechercher ceux qui sont déjà dans le forum ? Et tu comptes aussi ajouter les différents prog qu'on peut trouver tant qu'on y est ? Beaucoup de boulot en perspective .. ;) @+
-
Longueur totale de plusieurs polylignes
Patrick_35 a répondu à un(e) sujet de Azerty dans AutoCAD 2004
Ah, grillé ;) Bon je poste quand même, il était dans mes tablettes, de plus il est en visual lisp et faire une addition avec celui-ci est un jeu d'enfant (vl-load-com) (if (setq sel (entsel)) (progn (setq sel (vlax-ename->vla-object (car sel))) (setq deb (vlax-curve-getStartParam sel)) (setq fin (vlax-curve-getEndParam sel)) (princ (strcat "\nLa longueur est de : " (rtos (vlax-curve-getDistAtParam sel fin)))) ) ) (princ) @+ -
Salut Il me semble qu’on t’a déjà donné la solution @+
-
Textes intelligents
Patrick_35 a répondu à un(e) sujet de Patrick_35 dans AutoCAD, liste de souhaits
Génial, merci Patrick. Il ne reste plus qu'a voir ce que vont donner les oisillons @+ -
Pensez vous qu\'une formation est utile ou non ?
Patrick_35 a répondu à un(e) sujet de Eric dans CAO, généralités
Bonjour à tous Une formation est indispensable pour débuter. Quand on sait que l’on ne retient que 15 à 20% d’un stage, cela laisse rêveur Pour ma part, je n’ai fait qu’une semaine de formation afin de connaître Autocad, (c’était sur la version 10), et j’ai constaté avec des collègues qui ont eu à peu près le même cursus - Une semaine de formation pour connaître, pas forcement savoir bien s’en servir, les commandes - Deux mois pour réussir à maîtriser toutes les commandes - Deux ans pour savoir manipuler correctement Autocad Dans les formations, on n’apprend qu’à se servir des commandes, mais absolument rien sur la manière de travailler. C’est par nos acquis qu’on s’en sort et dont bénéficient nos collègues Alors la prog, les variables... Encore une chose, une remise à niveau peut être utile afin d’éviter de tâtonner pour connaître les nouveautés, mais par forcement d’une évolution à une autre, je pense que toutes les trois aux quatre versions serait bien, vu que maintenant Autodesk sort une version par an Pour conclure - Si vous pensez que l'éducation coûte cher, essayez l'ignorance @+ -
Salut Bon, bah c'est mon tout d'apporter ma petite pierre Pour répondre à ta première question, il faut changer dans l'entité sélectionnée le code dxf 8 exemple pour une sélection unique (setq ent (entget (car (entsel)))) (setq ent (entmod (subst (cons 8 "TOTO1") (assoc 8 ent) ent))) (entupd (cdr (assoc -1 ent))) Maintenant, pour faire un filtre sur une selection multiple que sur des cercles de couleurs rouge (setq sel (ssget (list (cons 0 "circle") (cons 62 1)))) Le code dxf 0 correspond au type d'entité et le code 62 à la couleur @+
-
Salut Et celui-la en français @+
