-
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
-
Bonjour Depuis mon passage sur une 2013, j'ai le lisp JAV qui freeze et les résultats du déroulement du lisp une fois que celui-ci est terminée. J'avais pourtant fait ce lisp afin de voir le déroulement et éviter de perdre patience devant l'écran. Après une recherche dans l'aide, j'ai bien trouvé la variable CLIPROMPTUPDATE, vérifié qu'elle était bien à 1 et que nenni. Donc, si quelqu'un a trouvé la parade :D @+
-
Salut J'aurais plus fait le test dans ce sens (not (equal (vlax-get b 'origin) (vlax-get o 'Coordinates) 1e-8)) Ce n'est plus lecrabounet qu'il faut t'appeler, mais l'écureuil du lisp ;) @+
-
Zoom sur des zones d'objets regroupés
Patrick_35 a répondu à un(e) sujet de alala dans Routines LISP
Salut Et la routine ZoomObject de (gile) ? @+ -
Salut Pour la sélection de ton bloc dans une présentation, utilise le code dxf 410 @+
-
Besoin de vos conseils avant de commencer
Patrick_35 a répondu à un(e) sujet de ASTERIXII dans Débuter en LISP
Il est plus simple de gérer une liste que plusieurs. Si tu as deux listes, il faut dire à un moment quand passer à l'autre. Cela veut donc dire un test, ce qui ralenti forcement le lisp. Quand tu fais une sélection dans un dessin de 3000 éléments, cela est assez rapide dans autocad. Alors pour 258 calques, tu n'auras pas le temps de mettre le sucre dans le café ;) Le plus simple, si tu cherches à optimiser ton lisp, c'est de publier un 1er jet et on se fera un plaisir de t'indiquer ce qu'il faut améliorer et pourquoi. @+ -
Prolonger une polyligne à 45° sur une autre
Patrick_35 a répondu à un(e) sujet de ASTERIXII dans Débuter en LISP
Salut Ok, je viens de comprendre Tu as RA qui permet un raccord sans joindre. Cela peut servir de base pour faire ce que tu demandes (je manque de temps en ce moment) @+ -
Besoin de vos conseils avant de commencer
Patrick_35 a répondu à un(e) sujet de ASTERIXII dans Débuter en LISP
Salut Je ne suis pas certain d'avoir tout compris, mais voici ma proposition de liste telle que je la voir '((CVC400 1 2 3) (CVC200 1 3 2)) Le 1er élément est le calsue, le second l'épaisseur de ligne, etc... Quand tu parcours ta liste, tu auras comme élément à traiter par exemple '(CVC400 1 2 3) tout en sachant comment tu as organisé ta liste. @+ -
Prolonger une polyligne à 45° sur une autre
Patrick_35 a répondu à un(e) sujet de ASTERIXII dans Débuter en LISP
Salut Et avec la commande native CHANFREIN ? @9 -
Salut Le temps de rédiger la réponse et ça fonctionne. @+
-
Déplacer un élement d'une liste
Patrick_35 a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Salut Pour le plaisir Une sans boucle, juste de la manipulation de liste (par contre, pas de doublon dans la liste) (defun insertAt (ele ind lst) (if (member (nth ind lst) lst) (append (reverse (cdr (member (nth ind lst) (reverse lst)))) (cons ele (member (nth ind lst) lst)) ) (append lst (list ele)) ) ) Et une autre en itérative, juste histoire de ne pas faire que du récursif (defun insertAt (ele ind lst / n l) (setq n 0) (while (< n ind) (setq l (cons (car lst) l) lst (cdr lst) n (1+ n) ) ) (append (reverse (cons ele l)) lst) ) @+ -
Salut Ben, a part un wbloc ou je ne comprends pas le besoin @+
-
[Résolu] Eviter x bouton autocad
Patrick_35 a répondu à un(e) sujet de La Lozère dans Windows trucs et astuces
Salut Pour éviter d'avoir 50 boutons Autocad, tu peux mettre la variable TASKBAR à 0 @+ -
Oui, tu as raison, comme je n'ai qu'une entrée, j'ai fait au plus simple (dictsearch dict "Rec_01") revient à faire (dictnext dict T) Pout tout te dire, voila le bout de code sur lequel je travaille (setq doc (vla-get-activedocument (vlax-get-acad-object)) dic (vla-get-dictionaries doc) ) (setq new (vla-add dic "Mon_Dict")) (and (ssget) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (setq lst (cons (vlax-make-variant (vla-get-handle ent)) lst) dxf (cons 5 dxf) ) ) (vla-delete sel) ) ) (setq xre (vla-Addxrecord new "Rec_01") xrt (vlax-make-safearray vlax-vbInteger (cons 0 (1- (length dxf)))) xrd (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length lst)))) ) (vlax-safearray-fill xrt dxf) (vlax-safearray-fill xrd lst) (vla-setxrecorddata xre xrt xrd) Et je voulais faire comme précedement avec la recherche simplifié. Il faut mettre un ename et non une liste, même si ça fonctionne en pur autolisp Merci pour tout @+
-
Salut Regarde le cdr au début de la ligne de code ;) De plus, ce code correspond à l'enregistrement. @+
-
Merci pour ta réponse (gile) Une chose que je ne comprends pas. Quand je fais (setq xname (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary")))) (setq dict (dictadd (namedobjdict) "Mon_Dict" xname)) (setq xrecord (entmakex '((0 . "XRECORD") (100 . "AcDbXrecord") (1 . "Test")))) (dictadd dict "Rec_01" xrecord) Tout fonctionne et avec (dictnext dict t) Je retrouve bien mon enregistrement, ou je m'y prend mal ? Pas spécialement, mais c'est pour utiliser l'un ou l'autre en fonction du lisp et des mes variables. Merci pour le lien. @+
-
Bonjour +1 pour le clavier Si un jour les rubans disparaissent, le clavier sera toujours là ;) Idem en ce qui concerne les menus. Autre gros avantage, les menus, rubans peuvent être configuré de n'importe quelle manière, le raccourci restera le même (si on ne change pas le pgp) @+
-
Bonjour Je regarde comment faire un dictionnaire en vlisp et je me suis aperçu d'une chose Quand je créé un dictionnaire avec un enregistrement en vlisp, et bien je suis incapable de récupérer l'enregistrement en autolisp. Voici un exemple fournit dans l'aide (vl-load-com) (defun c:Example_SetXRecordData() ;; This example creates a new XRecord if one doesn't exist, ;; appends data to the XRecord, and then reads it back. To see data being added, ;; run the example more than once. (setq acadObj (vlax-get-acad-object)) (setq doc (vla-get-ActiveDocument acadObj)) ;; Unique identifiers to distinguish this XRecordData from other XRecordData (setq TYPE_STRING 1 TAG_DICTIONARY_NAME "ObjectTrackerDictionary" TAG_XRECORD_NAME "ObjectTrackerXRecord") ;; Connect to the dictionary in which to store the XRecord (setq dictionaries (vla-get-Dictionaries doc)) (setq TrackingDictionary (vl-catch-all-apply 'vla-Item (list dictionaries TAG_DICTIONARY_NAME))) ;; (= (vl-catch-all-error-message TrackingDictionary) "Automation Error. Key not found") (if (= (type TrackingDictionary) 'VLA-OBJECT) (setq TrackingXRecord (vla-GetObject TrackingDictionary TAG_XRECORD_NAME)) (progn ;; Create the objects that hold this XRecordData (setq TrackingDictionary (vla-Add dictionaries TAG_DICTIONARY_NAME)) (setq TrackingXRecord (vla-AddXRecord TrackingDictionary TAG_XRECORD_NAME)) ) ) ;; Get current XRecordData (vla-GetXRecordData TrackingXRecord 'temp-XRecordDataType 'temp-XRecordData) ;; If there is no array yet then create one (setq ArraySize 0) (if (/= temp-XRecordDataType nil) (progn (setq ArraySize (vlax-safearray-get-u-bound temp-XRecordDataType 1)) (setq XRecordDataType (vlax-make-safearray vlax-vbInteger (cons 0 (1+ ArraySize)))) (setq XRecordData (vlax-make-safearray vlax-vbVariant (cons 0 (1+ ArraySize)))) (setq iCount 0) (while (>= ArraySize iCount) ;; Get information for this element (setq DataType (vlax-safearray-get-element temp-XRecordDataType iCount)) (setq Data (vlax-variant-value (vlax-safearray-get-element temp-XRecordData iCount))) (vlax-safearray-put-element XRecordDataType iCount DataType) (vlax-safearray-put-element XRecordData iCount Data) (setq iCount (1+ iCount)) ) ) (progn (setq XRecordDataType (vlax-make-safearray vlax-vbInteger '(0 . 0))) (setq XRecordData (vlax-make-safearray vlax-vbVariant '(0 . 0))) ) ) ;; Append new XRecord Data ;; ;; For this sample we only append the current time to the XRecord (vlax-safearray-put-element XRecordDataType ArraySize TYPE_STRING) (setq cdate (rtos (vlax-variant-value (vla-GetVariable doc "CDATE")) 2 6)) (vlax-safearray-put-element XRecordData ArraySize (strcat (substr cdate 5 2) "/" (substr cdate 7 2) "/" (substr cdate 1 4) "-" (substr cdate 10 2) ":" (substr cdate 12 2) ":" (substr cdate 14))) (vla-SetXRecordData TrackingXRecord XRecordDataType XRecordData) ;; Read back all XRecordData entries (vla-GetXRecordData TrackingXRecord XRecordDataType XRecordData) (setq ArraySize (vlax-safearray-get-u-bound XRecordDataType 1)) ;; Retrieve and display stored XRecordData (setq iCount 0 msg "") (while (>= ArraySize iCount) ;; Get information for this element (setq DataType (vlax-safearray-get-element XRecordDataType iCount)) (setq Data (vlax-variant-value (vlax-safearray-get-element XRecordData iCount))) (if (= DataType TYPE_STRING) (setq msg (strcat msg Data "\n")) ) (setq iCount (1+ iCount)) ) (alert (strcat "The data in the XRecord is: \n\n" msg)) ) Tout fonctionne. Maintenant, je regarde pour récuperer les info en autolisp (setq dict (dictsearch (namedobjdict) "ObjectTrackerDictionary")) (dictnext dict t) Et bien, j'ai l'erreur Alors incompatible ? @+
-
Salut Tu remplaces (< (cadar a) (cadar B)) par (> (cadar a) (cadar B)) Pose des questions et on se fera un plaisir d'y répondre. Le but du lisp est aussi de montrer ce qui est possible de faire, et d'essayer de le comprendre. C'est grâce à ce type de lisp trouvé sur le net que j'ai progressé. @+
-
Salut Je me suis amusé à te faire quelque chose Il fonctionne avec pdfCreator. Le premier folio est en bas à gauche, le suivant à sa droite puis au dernier sur la même ligne, on remonte d'un cran et on recommence. Tu peux avoir des "trous" dans tes lignes. (defun c:imp(/ bck bg doc ent hd lay lst pdf plt sel tot kill mon_impression) (defun kill(qui / item meth1 meth2 obj WMI) (setq WMI (vlax-create-object "WbemScripting.SWbemLocator") meth1 (vlax-invoke WMI 'ConnectServer nil nil nil nil nil nil nil nil) meth2 (vlax-invoke meth1 'ExecQuery "Select * from Win32_Process") ) (vlax-for item meth2 (and (setq obj (vlax-get item 'CommandLine)) (vl-string-search (strcase qui) (strcase obj)) (vlax-invoke item 'Terminate) ) ) (foreach item (list WMI meth1 meth2) (vlax-release-object item) ) ) (defun mon_impression(dim) (vlax-invoke lay 'setwindowtoplot (list (caar dim)(cadar dim)) (list (caadr dim)(cadadr dim)) ) (vl-catch-all-apply 'vlax-invoke (list plt 'plottodevice)) ) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (and (ssget "x" (list (cons 0 "insert") (cons 2 "feuilledereperage3"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vla-getboundingbox ent 'bg 'hd) (setq lst (cons (list (vlax-safearray->list bg) (vlax-safearray->list hd)) lst)) ) (vla-delete sel) (setq lst (vl-sort lst '(lambda(a B) (if (eq (cadar a) (cadar B)) (< (caar a) (caar B)) (< (cadar a) (cadar B)) ) ) ) ) (kill "PDFCreator.exe") (setq pdf (vlax-create-object "PDFCreator.clsPDFCreator")) (vlax-invoke pdf 'cstart "/NoProcessingAtStartup") (vlax-put pdf 'cPrinterStop :vlax-true) (vlax-put pdf 'cWindowState 0) (vlax-invoke pdf 'cClearCache) (setq lay (vla-get-activelayout doc) plt (vla-get-plot doc) tot 0 ) (vla-put-configname lay "PDFCreator") (vla-refreshplotdeviceinfo lay) (vla-put-canonicalmedianame lay "A4") (vla-put-centerplot lay :vlax-true) (vla-put-paperunits lay acMillimeters) (vla-put-plothidden lay :vlax-false) (vla-put-plotrotation lay ac0degrees) (vla-put-plottype lay acWindow) (vla-put-plotviewportborders lay :vlax-false) (vla-put-plotviewportsfirst lay :vlax-true) (vla-put-plotwithlineweights lay :vlax-true) (vla-put-plotwithplotstyles lay :vlax-true) (vla-put-scalelineweights lay :vlax-false) (vla-put-standardscale lay acVpScaleToFit) (vla-put-stylesheet lay "") (vla-put-usestandardscale lay :vlax-true) (if (vl-catch-all-error-p (setq bck (vl-catch-all-apply 'getvar (list "backgroundplot")))) (setq bck nil) ) (if bck (setvar "backgroundplot" 0) ) (foreach ent lst (mon_impression ent) (while (/= (vlax-get pdf 'cCountOfPrintjobs) (1+ tot))) (setq tot (1+ tot)) ) (vlax-invoke pdf 'cCombineAll) (vlax-release-object pdf) (if bck (setvar "backgroundplot" bck) ) ) ) (princ) ) @+
-
mettre une condition sur une erreur de calcul
Patrick_35 a répondu à un(e) sujet de fabien034 dans LISP et Visual LISP
Salut Fais une recherche avec vl-catch-all-error-p ou vl-catch-all-apply @+ -
Pour retrouver tous les codes dxf 5 (cdr (vl-remove-if-not '(lambda(x)(eq (car x) 5)) (dictsearch dict "Ma_Roue_01"))) Si tu souhaites modifier un enregistrement, avec entmod. @+
-
Pour créer un enregistrement de plusieurs objets (en utilisant les handles) (setq xname (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary")))) (setq dict (dictadd (namedobjdict) "Mes_Roues" xname)) (and (setq js (ssget)) ; sélection de quelques objets, pour l'exemple (progn (setq n 0) (while (setq j (ssname js n)) (setq lst (cons (assoc 5 (entget j)) lst) n (1+ n) ) ) ) ) (setq xrecord (entmakex (append '((0 . "XRECORD") (100 . "AcDbXrecord")) lst))) (dictadd dict "Ma_Roue_01" xrecord) Pour retrouver mon dictionnaire (setq dict (dictsearch (namedobjdict) "Mes_Roues")) Et l'enregistrement n°1 (dictsearch dict "Ma_Roue_01") ou (dictnext dict t) et (dictnext dict) pour les suivants Et en conséquence, avec le code dxf n°5 (handle), tous mes objets @+
-
(gile) m'a coupé l'herbe sous le pied en demandant le pourquoi d'un fichier Excel @+
-
Si, tu peux très bien associer un fichier Par exemple (vlax-ldata-put "Mes Roues" "Mon Fichier" "c:/test/test.xls") Ou encore avec les variables d'environnement si tu souhaites un fichier commun (setenv "Mes_Roues_Mon_Fichier" "c:/test/test.xls") A toi de bien réflechir pour faire ce qui est le plus simple car tu as plusieurs solutions. @+
-
Tu peux très bien organiser ta BD dans ton dessin de cette manière (vlax-ldata-put "Mes Roues" "Roue 01" '("32004" "32005" "32006")) (vlax-ldata-put "Mes Roues" "Roue 02" '("31B0A" "31B0B" "31B0C")) Et pour savoir qui est avec qui (vlax-ldata-get "Mes Roues" "Roue 01") Pour retrouver toutes mes Roues (vlax-ldata-list "Mes Roues") ps : les chiffres hexa correspondent aux handles de tes objets qui composent tes roues dans ton dessin pps : Tes objets peuvent très bien être inséré normalement et à toi de dire que ces objets font partie de ta base. @+
