Aller au contenu

GEGEMATIC

Membres
  • Compteur de contenus

    1 416
  • Inscription

  • Dernière visite

  • Jours gagnés

    19

GEGEMATIC a gagné pour la dernière fois le 18 septembre 2024

GEGEMATIC a eu le contenu le plus aimé !

Contact Methods

  • Website URL
    https://www.g-eaux.com

Profile Information

  • Gender
    Not Telling

Visiteurs récents du profil

Le bloc de visiteurs récents est désactivé et il n’est pas visible pour les autres utilisateurs.

GEGEMATIC's Achievements

Community Regular

Community Regular (8/14)

  • Dedicated Rare
  • Reacting Well Rare
  • Conversation Starter Rare
  • First Post Rare
  • Collaborator Rare

Recent Badges

47

Réputation sur la communauté

  1. GEGEMATIC

    Lisp et XData

    Salut les, gars, merci pour les infos, @olivier ton post traite surtout du lien avec une base de données ? je pense pas que ce soit possible avec LT ? a+ Gégé
  2. Bonjour à toutes et à tous, est-ce que le Lisp de LT supporte les XDatas ? si oui, question subsidiaire, quels sont les meilleurs Lisp disponibles pour passer de OD MAP à XData et vice-versa ? a+, Gégé
  3. Salut Thierry, pour te charrier je dirais qu'Autodesk n'est pas l'exemple à suivre en terme de relations client ... après chacun a ses raisons ... a+, Gégé
  4. Merci Olivier, ton explication est vraiment plus claire que ce que j'ai entendu jusqu'ici ... On vient de déménager, on bossait en local, j'avais dit "vous inquiétez pas 30 jours glissant" et là, douche froide. Pour moi ça reste un système bancal, c'est a Sogelink de distribuer les licences, comme le fait Autodesk. mais la crise est passée ... a+, gégé
  5. Salut à tous, je suis passé à la licence dématérialisée avec serveur propriétaire (toujours pas compris non plus), avec la promesse des 30 jours glissants. en ce qui nous concerne, la moindre déconnexion du serveur empêche l’activation de la licence donc je ne comprends pas le concept. autre chose, on voudrait passer en "tout cloud" donc plus de serveur du tout. comment ça marche ? merci a+, Gégé
  6. salut Fraid, merci c'est ça ! pas logique, mais ça le fait ! a+ gégé
  7. Salut à toutes et a tous, meilleurs voeux pour 2025. Toujours dans mes blocs dynamiques, j'essaye de comprendre comment Autocad gère la définition et la représentation des blocs dynamiques. je voudrais pourvoir changer à la demande la taille d'une flèche de ligne repère contenue dans un bloc dynamique. En principe, sauf pour les attributs, il faut changer la définition du bloc pour que ça se répercute dans les occurrences du bloc. je le fait via ce code exemple pour le bloc "gen_sup" (defun foundef () (setq blks (vla-get-Blocks (vla-get-ActiveDocument(vlax-get-acad-object)))) (setq blk (vla-item blks "gen_sup")) (vlax-for ent blk (if (= (vla-get-ObjectName ent) "AcDbMLeader") (vla-put-ArrowheadSize ent 9.87654321) ) ) ) le changement de la définition se fait bien, mais elle n'est pas répercutée sur les occurences du bloc existantes. dans le dwg joint, on voit que les blocs "gen_inf", qui ont été modifiés après qu'une occurence du bloc a été insérée dans le dessin gardent une taille de flèche de 0.4, et non pas 9.8765 si vous éditez ce bloc, vous verrez pourtant que sa définition à une valeur de 9.8765 le bloc gen_sup, qui a été redéfini avant l'insertion d'une occurence à bien une taille de flèche de 9.8755 au lieu des 0.4 initiaux. Si j’utilise l'édition de bloc d'Autocad, la mise à jour est instantanée. En faisant un "handle_explorer" j'ai vu que la taille de la flèche est stockée 2 fois, code 40 et 140 en dxf. Je sais aussi que les blocs dyn créent une entrée personnalisée dans le dictionnaire irdDscDictionary, mais je n'ai rien trouvé dedans. là je sèche ! a+ Gégé Exemple_bdyn.dwg
  8. Salut, encore une observation que je fais sur les blocs dynamiques, la methode GetBoundingBox retourne une valeur indépendante de l'état de visibilité. on dira que ça m'arrange pas, mais c'est comme ça ... a+ Gégé
  9. Salut, donc je suis arrivé à contourner le problème, OUF! dans mon bloc "cellule souche" j'ai ajouté un bloc basique, un cercle avec le bon état de visibilisé. pour créer mes 80 blocs, j'ai fait un entmod sur le bloc basique avec le bloc représentation voulu. ça marche très bien ! Au passage, je me suis aperçu (Alléluia) que la caractéristique "dubloc" fonctionne de manière imbriquée, je n'avais jamais fait attention à ça. ;;******************************************************** ;§**/blocs/ prépare la copie des bocs avant de la lancer la redéfinition les blocs dynamique du pproto / none (defun c:prepare_Redef_pt_Topo_Dyn (/ el el1 el2 tmp reinit rep ss1 ss2) (PW_CHARGER_xml (strcat aclsp-chem "ini/topo/INERIS.xml")) (setq lblocs (pw_reduct_list (mapcar 'cadr ineris))) (foreach l (pw_reduct_list lblocs) (print l) (PW_COPY_BLOCK_DEF l (strcat l "_FOND")) ) ) ;;******************************************************** ;§**/blocs/redéfinie les blocs dynamique du pproto / none ;;cette opération est à faire: ;;lorsque l'on décide une redfinition des blocs "TCPOINT_11att", par exemple en ajoutant ou en supprimant des attributs, ;; (defun c:Redef_pt_Topo_Dyn (/ el el1 el2 tmp reinit rep ss1 ss2) (vla-StartUndoMark pw-acaddocument) (alert "\nRedéfinition des blocs dynamiques du pproto à partir des tcpt_11_att dynamique\nil faut purger les autres blocs avant de la lancer " ) (Getstring "\nEchap pour annuler cette commande très spéciale, valider pour continuer" ) (PW_CHARGER_xml (strcat aclsp-chem "ini/topo/INERIS.xml")) (setq lblocs (pw_reduct_list (mapcar 'cadr ineris))) (foreach l lblocs (cond ((wcmatch l "*_EP") (setq tcpt "TCPOINT_11att_EP_dyn") ) ((wcmatch l "*_EU") (setq tcpt "TCPOINT_11att_EU_dyn") ) (t (setq tcpt "TCPOINT_11att_dyn") ) ) (command "_bedit" tcpt) (setq eblocSouche (ssname (ssget "x"'((0 . "insert")(2 . "tcpoint_symbole"))) 0)) ;;(setq egsouche (entget eblocSouche)) (pw_entmodifi eblocSouche 2 (strcat l "_FOND")) (command "_bsaveas" l "_y" ) ) (vla-EndUndoMark pw-acaddocument) )
  10. salut Gilles, c'est bien ce que je pensais, et je sais trop bien combien ça coute d'énergie de "décrypter les dictionnaires d'extension des définitions de bloc" pour s'apercevoir finalement qu'on ne peut les modifier... mais heureusement je crois que j'ai trouvé une combine pour m'affranchir de ce pb, je teste et je vous tiens au courant. merci a+ gégé
  11. Salut à toutes et a tous, j'ai créé un bloc dynamique servant de base à une annotation. Il est très simple, un point, une ligne repère, 11 attributs, un étirement polaire des la ligne repère et des 11 attributs. + un état de visibilité sur la ligne repère visible ou invisible. A partir des ce bloc "cellule souche", je défini 80 blocs à partir de cette cellule souche, en ajoutant des entités diverses pour avoir un symbole + évolué qu'un simple point. sauf que l'ajout des entités se fait dans un état de visibilité ou l'autre. Du coup, c'est soit je vois la ligne repère soit les entités ... (voir exemple joint) si je trouvais où est stocké l'état de visibilité, je pourrai le corriger par la programmation, ça serait mieux que de me palucher 80 blocs ... mais la je sèche. Lee mac drive les blocdynamique, mais il ne fait pas ça... a+ Gégé applique.dwg
  12. Oui, j'ai rajouté les dépendances, pour que vous puissiez avoir le frisson de faire tourner une application préhistorique, un peu comme un émulateur de Donkey Kong... P_supp_elem montre ce que l'absence de visual lisp pouvait engendrer comme complications ... Enfin ça ne s'appelle pas participer au challenge, puisque le but est de le faire maintenant et avec élégance mais je me souvenais que cette séparation de nombres n'avait pas été qq chose de simple ... a+ Gégé
  13. salut, moi c'est pas du code élégant, mais très ancien : Commande: (pw_sep_ch_nomb "Longueur = 456.789 mètres. Largeur = 123.456. Il faut retirer -56.89 à la quantité qui est de 1234 ! sinon c'est 1/2") -> ("Longueur = " "456.789" " mètres. Largeur = " "123.456" ". Il faut retirer -" "56.89" " à la quantité qui est de " "1234" " ! sinon c'est " "1" "/" "2") je vois qu'il reste un problème avec le signe - et bien sur, ça ne répond pas au cahier des charges de Gilles, car les nombres ne sont pas isolés. je me suis dit je corrige ça comme ça: Commande: (vl-remove-if-not '(lambda (x) (numberp (read x))) (pw_sep_ch_nomb "Longueur = 456.789 mètres. Largeur = 123.456. Il faut retirer -56.89 à la quantité qui est de 1234 ! sinon c'est 1/2")) "placement incorrect d'un point en entrée" error success car en fait: Commande: (read " .1") "placement incorrect d'un point en entrée" donc il faudrait retourner dans le code pour régler ça de manière robuste. a+ gégé ;****************************************************************************** ;;;§/str/ cree une liste de chaine à partir d'une chaine contenant nombre et alpha/ch ;** (pw_sep_ch_nomb "PT32A") -> '("PT" "32" "A") ;;;Commande: (pw_sep_ch_nomb "PT3.2A") ;;;("PT" "3.2" "A") ;;;Commande: (pw_sep_ch_nomb ".PT3.2A") ;;;(".PT" "3.2" "A") ;;;(pw_sep_ch_nomb " a1a253t00000")->(" a" "1" "a" "253" "t" "00000") ;;;Commande: (pw_sep_ch_nomb " .a.1.0a253t...00000...000.0a.a") ;;;(" .a." "1.0" "a" "253" "t..." "00000" "..." "000.0" "a.a") ;;;(pw_sep_ch_nomb " .a.1.0a253t...00000...000.0a.a") ;;;(" .a." "1.0" "a" "253" "t..." "00000" "..." "000.0" "a.a") (defun pw_sep_ch_nomb (ch / tprec lres i chcou tp buf nb rg lrg ) (setq i 1) (setq chcou "") (while (/= "" (setq buf (substr ch i 1))) (setq i (+ 1 i)) (if (pw_isnum buf) (setq tp "num") (setq tp "char") ) (if tprec (if (= tp tprec) (setq chcou (strcat chcou buf)) (if tp (progn (setq tprec tp) (setq lres (cons chcou lres)) (setq chcou buf) ) ) ) (progn (setq tprec tp) (setq chcou buf) ) ) ) (setq lres (cons chcou lres)) ;; pour le dernier (setq lres (reverse lres)) ;;(print lres) (if (member "." lres) (progn (setq lrg (pw_l_rang "." lres)) (foreach rg lrg (setq val-1 (pw_nth (- rg 1) lres) val (pw_nth rg lres) val+1 (pw_nth (+ rg 1) lres) ) (cond ((and val-1 val+1 (= (type val-1) (type val+1)) ;_marche pour "0" "." "0" ou "a" "." "a" ) (setq lres (pw_subst_rang nil (- rg 1) lres)) ;_ (nouv rang lst) (setq lres (pw_subst_rang (strcat val-1 val val+1) rg lres)) ;_ (nouv rang lst) (setq lres (pw_subst_rang nil (+ rg 1) lres)) ;_ (nouv rang lst) ) ((and (/= (type val-1) (type val+1)) ;_marche pour "a" "." nil (= (type val-1) (type val)) ;_marche pour "a" "." ) (setq lres (pw_subst_rang nil (- rg 1) lres)) ;_ (nouv rang lst) (setq lres (pw_subst_rang (strcat val-1 val) rg lres)) ;_ (nouv rang lst) ) ((and (/= (type val-1) (type val+1)) ;_marche pour "1" "." "a" (= (type val+1) (type val)) ;_marche pour "." "a" ) (setq lres (pw_subst_rang nil (+ rg 1) lres)) ;_ (nouv rang lst) (setq lres (pw_subst_rang (strcat val val+1) rg lres)) ;_ (nouv rang lst) ) ) ) (pw_supp_all nil lres) ) lres ) ;if ) ;;************************* ;;§/listes/ nth sécurisé qui supprime le message d'erreur lorsque le nth n'est pas trouvé /i lst ;;(pw_nth 3 '(1 2)) -> nil ;;(pw_nth 3 '(1 2 3 4)) -> 4 ;; (defun pw_nth ( i lst /) (if (or (= nil lst) (> (length lst) i)) (nth i lst) ) ) ;****************************************************************************** ;;§/str/determine si un caractere est un chiffre/char (defun pw_isnum ( char ) (if (member (ascii char) '(48 49 50 51 52 53 54 55 56 57)) 'T nil ) ) ;*************************************************************************** ;;§/listes/retourne la liste des rang d'un elem une liste/el lst ;;(pw_l_rang "a" '( "a" "b" "a" "b")) -> '(0 2) (Defun pw_l_rang (elem lst / nb val i lres) (setq nb (length lst)) (setq i 0) (while (< i nb) (setq val (nth i lst)) (if (= val elem) (setq lres (cons i lres)) ) (setq i (+ 1 i)) ) (reverse lres) ) ;************************************************************************* ;§**/LISTES/ Remplacement dans une liste (par rang), rang commence à 0/nouv rang lst ;;(pw_subst_rang "z" 2 '(1 2 3 4 5))-> (1 2 "z" 4 5) (defun pw_subst_rang (nouv rang lst) (if (null lst) nil (if (= rang 0) (cons nouv (cdr lst)) (cons (car lst) (pw_subst_rang nouv (- rang 1) (cdr lst))) ) ) ) ;************************************************************************* ;§/LISTES/Suppression dans une liste de toutes les occurences de l'elem el /el lst (defun pw_supp_all (el lst / ) (while (member el lst) (setq lst (pw_supp_elem el lst)) ) lst ) ;**************************************************************************** ;§/listes/Supprime la premiere occurence de l'élément "elem" pw_dans la liste "lst"/lm lst ; (defun pw_supp_elem (lm lst / lst1 lst2 i tp tmp) (setq lst2 lst lst1 nil ) (if (setq tmp (member lm lst2)) (progn (setq lst2 (cdr tmp)) (setq i 0) (while (not (equal lm (setq tp (nth i lst)))) (setq lst1 (cons tp lst1)) (setq i (+ 1 i)) ) (setq lst1 (reverse lst1)) (append lst1 lst2) ) (setq lst lst) ) )
  14. salut Phil, j'ai choisi cette commande: VPOOUTA1_4_FENETRE_NOMMEE même si je n'ai pas de fenêtre nomées. ça marche tout en conservant un bug: les cadres sont bien crées, mais des cadres et des textes sans aucun rapport avec la présentation sont également créés: voilà pour illustrer: les 2 cadres dans la zone surlignée sont OK, le cadre immense et le texte ne sont pas correctes. Mais ça fait le boulot, c'est pas un problème, merci ! a+ Gégé
  15. Salut à toutes et à tous, avant de me lancer dans une programmation hasardeuse, je vérifie que ce dont j'ai besoin n'existe pas déjà. Je reçois parfois de dwg où les entités de l'espace objet ont été dupliquées 20 fois, en fonction de ce que le dessinateur voulait représenter, ou conserver "au cas ou" etc ... Comment savoir quelle partie de l'espace objet correspond à quoi ? le lisp dont j'ai besoins doit parcourir les onglets de présentation, parcourir les fenêtres, et tracer dans chaque fenêtre l'emprise de cette fenêtre avec un texte contenant le nom de la présentation (ou alors tracer les emprises dans un calque ayant le nom de la présentation) si ça existe déjà, je prends ... a+ Gégé
×
×
  • 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é