TopSolid'Wood 6.24 / API : Appliquer une couleur aux pièces suivant leur niveau

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

Fred_44780
Lieutenant-colonel
Lieutenant-colonel
Messages : 423
Enregistré le : 15 avr. 2015, 23:20
Réponses : 7
Version TopSolid : 6.23
Module TopSolid : TopSolid'Wood

Re: TopSolid'Wood 6.24 / API : Appliquer une couleur aux pièces suivant leur niveau

Message non lu par Fred_44780 »

J'ai fais l'essai, il faut remplacer la ligne :

Code : Tout sélectionner

For Each TopElt In TopDoc.Elements
Par :

Code : Tout sélectionner

For Each TopElt In TopDoc.Shapes
C'est la même logique que le code que j'ai partager en première page de ce sujet
Lorenzo
Première Classe
Première Classe
Messages : 12
Enregistré le : 11 oct. 2024, 15:42
Version TopSolid : 6.23
Module TopSolid : TopSolid'Wood

Re: TopSolid'Wood 6.24 / API : Appliquer une couleur aux pièces suivant leur niveau

Message non lu par Lorenzo »

J'avais déjà essayé ça, j'ai retenté et ça ne renvoie rien. J'ai essayé de supprimer la condition, et ça ne renvoie que l'élément de l'image ci-dessous.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Fred_44780
Lieutenant-colonel
Lieutenant-colonel
Messages : 423
Enregistré le : 15 avr. 2015, 23:20
Réponses : 7
Version TopSolid : 6.23
Module TopSolid : TopSolid'Wood

Re: TopSolid'Wood 6.24 / API : Appliquer une couleur aux pièces suivant leur niveau

Message non lu par Fred_44780 »

J'avais compris que tu n'arrivais à récupérer aucune info, au temps pour moi !

J'ai eu du mal mais j'ai fini par trouver (en tout cas, à partir de ton code celà fonctionne bien chez moi), il faut remplacer ta ligne :

Code : Tout sélectionner

If TopElt.Identifier = 16973 Then
Par celle-ci :

Code : Tout sélectionner

If TopElt.NameOrIdentifier = "@16973" Then
Le code entier:

Code : Tout sélectionner

Sub test()

    Set TopApp = New TopSolid.Application
    Set TopDoc = TopApp.CurrentDocument
    
        For Each TopElt In TopDoc.Shapes
    
        If TopElt.NameOrIdentifier = "@16973" Then
        
            Message = Message & "Désignation : " & TopElt.Designation & vbCrLf
            Message = Message & "Nom de l'index : " & TopElt.BomIndexName & vbCrLf
            Message = Message & "Identifiant : " & TopElt.Identifier & vbCrLf & vbCrLf
        
        End If
              
    Next TopElt
    
    MsgBox Message

End Sub
AK2T
Caporal
Caporal
Messages : 29
Enregistré le : 09 nov. 2017, 08:44
Version TopSolid : 6.18
Module TopSolid : TopSolid'Steel

Re: TopSolid'Wood 6.24 / API : Appliquer une couleur aux pièces suivant leur niveau

Message non lu par AK2T »

Bonjour,

Savez vous si on peut attaquer la « Catégorie de Pièce » via vba? Je n’ai rien trouvé sur ce sujet dans l’aide API.

D’avance merci!:)
Fred_44780
Lieutenant-colonel
Lieutenant-colonel
Messages : 423
Enregistré le : 15 avr. 2015, 23:20
Réponses : 7
Version TopSolid : 6.23
Module TopSolid : TopSolid'Wood

Re: TopSolid'Wood 6.24 / API : Appliquer une couleur aux pièces suivant leur niveau

Message non lu par Fred_44780 »

Salut d'après mes recherches, ce n'est pas possible :roll:
-AK2T-
Première Classe
Première Classe
Messages : 16
Enregistré le : 22 sept. 2024, 11:18
Version TopSolid : 6.24
Module TopSolid : TopSolid'Wood

Re: TopSolid'Wood 6.24 / API : Appliquer une couleur aux pièces suivant leur niveau

Message non lu par -AK2T- »

Salut Fred,
Après avoir cherché partout, j’en étais venu à la même conclusion… Dommage.
Bon bah on passe par les propriétés alors.

Merci pour ta réponse!;)
-AK2T-
Première Classe
Première Classe
Messages : 16
Enregistré le : 22 sept. 2024, 11:18
Version TopSolid : 6.24
Module TopSolid : TopSolid'Wood

Re: TopSolid'Wood 6.24 / API : Appliquer une couleur aux pièces suivant leur niveau

Message non lu par -AK2T- »

Bonjour,

Aujourd’hui on applique automatiquement un type sur des pièces selon leur niveau via SetTextProperty :
Exemple :
TopElt.SetTextProperty "$part_type_property", "Panneau"

Le problème : si la pièce possède déjà un ou plusieurs types, ils sont écrasés par le nouveau.
J'ai essayé de lire les types existants avec GetTextProperty mais cette méthode ne retourne que le premier type (longueur tronquée confirmée).

Ce que j'ai testé sans succès :
GetTextProperty "$part_type_property" → retourne uniquement le 1er type
GetTextProperty "$part_type_property[0]" → retourne vide
SetTextProperty "$part_type_property[0]" + "[1]" → seul le dernier Set reste

Ma question : existe-t-il une méthode API permettant de lire tous les types présents sur une pièce afin de les conserver et d'ajouter un nouveau type uniquement s'il n'existe pas déjà ?

Merci d'avance !
Répondre