Aller au contenu

GEGEMATIC

Membres
  • Compteur de contenus

    1 416
  • Inscription

  • Dernière visite

  • Jours gagnés

    19

Tout ce qui a été posté par GEGEMATIC

  1. Salut, je n'avais pas vu ta question. Essaye cette version, elle te demande de sélectionner directement la surface: ;;******************************************************************************* ;;§/AEC/Transformation d'une surface en 3dfaces/none (defun c:cree_triangulation_surfaces (/ sel lobj nom) (prompt "\nSélectionnez la ou les surfaces à trianguler sous forme de 3dfaces") (setq sel (ssget '((0 . "AECC_TIN_SURFACE")))) (setq lobj (pw_listsel sel)) (setq lobj (mapcar 'vlax-ename->vla-object lobj)) (foreach sur lobj ;; (setq casur (vla-get-layer sur)) (setq nom (vlax-get-property sur 'name)) (pw_mk_layer (setq calq (strcat "MNT_" nom)) nil nil) (setq lpoint (pw_decoup_list 3 (pw_safearray->list (vlax-get-property sur 'OutputTriangles)) ) ) (setq lface (pw_decoup_list 3 lpoint ) ) (foreach face lface (setq p1 (car face) p2 (cadr face) p3 (caddr face) p4 p3) (entmake (list '(0 . "3DFACE") (cons 8 calq) (cons 10 p1) (cons 11 p2) (cons 12 p3) (cons 13 p4) )) ) ) ) Pour l'histoire du plug-in, il faut ciomprendre qu'un Pug-in PowerClic fonctionne un peu comme le menu contextuel d'autocad (sauf qu'il est apparu bien avant ...) Le plug-in n'apparait dans le menu que si une entité concernée est "PowerCliquée", en appuyant sur la touche controle Voilà à quoi ressemblerai ta fenêtre : Pour infos, voici une liste (ancienne) des plugins utilisables avec PowerClic: http://www.g-eaux.com/powerclic/plugpage.php
  2. Salut, dans les ouvrages de dissipation d'énergie, l'eau arrive tangentiellement dans un regard cylindrique, l'évaucation se fait par en bas: il faut donc une chute importante, qui augmente avec l'angle d'arrivée. c'est vrai que c'est cher
  3. Ok super, je teste ça demain ...
  4. Salut, je me replonge un peu dans le .net, et j'aimerai en savoir un peu plus sur le débogage avec les versions 2012 : quoi de neuf depuis 2009 ? (...) ce que tu dis la ne marche qu'avec la verion complète de visual studio, n'est-ce pas ? merci d'avance, Gérald
  5. Salut, voilà la routine qui génère les 3dface à partir d'une surface. elle est sous forme d'un plug-in Powerclic, mais tu peux l'adapter facilement pour sélectionner la surface par pointage. Pour ce qui est des routine applelées, il suffit de charger Powerclic pour que tout marche: les explications ici : http://augifr.ning.com/profiles/blogs/installation-et-mise-jour-de-powerclic-pour-autocad-1 (pw_pluggin_register '("cree_triangulation" ("AECC_TIN_SURFACE" ) ("Crée les triangles d'une surface AEC venant de google earth "))) ;;******************************************************************************* ;;§/AEC/Transformation d'une surface en points /none (defun cree_triangulation (/ sel lobj nom) (setq sel (ssget "_p")) (setq lobj (pw_listsel sel)) (setq lobj (mapcar 'vlax-ename->vla-object lobj)) (foreach sur lobj ;; (setq casur (vla-get-layer sur)) (setq nom (vlax-get-property sur 'name)) (pw_mk_layer (setq calq (strcat "MNT_" nom)) nil nil) (setq lpoint (pw_decoup_list 3 (pw_safearray->list (vlax-get-property sur 'OutputTriangles)) ) ) (setq lface (pw_decoup_list 3 lpoint ) ) (foreach face lface (setq p1 (car face) p2 (cadr face) p3 (caddr face) p4 p3) (entmake (list '(0 . "3DFACE") (cons 8 calq) (cons 10 p1) (cons 11 p2) (cons 12 p3) (cons 13 p4) )) ) ) )
  6. salut, que veut tu dire par "j'ai réalisé un semis de point": As-tu créé des points autocad (dans ce cas, l'exploitation avec covadis est simplissime) ou as-tu créé une surface dans ce cas, je peux te filler une routine qui extrait les points d'une surface. Gégé
  7. Oups d'accord, le vrai pb est résolu par Bonuscad, puisque le rtos de nil est un conséquence d'un autre bug ... en tout cas, je garde cette commande, elle est bien pratique...
  8. salut, j'étais intrigé par ce que pouvait faire cette commande, je trouve ça assez rigolo ... moi je n'ai pas trouvé le même bug que Bonuscad, chez moi, ce qui plantait, c'était le rtos sur la valeur nil Donc j'ai ajouté le controle de numberp (setq strcatlst (apply 'strcat (mapcar (function (lambda (x) (strcat x " : " (if (/= (type (setq fieldstring (ade_odgetfield ename (ade_odgettables ename) x 0 ) ) ) 'STR ) (if (numberp fieldstring) (rtos fieldstring 2 2) ) fieldstring ) "\n" ) ) ) ;fin function fieldnames ) ;fin mapcar ) ;fin apply )
  9. Salut J'ai eu une période ou google explorer ne s'ouvrait pas lorsque je publiai. c'est en réintsallant google que ça à remarché. par contre, j'ai eu des problèmes avec certaine projection, le lambert III, ou le calage ne marchait ni dans un sens, ni dans l'autre.
  10. salut, j'ai une commande qui devrait peut être t'aider: Je pense l'avoir fait pour créer des entrées de menu conetxtuel, mais elle affiche ce dont tu as besoin ... ;**************************************************************************** ;§/menu/programme de test pour visualiser l'arborescence des menus telle qu'elle est parcourue/none (defun c:test_menu_tree ( / ok i j acadObject AcadMenuGroup NbMenuGroup currMenuGroup currMenuGroupMenus scMenu AlreadyExist) (vl-Load-Com) (setq acadObject (vlax-get-acad-object)) (setq AcadMenuGroup (vla-get-MenuGroups acadObject)) (prompt "\nNombre de menugroup") (print (setq NbMenuGroup (vlax-get-property AcadMenuGroup 'Count))) (setq j 0) (while (and (< j NbMenuGroup) (not ok)) (setq currMenuGroup (vlax-invoke-method AcadMenuGroup 'Item j )) (print (vlax-get-property currMenuGroup 'name)) (setq currMenuGroupMenus (vla-get-Menus currMenuGroup)) (prompt "\nNombre de scMenu : ") (print (setq nb (vlax-get-property currMenuGroupMenus 'Count))) ;;parcours les menus pour trouver celui qui est contextuel (setq i 0) (while (and (< i nb) (not ok)) (setq scMenu (vlax-invoke-method currMenuGroupMenus 'Item i )) (print (vlax-get-property scMenu 'name)) (if (= ':VLAX-TRUE (vlax-get-property scMenu 'ShortcutMenu)) (progn (prompt "\Un contextuel trouvé:") (vlax-dump-object scMenu) ) ;(setq ok T ) ) (setq i (+ 1 i)) ) (setq j (+ 1 j)) ) )
  11. Salut, chez moi, ta pièce jointe ne se télécharge pas. Je ne vois pas pourquoi "_fence" ne marcherais pas. au pire tu peux faire une sélction par multiligne: http://www.g-eaux.com/powerclic/librairie/PW_SEL_MLINE.htm
  12. GEGEMATIC

    Gourmandise d'autocad

    Bonjour, Autocad peut être très ralenti par certaines entités, les textes, les polylignes comportant de nombreux sommets (ce qui est assez comique), il reste également un bug jamais corrigé, le viewport avec un type de ligne autre que ducalque. Je crois qu'il te faut lire le dictionnaire des galères autocad qu'on trouve ici top quiz Il y a également les exports depuis d'autre logiciels, avec des blocs imbriqué et délimités, de grande taille, ainsi que les entités cachées, et les 3dfaces invisibles ... enfin il y a beaucoup de causes possibles.
  13. salut, J'avais installé en compte administrateur à cause d'une série de problèmes d'installation. maintenant, si je dois réinstaller, il faudra que je réactive, sur la même machine, et la, le FBI va me tomber dessus ... Mais je crois que je n'y échapperais pas. J'ai posé la question au supprort technique depuis 5 jours, et je n'ai pas de réponse.
  14. Bonjour, Sur chaque station, nous avons des comptes administrateurs et des comptes standard. Après avoir installé Autocad 2012 sur le compte administrateur, Autocad 2012 ne fonctionne pas sur le compte standard: il y a des message d'installation, puis plus rien. les fichier log ne disent rien, acad.exe se ferme silencieusement. Au départ, j'ai eu ce problème sur Vista 64, mais j'ai fait la même expérience avec seven 64. changer un compte standard en admin ne sert à rien non plus. des idées ? merci
  15. GEGEMATIC

    AutoCad Civil 3D

    Salut, je ne pense pas qu'il y est d'autre moyens d'extraire des données du géoportail à part la capture d'écran. Les données IGN, les français n'y ont accès qu'en payant, cher, alors qu'aux états unis, terre d'ultralibéralisme, les données gouvernementales et universitaires sont très libres. c'est curieux, mais c'est comme ça.
  16. Je t'ai répondu dans Autocad 2012 concernant le terme "abandonné", je voulais dire qu'aucune nouvelle fonctionnalité n'a été ajoutée depuis la V14 ! il est domage qu'on ne puisse avoir des rayons de raccordement et des méthode de raccords plus précises.
  17. Donc dans ce cas, si tu as une version complète, tu peu peut être trouver une programme externe qui ne fait que ça, ou téléchager PowerClic (ici les explications: http://augifr.ning.com/profiles/blogs/installation-et-mise-jour-de-powerclic-pour-autocad-1) qui le fait via PowerClic + controle (appuyer simultanément sur le bouton droit et ctrl au dessus d'une multiligne) Tu pourra les modifier, les dupliquer etc ...) Il arrive que ça crashe Autocad, il faut faire une sauvegarde avant. Il arrive également que les multilignes ne soient pas mise à jour, il faut faire un regen pour voir la différence.
  18. Avec autocad LT, je ne pense pas que ce soit possible. C'est possible via des commandes lisp (comme Powerclic) mais il arrive que ça fasse planter Autocad. Les multilignes ont été abandonnées par Autodesk, c'est bien domage.
  19. Salut, Sur autocad 2012, au dessus de ce symbole, laisser ces accrochage actif provoque une erreur fatale. je te joins le dwg en question, si tu veux comprendre le problème. Pour moi, ce n'en est pas un, je ne travaille jamais avec des accrochage permanent, mais ce problème m'est justement arrivé avec A2012, que je venais d'installer. J'ai mis un peu de temps à comprendre ce qui arrivait. A+ Gérald exemple.zip
  20. bonjour, j'ai ce vieux lisp qui mélange le tri par calque, largeur et type de lignes, et qui compte également les blocs, puis qui écrit tout ça dans un fichier csv, qui s'ouvre, si tout se passe bien, avec OpenOffice. Il faut donc qu'openoffice soit installé. il faut également que Powerclic soit installé Installer PowerClic la sélection se fait individuellement par calque, car le but de ce metré était de metrer à part des zones particulières Le résultat est de type: Métré du réseau : 61_ECL_SYM Largeur poly Typeligne Longueur Type Nombre lampapo 1 lampexi 1 applique 1 Total regards 61_ECL_SYM Métré du réseau : AEP-PRO_CANALISATIONS Largeur poly Typeligne Longueur 0.5 ByLayer 35.35 0.5 ByLayer 37.36 Total réseau AEP-PRO_CANALISATIONS Type Nombre Métré du réseau : AEP-PROJET Largeur poly Typeligne Longueur 0 ByLayer 35.59 5 ByLayer 35.59 5 BR_ASS_PRO 35.59 Total réseau AEP-PROJET Il faut donc travailler le metré manuellement, pour fair ses totaux et ses sous-totaux. Vous pouvez préselectionner, via des masques, les calques qui vous interressent pour le metré: (progn (setq calques-metre-reso (PW_WCMATCH_LIST lcalqs "*_res")) (setq calques-metre-reso (append calques-metre-reso (PW_WCMATCH_LIST lcalqs "*_canalisations"))) ) Voici le code : ;;************************************************************************** ;;§/Poly/Ecrit le métré au format csv des réseaux choisits, basé sur la largeur de polyligne et le type de ligne/ none ;;fait également un décompte des blocs ;;la sélection est manuelle, pour chaque calque ;; (defun c:EcritMetreCsv_largeur_TL (/ lResName l sel dist tuy f l_long l_sym lcalqs) ;;réseaux à métrer (setq lcalqs (pw_list_tabl "LAYER")) (if (not calques-metre-reso) (progn (setq calques-metre-reso (PW_WCMATCH_LIST lcalqs "*_res")) (setq calques-metre-reso (append calques-metre-reso (PW_WCMATCH_LIST lcalqs "*_canalisations"))) ) ) (setq calques-metre-reso (pw_s_lchaines3 "Choisissez les réseaux dont écrire le métré rapport à la largeur de polylignes : " lcalqs T calques-metre-reso ) ) ;;fichier csv (setq nchem (getvar "dwgprefix")) (setq ndess (cadr (pw_scie_fich (getvar "dwgname")))) ;;(setq nchem (car (pw_scie_fich (getvar "dwgname")))) (setq fich (getfiled "Fichier csv de métré réseau à écrire : " (strcat nchem ndess "_largeur.csv") "csv" 1 ) ) (setq f (open fich "w")) (foreach reso calques-metre-reso (setq l_long nil) ;;; Métré des tuyaux (write-line (strcat "Métré du réseau : " reso) f) (write-line "Largeur poly,Typeligne,Longueur" f) ;;liste des noeuds '(("nom1" '(x y)) ..) ;(setq lnodPos (apply 'append (cov_listreseau_nodposname l))) ;;liste des noeuds '(("nom1" '(ldata1))..) ;(setq lnodData (cov_listreseau_noddata l)) (setq ca reso) (prompt (strcat "\nSélectionnez les polylignes du calque " ca " : ")) (if (setq sel (ssget (list '(0 . "LWPOLYLINE") (cons 8 ca) '(-4 . "<NOT") '(67 . 1) '(-4 . "NOT>") ) )) (progn (foreach epol (pw_listsel sel) (setq cc-lastent epol) (setq long (vla-get-length (setq opol (pw_to_object epol)))) (setq tl (vla-get-linetype opol)) ;;(setq width (cdr (assoc 40 (entget epol)))) (if (vlax-property-available-p opol 'ConstantWidth ) (setq width (vla-get-ConstantWidth opol)) (setq width 0) ) (setq l_long (cons (list width tl long) l_long)) ) (setq l_long l_long) ;;(setq l_long (pw_regroup_assoc l_long)) (foreach tuy l_long (setq diam (car tuy)) (setq tl (cadr tuy)) (setq long (caddr tuy)) ;;(setq longtot (apply '+ (cddr tuy))) (write-line (strcat (rtos diam 2 2) "," tl "," (rtos long 2 2)) f ) ) (write-line (strcat "Total réseau," reso) f) (write-line "," f) ) ) ;;;métrés symboles (setq l_sym nil) (write-line "Type,Nombre" f) (prompt (strcat "\nSélectionnez les symboles du calque " ca " : ")) (if (setq sel (ssget "x" (list '(0 . "INSERT") (cons 8 ca) '(67 . 0)))) (progn (foreach ereg (pw_listsel sel) (setq cc-lastent ereg) (setq name (cdr (assoc 2 (setq eg (entget ereg))))) (setq l_sym (cons (list name 1) l_sym)) ) (setq l_sym (pw_regroup_assoc l_sym)) (foreach sym l_sym (setq name (car sym)) (setq nbtot (apply '+ (cdr sym))) (write-line (strcat name "," (itoa nbtot)) f ) ) (write-line (strcat "Total regards," reso) f) (write-line "," f) ) ) ) (close f) (OpenCsvWithoOOsCalc fich) ;;(startapp "C:\\Program Files\\OpenOffice.org 2.4\\program\\scalc.exe" fich) )
  21. Salut, Ton fichier excel complète le miens, avec égalemeent les variables globales. Un wiki, ce serait bien, mais je ne sais pas faire, il faudrait demander à Patrick Emin ... Ce qui serait déjà bien, c'est de générer un fichier .chm regroupant le tout. Gérald
  22. GEGEMATIC

    Xml read/write

    Salut, ci joint le code que j'utilise pour la lecture de fichier xml. En fait, il s'agit spécialement de lire dans des fichiers excel xml. Il y a deux type d'usage : des onglets qui contiennent des données au format INI [section] val1 val2 ... val n donnera !section : '(val1 val2 ... valn) ça c'est avec pw_charger_xml Sinon, c:chargeTableXml fonctionne différemment : le nom des variables lisp est pris dans le nom des onglets: chaque onglet doit donc contenir une seule liste de valeur: c'est pourquoi je parle de chargertablexml. ;;------------------------------------------------------------------------------------------------- ;§**/xml/ crée la liste d'association à partir de la lecture brute des celulles xml/lxml ;; l'onglet ne doit contenir qu'une table et une seule, avec une ligne d'entête donnant le nom des colonnes ;; (defun pw_creeListeAssocFromXml (lxml / ltempo nmls tmp) (setq 1erligne (car lxml) lxml (cdr lxml)) (foreach lrow lxml ;;(Pw_RegExp "[mot];;;;;;;" "\\[+.*\\]+")->((("MATCH" "[mot]") ("@" 0) ("LENGTH" 5) nil)) (cond ;;ligne vierge ((apply '= (cons nil lrow)) ;;passe la ligne nil ) ;;; ;;commentaire ;;; ((= (substr (pw_nil_T (car lrow)) 1 1) ";") ;;; ;;passe la ligne ;;; nil ;;; ) ;;; ;;nom de variable ;;; ((setq tmp (Pw_RegExp (pw_nil_T (car lrow)) "\\[+.*\\]+")) ;;; ;;; ;; (= (substr tempo 1 1) "[") ;;; ;;on est à l'entête : [maliste] ;;; (if ltempo ;;; (progn ;;; (set (read nmls) ltempo) ;;; (setq ltempo nil) ;;; ) ;;; ) ;;; (setq nmls (cadr (assoc "MATCH" (car tmp)))) ;;; (setq nmls (pw_enlev_gd nmls)) ;;; ) ;;liste de valeurs (T (setq ltempo (cons (pw_merge_LIST 1erligne lrow) ltempo )) ) ;_# ) ;_#cond ) (reverse ltempo) ) ;;************************************************************************** ;;§/xml/retourne le noeud par sélection par nom/xmlDoc tagname ;;xmlDoc = IXMLDOMDocument2 ;;retourne soit nil, soit un IXMLDOMNode (defun pw_xmldoc_getNodeByName ( xmlDoc tagname ) (setq wkb (vlax-invoke-method xmlDoc 'getElementsByTagName tagname)) (setq deb (vlax-get-property wkb 'context)) ;;(setq debchlnd (vlax-get-property deb 'childNodes)) ) ;;************************************************************************** ;;§/xml/retourne le noeud par sélection par nom/xmlNod tagname ;;xmlnod = IXMLDOMNode ;;retourne soit nil, soit un IXMLDOMNode (defun pw_xmlnode_getNodeByName (xmlnod tagname / finit noeud chlnd res i nb) (if (vlax-invoke-method xmlnod 'HasChildNodes) (progn (setq chlnd (vlax-get-property xmlnod 'childNodes)) (setq nb (vlax-get-property chlnd 'length)) (setq i 0) (while (and (not finit) (< i nb)) (setq noeud (vlax-get-property chlnd 'item i)) (setq i (+ 1 i)) (if (= (vlax-get-property noeud 'Basename) tagname) ;_Tagname sans le ss: ex : ss:Worksheet->Worksheet (setq finit T res noeud) ) ) ) ) res ) ;;************************************************************************** ;;§/xml/retourne le nombre de colonne d'un fichier xls xml / tablenod ;;xmlnod = IXMLDOMNode ;; ;;en pratique: ne sert à rien, car le nombre de colonne ne correspond pas au nombre de cell dans chaque row (defun pw_xmlsColumnNumber (tablenod / finit noeud chlnd nbcol) (setq nbcol 0) (if (vlax-invoke-method tablenod 'HasChildNodes) (progn (setq chlnd (vlax-get-property tablenod 'childNodes)) (setq nb (vlax-get-property chlnd 'length)) (setq i 0) (while (< i nb) (setq noeud (vlax-get-property chlnd 'item i)) (setq i (+ 1 i)) (if (= (vlax-get-property noeud 'Basename) "Column") ;_Tagname sans le ss: ex : ss:Worksheet->Worksheet (setq nbcol (+ 1 nbcol)) ) ) ) ) nbcol ) ;;************************************************************************** ;;§/xml/lit une cellule / cellnod ;;retourne '("val" idx) ;;val peut etre une chaine, ou nil ou un nombre ;;idx peut etre ;; - soit nil (cellules qui se suivent) ;; - soit un integer (cellules contennant des datas qui viennent après un série de celulles vides) ;; - soit un integre de valeur 256 (cellule vides qui est ajouté à chaque ligne, ne contient jamais de data) (defun pw_xmlsReadOneCell ( cellnod / att sty typ txt ) (setq attcell (vlax-get-property cellnod 'Attributes)) (if (setq idx (vlax-invoke-method attcell 'getNamedItem "ss:Index")) (setq tmp2 idx idx (vlax-get-property idx 'value) idx (vlax-variant-value idx)) ) (if (setq data (pw_xmlnode_getNodeByName cellnod "Data")) (progn (setq att (vlax-get-property data 'Attributes)) (setq sty (vlax-invoke-method att 'getNamedItem "ss:Type")) (setq typ (vlax-get-property sty 'value)) (setq typ (vlax-variant-value typ)) ;(print typ) (setq txt (vlax-get-property data 'text)) ;(print txt) (list (pw_xmlVal2Type txt typ) idx) ) ) ) ;;************************************************************************** ;;§/xml/lit un attribut / xmlnod attName ;;ss:Name (defun pw_xmlsReadOneAtt ( xmlnod attName / atts att val ) (if (setq atts (vlax-get-property xmlnod 'Attributes)) (progn (setq att (vlax-invoke-method atts 'getNamedItem attName)) (setq val (vlax-get-property att 'value)) (vlax-variant-value val) ) ) ) ;;************************************************************************** ;;§/xml/transforme la valeur texte xml en son type spécifié / val typ (defun pw_xmlVal2Type ( val typ / ) (cond ((= typ "String") val ) ((= typ "Number") (read val) ) ) ) ;;************************************************************************** ;;§/xml/lit toutes les cellules, comme pw_charger_ini/tblnod (defun pw_xmlsReadAllCells (tblnod / lres i) (setq i 0) (setq lrow (pw_xmlsListAllRow tblnod)) (foreach row lrow ;;(print i) (if (setq lcell (pw_xmlsListAllCell row)) (progn (setq lcell (mapcar 'pw_xmlsReadOneCell lcell)) ;;(setq lcell (pw_supp_all 'nil lcell)) (setq lcell (pw_xmlTrtLvalCell lcell)) (setq lcell (mapcar 'pw_nil_t lcell)) (if (not (and (PW_EGAL_LIST lcell) (member "" lcell) ) ) ;_c'est une ligne vide dans le fichier xml (setq lres (cons lcell lres)) ) ) ) (setq i (+ 1 i)) ) (reverse lres) ) ;;************************************************************************** ;;§/xml/traite la liste des valeurs de celulle lues, en fonction de la valeurs index /lvalcell ;;lvacell '((idx1 lvalcell1) ... (idxn lvalcelln) (defun pw_xmlTrtLvalCell (lvalcell / cnt lres id val) (setq cnt 1) (foreach l lvalcell (setq val (car l) id (cadr l)) (cond ((= nil id);_cette celulle est la 1ère ou suit les autres (setq lres (cons val lres)) (setq cnt (+ 1 cnt)) ) ((and (= 256 id)(not val));_cette celulle est la dernière et ne contient pas de données nil ) ((numberp (setq id (pw_to_type id)));_cette celulle est une celulle contennat une valeur, après une série de celulles vides (setq nb (- id cnt)) (repeat nb (setq lres (cons "" lres))) (setq lres (cons val lres)) (setq cnt (+ 1 id)) ) ) ) (reverse lres) ) ;;************************************************************************** ;;§/xml/liste de toutes les row d'une table / tablenod (defun pw_xmlsListAllChildsByname ( Nod childname / lrow i noeud nb) (if (vlax-invoke-method Nod 'HasChildNodes) (progn (setq chlnd (vlax-get-property Nod 'childNodes)) (setq nb (vlax-get-property chlnd 'length)) (setq i 0) (while (< i nb) (setq noeud (vlax-get-property chlnd 'item i)) (setq i (+ 1 i)) (if (= (vlax-get-property noeud 'Basename) childname) (setq lrow (cons noeud lrow)) ) ) ) ) (reverse lrow) ) ;;************************************************************************** ;;§/xml/liste de toutes les row d'une table / tablenod (defun pw_xmlsListAllRow ( tablenod / lrow i nb) (if (vlax-invoke-method tablenod 'HasChildNodes) (progn (setq chlnd (vlax-get-property tablenod 'childNodes)) (setq nb (vlax-get-property chlnd 'length)) (setq i 0) (while (< i nb) (setq noeud (vlax-get-property chlnd 'item i)) (setq i (+ 1 i)) (if (= (vlax-get-property noeud 'Basename) "Row") (setq lrow (cons noeud lrow)) ) ) ) ) (reverse lrow) ) ;;************************************************************************** ;;§/xml/liste de toutes les cell d'une row / rownod (defun pw_xmlsListAllCell ( rownod / lcell noeud i nb) (if (vlax-invoke-method rownod 'HasChildNodes) (progn (setq chlnd (vlax-get-property rownod 'childNodes)) (setq nb (vlax-get-property chlnd 'length)) (setq i 0) (while (< i nb) (setq noeud (vlax-get-property chlnd 'item i)) (setq i (+ 1 i)) (if (= (vlax-get-property noeud 'Basename) "Cell") (setq lcell (cons noeud lcell)) ) ) ) ) (reverse lcell) ) ;;******************************************************************************* ;;§/xml/liste de toutes les noeud child d'un noeud père par nom / fathNod NodName (defun pw_xmlsListNodeByName ( fathNod NodName / lcell noeud chlnd nb i ) (if (vlax-invoke-method fathNod 'HasChildNodes) (progn (setq chlnd (vlax-get-property fathNod 'childNodes)) (setq nb (vlax-get-property chlnd 'length)) (setq i 0) (while (< i nb) (setq noeud (vlax-get-property chlnd 'item i)) (setq i (+ 1 i)) (if (= (vlax-get-property noeud 'Basename) NodName) (setq lcell (cons noeud lcell)) ) ) ) ) (reverse lcell) ) ;;************************************************************************** ;;§/xml/Chargement à partir d'un fichier txt des listes de parametres ds des variables globales/nomfich (defun pw_charger_xml (fichier / lres wks xmldoc olderror ) (setq olderror *error*) (setq *error* (append *error* '((vlax-release-object xmldoc) (setq *error* (reverse (cddr (reverse *error*))))))) ;;xmldoc chlnd 1er 2eme 2emechlnd nb noeud finit i lres) (if (setq fichier (findfile fichier)) (progn (setq xmldoc (vlax-create-object "MSXML2.DOMDocument")) (vlax-invoke-method xmldoc 'load fichier ) ;;(setq Wkb (pw_xmldoc_getNodeByName xmldoc "Workbook")) (setq Wkb (pw_xmlnode_getNodeByName xmldoc "Workbook")) (setq lsheet (pw_xmlsListNodeByName wkb "Worksheet")) (foreach wks lsheet (setq tmp wks) (print (pw_xmlsReadOneAtt wks "ss:Name")) (setq Tbl (pw_xmlnode_getNodeByName Wks "Table")) ;; (setq NbCol (pw_xmlsColumnNumber tbl)) (setq lres (pw_xmlsReadAllCells tbl )) (pw_initValFromXml lres) ) (vlax-release-object xmldoc) ) (prompt "\nPas de fichier xml trouvé") ) (setq *error* olderror) (princ) ) ;;************************************************************************** ;;§/xml/Chargement à partir d'un fichier xml d'une table unique par onglet/nomfich ;;la table est affectée à une liste du nom de l'onglet ;;la 1ere ligne sert définir les code d'assoication de chaque liste ;;ex: ;;la table definie dans l'onglet "lever": ;;mat,x ,y ,z ;;A ,1.0 ,1.0 ,99.0 ;;B ,2.0 ,2.0 ,98.0 ;;donne la liste :!lever ;;'(("A" 1.0 1.0 99.0) ;; ("B" 2.0, 2.0, 98.0)) ;; créee la liste des variables initialisée: pw-charger-table-xml (defun pw_charger_table_xml (fichier / lres wks xmldoc) (setq pw-charger-table-xml nil) ;;xmldoc chlnd 1er 2eme 2emechlnd nb noeud finit i lres) (if (setq fichier (findfile fichier)) (progn (setq xmldoc (vlax-create-object "MSXML2.DOMDocument")) (vlax-invoke-method xmldoc 'load fichier ) ;;(setq Wkb (pw_xmldoc_getNodeByName xmldoc "Workbook")) (setq Wkb (pw_xmlnode_getNodeByName xmldoc "Workbook")) (setq lsheet (pw_xmlsListNodeByName wkb "Worksheet")) (foreach wks lsheet (setq tmp wks) (print (setq NomOnglet (pw_xmlsReadOneAtt wks "ss:Name"))) (setq pw-charger-table-xml (cons NomOnglet pw-charger-table-xml)) (setq Tbl (pw_xmlnode_getNodeByName Wks "Table")) ;; (setq NbCol (pw_xmlsColumnNumber tbl)) (setq lres (pw_xmlsReadAllCells tbl )) (set (read NomOnglet) (pw_creeListeAssocFromXml lres)) ) (vlax-release-object xmldoc) (prompt "\nLes tables ont été placées dans les variables :\n") (prompt (pw_ch_de_lst pw-charger-table-xml " ")) ) (prompt "\nPas de fichier xml trouvé") ) ) ;;************************************************************************** ;;§/xml/Chargement à partir d'un fichier xml d'une table unique par onglet/nomfich (defun c:chargeTableXml ( / nchem fich) (pw_bydefault "chargetableXml-chem" (getvar "dwgprefix")) (pw_charger_table_xml (setq fich (getfiled "Fichier xml de tables de valeurs à charger : " chargetableXml-chem "xml" 0))) (setq chargetableXml-chem (car (pw_scie_fich fich))) (princ) )
  23. Bonjour, Les expresstools d'Autocad définissent un certain nombre de fonctions, documentées ou non, qui peuvent servir dans nos programmes. Le plus gros des fonctions à tété documenté en 2000 par un inconnu (peut être qq sait qui en est l'auteur ?) dans un fichier d'aide acetutil.chm. epuis, d'autres fonctions sont apparues, et il n'y a toujours pas de documentation sur les routines lisp. J'ai fait un travail d'inventaire, et commencé la documentation sur ces fonctions. J'ai mis ça dans deux blogs, Augi blog et g-eaux.over-blog tout ce trouve dans un fichier excel, il reste à décrire les fonctions et le type de leurs arguments. merci de partager vos connaissances dans ce domaine ...
  24. Bonjour, J'ai mis à jour PowerClic pour qu'il puisse fonctionner avec Autocad 2012. On le trouve ici: V 7.14 L'installation étant de plus en plus compliquée avec les plateformes x64 et Autocad 2012 (passage à .Net 4.0), j'ai posté des explications ici: Installation et mise à jour de PowerClic pour Autocad Vos commentaires sont les bienvenus en cas de difficultés d'installation.
  25. salut, je ne devrais jamais venir sur ces forums ... voilà un lisp pour créer une liste d'association totalisant par id et par code m ou p. après il faudra savoir l'exploiter avec des assoc . si tua aplus de valeur que 2 de suite, il faudra passer à des nth au lieu des cdr cddr etc .. (setq ldep '(("id1" 10 21 "m") ("id2" 15 2 "p") ("id0" 12 10 "p") ("id2" 16 20 "m") ("id1" 1 10 "m") ("id2" 2 20 "p"))) (setq lassoc (mapcar '(lambda (x) (list (car x) (list (last x) (cadr x) (caddr x)))) ldep)) ;; à ce stade: lassoc = (("id1" ("m" 10 21)) ("id2" ("p" 15 2)) ("id0" ("p" 12 10)) ("id2" ("m" 16 20)) ("id1" ("m" 1 10)) ("id2" ("p" 2 20))) (foreach l lassoc (if (setq tmp (assoc (setq cd (car l)) res));_si id déja répertorié (progn (setq nl (append tmp (list (cadr l)))) (setq res (subst nl tmp res)) ) (setq res (cons l res)) ) ) (setq nlassoc (reverse res) res nil) ;; à ce stade: nlassoc = (("id1" ("m" 10 21) ("m" 1 10)) ("id2" ("p" 15 2) ("m" 16 20) ("p" 2 20)) ("id0" ("p" 12 10))) (setq res nil sres nil) (foreach l nlassoc (setq id (car l)) (foreach sl (cdr l) (if (setq tmp (assoc (setq atm (car sl)) sres)) ;_si atom déja répertorié (progn (setq nl (list atm (+ (cadr sl) (cadr tmp)) (+ (caddr sl) (caddr tmp)) ) ) (setq sres (subst nl tmp sres)) ) (setq sres (cons sl sres)) ) ) (setq res (cons (list id sres) res)) (setq sres nil) ) ;; à l'arrivée, tu a le contenu de ton tableau res = (("id0" (("p" 12 10))) ("id2" (("m" 16 20) ("p" 17 22))) ("id1" (("m" 11 31))))
×
×
  • 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é