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 crois avoir compris, mais si tu me donne ta combine pour faire pareil sous excel, je te paye l'apéro ! tu as 3 listes, avec un index commun : '((id1 val1 val10)(id2 val2 val20) ... (n)) '((id0 "ch1" "ch10")(id2 "ch2" "ch20") ... (n)) '((id1 1.0 10.0)(id2 2.0 20.0) ... (n)) tu veux obtenir les listes consolidées, dans le cas du dessus, seulment le id2 est touhjours présent: '((id2 val2 val20 "ch2" "ch20" 2.0 20.0) ... (n)) est-ce que c'est ça ? parceque sous excel, j'y suis arrivé une fois, et puis je ne suis jamais arrivé à le refaire !
  2. Bonjour, aujourd'hui j'utilise une commande de tracé automatisée, vieille de plusieurs années, qui ne marche plus d'un seul coup. Elle marche dans un dessin, et pas dans l'autre. je fait un comparatif des variables système entre les 2 dessins, et la seule différence notable, c'est "target" mais je n'arrive pas tout de suite à faire le lien. j'y reviens, et je m'appercois que le décalage que j'ai entre dans le 'SetWindowToPlot, et la fenêtre de tracé qu'autocad prends en compte , c'est la valeur de target! (car bien sur, vla-getWindowToPlot retourne la même valeur que l'on à utilisé pour vla-SetWindowToPlot: il n'y a qu'en utilisant la commande tracé, définir une fenêtre, que l'on peut voir ce qu'autocad a compris ...) si on fait une recherche sur SetWindowToPlot, on trouve pas mal de sujets anciens ou le type n'arrive pas à faire marcher un lisp qui utilise cette methode, et personne ne comprends ... donc il suffit de retrancher la valeur de target à son SetWindowToPlot pour que tout revienne dans l'ordre ... 6 heures de recherches, j'ai cru devenir dingue ! ;;************************************************************************** ;§/traces/etabli la fenêtre à tracer / Ac-layout lfen ;; (defun set_layout_WindowToPlot ( Ac-layout lfen / LowerLeft UpperRight pb ph dep ) (setq pb (car lfen) ph (cadr lfen)) (setq dep (getvar "target")) (setq dpx (car dep) dpy (cadr dep)) (setq pb (pw_prp pb (- dpx) (- dpy))) (setq ph (pw_prp ph (- dpx) (- dpy))) (setq LowerLeft (vlax-make-safearray vlax-vbDouble '(0 . 1))) (vlax-safearray-fill LowerLeft pb) (setq UpperRight (vlax-make-safearray vlax-vbDouble '(0 . 1))) (vlax-safearray-fill UpperRight ph) (vla-SetWindowToPlot Ac-layout LowerLeft UpperRight) ;(vla-getWindowToPlot Ac-layout 'LowerLeft 'UpperRight) ;vlax-safearray-fill ;vlax-safearray-put-element )
  3. GEGEMATIC

    placement cellule en 2 pts

    Salut, Assez rigolo qu'un aussi bon logiciel comme Microstation, traine toujours les même petits défauts qui lui on couté si cher ! Pour le côté vintage, cette routine date de 1998 (Microstation SE) Cette histoire de rotation des blocs nous avais beaucoup emmerdé à l'époque ... En tout cas, tous les bureau d'étude de plus de 10 personne, travailiant sous Autocad, dervrait avoir une licence Ustation : Seul Ustation est capable de réparer les erreurs générées par autocad sur ses propres fichiers ... ' Insere la cellule en mode relatif "cellname" à l'échelle "xscel" et "yscale" ' et à l'angle de rotation "aro" Sub main Dim startPoint As MbePoint Dim point As MbePoint, point2 As MbePoint Dim status% Dim view% Dim numArgs As Integer Dim cellname As String Dim xscale As String Dim yscale As String Dim aro As String ' save the command line arguments to a local variable cmd$ = Command$ ' save the number of arguments in a local variable numArgs = WordCount(cmd$) ' parse the command line arguments and output each individual argument in turn cellname = Word$ (cmd$, 1) xscale = Word$ (cmd$, 2) yscale = Word$ (cmd$, 3) aro = Word$ (cmd$, 4) 'début de la boucle Do 'lance la commande MbeSendKeyin "place cell interactive relative" 'envoi le nom de la cellule MbeSetAppVariable "", "tcb->activecell", cellname ' Wait for a data point or a reset MbeGetInput MBE_DataPointInput, MBE_ResetInput ' if a reset was entered, exit the loop if MbeState.inputType = MBE_ResetInput then Exit Do ' Extract the data point coordinates and view status = MbeState.getInputDataPoint (startPoint,view) ' Send a data point to the current command MbeSendDataPoint startPoint, view 'envoi l'echelle x MbeSendKeyin xscale 'pareil pour y MbeSendKeyin yscale 'et l'angle de rotation MbeSendKeyin aro MbeSendReset Loop End Sub
  4. Salut Gile, Le lins que tu as fournis sur acadLabs ne marche pas, tu peux le réactiver ? (A 2011 x64) merci
  5. Salut Giles, je sort d'un long tunnel ,et je vois que les sujets avance, sans qu'on ai besoin de travailler : le bonheur ! Je n'ai malheureusement pas eu le temps de poursuivre mes investigation en .Net, je vais être obligé de repartir à zéro. pour le VAST promis, c'est pour quand ? A+ Gégé
  6. Salut à tous, Je poursuit ici une conversation initiée dans feu le newsgroup NNTP d'Autodesk, quitte à poster en html, autant que ce soit ici .... Le constat est que la publication PDF d'Autocad ne garde pas les hyperliens, alors que la publication DWFx (compatible XPS) les garde. Mais le Dwf, comme format, c'est pas des plus standards. En fait, les imprimantes PDF n'exportent pas les liens internes aux entité, mais sont capable de reconnaitre les textes représentant des Hyperlien. Pour que ça marche, il faut : 1 : Que votre texte soit une police True Type 2 : Que dans les parametres de votre imprimante PDF, sous Graphique, Texte true Type, la case à cocher doit être "texte true type" A partir de là, Acrobat reader reconnait vos hyperliens, mais seulement si ce sont des URL : pour le liens vers des fichier locaux, ça ne marchera pas Pour aller plus loin : Pour pouvoir faire des liens vers des fichier locaux, il faut utiliser la version trial de Pdf995, ou pdffactory : si votre lien est ./photos/maPhoto.jpg transformez en www.bidon/photos/maPhoto.jpg Imprimez avec pdf995 avec pdfedit, transformez vos URL en Hyperliens (menu links) A partir de ce moment, les liens sont en clair dans le fichier pdf : Ouvrez le pdf avec un editeur de texte, remplacez www.bidon par . enregistrez et le tour est joué ! Pour vous aider à convertir vos hyperliens existant en texte : ;*********************************************************************** ;;§/hyperliens/retourne tous les hyper-lien sur un objet/ ename ; (defun retourne_hyperliens ( ename / vlaobj vlahyp id nb i lurl) (setq vlaobj (vlax-ename->vla-object ename)) (setq vlahyp (vlax-get-property vlaobj 'Hyperlinks)) (setq nb (vlax-get-property vlahyp 'Count)); compte le nombre d'hyperliens ;;parcours les hyperliens pour les supprimer (setq i 0) (while (< i nb) (setq lurl (cons (vla-get-url (vlax-invoke-method vlahyp 'Item i )) lurl)) ;(vlax-invoke-method id 'Delete ) (setq i (+ 1 i)) ) (reverse lurl) ) ; **************************************************************************** ;;§/plugg/ convertir l'Hyperlien en texte d'hyperliens/none ; Utile pour l'export d'hyperliens lors de la publication PDF ; ;(pw_pluggin_register '( "Extract_hyperlink2text" ( "*" )("Créer un texte True Type contenant le ;texte original du lien" ))) (defun Extract_hyperlink2text () (setq ht (getreal "\nHauteur de texte ?")) (setq sel (ssget "_p")) (setq n (sslength sel) i 0 ) (while (< i n) (setq l (ssname sel i)) (setq i (+ 1 i)) (setq eg (entget l)) (setq tlink (retourne_hyperliens l)) (setq pt (cdr (assoc 10 eg))) (command "_text" pt ht 0.0 (car tlink)) ) )
  7. Map n'a aucun outil pour traiter par lot les données d'objet dans le dessin courant, à part la programmation Pour faire ce que tu souhaite, sans programer, il faut que tu ouvre un dessin vierge Dans ce dessin, tu associe et active le dessin que tu veux tester tu fait un requête sur la valeur de DO que tu veux filtrer, en mode dessiner, avec transforamtion, par exemple colorier en jaune tu enregistre vers le desin source, tu ferme ton dessin vierge, et tu rouvre celui qui contient les entités, et tu verra les entités filtrée en jaune. Plus merdique, tu meurt, mais c'est comme ça.
  8. Salut, est-ce que tell aura un module tuyauterie wmc ?
  9. GEGEMATIC

    choix de carte graphique

    Avant d'avoir une carte quadro, je croyais que les pb d'affichage venait des cartes gammer que j'utilisais : en effet, il n'y a pas de pilote certifié pour les cartes gammer. Et bien c'est du pipo: en 2 ans, un seul pilote nvidia certifié/recommandé par Autodesk s'est avéré correct en affichage 3d: (le problème le plus courant, c'est le non alignement des grips, arrêtes et surfaces lors de l'affichage réaliste de faces 3d) Et le temps de bascule entre un affichage 2d et 3d est de plus en plus rébarbatif. Je ne comprends pas : sous la 2002, je n'avais aucun problème d'affichage Open/GL : c'était fluide et précis. le problème est venu avec la 2006, et quelque soit les config matérielles. Conclusion, je ne suis même pas sur que les cartes pro soient + fiables, ou qu'elles aient de meilleurs pilotes : Ce que je sais, c'est qu'elle sont beaucoup plus chères !
  10. GEGEMATIC

    AUTOCAD MEP OU REVIT MEP?

    Salut, J'étais décidé pour Autocad Mep, mais quand j'ai vu Revit Mep, j'ai compris que faire de la 3d avec Autocad, ça demandait trop de patience ... ou alors une machine qui n'est pas encore sortie ... Alors Revit ! Mais là d'un coup, je me rends compte que je peux bien passer d'Autocad à n'importe quoi : Vu que j'utilise pas les Ribbon, (le seul truc commun aux 2 produits), passer d'Autocad à Revit, c'est pareil que passer d'Autocad à Inventor, ou à Solid Works : Il faut tout oublier. Donc ça ouvre des tas de possibilités, et maintenant je ne sais plus.
  11. Bonjour, et merci de ces eclaircicements Donc ça confirme que c'est d'une utilité assez restreinte ... Je crois bien que c'est cette fonctionnalité que je recherche depuis bien longtemps ! J'ai beau avoir souvent fait les tutoriaux, lu l'aide, je suis passé à coté. Il faut que je teste ça pour comprendre si c'est bien ce que je cherche Moi sous vista 64, je n'avais même pas la possibilité de connecter en ODBC : le choix n'apparaissait pas dans les connexions possibles Il a fallu que je fasse une manip pour cionfigurer les ODBC en 32 bits. à partir de là, je les avait comme choix possible, mais aucun n'a abouti a une connexion. Pour l'instant, je fais donc mes tests sur une portable en 32 bits, pour ne pas ajouter une couche de pb ... Je potasse tout ça et je te tiens au courant ... merci
  12. Salut, merci de la réponse Donc en fait, on fait le lien avec un texte ou un bloc, et ensuite Map crée un lien topologique entre l'entité englobée (texte ou bloc) et englobante : c'est ça ? Autodesk n'a rien trouvé de plus simple ? dans mon cas, j'ai bien un fichier mdb avec un identifiant unique, et le meme identifiant dans un champs de données, dans chaque entité polyligne. Je pensais que le lien serait facile à faire, mais je n'ai rien trouvé. (bon je cumule les handicaps, avec une version x64, les liens de base de données, c'est pas très clair ...) Gégé
  13. Merci des infos, je suis bien couillon, puisque ce resultbuffer était déjà utilisé dans le code des fonction d'échange Lisp/.net qu'on a vu la semaine dernière. Gégé
  14. Fabcad, Merci de ta réponse, Une fois de plus, les fonctionnalités bâclées de Map me consternent ... J'ai également remis le nez dans la connexion à une base de donnée. tester les possibilités de map, c'est un sport que je pratique tous les 3 4 ans, souvent je suis déçu car le boulot n'est pas finit, et il manque un petit qq chose pour etre exploitable. 3 ans plus tard, on ne se souvient pas de ce qu'on à testé. Donc j'ai regardé les tuto de liaison a des BD, et j'ai été étonné de ne trouver, dans le gabarit de lien, que des liaisons avec de textes et des bloc : On ne peut pas lier un BD avec une polyligne, un polygone ? Sinon, il y a ADOLISP, mais je ne suis jamais arrivé à le faire marcher avec Excel. Il faut avoir le temps de faire des tests, et surtouit de les finir ... Gégé
  15. Bonjour, J'ai des données cartographiques structurées avec des données d'objet. Aujourd'hui, autocad permet d'importer des calque du dessin courant dans le gestionnaire d'affichage du volet tache. Mais pour ces calques, l'icone table reste grisée. pour pouvoir utiliser l'outil table, il faut que j'exporte au format sdf, puis que j'importe (connect + ajout) dans un dessin vierge. Ne peut on pas utiliser l'editeur de table dans le dessin source ? ca ne marche pas non plus en liant un dwg : C'est normal ? Merci
  16. Tout est sur false. mais bon, je fait surtout des tests à l'aveugle, sans connaitre les bases théoriques, il faut que je me trouve un bouquin sérieux, pour arrêter de perdre du temps par tâtonnement. pas de la littérature, mais des discussions en français sur code source, develloppez, tiens une qui parle de ce pb http:// http://www.developpez.net/forums/d475455/dotnet/csharp/windows-forms/folderbrowserdialog-repertoire-initiale/
  17. pour le as string, je l'avais oublié, mais ça ne marche pas mieux. mais j'ai déjà eu des pb semblables de commandMethod ou lisp function pas reconnus, qui le sont miraculeusement après sans que je sache pourquoi ... par contre, d'après la littérature, SelectedPath peut être initialisée, mais il faut que le chemin initial soit compatible avec le RootFolder . pour celà, il est conseillé d'utiliser : Environment.SpecialFolder.MyComputer je dis ça, je ne suis pas arrivé à le tester puisque ma commande n'est pas reconnue ...
  18. Salut, Il existe également une propriété SelectedPath : co joint un exemple que je ne suis pas arrivé à faire marcher, mais qui se compile (la function lisp n'est pas reconnue par Autocad) Imports System.Windows.Forms Module module3 ' First create a FolderBrowserDialog object Dim FolderBrowserDialog1 As New FolderBrowserDialog _ Public Function SelectFolder(ByVal Msg As String, ByVal Folder As String, ByVal Create As Boolean) Dim DirectoryBrowser As System.Windows.Forms.FolderBrowserDialog Dim SelFolder As String DirectoryBrowser = New System.Windows.Forms.FolderBrowserDialog ' Desktop is the root folder in the dialog. DirectoryBrowser.RootFolder = Environment.SpecialFolder.Desktop 'DirectoryBrowser.Description = "Which directory do you want to use?" DirectoryBrowser.Description = Msg ' DirectoryBrowser.SelectedPath = Folder If (DirectoryBrowser.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then 'Console.WriteLine(DirectoryBrowser.SelectedPath) SelFolder = DirectoryBrowser.SelectedPath Else SelFolder = Folder End If Return SelFolder End Function End Module
  19. salut Gile, et merci pour le boulot, pourquoi gc-GetFolderDlg n'a pas d'argument "defolder" alors que gc-GetFileDlg en a un ? ou au moins, stocker le dernier répertoire dans une variable statique ... Sinon c'est vrais que ça comblerait un manque ... Gégé
  20. Super, mais j'ai essayé de voir ce que tu avais changé, et de compiler ce code, mais il semble que ce ne soit pas le code original que tu as compilé : si je faits un copié collé, je retrouve les erreurs que j'avais péniblement corrigés : peut tu m'envoyer le code source original, (et peut être à minima) que je puisse le tester ? Je ne sais pas si l'autre solution est mieux : j'aime mieux une solution qui marche sur plusieurs versions, plusieurs plateformes, comme le lisp ! merci d'avance ! PS : le formatage code de ce site est chiaznt, avec l'ajout d'interligne : ça peu pas être corrigé ? Gégé
  21. en addition, le mail d'Alexander, qui précise certaines choses :
  22. Pour ce qui était du bug que j'avais, Alexander m'a expliqué, ça vient de A64 donc pour A64, EntryPoint = "?acedEvaluateLisp@@YAHPEB_WAEAPEAUresbuf@@@Z")] ça a été assez pénible de faire un dumpbin sous v64, mais c'est assez intéressant... on découvre le ventre d'autocad ... En tout cas, une barrière est levée : on peu évaluer silencieusement du lisp depuis .Net. même si .net n'est pas capable de lire directement le résultat, dès l'instant ou les variables lisp sont correctement remplies, ça marche : ci joint une suite d'exemples : Commande: CSharpToLisp Enter lisp expression: (setq z '( 1 2 3 4)) (1 2 3 4) ----------------------------- Int16 -> 1 ----------------------------- Commande: CSharpToLisp Enter lisp expression: z ----------------------------- Int16 -> 1 ----------------------------- Int16 -> 2 ----------------------------- Int16 -> 3 ----------------------------- Int16 -> 4 ----------------------------- Commande: (setq z (list 1 2 3 4)) (1 2 3 4) Commande: CSharpToLisp Enter lisp expression: z ----------------------------- Int16 -> 1 ----------------------------- Int16 -> 2 ----------------------------- Int16 -> 3 ----------------------------- Int16 -> 4 ----------------------------- Commande: CSharpToLisp Enter lisp expression: (setq z "String") "String" ----------------------------- Nil -> nil ----------------------------- Commande: CSharpToLisp Enter lisp expression: z ----------------------------- Text -> String ----------------------------- Commande: CSharpToLisp Enter lisp expression: (setq z '( 1 2 3 )) (1 2 3) ----------------------------- Nil -> nil ----------------------------- Commande: CSharpToLisp Enter lisp expression: z ----------------------------- Point3d -> (1,2,3) ----------------------------- Commande: !z (1 2 3) Commande: CSharpToLisp Enter lisp expression: (setq z '( 1 2 3 4)) (1 2 3 4) ----------------------------- Int16 -> 1 ----------------------------- Commande: !z (1 2 3 4)
  23. au fait, comment ça se fait que ça marche chez toi avec AutoCAD App, alors que j'ai déclaré AcadApp ? tu as un déclaration générale de AutoCAD App dans un module ? la vraie difficulté avec .Net, c'est d'avoir un projet tamplate qui marche : tous ceux que j'ai trouvé sont incomplets. par exemple, je n'arrive pas à savoir quand on est obligé de charger manuellement une référence, et quand ça se fait tout seul ... c'est vraiment les écueils de .net Gégé
  24. salut, Bizare, que ça marche pas complètement ... incroyable qu'on arrive pas à faire en .Net ce qu'on faisait en VBA avec la class VLAX. as tu testé l'adaptation de VLAX en c# que j'ai postée ? mon pb avec .Net, ce que je n'ai pas encore compris les méthodes de debogage, donc je n'arrive pas à comprendre ce qui ne marche pas gégé
  25. ça y est, j'ai trouvé un truc qui marche, en C# : Il reste un message d'erreur après l'évaluation, j'espère que j'arriverais à le comprendre ... mais bon, on peu appeller un lisp sans sendcommand, c'est déjà pas mal ... // // Only for AutoCAD 2007+ // This class is using undocumented function acedEvaluateLisp // using System; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.EditorInput; using System.Runtime.InteropServices; using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application; [assembly: CommandClass(typeof(Rivilis.CSharpToLisp))] namespace Rivilis { public class CSharpToLisp { // // From adscodes.h : // // Type of resbuf element const int RTNONE = 5000; /* No result */ const int RTREAL = 5001; /* Real number */ const int RTPOINT = 5002; /* 2D point X and Y only */ const int RTSHORT = 5003; /* Short integer */ const int RTANG = 5004; /* Angle */ const int RTSTR = 5005; /* String */ const int RTENAME = 5006; /* Entity name */ const int RTPICKS = 5007; /* Pick set */ const int RTORINT = 5008; /* Orientation */ const int RT3DPOINT = 5009; /* 3D point - X, Y, and Z */ const int RTLONG = 5010; /* Long integer */ const int RTVOID = 5014; /* Blank symbol */ const int RTLB = 5016; /* list begin */ const int RTLE = 5017; /* list end */ const int RTDOTE = 5018; /* dotted pair */ const int RTNIL = 5019; /* nil */ const int RTDXF0 = 5020; /* DXF code 0 for ads_buildlist only */ const int RTT = 5021; /* T atom */ const int RTRESBUF = 5023; /* resbuf */ [system.Security.SuppressUnmanagedCodeSecurity] [DllImport("acad.exe", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl, EntryPoint = "?acedEvaluateLisp@@YAHPB_WAAPAUresbuf@@@Z")] extern private static int acedEvaluateLisp(string lispLine, out IntPtr result); static public ResultBuffer AcadEvalLisp(string arg) { IntPtr rb = IntPtr.Zero; acedEvaluateLisp(arg, out rb); if (rb != IntPtr.Zero) { try { ResultBuffer rbb = DisposableWrapper.Create(typeof(ResultBuffer), rb, true) as ResultBuffer; return rbb; } catch { return null; } } return null; } static void PrintResbuf(ResultBuffer rb) { string s = "\n-----------------------------"; foreach (TypedValue val in rb) s += string.Format("\n{0} -> {1}", val.TypeCode, val.Value.ToString()); s += "\n-----------------------------"; AcadApp.DocumentManager.MdiActiveDocument. Editor.WriteMessage(s); } // Define Command "CSharpToLisp" // Only for testing we can define this function. // // Example: // Command: CSharpToLisp // Enter lisp expression: (+ 100 50 30 20 10) // ----------------------------- // 5003 -> 210 // ----------------------------- [CommandMethod("CSharpToLisp")] static public void test() { PromptResult rs = AcadApp.DocumentManager.MdiActiveDocument.Editor.GetString("\nEnter lisp expression: "); if (rs.Status == PromptStatus.OK && rs.StringResult != "") { ResultBuffer rb = AcadEvalLisp(rs.StringResult); if (rb != null) { PrintResbuf(rb); } else { AcadApp.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nError in evaluation"); } } } } }
×
×
  • 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é