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. GEGEMATIC

    Mon nouveau blog

    Salut Patrick, tu tombe à point, j'étais sur overBlog, ça m'allait très bien, car la mise en ligne et la gestion était très facile. puis j'ai eu la bétise de faire l'upgrade vers la nouvelle mouture,(sans regarder les 10000 posts d'insultes sur les forums overblog ...) et là, c'est la cata. Donc j'ai décidé de passer à une plate-forme indépendante. Alors MERCI ! Gérald
  2. Salut, comme je commençais a avoir un grand nombre de dessin infectés, avec des listes d'erreurs de plus en plus longues, j'ai bricolé quelque chose. CLEARMULTIPLYOWNEDOBJECT Surtout que ces erreurs ralentissent pas mal la sauvegarde. Gégé
  3. salut, en fait, mon nouveau RGF93.CC45 se comporte exactement comme celui d'origine, sauf qu'on ne pourra le reconnaitre à ses coordonnées. il a une fausse abscisse et fausse ordonnée réduite au minimum pour n'avoir que des coordonnées positives dans la zone CC45 (400 000 en x, 100 000 en y, ce qui est 40 fois moins que le code d'origine en Y) Donc en gros: je reçois un fichier topo en CC45: je le reprojete dans mon nouveau système, et je travaille (a l'aise en 3d) on m'envoi de nouveau fichiers, je les importe par requête, de cc45 de base vers le CC45 g-eaux je devrais pouvoir faire du FDO, de l'import/export vers google etc ... (pas encore testé) Quand j'ai finit, et que je dois rendre au client, je n'ai plus qu'a reprojeter mon travail vers le CC45 d'origine. un aller/retour ne donne que 0.000004 metres d'erreur en pièce jointe, deux fichier identique, un avec le code d'origine, et l'autre avec mon code perso : fichiers exemples Gégé
  4. Salut, J'ajoute que j'ai créé un système de projection spécifique pour avoir le RGF.CC45 en coordonnées + locales, pour éviter le ralentissement que ça occasionne en 3d (au passage merci leCrabe) Pour ce faire, c'est très simple, il suffit de partir du système existant, et de changer les fausses abscisses et fausses ordonnées pour que le bas de la zone de projection commence à 0,0 J'ai dans le projet de généraliser cette pratique pour chaque zone, en faisant 3 secteurs par zones rgf93, axés sur le méridien: ex: RGF93.CC45.O.CAD = O pour Ouest, CAD pour notre besoin propre à la DAO/CAO cela permettrai à tous d'avoir la commodité de travailler dans un système de coordonnées, mais d'avoir des performances 3d pas trop dégradées. Mais pour éviter qu'on fasse chacun notre cuisine, ce serait bien de le faire après définition commune du cahier des charges. Gégé
  5. salut, de mémoire, c'est un casse tête, car la liste des styles de tracés "utilisables" dépends de la table liée. Je te passe une série d'exemples qui datent de 2000, donc de mes débuts avec Visual-Lisp et les dictionnaires, donc c'est pas du 100% De mémoire, c'est aussi chiant que les styles de hachures, qui dépendent des fichiers pat situés dans le path d'Autocad. Pour quelque chose de plus clean, il faudrait peut être voir du coté de .Net pour avoir la liste des styles: ;*************************************************************************** ;§/dxf/liste les style présent dans un dictionnaire/ndic ; ** si ndic = MLINE_STYLE alors retourne style de multiligne ;; = "ACAD_PLOTSTYLENAME" retourne styles de tracé ;; (defun pw_l_dic ( ndic / dic res l ) (setq dic (dictsearch (namedobjdict) ndic )) (setq res nil) (foreach l dic (if (= 3 (car l)) (setq res (cons (strcase (cdr l)) res)) ) ) (setq res res) ) A utiliser de cette manière (compléter): (setq pw-l-pstyle (append '("DUCALQUE" "DUBLOC" "0" "1") (pw_l_dic "ACAD_PLOTSTYLENAME") ) ) Pour sélectionner un style de tracé avec la liberté de changer de table, j'utilise un dialogue Autocad: Cette méthode a l’inconvénient de changer le style courant, pour revenir au style précédent, j'utilise pw_retpstyle, mais ça ne marche pas toujours ; ***************************************************************************** ;;§/ini/selectionne une style de tracé au moyen de la case de dialogue autocad/ps ; (defun pw_ch_pstyle ( ps / res ) ;(sssetfirst nil) ;; efface tout jeu de selection préalable (setq pw-cplotstyle (getvar "cplotstyle")) (initdia) (command "_.PLOTSTYLE" ) (setq res (pw_trad_pstyle (getvar "cplotstyle"))) (setq res res) ) ; ***************************************************************************** ;;§/ini/rétablie le pstyle précédent dans les cas pw_sel de pw_dia/none ;;si le style n'est plus valable, ça plante ; (defun pw_retpstyle () (if pw-cplotstyle (if (pw_est_nouv_dic pw-cplotstyle "ACAD_PLOTSTYLENAME") ;;si à l'issue du dialogue, le style est toujours valable (pw_setvar "CPLOTSTYLE" pw-cplotstyle) ;; tante de le rétablir ) ) (setq pw-cplotstyle nil) ;;même *error* n'en tiendrat plus compte )
  6. Salut, je pense que la manière la plus rationnelle de traiter ce problème n'est pas la programmation, mais la création de filtre de propriété de calque. On peut donc faire un filtre général "calque invisibles" regroupant, gelés, inactivés et non imprimable, et des sous filtre pour chaque catégorie. Je crois que Gile et patrick35 on créés des outils pour générer des filtre de calques, là c'est intéressant. Gégé
  7. salut, je ne sais pas comment il utilisait sa routine, à partir d'une menu etc ... donc pour lancer la commande il faut des parenthèses : (creelist) sinon, pour la lancer directement : command: creelist il faut faire (defun c:creelist au lieu de (defun creelist
  8. salut, chez moi, le problème est que le lecteur G: n'existe pas remplacer (setq f1 (open "G:/Surf2.txt" "w")) par (setq f1 (open (strcat (getvar "dwgprefix") "Surf2.txt") "w")) et la routine marche. soit dit en passant, je remplacerai également .txt par .csv Gégé
  9. Salut, si tu n'a pas trop personnalisé ton visual lisp, tu peux supprimer les .dsk, et Visual lisp se relancera avec les options "defaut" sinon,il y a également un backup, vlide._DS
  10. Salut, trop tard ... pour info, il y a dans C:\Users\"user"\AppData\Roaming\Autodesk\"ton produit autocad"\fra un fichier "VLIDE.DSK" (ça ne s’invente pas !) il est écrit en listes lisp, et contient une liste : (*sdb-watcher-setting* et plein de choses, mais il ne faut surtout pas l'éditer à la main ...
  11. Peut être pas ... en testant la routine sur une xref, liste de propriétés plus longue que la ligne sur laquelle j'avais testé, je me suis aperçu que les dernières propriétés manquaient : un vieux problème, depuis l'arrivée du vlisp, Autolisp n'est pas forcément bien séquentiel, il passe à la suite sans s'assurer que la commande précédente est bien terminée (surtout s'il s'agit d'entrée/sortie) Pas moyen de passer par un sémaphore (un prompt "\nFin de dump")dont j'aurai pu tester l’existence, le prompt s'intercale dans le vlax-dump-object définir la commande en defun-q n'a pas non plus marché, donc j'ai du me rabattre sur un affreux "_delay", qui risque d'être rébarbatif si tu utilise du lisp à l'intérieur d'un commande, ou d'une case de dialogue ... donc voilà l'usine à gaz : ;;************************************************************************** ;;§/vlax/retourne la liste des propriétés (vlax-dump-object) d'une entité / ent (defun pw_lPropertyName (ent / llign lign pos fname f wait) (setq fname (getvar "LOGFILENAME")) (pw_setvar1 "LOGFILEMODE" 0) (pw_setvar1 "CMDECHO" 0) (vl-file-delete fname) (setvar "LOGFILEMODE" 1) (while (not (vlax-dump-object (pw_to_object ent)));_ça non plus ça ne marche pas ... wait ) (command "_delay" 50) (setvar "LOGFILEMODE" 0) (setq fname (getvar "LOGFILENAME")) (setq f (open fname "r")) (while (setq lign (read-line f)) (setq llign (cons lign llign)) ) (close f) (pw_setvar2 "LOGFILEMODE") (pw_setvar2 "CMDECHO") (setq llign (reverse llign)) (setq llign (cdr (member "; Valeurs de propriétés:" llign))) (setq llign (mapcar '(lambda (x /) (setq pos (vl-string-search "=" x)) (setq x (substr x 2 (- pos 1))) (setq x (vl-string-trim " " x)) (if (setq pos (vl-string-search " " x)) (substr x 1 pos) x ) ) llign ) ) )
  12. Salut, merci de ton enthousiasme, bien sur que ça marche, mais il reste des truc à peaufiner, comme tester si logfilon est bien à 1, car sinon effacer le fichier log ne marchera pas, et tester la phrase d'introduction, qui n'est peut être pas la même dans toutes les version d'autocad, et certainement pas dans le versions anglaises ... donc un truc simple finit toujours en usine à gaz ...
  13. salut, comme j'ai souvent pensé a faire ce truc, sans passer par d’assommantes listes qui ne seront jamais exhaustive (il y aura toujours de nouvelle entités) voici un petit programme qui retourne la liste des propriétés sans les connaitre d'avance : C'est du brut, il reste forcément un peu de boulot (defun ret_property (/ llign ) ;;(setq llign nil) (setq fname (getvar "LOGFILENAME")) (setvar "LOGFILEMODE" 0) (vl-file-delete fname) (setvar "LOGFILEMODE" 1) (vlax-dump-object (vlax-ename->vla-object (car (entsel)))) (setq fname (getvar "LOGFILENAME")) (setq f (open fname "r")) ;;(vl-file-delete filename) (while (setq lign (read-line f)) (setq llign (cons lign llign)) ) (close f) (setq llign (reverse llign)) (setq llign (cdr (member "; Valeurs de propriétés:" llign))) (setq llign (mapcar '(lambda (x /) (setq pos (vl-string-search "=" x)) (setq x (substr x 2 (- pos 1))) (setq x (vl-string-trim " " x)) (if (setq pos (vl-string-search " " x)) (substr x 1 pos) x ) ) llign ) ) )
  14. salut, tu peux télécharger ce très vieux lisp, qui a peut être besoin d'une réactualisation, Spy_var Le principe: spy_var1 est la commande qui vous permet d'enregistrer l'état de vos variables système spy_var2 affiche les variables qui ont changées depuis l'appel de la commande spy_var1 write_var2ini ecrit l'état de vos variables dans un fichier ini compare_var_from_ini compare l'état de vos variables avec l'état stocké dans un fichier ini
  15. Salut, ce genre de trucs alourdissent énormément un programme. Il te faut : 1 : corriger les éventuelles erreurs de saisie: genre un espace devant le chiffre 1 (dans l'exemple ci dessou, c'est le boulot de pw_comifo, qui est capable de corriger 0.01. en 0.01 par exemple ) 2 : tester si la valeur convient (dans mon ex, pw_est_reel) 3 : envoyer le message qui convient, pour cela tu a le composant "error" de ta dcl 4 : maintenir le focus sur la case de saisie (effacer, c'est brutal) en désactivant tous les composant dcl autre que celui qui pose pb (dasn mon ex pw_off_all_but_current) qui stock également leur état (actif / inactif) 5: quand l'utilisateur a rentré la bonne valeur, effacer error, et déverrouiller les bons composants: dans mon ex : (set_tile "error" "")(pw_restore_status) ;;exemple de gestion après la lecture d'une valeur dans un dcl : (setq val (pw_comifo val)) (set_tile (strcat "futu_" (itoa num)) val) (if (setq val (pw_est_reel val nil)) (progn (set_tile "error" "")(pw_restore_status) (setq ret val) ) (progn (pw_off_all_but_current (itoa num)) (set_tile "error" (pw_getxt 'PW27 "La valeur doit être un réel nom de dieu ! ")) (setq ret nil) ) )
  16. GEGEMATIC

    Choix carte graphique

    J'ai arrêté mon contrat select à ustation 2004. Je l'utilise toujours pour soigner des fichiers dwg corrompus, c'est radical J'aimerai bien savoir comment Ustation a évolué, car a l'époque, bien que 100% compatible dwg, l'écart de performance était énorme, tant en 2d qu'en 3d. Une petite carte gamer à 128 mo, un driver open gl, et en avant la 3d fluide ! Pourquoi avoir abandonné ustation dans ces conditions ? Parceque sur un gros développement, on a travaillé à 2 sur le projet, et que mon "associé" apportait du code lisp. Donc on a choisi Autocad... et sa lenteur désespérante.
  17. GEGEMATIC

    Choix carte graphique

    Salut, ce que tu dis là est très intéressant, car mes projet Covadis sont géoréférencés: exemple en lambert 2 éténdu, on est à + de 2million en Y. C'est lors de la visualisation d'un MNT que l'on s'aperçoit de ces pb malheureusement, je ne peux pas changer le calage de mes projets pour celà. Gégé
  18. GEGEMATIC

    Choix carte graphique

    Salut, les cartes graphiques avec Autocad, c'est devenu de plus en plus confus. Historiquement, jusqu'a la version 2006, aucune différence entre cartes gammer et pro Jusqu'a la 2011, seules les cartes Pro, avec un driver certifié, affichait réellement correctement en 3d (grips alignés avec les arrêtes, par exemple) Depuis la 2012, j'ai vu des pilotes certifiés ne pas marcher. il n'y aura plus de pilotes performance, ni d'nvidia ni d'aucun constructeur. En moyenne, les performances ne sont pas bonnes, parfois certains drivers certifiés sont meilleurs que d'autre, il faut tester. La 3d avec autocad : oui, mais alors de la 3d très simple.
  19. Presqu'un an après ... désolé le crabe, je n'avais pas vu ta réponse ! c'est bien la 6 que j'ai : Google Earth 6.1.0.5001 Plugin GE: 4.64.2011 Par contre, il y a un an, j'étais peut être encore avec la 2011, et j'utilisais des codes obsolètes, IGN-II, IGN-IIe etc ... J'ai refais un test aujourd'hui, avec la 2012, ça marche, mais il faudrait que je teste des zones où ça ne marchais pas. Je n'utilise presque plus GE, qui est rarement assez précis pour moi. Gégé
  20. Salut, J'ai utilisé quelques DVB avec A64, et je n'ai pas eu ce problème, mais j'en ai eu d'autres bien pire (ralentissement déments, plantages) J'ai donc renoncé complètement à VBA avec A64, je pense que tu sera progressivement amené à faire pareil. Si ton code VBA n'utilise pas les événements, il est presque utilisable tel quel grâce à interrop avec VB.Net (pas grand chose à changer pour le faire tourner, surtout les références à ThisDrawing qu'il faudra que tu remplace) Maintenant, ce que tu ne dis pas, c'est ce qui se passe quand tu sauvegarde le DVB, lors du chargement suivant: Est-ce qu'Autocad te redemande de sauvegarder à nouveau ? gégé
  21. GEGEMATIC

    Covadis/Autopiste V13

    Bonjour, j'ai reçu aujourd'hui Covadis 13.0 f. Est-ce que ça vaut le coup de l'installer, sachant que ce que j'attends est: Projet linéaire: - Dessin automatique de talus sur projet linéaire - Définir très peu de tabulations, mais avoir la possibilité d'utiliser la commande "rout2interpolprojet", qui ne fonctionne plus de manière satisfaisante avec la V12 Plateformes: - Possibilité de mettre à jour les coupes sur plateforme, sans avoir à les régénérer. (mise à jour profil en long marche, mais supprime les talus) - Prendre en compte le scu courant pour le tracé des coupes de plateforme (pas très pratique de travailler en SCG) (pour ces 2 points, je parle de coupe libre, non d'axe tabulé) Module réseaux: - Profils en long à plan de comparaison multiples pour faire tenir un profil a gros dénivelé sur la même feuille. Métrés du module VRD: - Pouvoir définir des articles complexes calculés au m2 (structure de chaussée, structure de plateforme) et le terrassement en masse, déblais remblai, calculé au m3 à part - Avoir une meilleur documentation pour le fonctionnement de covadis en matière de bibliothèque réseaux et de bordereau . - Fusionner les articles pour le métré assisté et le métré du module VRD J'ai lu les 2 PDF de Covadis V13, et cette discussion, mais je n'ai pas l'impression que ces points soient traités. Maintenant, je n'utilise régulièrement que les modules réseau et plateforme, peut être que ce dont j'ai besoin existe déjà ... Une question également: le nouvel objet, courbe de profil en long, remplace t'il l'axe en plan ? (avec sa barre d'outil spécifique ?) Merci d'avance pour la réponse ! Gérald
  22. Bon, après une sérieuse prise de tête, j'ai trouvé: Tous les xml que j'avais créé jusqu'a maintenant, c'était du 1.1 La methode createlement marchait très bien, sans le besoin de spécifier un espace de nom. Les fichier excelXml, c'est du 1.0, il faut utiliser 'createNode, en précisant le type, et l'espace de Nom. Je pensais que c'était l'attribut xmlns qui déterminait l'espace de nom, c'est vrai une fois le xml créé et sauvegardé , mais en phase de construction, les attributs ne comptent pas encore. donc la bonne methode est: (setq ExcelWorkbook (vlax-invoke-method pw-xmldoc 'createNode 1 "ExcelWorkbook" "urn:schemas-microsoft-com:office:excel")) (vlax-invoke-method WorkBook 'appendChild ExcelWorkbook) avec 1 = nodetype : NODE_ELEMENT (1) et "urn:schemas-microsoft-com:office:excel" l'espace de nom Merci à Yahoo, qui m'a amené sur cette page : Méthode DOMDocument.CreateNode() ajoute une déclaration d'espace de noms vide Comme quoi Google n'est pas toujours le meilleur ...
  23. Salut à tous, je bute sérieusement sur la création de fichiers excel XML Ce format est peu connu, mais il a pour mois certains avantage, tous mes fichiers paramètres sont de ce format. Je génère du xml avec lisp depuis déjà pas mal de temps (format KML, Gpx etc) mais la j'ai un problème d'espace de nom que je n'arrive pas à comprendre. ma routine TryXml génère un petit fichier excel, dont j'ai joint le modèle: un tableau avec 2 nombre et deux lettres. celui généré ne marche pas à cause d'un attribut xmlns vide , généré par défaut lors de la sauvegarde du fichier. il empêche l'ouverture par excel. le supprimer manuellement suffit à faire marcher le xml, mais le supprimer par XML DOM ne sert à rien, car il se recrée lors de la sauvegarde ce sujet décrit mon problème, mais la réponse apportée ne marche pas chez moi. En fait, je n'arrive pas à comprendre le fonctionnement des espaces de nom dans xml, et je n'ai pas trouvé de doc intéressante à ce sujet : on dit "voilà c'est comme ça" mais je n'arrive pas à comprendre mon erreur par la documentation. Toute aide sur le sujet est bienvenue ... merci d'avance, Gégé (defun c:TryXml (/ nchem fich elast sel lsel curproj)<BR> <BR> (setq dwgname (cadr (pw_scie_fich (getvar "dwgname"))))<BR> (setq dwgprefix (car (pw_scie_fich (getvar "dwgname"))))<BR> (setq pw-xmldoc (vlax-create-object "MSXML2.DOMDocument"))<BR> (vlax-put-property pw-xmldoc 'async :vlax-False)<BR> ;;dom1.async = :vlax-False<BR> <BR> ;; dom1.resolveExternals = False<BR> (vlax-put-property pw-xmldoc 'resolveExternals :vlax-False)<BR> ;;ValidateOnParse <BR> (vlax-put-property pw-xmldoc 'ValidateOnParse :vlax-False)<BR> ;;UseInlineSchema <BR> ;;(vlax-put-property pw-xmldoc 'UseInlineSchema :vlax-False)<BR> <BR> (setq fich (getfiled "Fichier MsXml à écrire : "<BR> (strcat dwgprefix dwgname)<BR> "xml"<BR> 1<BR> )<BR> )<BR> (xml_header pw-xmldoc)<BR> (setq workbook (xml_workbook pw-xmldoc))<BR> (setq Worksheet (xml_Worksheet WorkBook "onglet" '((1 2) ("A" "B"))))<BR> <BR><BR> (vlax-invoke-method pw-xmldoc 'save fich)<BR> <BR> <BR> (vlax-release-object pw-xmldoc)<BR> (setq pw-xmldoc nil)<BR> (princ)<BR>)<BR><BR><BR><BR><BR><BR>;;**************************************************************************<BR>;;§/xml/Crée le header d'un fichier excel xml /xmldoc<BR><BR>(defun xml_header (xmldoc / tmp)<BR> (setq tmp (vlax-invoke-method<BR> xmldoc<BR> 'createProcessingInstruction<BR> "xml"<BR> "version='1.0' encoding='utf-8'"<BR> )<BR> )<BR> (vlax-invoke-method xmldoc 'appendChild tmp)<BR> (setq tmp (vlax-invoke-method<BR> xmldoc<BR> 'createProcessingInstruction<BR> "mso-application"<BR> "progid=\"Excel.Sheet\""<BR> )<BR> )<BR> (vlax-invoke-method xmldoc 'appendChild tmp)<BR><BR>)<BR><BR><BR>;;**************************************************************************<BR>;;§/xml/Crée le workbook d'un fichier excel xml / xmldoc<BR>;;retourne le worbook<BR><BR>(defun xml_workbook (xmldoc / workbook )<BR> <BR> (setq workbook (vlax-invoke-method xmldoc 'createElement "Workbook"))<BR> (setq workbook (vlax-invoke-method xmldoc 'appendChild workbook))<BR> ;;créé l'entête<BR> (workbook_header WorkBook)<BR><BR> <BR> WorkBook<BR> <BR>)<BR><BR>;;**************************************************************************<BR>;;§/xml/Crée le header d'un fichier excel xml /xmldoc<BR><BR>(defun workbook_header ( WorkBook / )<BR>;;; xmlns=http://schemas.microsoft.com/office/excel/2003/xml<BR> (pw_xml_createTextAttribute WorkBook "xmlns" "http://schemas.microsoft.com/office/excel/2003/xml")<BR>;;;xmlns:ss=urn:schemas-microsoft-com:office:spreadsheet<BR> (pw_xml_createTextAttribute WorkBook "xmlns:ss" "urn:schemas-microsoft-com:office:spreadsheet")<BR>;;;xmlns:udc=http://schemas.microsoft.com/data/udc<BR> (pw_xml_createTextAttribute WorkBook "xmlns:udc" "http://schemas.microsoft.com/data/udc")<BR>;;;xmlns:x=urn:schemas-microsoft-com:office:excel<BR> (pw_xml_createTextAttribute WorkBook "xmlns:x" "urn:schemas-microsoft-com:office:excel")<BR>;;;xmlns:xsd=http://www.w3.org/2001/XMLSchema<BR> (pw_xml_createTextAttribute WorkBook "xmlns:xsd" "http://www.w3.org/2001/XMLSchema")<BR> ;;(pw_xml_createTextAttribute WorkBook "exclude-result-prefixes" "ss o x")<BR> <BR> <BR><BR>) <BR><BR><BR><BR><BR>;;**************************************************************************<BR>;;§/xml/Crée une feuille d'un fichier excel xml / WorkBook name ldata<BR>;; retourne le Worksheet<BR><BR>(defun xml_Worksheet (WorkBook name ldata / tmp cdata rdata table Worksheet)<BR> (setq Worksheet (vlax-invoke-method pw-xmldoc 'createElement "Worksheet"))<BR> (setq Worksheet (vlax-invoke-method workbook 'appendChild Worksheet))<BR> ;;créé l'entête<BR> ;;(Worksheet_header Worksheet)<BR> <BR> ;(pw_xml_createTextAttribute Worksheet "xmlns" "urn:schemas-microsoft-com:office:spreadsheet")<BR> ;;(pw_xml_createTextAttribute Worksheet "xmlns:ss" "urn:schemas-microsoft-com:office:spreadsheet")<BR> (pw_xml_createTextAttribute Worksheet "ss:Name" name)<BR> ;;table<BR> (setq table (xml_table Worksheet ldata))<BR> ;;remplissage de la table<BR> (foreach rdata ldata<BR> (setq row (xml_Row table))<BR> (foreach cdata rdata<BR> ( xml_cell row cdata)<BR> )<BR> )<BR> ;;<BR><BR> (setq pw-worksheet Worksheet)<BR><BR>)<BR>;;**************************************************************************<BR>;;§/xml/Crée une table dans une feuille excel xml / Worksheet<BR>;;retourne la table<BR><BR>(defun xml_table (Worksheet ldata / tmp nbraw nbcol yx table)<BR> (setq table (vlax-invoke-method pw-xmldoc 'createElement "Table"))<BR> (vlax-invoke-method Worksheet 'appendChild table)<BR> ;;taille de la table :<BR> (setq yx (pw_taille_liste ldata))<BR> (setq nbraw (car yx) nbcol (cadr yx))<BR> ;;(pw_xml_createTextAttribute Worksheet "xmlns" "urn:schemas-microsoft-com:office:spreadsheet")<BR> ;;ss:ExpandedColumnCount="2"<BR> (pw_xml_createTextAttribute table "ss:ExpandedColumnCount" (itoa nbcol))<BR> ;;ss:ExpandedRowCount="2"<BR> (pw_xml_createTextAttribute table "ss:ExpandedRowCount" (itoa nbraw))<BR> table<BR>)<BR><BR><BR>;;**************************************************************************<BR>;;§/xml/Crée une row dans une feuille excel xml / Worksheet<BR>;;retourne la row<BR><BR>(defun xml_Row (Worksheet / tmp row)<BR> (setq row (vlax-invoke-method pw-xmldoc 'createElement "Row"))<BR> (vlax-invoke-method Worksheet 'appendChild row)<BR> (pw_xml_createTextAttribute row "ss:Height" "12.5")<BR> row<BR>)<BR><BR>;;**************************************************************************<BR>;;§/xml/Crée une cell dans une feuille excel xml / Worksheet<BR>;;retourne la cell<BR><BR>(defun xml_cell (row dataValue / tmp cell data)<BR> (setq cell (vlax-invoke-method pw-xmldoc 'createElement "Cell"))<BR> (vlax-invoke-method row 'appendChild cell)<BR> (setq data (vlax-invoke-method pw-xmldoc 'createElement "Data"))<BR> (vlax-invoke-method cell 'appendChild data)<BR> <BR> (if (numberp dataValue)<BR> <BR> (pw_xml_createTextAttribute data "ss:Type" "Number")<BR> (pw_xml_createTextAttribute data "ss:Type" "String")<BR> )<BR> (setq dataValue (pw_guil_make dataValue))<BR> (vlax-put-property data 'text dataValue)<BR> cell<BR>)<BR><BR><BR><BR>;;**************************************************************************<BR>;;§/xml/Crée un attribut de type text / parent nom textval<BR>;;Un attribut peut être Text ou EntityReference : ne traite que le cas text<BR><BR>(defun pw_xml_createTextAttribute (parent nom textval / att )<BR> (setq att (vlax-invoke-method pw-xmldoc 'createAttribute nom))<BR> (vlax-put-property att 'text textval)<BR> (vlax-invoke-method parent 'setAttributeNode att)<BR>)<BR> Et le fichier modèle xml : <?xml version="1.0" encoding="utf-8"?><BR><?mso-application progid="Excel.Sheet"?><BR><Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"><BR> <Worksheet ss:Name="Feuil1" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"><BR> <Table ss:ExpandedColumnCount="2" ss:ExpandedRowCount="2"><BR> <Row><BR> <Cell><BR> <Data ss:Type="Number">1</Data><BR> </Cell><BR> <Cell><BR> <Data ss:Type="Number">2</Data><BR> </Cell><BR> </Row><BR> <Row><BR> <Cell><BR> <Data ss:Type="String">A</Data><BR> </Cell><BR> <Cell><BR> <Data ss:Type="String">B</Data><BR> </Cell><BR> </Row><BR> </Table><BR> </Worksheet><BR></Workbook><BR>
  24. salut, Autant pour moi, ça date de septembre, je ne me rappelais plus de cette histoire de vl-acad-defun, pourtant j'avais fait des tests avec le même système ... Maintenant, je pense quand même que : retour = AcadExtensions.LispExtensions.ManagedEvalStrLispExpression("(alert "\"ça marche\")") c'est vraiment ce qu'il y a de plus simple pour faire communiquer lisp et .net et je n'ai pas à me soucier de faire un vl-acad-defun pour les milliers de routines dont je dispose. Par contre, je n'ai à peine eu le temps de m'en servir, c'est dommage.
  25. Non non, ton truc marche je pense. Mais à l'usage, le vl-acad-defun est très contraignant, car il t'oblige à n'utiliser que des commandes lisp sans arguments. Ce n'est pas la majorité de mes routines. Ce qui m'interresse dans la liaison net / lisp, c'est de pouvoir utiliser l'interface net avec des fonctions lisp. Avec le vl-acad-defun, ce n'étais pas possible pour moi. Bon courage, 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é