Excel

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 : D@vid, remi77, Alexis GERARD

Répondre
belgarath31
Seconde Classe
Seconde Classe
Messages : 6
Inscription : 16 juin 2016, 21:54
Version TopSolid : 7.7
Module TopSolid : TopSolid'Cam

Excel

Message non lu par belgarath31 » 31 janv. 2017, 09:31

Est-ce que quelqu'un aurait un bout de code vba ou c# qui exporte des informations de topsolid (genre vitesse de coupe, machine utilisé dans un cam) dans un fichiers excel choisi ou crée. un bout de code aussi pour sélectionner un fichier ,avec le pdm, dans l’arborescence d'un projet.
D'avance merci cela m'aiderait bien pour commencer à coder et à comprendre le manuel d'automation qui manque cruellement d'exemples c'est dommage.
belgarath31

Avatar de l’utilisateur
JuP
Colonel
Colonel
Messages : 2454
Inscription : 18 févr. 2013, 10:26
Version TopSolid : 7.11
Module TopSolid : TopSolid'Design
Localisation : Lyon (France)

Re: Excel

Message non lu par JuP » 31 janv. 2017, 11:45

Bonjour,

Je ne peux pas trop d'aider pour le cam mais si tu comprends la philosophie de l'API tu trouveras vite ton bonheur.

Tu veux le sélectionner comment ton fichier dans le PDM?

belgarath31
Seconde Classe
Seconde Classe
Messages : 6
Inscription : 16 juin 2016, 21:54
Version TopSolid : 7.7
Module TopSolid : TopSolid'Cam

Re: Excel

Message non lu par belgarath31 » 31 janv. 2017, 13:41

c'est justement la où le bas blesse, j'aimerais avoir un exemple pour saisir la philosophie de l'api.
Même si c'est pas pour un fichier cam, mais par exemple récupérer la matière ou l'auteur dans une mise en plan.
Merci

Avatar de l’utilisateur
JuP
Colonel
Colonel
Messages : 2454
Inscription : 18 févr. 2013, 10:26
Version TopSolid : 7.11
Module TopSolid : TopSolid'Design
Localisation : Lyon (France)

Re: Excel

Message non lu par JuP » 01 févr. 2017, 05:52

J'ai mis d'autre morceaux de code un peu partout, en voici quelques uns qui pourraient t’intéresser.
Voici la base, pour se connecter à TopSolid, à mettre dans un module:

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
Pour lancer la procédure de connexion:

Code : Tout sélectionner

 'Connection à TS  +  récupération du DocumentId
        Try
            Dim DocId As DocumentId
            ProgressBarDoubleForm.Label2.Text = "Connection à TopSolid"
            TopSolidHost.Connect()  'Connection à TopSolid
            TopSolidDesignHost.Connect()    'Connection à TopSolid
            DocId = Connection2TS()
        Catch
            MsgBox("Erreur de connection à TopSolid, vérifier qu'un document est actif")
            Exit Function
        End Try
Pour récupérer quelques info projet, pièce etc:

Code : Tout sélectionner

             Dim ObjectId As PdmObjectId
            ObjectId = TopSolidHost.Documents.GetPdmObject(DocId)

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

            'Récupération projet actif
            Dim ActiveProjectID As PdmObjectId
            ActiveProjectID = TopSolidHost.Pdm.GetProject(ObjectId)

            'Récupération nom projet
            Dim ActiveProjectName As String
            ActiveProjectName = TopSolidHost.Pdm.GetName(ActiveProjectID)

Avatar de l’utilisateur
JuP
Colonel
Colonel
Messages : 2454
Inscription : 18 févr. 2013, 10:26
Version TopSolid : 7.11
Module TopSolid : TopSolid'Design
Localisation : Lyon (France)

Re: Excel

Message non lu par JuP » 01 févr. 2017, 05:56

Un exemple de macro pour afficher la mise en plan d'un assemblage ou d'une pièce:
A mettre dans un module:

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
A mettre dans ta form:

Code : Tout sélectionner

Public Class Accueil
    Public ActiveDocumentDocId As DocumentId
    Public ActiveDocumentObjId As PdmObjectId
    Public ActiveDocumentName As String
    Public ActiveDocumentType As String = ""


    Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Connection à TS  +  récupération du DocumentId
        ActiveDocumentDocId = Connection2TS()

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

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

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

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

            'Récupération du projet
            Dim ActiveProjectObjId As PdmObjectId
            ActiveProjectObjId = TopSolidHost.Pdm.GetProject(ActiveDocumentObjId)

            'Récupération révision majeur
            Dim ActiveDocumentLastMajorRevision As PdmMajorRevisionId
            ActiveDocumentLastMajorRevision = TopSolidHost.Pdm.GetLastMajorRevision(ActiveDocumentObjId)

            'Récupération révision mineur
            Dim ActiveDocumentLastMinorRevision As PdmMinorRevisionId
            ActiveDocumentLastMinorRevision = TopSolidHost.Pdm.GetLastMinorRevision(ActiveDocumentLastMajorRevision)

            'Recherche des cas d'emploi
            Dim BackReferencesMinorRevisionList As New List(Of PdmMinorRevisionId)
            'BackReferencesMinorRevisionList = TopSolidHost.Pdm.SearchMinorRevisionBackReferences(ActiveProjectObjId, ActiveDocumentLastMinorRevision)
            BackReferencesMinorRevisionList = TopSolidHost.Pdm.SearchMajorRevisionBackReferences(ActiveProjectObjId, ActiveDocumentLastMajorRevision)


            'Recherche Mise en plan
            Dim DraftObjId As PdmObjectId

            For Each BackReferenceMinorRevision In BackReferencesMinorRevisionList

                'Récupération Révision majeur
                Dim BackReferenceMajorRevision As PdmMajorRevisionId
                BackReferenceMajorRevision = TopSolidHost.Pdm.GetMajorRevision(BackReferenceMinorRevision)

                'Récupération Object Id
                Dim BackReferenceObjId As PdmObjectId
                BackReferenceObjId = TopSolidHost.Pdm.GetPdmObject(BackReferenceMajorRevision)

                'Récupération du type de document
                Dim BackReferenceType As String = ""
                TopSolidHost.Pdm.GetType(BackReferenceObjId, BackReferenceType)

                If BackReferenceType = ".TopDft" Then
                    DraftObjId = BackReferenceObjId
                End If

            Next

            'Si pas de mise en plan
            If DraftObjId.IsEmpty Then
                MsgBox("Le document ne possède pas de mise en plan")
                Me.Close()
            Else
                TopSolidHost.Documents.Open(TopSolidHost.Documents.GetDocument(DraftObjId))
            End If

            Me.Close()
        Catch ex As Exception
            MsgBox("Erreur lor de l'exécution du programme" + vbNewLine + ex.Message)
            Me.Close()
        End Try

    End Sub

    Private Sub VerificationDocumentType(ByVal ObjectType As String)
        Select Case ObjectType
            Case ".TopPrt"
                TextBoxDocumentType.Text = "Pièce"
            Case ".TopAsm"
                TextBoxDocumentType.Text = "Assemblage"
            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 Accueil_Activated(sender As Object, e As EventArgs) Handles MyBase.Activated

    End Sub
End Class

Avatar de l’utilisateur
JuP
Colonel
Colonel
Messages : 2454
Inscription : 18 févr. 2013, 10:26
Version TopSolid : 7.11
Module TopSolid : TopSolid'Design
Localisation : Lyon (France)

Re: Excel

Message non lu par JuP » 01 févr. 2017, 05:57

bon je ne suis pas développeur donc c'est loin d'être dans "les rêgles de l'art" mais ça a le mérite de parfaitement fonctionner :-)

belgarath31
Seconde Classe
Seconde Classe
Messages : 6
Inscription : 16 juin 2016, 21:54
Version TopSolid : 7.7
Module TopSolid : TopSolid'Cam

Re: Excel

Message non lu par belgarath31 » 02 févr. 2017, 13:28

Un grand merci, je teste et je te dis si cela fonctionne. en tout cas un grand merci encore.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité