Bred Posté(e) le 30 juillet 2006 Posté(e) le 30 juillet 2006 Salut ...Je me met au VB .... quoi .... je veux juste en fait créer des boites de dialogues pour mes lisps.... et j'ai DEJA besoin de votre aide !!!!J'ai compris comment entrer UN argument d'un programme lisp dans mon code VB : ThisDrawing.SendCommand "(mon_lisp " & Argument1.Text & ")" & vbCr ... mais je n'arrive pas à en entrer plusieurs....du genre : ThisDrawing.SendCommand "(mon_lisp " & Argument1.Text & Argument2.Text & Argument3.Text & Argument4.Text & Argument5.Text & Argument6.Text & ")" & vbCr ... marche pas ... ... merci de votre aide ... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Patrick_35 Posté(e) le 30 juillet 2006 Posté(e) le 30 juillet 2006 SalutPour les boites de dialogue, tu as essayé le DCL ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 30 juillet 2006 Auteur Posté(e) le 30 juillet 2006 Non, mais il y a une bonne raison : j'ai un collègue qui fait de gros developpement en VB sur Excel, et on a mis certaines chose en parrallèle avec Autocad. Après quelques dicussion avec lui, on a décidé de partir sur un fonctionnement VBA/Lisp afin de rester cohérent pour l'ensemble ... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Patrick_35 Posté(e) le 30 juillet 2006 Posté(e) le 30 juillet 2006 Je pense que ce sujet et celui-ci vont t'interesser @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 31 juillet 2006 Auteur Posté(e) le 31 juillet 2006 merci Patrick_35, l' ObjectDCL : j'utilise un programme en objectdcl pour la gestion de ma bibliothèque .... et alle ne fonctionne plus sur la 2007.... je sais que Tramber parle dans un post récent de sa mise à jour éventuelle, mais pour l'instant ... concernant les post que tu me proposes, je les avait trouvé mais ils ne répondent pas vraiment à ma question .... sauf le post d'Afralisp, mais j'avoue avoir du mal avec l'anglais... mais je vais plus m'y pencher .... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
tyrese69_ Posté(e) le 31 juillet 2006 Posté(e) le 31 juillet 2006 Bonjour, En VBA ce module de class permet de passer des paramètres entre le lisp et le VBA :AutoCAD 2006 --> VL.Application.16Une recherche sur le forum US VBA d'Autodesk donnera quelques exemples d'utisation. le passage de paramètres entre le lisp et le VBA ce fait de facons asynchrone, il faut donc être prudent !Le VBA permet le contrôle de fin de routine lisp !Le module de class ci aprés permet de lire des variables définies dans une routine lisp ! Daniel OLIVES ' VLAX.CLS v1.4 (Last updated 8/27/2001)' Copyright 1999-2001 by Frank Oquendo'' Permission to use, copy, modify, and distribute this software' for any purpose and without fee is hereby granted, provided' that the above copyright notice appears in all copies and' that both that copyright notice and the limited warranty and' restricted rights notice below appear in all supporting' documentation.'' FRANK OQUENDO (THE AUTHOR) PROVIDES THIS PROGRAM "AS IS" AND WITH' ALL FAULTS. THE AUTHOR SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY' OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. THE AUTHOR' DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE' UNINTERRUPTED OR ERROR FREE.'' Use, duplication, or disclosure by the U.S. Government is subject to' restrictions set forth in FAR 52.227-19 (Commercial Computer' Software - Restricted Rights) and DFAR 252.227-7013©(1)(ii)' (Rights in Technical Data and Computer Software), as applicable.'' VLAX.cls allows developers to evaluate AutoLISP expressions from' Visual Basic or VBA'' Notes:' All code for this class module is publicly available througout various posts' at news://discussion.autodesk.com/autodesk.autocad.customization.vba. I do not' claim copyright or authorship on code presented in these posts, only on this' compilation of that code. In addition, a great big "Thank you!" to Cyrille Fauvel' demonstrating the use of the VisualLISP ActiveX Module.'' Dependencies:' Use of this class module requires the following application:' 1. VisualLISP Private VL As ObjectPrivate VLF As Object Private Sub Class_Initialize() Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.16") Set VLF = VL.ActiveDocument.Functions End Sub Private Sub Class_Terminate() Set VLF = Nothing Set VL = Nothing End Sub Public Function EvalLispExpression(lispStatement As String) Dim sym As Object, RET As Object, retVal Set sym = VLF.Item("read").funcall(lispStatement) On Error Resume Next retVal = VLF.Item("eval").funcall(sym) If Err Then EvalLispExpression = "" Else EvalLispExpression = retVal End If End Function Public Sub SetLispSymbol(symbolName As String, value) Dim sym As Object, RET, symValue symValue = value Set sym = VLF.Item("read").funcall(symbolName) RET = VLF.Item("set").funcall(sym, symValue) EvalLispExpression "(defun translate-variant (data) (cond ((= (type data) 'list) (mapcar 'translate-variant data)) ((= (type data) 'variant) (translate-variant (vlax-variant-value data))) ((= (type data) 'safearray) (mapcar 'translate-variant (vlax-safearray->list data))) (t data)))" EvalLispExpression "(setq " & symbolName & "(translate-variant " & symbolName & "))" EvalLispExpression "(setq translate-variant nil)" End Sub Public Function GetLispSymbol(symbolName As String) Dim sym As Object, RET, symValue symValue = value Set sym = VLF.Item("read").funcall(symbolName) GetLispSymbol = VLF.Item("eval").funcall(sym) End Function Public Function GetLispList(symbolName As String) As Variant Dim sym As Object, list As Object Dim Count, elements(), i As Long Set sym = VLF.Item("read").funcall(symbolName) Set list = VLF.Item("eval").funcall(sym) Count = VLF.Item("length").funcall(list) ReDim elements(0 To Count - 1) As Variant For i = 0 To Count - 1 elements(i) = VLF.Item("nth").funcall(i, list) Next GetLispList = elements End Function Public Sub NullifySymbol(ParamArray symbolName()) Dim i As Integer For i = LBound(symbolName) To UBound(symbolName) EvalLispExpression "(setq " & CStr(symbolName(i)) & " nil)" Next End Sub Ou passage de paramètres par les variables users1 à 5Exemple avec la fonction open qui nécessite un paramètre non transmissible directementen lisp ou script Option Explicit Function vbopen(ParamFile As Variant) ThisDrawing.Application.Documents.Open ParamFileEnd Function' Sub vbsubopen() ' Sous routine de lancement de la function avec paramètre Dim VarUsers1 As Variant VarUsers1 = ThisDrawing.GetVariable("users1") If VarUsers1 <> "" Then vbopen VarUsers1 End IfEnd Sub Dans un script ou sur la ligne de commande pour essai(command "filedia" "0")(command "users1" "Chemin+nomdufichier")(command "_-vbarun" "C:/Essai.dvb!Mod_cmdopen.vbsubopen")(command "filedia" "1")
Bred Posté(e) le 31 juillet 2006 Auteur Posté(e) le 31 juillet 2006 :D Bon, alors, la solution est "tout simplement" : ThisDrawing.SendCommand "(mon_lisp " & argument1.Text & " " & argument1.Text & " " & argument2.Text & " " & argument3.Text & " " & argument4.Textt & " " & argument5.Text & ")" & vbCr ... une petite astuce : si l'un ou les arguments sont des chiffres à virgule, le VBA à l'air de fonctionner avec un virgule en séparateur décimal, donc juste avant l'entrée des arguments il faut rajouter : argument1 = Replace(argument1, ",", ".") argument2 = Replace(argument2, ",", ".") etc.... ... merci en tous les cas pour votre aide ... -----------------------------------------------------------------[surligneur]j'édite : [/surligneur] merci tyrese69_ .... nos réponse se sont croisés... Mais au vu des réponses qui m'ont été faites, je crois qu'il y a eu mauvaise compréhension de ma question : je ne cherche pas à récupérer des données LISP (variables) pour les envoyer dans le VBA, mais le contraire !!!... merci. [Edité le 31/7/2006 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
tyrese69_ Posté(e) le 31 juillet 2006 Posté(e) le 31 juillet 2006 bonsoir, En stage de programmation VBA avancée, il m'a été fortement déconseilléd'utiliser les "send.Command", il est vrai que plus on s'en passe et mieux ledebuggage ce passe. Le VBA et le lisp étant asynchrones, il faut prévoir les commandes automatiquesd'autoCAD, qui démarrent sans prévenir et qui viennent pertuber les beauxprogrammes mis au point en phase stable. a l'usage, pour des applicationsprofessionnelles, en vb, j'essaye de faire le maximun de test, mais parfois2 ans aprés, il rest e des buggs particuliers, version d'autoCAD, environnemntdifférent etc... Mais j'aimerias bien avoir l'avis d'autres utilisateurs ? Daniel OLIVES
Bred Posté(e) le 31 juillet 2006 Auteur Posté(e) le 31 juillet 2006 Merci de tes conseils,mais vu que je utilise le VBA exclusivement pour créér des boites de dialogues pour mes lisps, je n'utilise en fait qu'une fois "send.Command", c'est au moment de lancer le lisp: tous les calculs et étapes de programation sont du lisp : la boite de dialogue VBA ne sert qu'à collecter les données d'entrées... mais si j'ai des bugs dans ce cas là, je vous tiendrais au courant, à moins que certains l'ai déjà vécu... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant