Programmation sous V7

Tous sujets concernant le développement spécifique de TopSolid avec l'interface COM, le langage LIP, la programmation de l'API en VB...

Modérateurs : remi77, D@vid, Alexis GERARD

Répondre
steve1991
Caporal
Caporal
Messages : 26
Enregistré le : 18 mars 2014, 15:07
Version TopSolid : 6.24
Module TopSolid : TopSolid'Design

Programmation sous V7

Message non lu par steve1991 »

Bonjour,

Je cherche a automatiser certaines manipulations et n étant pas programmeur de métier je aimerais savoir si des exemples de programmes en C ou VB sont disponibles pour TS V7?

Le but de mes réalisations seraient principalement de la recherche de fichier, copie, export et remplir des excel.

Je ne sais pas trop le niveau de connaissances nécessaire pour réaliser de tels applications donc si qqu a plus d informations je suis preneur!

PS: j ai déjà réaliser des petits programme en C pour faire fonctionner des robots et des programmes en VBA pour comparer des fichiers Excel, est-il nécessaire d avoir des connaissances bien plus importantes en programmation pour se lancer avec TS?

Merci d avance,
Steve
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Programmation sous V7

Message non lu par JuP »

Bonjour Steve,

Je peux t'en parler j'ai fait le pas il n'y a pas si longtemps que ça ! Donc en langage tu as deux choix : VB.NET ou C#.
Tu as une documentation dans l'aide (Point d'interrogation --> Automation)(il faut peut être ajouter l'argument -a dans le raccourcie), il y a quelques trucs à connaitre sur les connexions au pdm et à TopSolid sinon le reste c'est assez conventionnel.

Si des méthodes manquent dans Automation, tu peux faire des demandes d'évolutions. Si elles sont acceptées il n'y a pas besoin d'attendre la version d'après, généralement elles sont glissées dans des services pack

Et enfin, Missler dispensent des formations à Automation.

Bonne programmation :-)
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Programmation sous V7

Message non lu par JuP »

Voila quelques procédures de dialogue avec TopSolid. J'ai tout encapsulé dans un module sous forme de fonctions que j'appelle au besoin :

Code : Tout sélectionner

Module ProcéduresTS

    Public docId As DocumentId

    Public Function Connection2TS() 'Connection à TopSolid
        TopSolidHost.Connect()  'Connection à TopSolid
        TopSolidDesignHost.Connect()    'Connection à TopSolid
        docId = TopSolidHost.Documents.EditedDocument     'Récupération ID document
        Dim TSConnected As Boolean = TopSolidDesignHost.IsConnected
        If TSConnected = False Then MsgBox("Non connecté")

        Return docId
    End Function
    Public Sub Deconnection2TS()   'Deconnection à TopSolid
        TopSolidDesignHost.Disconnect()
        TopSolidHost.Disconnect()
        Dim TSConnected As Boolean = TopSolidDesignHost.IsConnected
        If TSConnected = True Then MsgBox("Déconnection Impossible")
    End Sub
    Public Function StartModification(ByRef DocId As DocumentId, ByVal ModificationName As String, ByVal ActivRollBack As Boolean) 'StartModification + EnsureIsDirty
        TopSolidHost.Application.StartModification(ModificationName, ActivRollBack)
        TopSolidHost.Documents.EnsureIsDirty(DocId)

        Return (DocId)
    End Function

    Public Sub EndModification(ByVal Alert As Boolean, ByRef Save As Boolean)
        TopSolidHost.Application.EndModification(Alert, Save)
    End Sub

End Module
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Programmation sous V7

Message non lu par JuP »

Voila un exemple qui fait du copier / coller de paramètres:

Code : Tout sélectionner

Public Class Accueil
    Public DocId As DocumentId
    Public ObjectId As PdmObjectId
    Public DocName As String
    Public ObjectType As String = ""
    Public ListOfParametersID As New List(Of ElementId) 'Liste de tous les paramètres hors paramètres systèmes
    Public ListOfCheckedParameters As New List(Of Parameter) 'Liste de tous les paramètres coché hors paramètres systèmes


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Connection à TS  +  récupération du DocumentId
        DocId = Connection2TS()
        DocId = StartModification(DocId, "Copie paramètres" + Name, False)


        Try
            'Récupération le l'ObjectId du document
            ObjectId = TopSolidHost.Documents.GetPdmObject(DocId)

            'Récupération du nom du document
            DocName = TopSolidHost.Documents.GetName(DocId)
            TextBoxDocumentName.Text = DocName

            'Récupération du type de document
            TopSolidHost.Pdm.GetType(ObjectId, ObjectType)


            'Vérification du type de document
            VerificationDocumentType(ObjectType)

            'Vérification si le document est une dérivation
            Dim test As Boolean = TopSolidDesignHost.Parts.IsDerivedPart(DocId)
            If test Then
                MsgBox("La pièce est une dérivation")
                'EndModification(False, False)
                'Exit Sub
            End If

            'Analyse des paramètres existants
            Dim ListOfExistingParametersId As List(Of ElementId) 'Liste de tous les paramètres du document
            ListOfExistingParametersId = TopSolidHost.Parameters.GetParameters(DocId) 'Récupération de tous les paramètres


            For Each ParameterId In ListOfExistingParametersId
                Dim ParameterName As String = TopSolidHost.Elements.GetName(ParameterId)
                Dim ParameterType As String = TopSolidHost.Parameters.GetParameterType(ParameterId)
                If ParameterName.Contains("$") Then
                Else
                    Dim ParameterFriendlyName As String = TopSolidHost.Elements.GetFriendlyName(ParameterId)
                    CheckedListBoxExistingParameters.Items.Add(ParameterFriendlyName) 'Implémentation de la CheckListBox
                    ListOfParametersID.Add(ParameterId) 'Stockage de l'ID du paramètre
                End If
            Next
            EndModification(True, True)
        Catch ex As Exception
            EndModification(False, False)
            MsgBox("Erreur lors de l'exécution du programme")
        End Try
    End Sub
    Private Sub VerificationDocumentType(ByVal ObjectType As String)
        Select Case ObjectType
            Case ".TopPrt"

            Case ".TopAsm"

            Case Else
                MsgBox("Le document n'est ni une Pièce ni Assemblage, Merci d'ouvrir un document valide et de relancer la fonction")
                Me.Close()
                Return
        End Select
    End Sub
    
    Private Sub ButtonCopy_Click(sender As Object, e As EventArgs) Handles ButtonCopy.Click

        'Copie des paramètres sélectionnés
        For Each indexChecked In CheckedListBoxExistingParameters.CheckedItems
            Dim CurrentParameterChecked As New Parameter
            CurrentParameterChecked.Id = TopSolidHost.Elements.SearchByName(DocId, indexChecked)
            CurrentParameterChecked.Name = TopSolidHost.Elements.GetName(CurrentParameterChecked.Id)
            CurrentParameterChecked.Description = TopSolidHost.Elements.GetDescription(CurrentParameterChecked.Id)
            CurrentParameterChecked.Type = TopSolidHost.Parameters.GetParameterType(CurrentParameterChecked.Id)

            Select Case CurrentParameterChecked.Type
                Case 1  'Real
                    CurrentParameterChecked.Value = TopSolidHost.Parameters.GetRealValue(CurrentParameterChecked.Id).ToString
                    TopSolidHost.Parameters.GetRealUnit(CurrentParameterChecked.Id, CurrentParameterChecked.RealUnitType, CurrentParameterChecked.RealUnitSymbol)
                Case 2  'Integer
                    CurrentParameterChecked.Value = TopSolidHost.Parameters.GetIntegerValue(CurrentParameterChecked.Id).ToString
                Case 3  'Boolean
                    CurrentParameterChecked.Value = TopSolidHost.Parameters.GetBooleanValue(CurrentParameterChecked.Id).ToString
                Case 4  'Text
                    CurrentParameterChecked.Value = TopSolidHost.Parameters.GetTextValue(CurrentParameterChecked.Id).ToString
                Case 5  'DateTime
                    MessageBox.Show("Les paramètres de type date ne sont pas gérés")
                    Continue For
                Case 6  'Family
                    MessageBox.Show("Les paramètres de type famille ne sont pas gérés")
                    Continue For
                Case 7  'Code
                    MessageBox.Show("Les paramètres de type code ne sont pas gérés")
                    Continue For
                Case 8  'Enumeration
                    MessageBox.Show("Les paramètres de type énumération ne sont pas gérés")
                    Continue For
                Case 9  'UserEnumeration
                    MessageBox.Show("Les paramètres de type énumération utilisateur ne sont pas gérés")
                    Continue For
            End Select
            ListOfCheckedParameters.Add(CurrentParameterChecked)
        Next
        ButtonCopy.Enabled = False
        CheckedListBoxExistingParameters.Enabled = False
        ButtonPaste.Enabled = True
    End Sub

    Private Sub ButtonPaste_Click(sender As Object, e As EventArgs) Handles ButtonPaste.Click
        'Connection à TS  +  récupération du DocumentId
        DocId = Connection2TS()
        DocId = StartModification(DocId, "Coller paramètres" + Name, False)

        Try
            For Each IndexParameters In ListOfCheckedParameters
                Dim CreatedParameterId As ElementId

                Select Case IndexParameters.Type
                    Case 1  'Real
                        Dim SmartRealValue As SmartReal = New SmartReal(UnitType.Length, "")
                        'TopSolidHost.Parameters.GetSmartRealParameterCreation(IndexParameters.Id, SmartRealValue)
                        'CreatedParameterId = TopSolidHost.Parameters.CreateSmartRealParameter(DocId, SmartRealValue)
                        CreatedParameterId = TopSolidHost.Parameters.CreateRealParameter(DocId, IndexParameters.RealUnitType, IndexParameters.Value)
                    Case 2  'Integer
                        CreatedParameterId = TopSolidHost.Parameters.CreateIntegerParameter(DocId, IndexParameters.Value)
                    Case 3  'Boolean
                        CreatedParameterId = TopSolidHost.Parameters.CreateBooleanParameter(DocId, IndexParameters.Value)
                    Case 4  'Text
                        CreatedParameterId = TopSolidHost.Parameters.CreateTextParameter(DocId, IndexParameters.Value.ToString)
                End Select

                Dim CopiedExistingParameter As ElementId
                CopiedExistingParameter = TopSolidHost.Elements.SearchByName(DocId, IndexParameters.Name + " - Copie")
                If CopiedExistingParameter.IsEmpty = False Then
                    MsgBox("Impossible de nommer le paramètre collé car ce paramètre a déjà été collé et n'a pas été renommé")
                    Exit For
                End If

                TopSolidHost.Elements.SetName(CreatedParameterId, IndexParameters.Name + " - Copie")
                TopSolidHost.Elements.SetDescription(CreatedParameterId, IndexParameters.Description)
            Next

            EndModification(True, True)
            Me.Close()

        Catch ex As Exception
            EndModification(False, False)
            MsgBox("Erreur lors de l'exécution du programme")
        End Try

    End Sub

End Class

2015-07-17_09-25-08.png
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
steve1991
Caporal
Caporal
Messages : 26
Enregistré le : 18 mars 2014, 15:07
Version TopSolid : 6.24
Module TopSolid : TopSolid'Design

Re: Programmation sous V7

Message non lu par steve1991 »

Super! merci beaucoup pour votre aide, je vais regarder tout ca en details :)

Steve
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Programmation sous V7

Message non lu par JuP »

de rien, hésite pas si tu as des questions, c'est un sujet sympa :-)
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
steve1991
Caporal
Caporal
Messages : 26
Enregistré le : 18 mars 2014, 15:07
Version TopSolid : 6.24
Module TopSolid : TopSolid'Design

Re: Programmation sous V7

Message non lu par steve1991 »

Bon alors enfait j ai un gros probleme...

J ai écris le code en pièce jointe comme dans le guide de l automation et je l ai lance juste pour voir si je n avais pas de problème pour le moment.

Seulement apres ca impossible d utiliser Topsolid, j ai le message d erreur suivant "Index was outside the bounds of the array" des que je fais une modification sur un assemblage.

Merci d avance pour votre aide,
Steve
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Programmation sous V7

Message non lu par JuP »

J'ai pas testé mais t'as pas un point d'exclamation qui apparaît en haut à droite de TopSolid? Le programme se déroule sans problème? T'es en pdm serveur ou local?
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
steve1991
Caporal
Caporal
Messages : 26
Enregistré le : 18 mars 2014, 15:07
Version TopSolid : 6.24
Module TopSolid : TopSolid'Design

Re: Programmation sous V7

Message non lu par steve1991 »

Je suis en PDM local. Oui le programme se déroule sans problème.

Merci,
Steve
steve1991
Caporal
Caporal
Messages : 26
Enregistré le : 18 mars 2014, 15:07
Version TopSolid : 6.24
Module TopSolid : TopSolid'Design

Re: Programmation sous V7

Message non lu par steve1991 »

J ai trouve!

Le problème ne vient pas du code mais de l installation de Visual studio 2015! Il installe Microsoft SQL 2014 en méme temps et apurement Topsolid n aime pas ca!

J ai juste désinstalle Microsoft SQL 2014 et le problème semble réglé.

Steve
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Programmation sous V7

Message non lu par JuP »

Ah bon à savoir ! merci pour ton retour
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
Répondre