-
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
-
renvoyer la plus grande valeur d'un attribut d'une sélection de bloc
Patrick_35 a répondu à un(e) sujet de asptt9 dans AutoCAD 2013
Salut Ma petite contribution (defun c:maxat(/ doc ent lst sel) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "insert") (cons 66 1))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (setq lst (cons (vla-get-textstring (car (vlax-invoke ent 'getattributes))) lst)) ) (vla-delete sel) (alert (strcat "La valeur max est : " (car (vl-sort lst '>)))) ) ) (vla-endundomark doc) (princ) ) @+ -
Salut Et avec GEF ? @+
-
Problème nom de variable
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Salut Je vois que tu commences à rentrer dans les subtilités du dcl et du lisp ;) La réponse d'-Olivier- est excellente. @+ -
Salut J'aime la réponse succincte. :blink: Je vais donner encore une piste, regarde si tu ouvres bien tout tes fichiers avec autocad et voir si par exmemples tu as la bonne version, qu'il ne faut pas récuperer, etc... @+
-
Salut Extrait di site en question Tes icones, c'est pour quelle utilisation ? Si c'est pour un message d'alerte, on peut aussi utiliser MsgBox @+
-
Je voulais vérifier que l'ObjectId passait bien sur une 64, ce que tu me confirmes. Là, on dirait que c'est sur le dossier que l'on a un problème. Tu as les droits ? Il reste assez de place sur le disque ? Tu n'as pas un nombre limité de fichiers ? Une autre personne ou un autre Autocad n'utilise pas déjà un dessin du dossier ? Les fichiers ne sont pas en lecture seul ? En faisant une copie de tes dessins dans le même dossier, cela fonctionne ? @+
-
Salut C'est un problème avec l'ObjectId en 64 bits J'en ai profité pour mettre à jour ObjectDbx pour les versions 2013 Dis-moi si c'est ok pour que je fasse la même chose avec MAT. ps : c'est mis à jour sur mon blog (v1.11) @+
-
Masquer une boite de dialogue
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Non, du tout. C'est à mon avis un problème de boucle ou de variable si tu ne retrouves pas tout. Tu as une 1ère boucle pour la 1ère boire de dialogue et un seconde boucle qui s'imbrique dans la première pour la seconde boite de dialogue. Tu peux aussi afficher les boites de dialogues les unes sur les autres. C'est suivant les gouts. L'exemple de MAT est de permettre une sélection à l'écran. Dans ce cas, pas 50 solutions. Si tu veux un exemple de deux fenêtres ou plus qui se superposent, regarde le lisp JAV en cliquant sur le bouton Sélection puis ajouter @+ -
Masquer une boite de dialogue
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Sur mon blog indiqué dans ma signature @+ -
Gestionnaire des Etats de Calque
Patrick_35 a répondu à un(e) sujet de vannes dans LISP et Visual LISP
Salut Tu as des fonctionnalités que je ne connaissais pas. C'est apparues sur quelle version ? Il va falloir que je me mette au gout du jour ;) @+ -
Masquer une boite de dialogue
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Non, on ne la décharge par mais on la ferme pour la réouvrir ensuite. Si tout est mis dans des variables, rien n'est perdu. Fait un test avec MAT en sélectionnant un bloc ou attribut et regarde le résultat @+ -
Gestionnaire des Etats de Calque
Patrick_35 a répondu à un(e) sujet de vannes dans LISP et Visual LISP
Salut ;;; listSavedLayerstates ;;; Returns a list of all layer states ;;; by Serge Camiré, www.cadnovation.com ;;; ;;; Since layer 0 is always involved in a drawing, thus in any subsequent saved layer state, ;;; we scan this layer. ;;; ;;; Receive: ;;; no parameters ;;; Returns ;;; LIST or nil (defun listSavedLayerstates ( / return ) (cond ((not (setq return (entget (cdr (assoc 330 (entget (tblobjname "layer" "0"))))))) (setq return nil)) ((not (setq return (cdr (assoc 360 return)))) (setq return nil)) ((not (setq return (member (cons 3 "ACAD_LAYERSTATES") (entget return)))) (setq return nil)) (t (setq return (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 3 (car x))) (entget (cdadr return))))) ) ) return ) ; By Patrick_35 (defun c:elman(/ doc lm) (setq doc (vla-get-activedocument (vlax-get-acad-object)) lm (vlax-create-object (strcat "AutoCAD.AcadLayerStateManager." (itoa (atoi (getvar "acadver"))))) ) (vla-startundomark doc) (vla-setdatabase lm (vla-get-database doc)) (mapcar '(lambda(x)(vl-catch-all-apply 'vla-delete (list lm x))) (listSavedLayerstates)) (vlax-release-object lm) (vla-endundomark doc) (princ) ) @+ -
Masquer une boite de dialogue
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Salut Il suffit de fermer la boite de dialogue pour la réaficher ensuite Un extrait du lisp MAT (while (and (/= resultat 0) (/= resultat 1) ) (new_dialog "mat" dcl_id) .... (action_tile "chbl" "(done_dialog 2)") (action_tile "chat" "(done_dialog 3)") (action_tile "cancel" "(done_dialog 0)") (action_tile "accept" "(done_dialog 1)") (setq resultat (start_dialog)) (cond ((eq resultat 1) .... ) ((eq resultat 2) (rech_bl) ) ((eq resultat 3) (rech_blat) ) ) ) (unload_dialog dcl_id) @+ -
Menu, toolbar, ruban et palette
Patrick_35 a répondu à un(e) sujet de alala dans Pour aller plus loin en LISP
Je trouve que tu te complique la vie Pour le fichier XPT, tu fait un export depuis ta palette d'outils Pour les menus, j'ai fait un menu partiel en texte (mns) que tu ajoutes s'il n'existe pas Il faut aussi laisser aux utilisateurs la possibilité de gérer les outils comme ils veulent. @+ -
Menu, toolbar, ruban et palette
Patrick_35 a répondu à un(e) sujet de alala dans Pour aller plus loin en LISP
Salut Voici un exemple que j'ai trouvé pour ajouter un bouton sur une toolbar Visual LISP Example (vl-load-com) (defun c:Example_AddToolbarButton() ;; This example creates a new toolbar called TestToolbar and inserts a ;; toolbar button into it. The toolbar is then displayed. ;; To remove the toolbar after execution of this macro, use the Customize Menu ;; option from the Tools menu. (setq acadObj (vlax-get-acad-object)) (setq currMenuGroup (vla-Item (vla-get-MenuGroups acadObj) 0)) ;; Create the new toolbar (setq newToolBar (vla-Add (vla-get-Toolbars currMenuGroup) "TestToolbar")) ;; Assign the macro string the VB equivalent of "ESC ESC _open " (setq openMacro (strcat (Chr 3) (Chr 3) (Chr 95) "open" (Chr 32))) (setq newButton (vla-AddToolbarButton newToolBar "" "NewButton" "Open a file." openMacro)) ;; Display the toolbar (vla-put-Visible newToolBar :vlax-true) ) Pour les palettes, je n'ai rien trouvé à part utiliser la ligne de commande (command "'_ToolPalettes" "_import" Mon_fichier_xpt) @+ -
Enregistrer des variables sur un fichier externe
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Pour lire un fichier et tout mettre dans une liste (defun ouvrir () (setq ouvrir (getfiled "Selectionnez un fichier " "C:\\Users\\cx\\Desktop\\Infosave" "txt" 2)) (setq lecture_sauvegarde (open ouvrir "r")) (while (setq h (read-line lecture_sauvegarde)) (setq lst (cons h lst)) ) (close ouvrir) ) Ou encore, si c'est structuré (defun ouvrir () (setq ouvrir (getfiled "Selectionnez un fichier " "C:\\Users\\cx\\Desktop\\Infosave" "txt" 2)) (setq lecture_sauvegarde (open ouvrir "r")) (while (setq h (read-line lecture_sauvegarde)) (setq i (read-line lecture_sauvegarde)) (setq j (read-line lecture_sauvegarde)) (setq k (read-line lecture_sauvegarde)) (setq lst (cons (list h i j k) lst) ) (close ouvrir) ) Le résultat est dans la variable lst @+ -
Je pense qu'une reinstall ou réparation s'impose @+
-
A bien y reflechir, on dirait que tu as déjà une boite de dialogue définit avec le même nom pour JAV Je te propose de changer dans le lisp (foreach txt (list "opt : dialog {" par (foreach txt (list "jav : dialog {" et (new_dialog "opt" dcl "") par (new_dialog "jav" dcl "") @+
-
Ton erreur est en essayant la ligne de code que je t'ai donné ou en lancant JAV ? @+
-
Et en essayant en 1er cette ligne, quel est le résultat ? (sur la version qui ne fonctionne pas) (setq tmp (vl-filename-mktemp "opt" nil ".dcl")) Pour ensuite le fichier temporaire (vl-file-delete tmp) @+
-
Oui Regarde dans Autocad le répertoire des fichiers temporaire (Options --> Fichiers --> Emplacement du fichier de référence externe temporaire) Tu n'as peut-être pas la même chose entre les deux versions. @+
-
Salut JAV créé ses boites de dialogue par un fichier temporaire. Donc, il n'y a pas de raison qu'il ne les retrouvent pas. Maintenant, si tu as un répertoire temporaire de déclaré et qu'en réalité, il n'existe plus, c'est peut-être là le problème. Ou encore un problème avec des droits administrateur ? @+
-
Tester une valeur d'une Boite de dialogue
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Oui, en ajoutant un argument à la fonction Par exemple (action_tile "diametre" "(verif_saisie \"diamétre\" $value)") (defun verif_saisie(qui nb) (or (eq (type (read nb)) 'REAL) (alert (strcat "Dans " qui " ,ce n'est pas un réel"))) ) Ps : j'ai pris un str comme exemple, mais ça pourrait être un entier @+ -
Enregistrer des variables sur un fichier externe
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Pas tout à fait Le fichier est écrasé s'il existe, sinon il est créé. Pour ajouter sur un fichier existant, tu as la fonction "a" (pour append) à la place du "w" (pour write) Pour compléter sur la fonction, il reste le "o" (pour open) Pour l'emplacement, tu lui indiques directement (open "d:/dir1/dir2/dir3/mon_fichier.txt" "w") Regade l'aide sup la fonction open, elle est très compléte. @+ -
Enregistrer des variables sur un fichier externe
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Ben, de la même manière que tu fais ton DCL ? (setq toto (open "mon_fichier.txt" "w")) (mapcar '(lambda(x)(write-line x toto)) liste_de_variables) (close toto) @+
