Aller au contenu

Fraid

Membres
  • Compteur de contenus

    2 523
  • Inscription

  • Dernière visite

  • Jours gagnés

    23

Tout ce qui a été posté par Fraid

  1. Non, il n'y a rien d'aléatoires. C'est une simple lecture des points puis placé au meme coordonnées (je travail en Lambert 93) sans les z pour la 2D. Mon travail est de dessiner des plans du genre topographique en 2D a partir de levé Lidar.. La concentration de point est inutile dans mon cas. Je discerne parfaitement ce dont j'ai besoin avec 1/32 points. En passant , je n'ai jamais reçu de .las avec une classification des points. Problème de paramétrage du Lidar?
  2. Ok, mais comme je travail en 2d, avec les rcp, je n'essais même pas.
  3. Bonjour, Comment t'accroche tu a un fichier recap?
  4. Bonjour, Cela fait déjà quelques années que les Lidar nous livrent leurs nuages. Nous ne sommes pas tous équipés pour recevoir ce type de données en entrée. Surtout en logiciels, si on ne dispose que d'AutoCAD on ne peut pas faire grand chose avec. Heureusement, il existe CloudCompare, qui reste l'une des meilleurs solutions actuelles. Mais un part un, et en dxf qu'il faut convertir en dwg. Et mettre un coup de Flatten si on veut de la 2D (pas trouvé comment faire dans CloudCompare). Au bout 50 las, je ne vous raconte pas l'état de la RAM. L'écriture d'un script est devenu une urgence. (30km de las ...) Python, avec ses modules pyautocad et laspy, permet d'en réaliser. J'espère qu'en partageant mon expérience, je puisse donner envie de programmer en Python dans Autocad, car je me sens très seul dans ce domaine. J'ai dépose mon code sur Github. traceAreaLas qui trace l'emprise des .las sélectionnés dans un dwg. (plan de repérage) tracePtLas tracePtLas2D et tracePtLas3D, qui récupère les points dans un dwg. Par contre je n'ai pas pu tester les .exe sur un autre poste. Un testeur serait le bienvenu. Merci
  5. Fraid

    ChatGPT

    Les blagues carambar m'on tout de même fait rire, merci
  6. Fraid

    ChatGPT

    Comme vous l'avez tous constaté, ce n'est qu'un outils de complétion non intelligent pour pas dire débile. Et quand on l'utilise comme tel, nous pouvons gagner beaucoup de temps en lui confiant les taches pénibles. Exemple, j'ai un dictionnaire amené à être présenté, et je souhaite traduire les clés qui sont en anglais. Je lui donne la liste des clés, la traduction faite en gros paquet sur google trad. (elle refuse de traduire) lui demande de me conseiller pour traduire les clés d'un dictionnaire. (important de lui demander conseil plutôt qu'une question directe) et hop elle vous écrit un dictionnaire de traduction qui m'aurais pris une heure de saisie. C'est un outil. point.
  7. Bonjour, J'ai cela, de Terry Miller. Pas sur que cela puisse t'aider Olivier à raison, c'est une torture le DCL ; c:MyImageButton ; These images were created using GetVectors.lsp on AutoLISP Exchange ; (URL: http://web2.airmail.net/terrycad) ;------------------------------------------------------------------------------- (defun c:MyImageButton (/ Dcl_Id% Show_Image:) (princ "\nMyImageButton")(princ) ; Show_Image: ---------------------------------------------------------------- (defun Show_Image: (/ Ang CenPt Dist~ PickPt X# Y#) (start_image "Image1")(setq X# (dimx_tile "Image1")) (setq Y# (dimy_tile "Image1"))(end_image) (setq CenPt (list (/ X# 2)(/ Y# 2)) PickPt (list $x $y) Ang (angle CenPt PickPt) Dist~ (distance CenPt PickPt) );setq (cond ((< Dist~ (/ Y# 4))(Front_View));*Included ((< Ang (* pi 0.25))(Right_View));*Included ((< Ang (* pi 0.75))(Bottom_View));*Included ((< Ang (* pi 1.25))(Left_View));*Included ((< Ang (* pi 1.75))(Top_View));*Included (t (Right_View)) );cond );defun Show_Image: ;----------------------------------------------------------------------------- ; Load Dialog (setq Dcl_Id% (load_dialog "MyDialogs.dcl")) (new_dialog "MyImageButton" Dcl_Id%) ; Set Dialog Initial Settings (set_tile "Title" " My Image Button") (set_tile "Text1" "Pick arrows to change views.") (Front_View);*Included ; Dialog Actions (action_tile "Image1" "(Show_Image:)") (start_dialog) ; Unload Dialog (unload_dialog Dcl_Id%) (princ) );defun c:MyImageButton
  8. Fraid

    ChatGPT

    C'est exactement les réactions attendues et vous n'avez pas bien lu ce qui c'est passé exactement. Je voulais montrer effectivement que sans intelligence de notre part on en tire rien. dés qu'elle m'a montrée qu'il fallait mettre ma liste de point en liste, j'ai su écrire mon code. elle ne m'a pas écrit mon code final, elle m'a juste décoincé, effectivement j'aurais pus aller voir en c# ", fallait il y penser face a un <generator object Polyline.points> trés peu documenté
  9. Fraid

    ChatGPT

    Et si cela te permet d'aller plus loin? C'est la question posée. J'ai choisi un problème pointu non résolu. Personne n'utilise les générateur sur cette planète, ou ne le partage pas.
  10. Fraid

    ChatGPT

    Bonjour, Un peu étonné que personne n'en ai parlé. Nous sommes pourtant tous concerné par cette nouveauté. D'après Bill Gates ce serais la plus grande avancée technologique. J'ai testé un peux dans tous les sens. Première conclusion, elle dit que des couneries. elle cause, mais c'est souvent à coté, ou inventé. Par contre, si on prend en compte cela, nous pouvons tous de même nous en servir. Je vais vous partager ma dernières experience. Bon, vite fait on fait ouhaou. Mais elle ne répond pas a la question, car ce sont bien des POLYLINES que j'ai dans mon dxf et non des lwpolyline. Je vais donc insisté. Et voila, elle m'a trouvé la clé que je cherchais depuis 2 jour (list(points)), comme points est déjà une liste, je n'y avais pas du tout pensé. Comme quoi il faut insisté car elle peut mener vers une résolution des problèmes. Je vous épargne de la suite de la discussion, et vous livre tout de même la fonction finale obtenu grâce à cette IA. def tracePolFromDXF(points): # Arg: point, generator object Polyline.points.(points = polyline.points()) AutoCAD = Autocad(create_if_not_exists=True) lpoints = [(pt[0], pt[1]) for pt in points] AutoCAD.model.AddLightWeightPolyline(array("d", tuple(sum(lpoints, ()))))
  11. Bonjour, Il existe certainement une solution avec des réacteurs, par contre il faut alors que tes partenaires installe le lisp. Sinon, si perdre le nom de ton bloc ainsi que le dynamisme , n'a pas d'importance, on doit pouvoir le rendre anonyme, et la c'est plus difficile à modifier. mais toujours possible. Je rejoint donc Luna
  12. Bonjour, Je confirme, les copier sur place en les plaçant dans un calque temporaire avant de les exploser. on se retrouve avec des régions facile à interroger.
  13. j'ai trouvé une solution en passant par le nom du bloc, un tableau est nommé comme un bloc anonyme avec un T (ex *T1) donc avec (not (wcmatch (vla-get-name bl) "`*T*"))
  14. Yop Problème pour les attributs constant réglé (code modifié), merci Luna Pour les tableaux, c'est quand je fouille dans les définitions de blocks que les objets du tableaux sont modifié. dans cette partie ;Définitions de blocks (vlax-for bl (vla-get-blocks acdc) (and (= (vla-get-islayout bl) :vlax-false) (= (vla-get-IsXRef bl) :vlax-false) (= (vla-get-IsDynamicBlock bl) :vlax-false) (vlax-for obj bl (delfield obj) ) ) ) les tableaux sont considéré comme des blocks mais je ne trouve pas de propriété pour les discerner à ce niveau afin de les ignorer à cette étape.
  15. J'ai fini par comprendre mon erreur pour les attributs constants C'est dans la définition de block qu'il faut chercher pas dans le block, cela doit être une erreur d'Autodesk d'avoir implanté cette propriété à l'objet block.
  16. Ok, je vais étudier cela, mais tu avoueras que c'est tirer par les cheveux pour moi, le fait que les restrictions incluse dans les dessins ne soit pas pris en compte en programmation est un bug... quand j'ai testé avec, je m'attendais à une exception, pas une ignorance. en tout cas merci, je vais voir si je peux appliquer ce principe aux tableaux.
  17. Merci Mais comme ce lisp est prévu pour traiter des dessins par lot (ObjectDBX), je suis obligé d'utiliser que du vla pour explorer les objets. Cela fait plusieurs jours que je bute sur ce problème. et c'est encore pire au sein des tableaux.... je n'ai pas réussi a tester la présence d'un champ par cellule mais seulement par tableau, du coup je modifie toutes les cellules ...
  18. Bonjour, Un sujet mainte fois abordé, mais ici je me confronte à une trop grande efficacité du lisp. Mon programme fonctionne trop bien, car je voudrais que les champs dans un attribut déclaré constant garde son champs, ainsi que les cellules avec le contenu verrouillé. Mais malgré mais essais, ils sont convertis. Voici le code (mis à jour après résolution des problèmes) ;;;field2txt Conversion des champs en textes ;;;Supprime les champs et les remplace par leurs valeurs ;;;acdc, (vla-get-activedocument (vlax-get-acad-object)) ou ObjectDBX ;;;tapper f2t pour traiter le dessin courant ou f2tindir pour traiter un dossier ;;;Converti les Textes, Mtextes, repères, repères multiples, cotations, Attributs et tableaux ;;;dans chaques présentations et les blocks (defun field2txt ( acdc / delfield getconstantatt) (defun delfield (ob / objname objlay lays dic ind atts lconst ctc ctr lver) (setq objname (vla-get-objectname ob) objlay (vla-get-layer ob) lays (vla-get-layers acdc) ) (and (= (vla-get-freeze (vla-item lays objlay)) :vlax-false) (= (vla-get-lock (vla-item lays objlay)) :vlax-false) ;(not (member objlay '("0" "EXCLU")));option d'exclusion de calques (progn (and (wcmatch objname "*Text,AcDbMLeader");Texte, Mtextes, repères et repères multiples (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textstring ob)) (progn (vla-put-textstring ob " ") (vla-put-textstring ob ind) ) ) (and (wcmatch objname "*Dimension");Cotations (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textoverride ob)) (progn (vla-put-textoverride ob " ") (vla-put-textoverride ob ind) ) ) (and (eq objname "AcDbBlockReference");Attributs (setq atts (vlax-invoke ob 'GetAttributes) lconst (getconstantatt ob)) (foreach att atts (and (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary att) "ACAD_FIELD")) (not (member (vla-get-TagString att) lconst)) (setq ind (vla-get-textstring att)) (progn (vla-put-textstring att " ") (vla-put-textstring att ind) ) ) ) ) (and (eq objname "AcDbTable");Tableaux (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ctr 0 ctc 0 ) (while (< ctr (vla-get-rows ob)) (while (< ctc (vla-get-columns ob)) (and (/= (vla-GetCellState ob ctr ctc) 1) (/= (vla-GetCellState ob ctr ctc) 17) (setq ind (vlax-invoke ob 'getcellvalue ctr ctc)) (progn (vlax-invoke ob 'setcellvalue ctr ctc " ") (vlax-invoke ob 'setcellvalue ctr ctc ind) ) ) (setq ctc (1+ ctc)) ) (setq ctc 0 ctr (1+ ctr)) ) ) ) ) );fin delfield ;;;getconstantatt ;;;bl, vla objet (block) ;;;Retourne la liste des étiquettes des attributs constants (defun getconstantatt ( bl / lc) (setq lc '()) (vlax-for bls (vla-get-blocks acdc) (if (eq (vlax-get bls 'Name)(vlax-get bl 'Name)) (vlax-for obj bls (and (= (vla-get-ObjectName obj) "AcDbAttributeDefinition") (= (vla-get-Constant obj) :vlax-true) (setq lc (cons (vla-get-TagString obj) lc)) ) ) ) ) lc ) ;Définitions de blocks (vlax-for bl (vla-get-blocks acdc) (and (= (vla-get-islayout bl) :vlax-false) (= (vla-get-IsXRef bl) :vlax-false) (= (vla-get-IsDynamicBlock bl) :vlax-false) (not (wcmatch (vla-get-name bl) "`*T*")) (vlax-for obj bl (delfield obj) ) ) ) ;Chaque présentations (vlax-for layout (vlax-get-property acdc 'layouts) (vlax-for obj (vlax-get-property layout 'block) (delfield obj) ) ) (princ) );fin field2txt ;Commande pour dessin courant (defun c:f2t (/ ac) (field2txt (setq ac (vla-get-activedocument (vlax-get-acad-object)))) (vla-Regen ac acAllViewports)(princ)) ;Commande pour dossier (non récursif) (defun c:f2tindir ( / dir lf axdbdoc) (and (setq dir (getdir)) (setq lf (vl-directory-files dir "*.dwg" 1)) (foreach f lf (if (setq axdbdoc (getaxdbdoc (strcat dir f))) (field2txt axdbdoc) ) (vla-saveas axdbdoc (strcat dir f)) (vlax-release-object axdbdoc) ) ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getdir( / shell rep) (setq shell (vlax-create-object "Shell.Application") rep (vlax-invoke shell 'browseforfolder 0 "Sélectionnez le dossier" 512 "") ) (vlax-release-object shell) (strcat (vlax-get-property (vlax-get-property rep 'self) 'path) "\\") ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getaxdbdoc (filename / axdbdoc release) (setq axdbdoc (vlax-create-object (if (< (setq release (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa release)) ) ) ) (if (vl-catch-all-apply 'vla-open (list axdbdoc filename)) (not (vlax-release-object axdbdoc)) axdbdoc ) ) Merci d'avance pour votre aide
  19. Bonjour, Tu t'est répondu à ta question.
  20. Fraid

    DWG vers KML

    Bonjour, Un fichier KML n'est pas si difficile que cela à écrire en Autolisp. Surtout que Google Earth Pro le réécris à sa convenance à l'ouverture, ce qui permet d'avoir un petit fichier à envoyer. Didier soulève la principale difficulté, le système de coordonnés utilisé. En utilisant Circébatch c'est résolu, il ne reste plus qu'a enregistrer en UTF-8. Exemple d'un kml mini <?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://www.opengis.net/kml/2.2"><Document><name> Acad.kml </name><Placemark><name> Acad </name><Point><coordinates> -2.54709346,48.46791636 </coordinates></Point></Placemark></Document></kml>
  21. Je l'ai désactivée par défaut, tu n'as plus à décoché ... mais je l'ai laissé c'étais l'occasion de tester la fonction multidcl, qui se trouve donc bien pratique pour un petit dcl vite fait.
  22. Yop, désolé je l'avais oubliée j'ai modifié le code je savais bien que j'allais un peu vite...
  23. Bonjour, Je t'ai fait cela, (vl-load-com) ;;;getpoltorevit ;;;Séléctionne Les polylignes selon le nombre de segments et leur longueur ;;;Utilise les fonctions getptpol et multidcl ;;;La sauvegarde des critères se fait dans le dossier du dessin en cours. (defun c:getpoltorevit (/ ini rid wri l nb lg n spol pol sel) (if (setq ini (findfile "inigetpoltorevit.txt")) (progn (setq rid (open ini "r") nb (atoi (read-line rid)) lg (atof (read-line rid)) ) (close rid) ) (progn (setq l (multidcl '("GetPolToRevit" "Nombre Mini de segments :" "Longueurs Maxi de la Polyligne :" (" : Enregister" "0"))) nb (atoi(car l)) lg (atof (cadr l)) ) (if (= (caddr l) "1") (progn (setq wri (open (strcat (getvar 'DWGPREFIX) "inigetpoltorevit.txt")"w")) (write-line (car l) wri) (write-line (cadr l) wri) (close wri) ) ) ) ) (setq n -1 sel (ssadd) ) (if (setq spol (ssget "_x" '((0 . "LWPOLYLINE")))) (progn (while (setq pol (ssname spol (setq n (1+ n)))) (if (and(>= (1-(length (getptpol (vlax-ename->vla-object pol)))) nb) (<= (vla-get-Length (vlax-ename->vla-object pol)) lg) ) (setq sel (ssadd pol sel)) ) ) (if (> (sslength sel) 0) (progn (princ (strcat "\n " (itoa (sslength sel)) " Polylignes séléctionnées")) (sssetfirst nil sel) ) (princ "\nAucune Polyligne séléctionnée") ) ) (princ "\nAucune Polyligne dans le dessin") ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;getptpol ;;;Retourne la liste des points d'une Polyligne ;;;Arg: Objet VLA ;;;Retour: Liste de points (defun getptpol (obj / pts) (setq pts (util-pair (vlax-get obj 'coordinates))) (if (vlax-curve-isClosed obj) (setq pts (append pts (list (car pts))))) pts ) (defun util-pair (l) (if l (cons (list (car l) (cadr l)) (util-pair (cddr l))) ) ) ;;;multidcl ;;;DCL adaptatif ;;;Arg :ldcl, liste ;;;Retour : Liste des valeurs choisies ou nil ;;;Exemple (multidcl '("Test" "Nom :" (" : Visible" "1")(" : Imprimable" "0")("Nombre :" ("1" "2" "3")))) (defun multidcl (ldcl / tdcl n tfct star acts vals vdef dcltmp odcl fct ofct ret) (setq tdcl (strcat (car ldcl) " :dialog {label = \"" (car ldcl) "\"; :boxed_column { ") n 0 tfct (strcat "(defun fcttmp (dcl name li / dcl_id done ") star "" acts "" vals "" vdef "" ) (foreach dc (cdr ldcl) (cond ((= (type dc) 'STR) (setq tdcl (strcat tdcl ":edit_box { key = \"til" (itoa (setq n (1+ n))) "\"; label = \"" dc "\"; edit_width = 20; }" ) vals (strcat vals " val" (itoa n)) vdef (strcat vdef " val" (itoa n) " \"\"") acts (strcat acts "(action_tile \"til" (itoa n) "\" \"(setq val"(itoa n)" $value)\")") ) ) ((= (type (cadr dc)) 'STR) (setq tdcl (strcat tdcl ":toggle { key = \"til" (itoa (setq n (1+ n))) "\"; label = \"" (car dc) "\"; value = \"" (cadr dc) "\";}" ) vals (strcat vals " val" (itoa n)) vdef (strcat vdef " val" (itoa n) " \"" (cadr dc)"\"") acts (strcat acts "(action_tile \"til" (itoa n) "\" \"(setq val"(itoa n)" $value)\")") ) ) ( T (setq tdcl (strcat tdcl ":popup_list { key = \"til" (itoa (setq n (1+ n))) "\"; label = \"" (car dc) "\"; edit_width = 20;}" ) vals (strcat vals " val" (itoa n)) vdef (strcat vdef " val" (itoa n) " \"" (caadr dc)"\"") star (strcat star "(start_list \"til" (itoa n) "\") (mapcar 'add_list (cadr (nth "(itoa (1- n))" (cdr li)))) (end_list)" ) acts (strcat acts "(action_tile \"til" (itoa n) "\" \"(setq val" (itoa n) " (nth (atoi $value) (cadr (nth "(itoa (1- n))" (cdr li)))))\")") ) ) ) ) (setq tdcl (strcat tdcl "} spacer; ok_cancel; }") dcltmp (vl-filename-mktemp "tmp.dcl") odcl (open dcltmp "w") ) (write-line tdcl odcl) (close odcl) (setq tfct (strcat tfct vals ")(if (new_dialog \"" (car ldcl) "\" (setq dcl_id (load_dialog dcl)))(progn (setq " vdef ")" star acts "(action_tile \"cancel\" \"(done_dialog 0)\") (action_tile \"accept\" \"(done_dialog 1)\") (setq done (start_dialog)) (unload_dialog dcl_id) (if (= done 1)(list " vals ") nil ) )))" ) fct (vl-filename-mktemp "fct.lsp") ofct (open fct "w") ) (write-line tfct ofct) (close ofct) (load fct) (setq ret (fcttmp dcltmp (car ldcl) ldcl)) (vl-file-delete dcltmp) (vl-file-delete fct) ret ) tu tape getpoltorevit Dit moi si ça fonctionne, je n'ai pas trop le temps de faire des testes approfondis.
  24. C'est la fonction d'appel du DCL qui est écrit dans un fichier à part, puis chargé. Si on n'efface pas les fichiers temporaires, on peut utiliser le dcl + la fonction pour un autre programme. On peut y arrivé sans écriture avec des fonctions supérieurs, mais on ne peut rien sauvegarder.
  25. Bonjour, Désolé du décalage temporel, mais voici quand même la suite de mon expérience. La fusion des 2 premiers lisp plus le rajout des toggles,(case à cocher) J'ai aussi évité de parcourir 2 fois la même liste avec foreach, mais c'étais pour rendre les choses plus lisible. j'ai réduit à un argument, une liste, avec comme premier élément le nom du dcl (qui apparait en titre) puis les tuiles qui seront reconnu par leur type. un simple texte : edit_box ex "Nom :" une liste de 2 textes : Toggle '( ": Visible" "1") 0 ou 1 pour activée ou non sinon popup_list '("Nombre :" ("1" "2" "3")) ;;;multidcl ;;;DCL adaptatif ;;;Arg :ldcl, liste ;;;Retour : Liste des valeurs choisies ou nil ;;;Exemple (multidcl '("Test" "Nom :" (" : Visible" "1")(" : Imprimable" "0")("Nombre :" ("1" "2" "3")))) (defun multidcl (ldcl / tdcl n tfct star acts vals vdef dcltmp odcl fct ofct ret) (setq tdcl (strcat (car ldcl) " :dialog {label = \"" (car ldcl) "\"; :boxed_column { ") n 0 tfct (strcat "(defun fcttmp (dcl name li / dcl_id done ") star "" acts "" vals "" vdef "" ) (foreach dc (cdr ldcl) (cond ((= (type dc) 'STR) (setq tdcl (strcat tdcl ":edit_box { key = \"til" (itoa (setq n (1+ n))) "\"; label = \"" dc "\"; edit_width = 20; }" ) vals (strcat vals " val" (itoa n)) vdef (strcat vdef " val" (itoa n) " \"\"") acts (strcat acts "(action_tile \"til" (itoa n) "\" \"(setq val"(itoa n)" $value)\")") ) ) ((= (type (cadr dc)) 'STR) (setq tdcl (strcat tdcl ":toggle { key = \"til" (itoa (setq n (1+ n))) "\"; label = \"" (car dc) "\"; value = \"" (cadr dc) "\";}" ) vals (strcat vals " val" (itoa n)) vdef (strcat vdef " val" (itoa n) " \"" (cadr dc)"\"") acts (strcat acts "(action_tile \"til" (itoa n) "\" \"(setq val"(itoa n)" $value)\")") ) ) ( T (setq tdcl (strcat tdcl ":popup_list { key = \"til" (itoa (setq n (1+ n))) "\"; label = \"" (car dc) "\"; edit_width = 20;}" ) vals (strcat vals " val" (itoa n)) vdef (strcat vdef " val" (itoa n) " \"" (caadr dc)"\"") star (strcat star "(start_list \"til" (itoa n) "\") (mapcar 'add_list (cadr (nth "(itoa (1- n))" (cdr li)))) (end_list)" ) acts (strcat acts "(action_tile \"til" (itoa n) "\" \"(setq val" (itoa n) " (nth (atoi $value) (cadr (nth "(itoa (1- n))" (cdr li)))))\")") ) ) ) ) (setq tdcl (strcat tdcl "} spacer; ok_cancel; }") dcltmp (vl-filename-mktemp "tmp.dcl") odcl (open dcltmp "w") ) (write-line tdcl odcl) (close odcl) (setq tfct (strcat tfct vals ")(if (new_dialog \"" (car ldcl) "\" (setq dcl_id (load_dialog dcl)))(progn (setq " vdef ")" star acts "(action_tile \"cancel\" \"(done_dialog 0)\") (action_tile \"accept\" \"(done_dialog 1)\") (setq done (start_dialog)) (unload_dialog dcl_id) (if (= done 1)(list " vals ") nil ) )))" ) fct (vl-filename-mktemp "fct.lsp") ofct (open fct "w") ) (write-line tfct ofct) (close ofct) (load fct) (setq ret (fcttmp dcltmp (car ldcl) ldcl)) (vl-file-delete dcltmp) (vl-file-delete fct) ret ) le résultat (test réalisé sur win 10 cette fois ci) On peut très certainement aller plus loin encore et rajouter d'autre tuiles, des espaces ...
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité