Paramètres Smart

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
manulork
Seconde Classe
Seconde Classe
Messages : 7
Enregistré le : 25 oct. 2016, 15:52
Version TopSolid : 6.26
Module TopSolid : TopSolid'Design

Paramètres Smart

Message non lu par manulork »

Bonjour,

Je suis en train de programmer en vb.net avec l’aide de l’automation v7.10 .

Nous avons dans d’anciens projets des paramètres qui n’ont pas été créé en tant que propriété utilisateur au départ.
Vu qu’il n’est pas possible de transformer un paramètre réel en paramètre propriété utilisateur je souhaite créé une macro qui créé des nouveaux paramètres propriété utilisateur puis qui lie les anciens paramètres avec les nouvelles propriétés.

Pour cela, je souhaiterai assigner une formule à un paramètre réel existant et je n’y arrive pas.
Je ne comprends pas bien l’utilisation de l’objet smartreal et je ne trouve aucune documentation détaillée sur le sujet.

Voici le déroulement de mon programme

1. Je créé un paramètre réel Param2 lié à une propriété utilisateur avec « TopSolidHost.Parameters.CreateUserPropertyParameter »
2. J’assigne un nom à mon paramètre Param2 avec « TopSolidHost.Elements.SetName »
3. Je place mon paramètre Param2 dans un nouveau dossier avec « TopSolidHost.Entities.MoveEntity »

4. Ensuite je souhaiterai que la valeur de mon paramètre Param2 soit égale à la valeur de mon paramètre existant MonParam1 dont je connais l’ElementId.

J’ai essayé d’utiliser CreateSmartRealParameter et SetSmartRealParameterCreation sans succès.

Avez vous des idées de la démarche à suivre pour faire cela ?
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: Paramètres Smart

Message non lu par JuP »

Bonjour

Ah oui c'est pas le truc le plus simple ça, je les ai eu utilisé mais ça date un peu.

Avant de créer ton paramètre il faut créer le "smartReal", exemple:

Code : Tout sélectionner

Dim C_NombreDeMarchesFormula As SmartReal = New SmartReal(UnitType.Factor, "floor(Hauteur / HauteurDeMarche)")
Ensuite tu utilises ton smartReal dans la création de ton paramètre:

Code : Tout sélectionner

 Dim IdParamètreC_NombreDeMarches As ElementId = TopSolidHost.Parameters.CreateSmartRealParameter(docId, C_NombreDeMarchesFormula)
Tu finis par lui donner un nom:

Code : Tout sélectionner

TopSolidHost.Elements.SetName(IdParamètreC_NombreDeMarches, "C_NombreDeMarches")
Je sais pas si c'est la meilleur méthode mais en tout cas c'est la méthode qui a marché pour moi. Attention le smartreal tu l'implémentes avec du texte donc attention aux formules et casse...
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
manulork
Seconde Classe
Seconde Classe
Messages : 7
Enregistré le : 25 oct. 2016, 15:52
Version TopSolid : 6.26
Module TopSolid : TopSolid'Design

Re: Paramètres Smart

Message non lu par manulork »

J'ai testé ces fonctions et j'arrive bien à créer un nouveau paramètre avec une formule.

Mais je ne vois pas comment l'appliquer pour assigner une formule à un paramètre pré-existant non smart comme on le fait simplement dans TopSolid.

En effet dans mon cas le paramètre à créer est une propriété utilisateur je ne peux donc pas le créer directement avec TopSolidHost.Parameters.CreateSmartRealParameter.
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: Paramètres Smart

Message non lu par JuP »

Si le paramètre existe, essaie ça:

Code : Tout sélectionner

TopSolidHost.Parameters.SetSmartRealParameterCreationUnitAuto
Si c'est pour créer un paramètre utilisateur en partant de 0:

Code : Tout sélectionner

UserParameterNameToSearch = ParameterName
UserParametersId = UserParameterSearching(ObjectId, UserParameterNameToSearch)
UserParameterCreated = TopSolidHost.Parameters.CreateUserPropertyParameter(DocId, UserParametersId)
UserParameterSearching c'est une function que je me suis fait

Code : Tout sélectionner

Private Function UserParameterSearching(ObjectId As PdmObjectId, ByRef UserParameterName As String)
        Dim ListOfReferencedProject As List(Of PdmObjectId)
        Dim ActiveProjectId As PdmObjectId
        Dim ListOfPdmObjectId As New List(Of PdmObjectId)
        Dim ListOfUserParametersId As New List(Of PdmObjectId)
        Dim UserParametersId As DocumentId

        ActiveProjectId = TopSolidHost.Pdm.GetProject(ObjectId) 'Récupération du projet du document actif


        ListOfReferencedProject = TopSolidHost.Pdm.GetReferencedProjects(ActiveProjectId) 'Création de la liste des projets référencé

        For Each ReferencedProject As PdmObjectId In ListOfReferencedProject 'Pour chaque projet référencé
            If TopSolidHost.Pdm.SearchDocumentByName(ReferencedProject, UserParameterName).Count > 0 Then
                ListOfPdmObjectId = TopSolidHost.Pdm.SearchDocumentByName(ReferencedProject, UserParameterName) 'Récupération de la liste des documents trouvés
            End If
        Next

        Dim UserParametersType As String = ""
        For i = 0 To ListOfPdmObjectId.Count - 1    'Pour chaque élément de la liste des documents trouvés
            TopSolidHost.Pdm.GetType(ListOfPdmObjectId(i), UserParametersType) 'Récupération du type de document
            If UserParametersType = ".TopPrd" Then 'Si le document est une propriété utilisateur
                ListOfUserParametersId.Add(ListOfPdmObjectId(i)) 'Ajout de la propriété à la liste
            End If
        Next

        'V5.8.0
        If ListOfUserParametersId.Count = 0 Then

            If TopSolidHost.Pdm.SearchDocumentByName(ActiveProjectId, UserParameterName).Count > 0 Then
                ListOfPdmObjectId = TopSolidHost.Pdm.SearchDocumentByName(ActiveProjectId, UserParameterName) 'Récupération de la liste des documents trouvés
            End If

            For i = 0 To ListOfPdmObjectId.Count - 1    'Pour chaque élément de la liste des documents trouvés
                TopSolidHost.Pdm.GetType(ListOfPdmObjectId(i), UserParametersType) 'Récupération du type de document
                If UserParametersType = ".TopPrd" Then 'Si le document est une propriété utilisateur
                    ListOfUserParametersId.Add(ListOfPdmObjectId(i)) 'Ajout de la propriété à la liste
                End If
            Next
        End If

        If ListOfUserParametersId.Count = 0 Then
            MsgBox("Aucun paramètre " + UserParameterName + " trouvé dans les références")
            Return UserParametersId
        Else
            UserParametersId = TopSolidHost.Documents.GetDocument(ListOfUserParametersId(0))

        End If

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

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
manulork
Seconde Classe
Seconde Classe
Messages : 7
Enregistré le : 25 oct. 2016, 15:52
Version TopSolid : 6.26
Module TopSolid : TopSolid'Design

Re: Paramètres Smart

Message non lu par manulork »

Je viens d'essayer :

Code : Tout sélectionner

  TopSolidHost.Parameters.SetSmartRealParameterCreationUnitAuto 
  et TopSolidHost.Parameters.SetSmartRealParameterCreation 
Ces fonctions marchent bien pour modifier un smart paramètre existant avec le code ci-dessous :

Code : Tout sélectionner

               Dim Monsmartelt As ElementId = TopSolidHost.Parameters.CreateSmartRealParameter(Mondoc, New SmartReal(Paramnonlie))
                        Dim MesOpes As List(Of ElementId) = TopSolidHost.Operations.GetOperations(Mondoc)
                        Dim OpeCreationSmart As New ElementId
                        For Each MonOpe As ElementId In MesOpes
                           If TopSolidHost.Operations.GetChildren(MonOpe).Count = 1 Then
                              If TopSolidHost.Operations.GetChild(MonOpe) = Monsmartelt Then
                                 OpeCreationSmart = MonOpe
                                 Exit For
                              End If
                           End If
                        Next
                        TopSolidHost.Parameters.SetSmartRealParameterCreation(OpeCreationSmart, New SmartReal(UnitType.Length, 10))

Mais je n'arrive pas à les utiliser pour transformer un paramètre classique en paramètre smart et donc lui ajouter une opération de création.
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: Paramètres Smart

Message non lu par JuP »

arf je sèche, tu peux demander au support TopSolid, ça se trouve c'est peut être pas possible :-/
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