Aller au contenu

VB -> ArgumentS Lisp ...


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

Bonjour,

 

En VBA ce module de class permet de passer des paramètres entre le lisp et le VBA :

AutoCAD 2006 --> VL.Application.16

Une 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 Object

Private 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 à 5

Exemple avec la fonction open qui nécessite un paramètre non transmissible directement

en lisp ou script

 

Option Explicit

 

Function vbopen(ParamFile As Variant)

ThisDrawing.Application.Documents.Open ParamFile

End 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 If

End 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")

Posté(e)

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

Posté(e)

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 le

debuggage ce passe.

 

Le VBA et le lisp étant asynchrones, il faut prévoir les commandes automatiques

d'autoCAD, qui démarrent sans prévenir et qui viennent pertuber les beaux

programmes mis au point en phase stable. a l'usage, pour des applications

professionnelles, en vb, j'essaye de faire le maximun de test, mais parfois

2 ans aprés, il rest e des buggs particuliers, version d'autoCAD, environnemnt

différent etc...

 

Mais j'aimerias bien avoir l'avis d'autres utilisateurs ?

 

Daniel OLIVES

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é