-
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
-
fmult avec boite de dialogue (suite)
Patrick_35 a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Oouuiiiiinnn, ça plante chez moi. Dés que je lance la commande, j'ai cette erreur ---> ; erreur:type d'argument incorrect: stringp nil L'erreur vient de la variable "ROAMABLEROOTPREFIX" qui est inconnu sur une A2000 Et tant que j'y suis, j'ai remarqué que tu faisais appel à des "commande" et je n'ai pas vu un (command "_.undo" "_group") et (command "_.undo" "_end") pour pouvoir revenir facilement en arrière au cas ou. ps : Tu n'as pas osé te lancer dans la lecture/écriture des registres apparemment ;) @+ -
Salut Un exemple de ce que j'avais fait pour le chargement automatique des menus avec leurs barres d'outils Extrait de l'aide Le titre dans mon menu partiel ***MENUGROUP=MON_MENU_PERSO*** POP1 [&MENU PERSO] ID_Premier [&Premier]^C^C^P(lance_un_lisp) Pour la barre d'outil ***TOOLBARS **TB_MON_MENU_PERSO ID_MON_MENU_PERSO [_Toolbar("MENU PERSO", _Top, _Show, 1, 1, 1)] ID_Bouton_1 [_Button("BOUTON 1", "Bt1.bmp", "Bt1.bmp")]^C^C^P(lance_un_lisp) ^P [--] ID_Bouton_2 [_Button("BOUTON 2", "Bt2.bmp", "Bt2.bmp")]^C^C^P(lance_un_lisp) ^P Pour charger le menu automatiquement le menu partiel dans un s::statup() (if (not (menucmd "GMON_MENU_PERSO.ID_Premier=?")) ; ne trouve pas le menu (progn (command "_.menuload" "mon_menu.mns") ; charger le menu partiel (menucmd (strcat "P7=+MON_MENU_PERSO.Pop1")) ; place le menu à la 7éme position (command "_.toolbar" "TB_MON_MENU_PERSO" "") ; affiche la barre d'outil ) ) ps : ce que donne Zebulon_ à l'air exellent, ça reste à creuser @+
-
fmult avec boite de dialogue
Patrick_35 a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Salut, Tu peux définir une clé d'accès général par exemple pour ton lisp FFMO. (setq Cle_Zeb "HKEY_CURRENT_USER\ \Software\ \Autodesk\ \Autocad\ \Zebulon\ \FFMO"); (enlever les espaces entres les deux \) Faire une lecture (setq Val_1 (vl-registry-read Cle_Zeb "Cle_1")) Une écriture (vl-registry-write Cle_Zeb "Cle_1" Val_1) Ou encore pour effacer une clé (vl-registry-delete Cle_Zeb "Cle_1") Pour ce qui est du vl, je ne sais pas si ça répond correctement à la question, mais c'est au cas ou (setq Vues (vla-get-views (vla-get-activedocument (vlax-get-acad-object)))) (vlax-for Vue Vues (princ (strcat "\n\tVue : " (vla-get-name Vue))) (princ "\t,Direction : ")(princ (vlax-safearray->list (vlax-variant-value (vla-get-direction Vue)))) (princ "\t,Target : ")(princ (vlax-safearray->list (vlax-variant-value (vla-get-target Vue)))) ) (princ) @+ -
Salut Ou encore avec la commande controle ! @+
-
fmult avec boite de dialogue
Patrick_35 a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Salut, Je suis une bille en 3D mais pmeut-être avec les variables target et viewdir ? Et pourquoi pas dans des registres perso ? Ton utilitaire est vraiment sympa. J'aurai juste un bémol Je viens de voir que si je n'ai pas de vue prédéfini, j'ai un message sur acad_strlsort @+ [Edité le 21/10/2005 par Patrick_35] -
houla, je ne voulais pas te froisser Je sais que tu connais ça très bien. C'était juste pour indiquer que le filtre ne prenait pas tout @+
-
Salut Bonus Et si par exemple ta poly 3D est fermée ? @+
-
Le code 100 est plus orienté vlisp. Cette sélection est sûrement possible en vlisp, mais c'est assez galère à faire et autolisp est beaucoup plus simple d'emploi. Apparemment, un ssget sur un code 100 à un fonctionnement un peu spécial. Un (ssget "x" (list (cons 100 "AcDbLine"))) retourne une sélection dont la logique reste à trouver. :casstet: @+
-
Donc en un peu plus compliqué ;) (setq js (ssget "x" (list (cons 0 "POLYLINE,LWPOLYLINE,ARC,LINE") (cons 8 calq0)))) les and et or sont inclus Et pour des polylignes 3D (setq js (ssget "x" (list (cons 0 "POLYLINE") (cons 8 calq0)))) Il faut ensuite balayer la sélection avec le bit 8 du code 70 pour savoir si c'est une 3D @+
-
Salut (setq js (ssget "x" (list (cons 0 "LWPOLYLINE") (cons 8 mon_calque) (cons 70 0)))) @+ (ps : le and est par défaut)
-
Oui, mais du coup, avec le vlisp, on ne sait plus si le calque est dépendant ou non des xrefs, à moins de rechercher le caractère | dans le nom, mais je ne trouve pas ça top Et comme le sous-entend mlon, chaque chose en son temps.. @+
-
Salut Il est possible de simplifier ta routine et j'ai remarqué quelle prenait en compte les xrefs. Je l'ai reprise afin de les éviter @+ (defun c:mm_liste_calque (/ inc lay) (setq lay (tblnext "layer" t) inc 0 listcalques nil listpointcalques nil) (while lay (if (not (eq (logand (cdr (assoc 70 lay)) 16) 16)) ; ce n'est pas un xref (setq listcalques (append listcalques (list (cdr (assoc 2 Lay)))) listpointcalques (append listpointcalques (list (cons inc (cdr (assoc 2 Lay))))) inc (1+ inc)) ) (setq lay (tblnext "layer")) ) )
-
Salut Comme on est dans la rubrique lisp, essaye (startapp "C:/Program files/BaCAD Desktop 2004 For R16/Liste/listefer.exe") @+
-
Salut Tu as une explication ici, là, et là Le premier et le deuxième explique la notion de réacteur. Le troisième associe des entités aux réacteurs. @+
-
Merci Ludwig Effectivement ce n'est pas récent et la solution que tu proposes efface tous les réacteurs, pas uniquement celui qui peut m'intéresser Le lisp ci-joint à un exemple qui supprime que le/les réacteur(s) souhaité(s) (defun Attributs_ini(Rea Cde) (setq dernier_ent (entlast)) ) (defun Attributs_xyz(Rea Cde / bl js n xyz) (cond ((or (eq (car Cde) "MOVE") (eq (car Cde) "STRETCH")) (setq js (ssget "_p")) ) ((or (eq (car Cde) "GRIP_MOVE") (eq (car Cde) "GRIP_STRETCH")) (setq js (cadr (ssgetfirst))) ) ((eq (car Cde) "INSERT") (setq js (ssadd)) (ssadd (entlast) js) ) ((eq (car Cde) "COPY") (setq js (ssadd) n (entnext dernier_ent)) (while n (ssadd n js) (setq n (entnext n)) ) ) ((eq (car Cde) "UCS") (setq js (ssget "x" (list (cons 0 "INSERT") (cons 2 Nom_bloc)))) ) ) (if js (progn (setq n 0) (while (ssname js n) (setq bl (entget (ssname js n))) (if (and (eq (cdr (assoc 0 bl)) "INSERT") (eq (strcase (cdr (assoc 2 bl))) (strcase Nom_bloc))) (if (cdr (assoc 66 bl)) (progn (setq xyz (trans (cdr (assoc 10 bl)) (cdr (assoc -1 bl)) 1)) (while (not (eq (cdr (assoc 0 bl)) "SEQEND")) (if (eq (cdr (assoc 0 bl)) "ATTRIB") (cond ((eq (strcase (cdr (assoc 2 bl))) (strcase Eti_X)) (setq bl (subst (cons 1 (rtos (car xyz))) (assoc 1 bl) bl)) (entmod bl) (entupd (cdr (assoc -1 bl))) ) ((eq (strcase (cdr (assoc 2 bl))) (strcase Eti_Y)) (setq bl (subst (cons 1 (rtos (cadr xyz))) (assoc 1 bl) bl)) (entmod bl) (entupd (cdr (assoc -1 bl))) ) ((eq (strcase (cdr (assoc 2 bl))) (strcase Eti_Z)) (setq bl (subst (cons 1 (rtos (caddr xyz))) (assoc 1 bl) bl)) (entmod bl) (entupd (cdr (assoc -1 bl))) ) ) ) (setq bl (entget (entnext (cdr (assoc -1 bl))))) ) ) ) ) (setq n (1+ n)) ) ) ) (princ) ) (defun c:spt(/ i j n) (if (setq i (vlr-reactors :vlr-Command-Reactor)) (progn (setq n 1 i (nth n (car i))) (while i (setq j nil) (if (or (eq (cdr (car (vlr-reactions i))) 'ATTRIBUTS_XYZ) (eq (cdr (car (vlr-reactions i))) 'ATTRIBUTS_INI)) (setq j i) ) (if j (vlr-remove j) (setq n (1+ n)) ) (if (setq i (vlr-reactors :vlr-Command-Reactor)) (setq i (nth n (car i))) ) ) (if mrea_mpt (princ (strcat "\n\tDésactivation de la mise à jour XYZ du bloc " Nom_bloc ".")) ) (setq mrea_mpt nil) ) ) (princ) ) (defun c:mpt() (if (not mrea_mpt) (progn (c:spt) (vlr-command-reactor nil '((:vlr-commandwillstart . Attributs_ini))) (setq mrea_mpt (vlr-command-reactor nil '((:vlr-commandEnded . Attributs_xyz)))) (princ (strcat "\n\tActivation de de la mise à jour XYZ du bloc " Nom_bloc ".")) ) (princ (strcat "\n\tLa mise à jour XYZ du bloc " Nom_bloc " est déjà activée.")) ) (princ) ) (vl-load-com) (setq Nom_bloc "XY" Eti_X "X" Eti_Y "Y" Eti_Z "Z") (princ (strcat "\n\tPour activer la mise à jour XYZ du bloc " Nom_bloc ", lancez la commande MPT.\n\tPour revenir à la normale, faites la commande SPT.")) (princ)
-
Merci Bonus, ça décoiffe :cool: Je suis impressionné par ton lisp, on y retrouve même des fonctions cachées :) . Il me reste plus qu'à regarder sérieusement les résultats et à deviner quelles variables et quels flags correspondent à telle fonction. @+
-
Merci Patrick, je vais regarder de plus près @+
-
Merci de ton aide Bonus Si tu fais la commande acadinfo sur autocad, tu écris le fichier acadinfo.txt dans lequel tu retrouves toutes ces fonctions mais pas leurs arguments :( J'ai trouvé sur l'autre forum toutes les explications par rapport à mon exemple et je me demandais si par hasard il n'existait pas quelques choses reprenant toutes ces commandes et leurs argumentaires afin de se faciliter la vie dans les lisps. Si je suis ton exemple avec (acet-ui-message), il m’est impossible de deviner la valeur des flags ainsi que la valeur par exemple 1 qui m’est retourné par cette fonction. @+
-
Bonjour à vous tous Je viens de découvrir que l'on pouvait faire appel à des fonctions des express tools du style (acet-ui-message "Message d'alerte" "WARNING" 48) (acet-ui-message "Message d'information" "INFO" 64) Où peut-on retrouver toutes ces fonctions avec leurs arguments ? (et pas uniquement pour l'exemple ci-dessus) Merci @+
-
Je viens de tester et c'est exact. si on convertit avec a9cad, on ne retouve plus la bonne version :mad: @+
-
Salut Tu peux te servir de la commande _SYSVDLG des express tools qui indique si c'est sauvé ou non dans les registres, et il y a plein d'autres infos @+
-
Hello Il y a aussi le batch drawing converter fournit acec autocad qui donne la version du dwg @+
-
Comment fermer une fenêtre sans avoir le message \"Voulez-vous enregistrer ?\"
Patrick_35 a répondu à un(e) sujet de Giques dans AutoCAD 2005
Salut En mettant comme ligne de commande dans le script (avec sdi à 1) _open _no mon_dessin.dwg ou encore (avec sdi à 0) _close _no _open mon_dessin.dwg @+ -
numerotation de pages dans presentation
Patrick_35 a répondu à un(e) sujet de jbloulou dans AutoCAD LT 2000 à LT 2002
Salut C'est faisable....via un lisp ou en vba et pas sur une version LT @+ -
Toutes les options de SSGET
Patrick_35 a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Je ne comprends pas trop son intérêt ?? On a déjà C Crossing, CP Crossing Polygon, W Window et WP Window Polygon !! Il me tarde d'avoir une nouvelle version pour tester ces nouvelles fonctionnalités @+
