Aller au contenu

String en objet ?


Messages recommandés

Posté(e)

Salut,

 

j'extrais d'Acad (dans une variable USERS1) un string.

 

En vb, je traite ce string afin d'en ressortir des bout de texte

(ex : "tata*toto*tutu*" -> "toto")

 

Mon problème est que mon mot "toto" est référencer dans ma boite de dialogue comme étant une TextBox par exemple...

 

Je voudrais donc piloter ma textbox en passant par mon strin "toto"

par exemple (ça ne fonctionne pas, mais c'est peut-être plus compréhensible) :

 

Dans AutoCAD: (setvar "USERS1" "toto*tata*tutu*")

 

Le code vb avec une boite de dialogue "test" contenant 3 textbox toto, tata, tutu :

 

Private Sub CommandButton1_Click()
Dim text, textT As String

   text = ThisDrawing.GetVariable("users1")
   
   While Len(text) > 0
       ntext = InStr(text, "*")
       [b]textT[/b] = Left(text, (ntext - 1))

       Test.[b]texT[/b].BackColor  = &H80000012
  
       text = Mid(text, (ntext + 1))
   Wend
End Sub

 

... parceque sinon, faire des if, je trouve ça pas terrible...

 

merci d'avance !

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Tu as dit STRING ! tiens vu la saison... je suis resté très SOFT ! il y avait pire !!! ;)

 

http://www.rebcao.fr/cadxp/String.jpg

 

 

voilà, j'ai pas pu m'en empêcher !!! Je sais je suis un méchant moqueur ! Je te laisse le choix des armes...

 

C'est ma CONNERIE du jour...!!!... :P Lilian va encore m'engueuler... :(

 

 

Christian

 

[Edité le 1/7/2008 par rebcao]

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Bonjour à toutes et tous,

 

Lilian va encore m'engueuler...

 

On en a qu'un comme toi, ici alors ça passe,....

Ce forum est comme une classe d'école, on y trouve de tout, jusqu'au petit plaisantin :P

 

Surtout, continue comme ça Christian

 

PS: Tu aurais pu glisser dans ces stings les filles qui vont bien, non ?

 

Re PS: Heu, désolé Bred ;)

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

PS: Tu aurais pu glisser dans ces stings les filles qui vont bien, non ?

 

j'ai pas osé !!! j ' suis trop timide !!! :red: :red: :red: :red: :red: :red: :red:

 

mais je te dis pas si j'avais mis tout ce que j'ai rammassé sur google ! :o

 

CADxp est un site où tenue correcte exigée !!!!!

 

Christian

 

 

[Edité le 8/12/2008 par rebcao]

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

 

Chaude ! mais très bonne ! pas à cause du string... mais la chaleur... et en ALCHACHE, il y a pas la mer mais la bière... ;)

 

Et toi Lilian, toujours en cours ? Bientôt les vacances ?

 

Christian

 

 

PS : en attendant, je suis en train de fouttre en l'air le sujet de BRED !!!!! :( désolé ! :P

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Re,

 

Les résultats des BTS, c'est demain !!!!!

 

Ensuite, fin avec le GRETA le 11 Juillet et "peinard" jusqu'au 25 Aout !

Faut qu'j'bosse la 3D durant les vacances et le MAP 2009, plus la nouvelle config 2009.

J'sais pas si je vais avoir le temps d'attendre tes nouveaux supports de cours,.... ;)

 

désolé !

 

Itout, mais je me doute que tu n'en voudras pas à notre égarement ponctuel (heu, ponctuel c'est pour moi juste !!! :D )

 

@+,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Salut les gars,

En fait, mon post, ben je crois qu'il n'y a pas de solution...

... donc autant profiter de l'espace vide...

 

 

 

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Salut winfield,

merci pour ta suggestion, mais j'avoue que j'ai pas mal avancé sur le truc, et j'ai contourné le problème..

Mais je jetterais un coup deuil sur ta proposition.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

  • 4 mois après...
Posté(e)

Salut Bred,

 

Puisque j'en suis à déterrer tes vieux messages...

 

Il me semble comprendre que tu utilises VB NET pour créer des boites de dialogues utilisées en LISP et que tu te sers des variables USER* pour passer tes arguments au code VB (et peut-être aussi pour pour retourner les résultats.

 

Je te propose une solution plus élégante (et plus rationnelle il me semble).

Depuis ObjectARX 2007, il est possible de définir des fonctions LISP avec .NET de la même manière qu'on définit des commandes (LispFunction au lieu de CommandMethod)

Ceci permet d'utiliser le ResultBuffer pour passer des arguments à la méthode (et aussi pour retourner le résultat si celui-ci doit être une liste).

 

ResultBuffer est une sorte de container pour les données AutoCAD. Une façon pratique pour récupérer les données qu'il contient consiste à le convertir en un array de TypedValue

Chaque TypedValue est un peu l'équivalent d'une paire pointée possède 2 propriétés :

- TypedValue.TypeCode : un entier qui définit le type de donnée. suivant l'utilisation TypeCode peut être différente, voir les énumérations (enum) DxfCode et LispDataType.

- TypedVlaue.Value : la valeur de la donnée.

 

Regarde l'aide ObjectARX > ObjectARX Developer's Guide > Using .NET for AutoCAD Development > ObjectARX Managed Wrapper Classes > Getting Started with Managed Wrappers les rubriques :

- Defining Methods That Can Be Called From AutoLISP

- Using the ResultBuffer Type

 

Tu peux voir ci-dessous, la traduction en VB du code donné ici en C#.

Ce code définit une fonction LISP qui appelle la boite dialogue prédéfinie System.Windows.Forms.OpenFileDialog.

La fonction requiert 2 ou 3 arguments (le troisième est optionnel) et retourne un liste.

Les argument sont extraits du ResultBuffer et une nouvelle instance de ResultBuffer sert à retourner une liste.

PS : la traduction est faite avec reflector plus quelques remplacements de codes hexadécimaux pour le rendre plus lisible :

&H138D par CInt(LispDataType.Text)

&H139D par CInt(LispDataType.Nil)

J'espère ne pas avoir généré d'erreurs.

 

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime
Imports System
Imports System.Windows.Forms

Namespace GetFileLisp
   Public Class Files
       ' Methods
        _
       Public Shared Function GetFileDialog(ByVal buff As ResultBuffer) As ResultBuffer
           Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
           Dim result As New ResultBuffer
           Try 
               If (buff Is Nothing) Then
                   ed.WriteMessage("Erreur: nombre d'arguments insuffisants" & ChrW(10))
                   Return Nothing
               End If
               Dim args As TypedValue() = buff.AsArray
               If (args.Length                     ed.WriteMessage("Erreur: nombre d'arguments insuffisants" & ChrW(10))
                   Return Nothing
               End If
               If (args.Length > 3) Then
                   ed.WriteMessage("Erreur: nombre d'arguments trop important" & ChrW(10))
                   Return Nothing
               End If
               If (args(0).TypeCode  CInt(LispDataType.Text)) Then
                   ed.WriteMessage("Erreur: type d'argument incorrect: stringp {0}" & ChrW(10), New Object() { args(0).Value })
                   Return Nothing
               End If
               If (args(1).TypeCode  CInt(LispDataType.Text)) Then
                   ed.WriteMessage("Erreur: type d'argument incorrect: stringp {0}" & ChrW(10), New Object() { args(1).Value })
                   Return Nothing
               End If
               Dim mult As Boolean = ((args.Length = 3) AndAlso (args(2).TypeCode  CInt(LispDataType.Nil)))
               Dim openDialog As New OpenFileDialog
               openDialog.InitialDirectory = CStr(args(0).Value)
               openDialog.Filter = CStr(args(1).Value)
               openDialog.FilterIndex = 1
               openDialog.Multiselect = mult
               If (openDialog.ShowDialog = DialogResult.OK) Then
                   If mult Then
                       Dim file As String
                       For Each file In openDialog.FileNames
                           result.Add(New TypedValue(CInt(LispDataType.Text), file))
                       Next
                       Return result
                   End If
                   Dim file As String = openDialog.FileName
                   result.Add(New TypedValue(CInt(LispDataType.Text), file))
                   Return result
               End If
               Return Nothing
           Catch ex As Exception
               ed.WriteMessage((ex.Message  & ChrW(10)))
               Return Nothing
           End Try
       End Function

   End Class
End Namespace 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 2 semaines après...
Posté(e)

Salut (gile)

j'ai enfin eu un peu de temps pour jeter un coup d'eil plus approfondie sur ton exemple, et c'est vraiment génial !

ça m'ouvre une multitude de possibilité !!!!

Encore merci !

 

J'ai corrigé quelques bugs de la traduction de ton code ci-dessous car il manquait

- la méhode < LispFunction("Getfiles") > _ , (erreur de bbcode je pense)

- certaines référence importés étais ambigus entre les référence Autodesk et Windows,

- il ne m'acceptais pas en variable "file" (et ça je n'ai pas encore compris pourquoi, le message d'erreur étais "La variable 'file' masque une variable dans un bloc englobant."

 

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime
Imports System
Imports System.Windows.Forms

Namespace GetFileLisp
   Public Class Files
       < LispFunction("Getfiles") > _ 'enlever les espaces
_
       Public Shared Function GetFileDialog(ByVal buff As ResultBuffer) As ResultBuffer
           Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
           Dim result As New ResultBuffer
           Try
               If (buff Is Nothing) Then
                   ed.WriteMessage("Erreur: nombre d'arguments insuffisants" & ChrW(10))
                   Return Nothing
               End If
               Dim args As TypedValue() = buff.AsArray
               If (args.Length < 2) Then
                   ed.WriteMessage("Erreur: nombre d'arguments insuffisants" & ChrW(10))
                   Return Nothing
               End If
               If (args.Length > 3) Then
                   ed.WriteMessage("Erreur: nombre d'arguments trop important" & ChrW(10))
                   Return Nothing
               End If
               If (args(0).TypeCode <> CInt(LispDataType.Text)) Then
                   ed.WriteMessage("Erreur: type d'argument incorrect: stringp {0}" & ChrW(10), New Object() {args(0).Value})
                   Return Nothing
               End If
               If (args(1).TypeCode <> CInt(LispDataType.Text)) Then
                   ed.WriteMessage("Erreur: type d'argument incorrect: stringp {0}" & ChrW(10), New Object() {args(1).Value})
                   Return Nothing
               End If
               Dim mult As Boolean = ((args.Length = 3) AndAlso (args(2).TypeCode <> CInt(LispDataType.Nil)))
               Dim openDialog As New OpenFileDialog
               openDialog.InitialDirectory = CStr(args(0).Value)
               openDialog.Filter = CStr(args(1).Value)
               openDialog.FilterIndex = 1
               openDialog.Multiselect = mult
               If (openDialog.ShowDialog = DialogResult.OK) Then
                   If mult Then
                       Dim files As String
                       For Each files In openDialog.FileNames
                           result.Add(New TypedValue(CInt(LispDataType.Text), files))
                       Next
                       Return result
                   End If
                   Dim file As String = openDialog.FileName
                   result.Add(New TypedValue(CInt(LispDataType.Text), file))
                   Return result
               End If
               Return Nothing
           Catch ex As Autodesk.AutoCAD.Runtime.Exception
               ed.WriteMessage((ex.Message & ChrW(10)))
               Return Nothing
           End Try
       End Function

   End Class
End Namespace

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Salut,

 

Je suis content que ça te rende service.

Désolé pour les fautes, je cause pas VB (je bafouille un tout petit peu de C#).

 

si tu as des questions à propos de l'utilisation du ResultBuffer, n'hésite pas à les poser, j'essayerais d'y répondre, quelques pointures sur TheSwamp m'ont aidé à en comprendre le principe.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é