interface PHP / TopSolid

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

baptisteMath
Caporal
Caporal
Messages : 23
Enregistré le : 22 mars 2021, 14:55
Version TopSolid : 6.24

Re: interface PHP / TopSolid

Message non lu par baptisteMath »

Bonjour à tous,

Aujourd'hui j'aurai aimé pouvoir récupérer la liste des face et des Sommets en utilisant l'interface iShapes, mais je ne comprend pas comment l'utiliser
d'apres la Doc il faudrait faire ça:

Code : Tout sélectionner

List<ElementItemId> GetEdges(
	ElementId inElementId
)
Actuellement j'arrive à obtenir la liste des élements d'un document:

Code : Tout sélectionner

TopSolidHost.Elements.GetElements(Document)
mais quels élément de cette liste doivent êtres utilisé pour avoir le nombre de face ?
Repier37
Major
Major
Messages : 162
Enregistré le : 29 août 2013, 09:29
Réponses : 9
Version TopSolid : 7.12
Module TopSolid : TopSolid'Design

Re: interface PHP / TopSolid

Message non lu par Repier37 »

Tu as dans IShapes la méthode
List<ElementId> GetShapes(DocumentId inDocumentId).

Qui te donne l'id de toutes les shapes d'un document. Tu peux ensuite passer l'id de la shape qui t'intéresse en paramètre de la méthode IShapes.GetEdges(ElementId inElementId)
baptisteMath
Caporal
Caporal
Messages : 23
Enregistré le : 22 mars 2021, 14:55
Version TopSolid : 6.24

Re: interface PHP / TopSolid

Message non lu par baptisteMath »

Merci ! j’essaie de suite :D
baptisteMath
Caporal
Caporal
Messages : 23
Enregistré le : 22 mars 2021, 14:55
Version TopSolid : 6.24

Re: interface PHP / TopSolid

Message non lu par baptisteMath »

j'arrive maintenant à avoir la liste des sommets et des faces de ma pièce,
j'aimerais maintenant savoir comment avoir pour chaques sommets leurs coordonnees X Y et Z
Repier37
Major
Major
Messages : 162
Enregistré le : 29 août 2013, 09:29
Réponses : 9
Version TopSolid : 7.12
Module TopSolid : TopSolid'Design

Re: interface PHP / TopSolid

Message non lu par Repier37 »

Une fois que tu as toutes tes faces, et sommets, tu peux utiliser l'interface IGeometries3D.
Dans cet interface tu peux tester le type de géométrie de ton élément avec IGeometries3D.GetGeometryType

En fonction du résultat de cette méthode, si elle te dit que ton élement est un point , tu peux appeler IGeometries3D.GetPointGeometry

Tu obtiens un Point3D dans lequel tu as les coordonnées X, Y, Z
baptisteMath
Caporal
Caporal
Messages : 23
Enregistré le : 22 mars 2021, 14:55
Version TopSolid : 6.24

Re: interface PHP / TopSolid

Message non lu par baptisteMath »

Merci pour les infos

Qu'elle est la difference entre ElementID et ElementItemId?

dans l'interface ishapes il y'a la methode GetFaceVertices(ElementItemId) qui retourne List<ElementItemId> (jusqu'à là mon code fonctionne ma pièce sur TS est un cube , mon code me renvoi 6 face composé de 4 points),
mais pour utiliser GetPointGeometry il faut avoir un ElementId et non pas un ElementItemid.
je ne comprend pas comment faire

Code : Tout sélectionner

Vertices = new List<Vertice>();
foreach(ElementItemId Vertice in TopSolidHost.Shapes.GetFaceVertices(_face))
            {
                Vertices.Add(new Vertice(Vertice.ElementId));

            }
Et Voici ma classe Vertice:

Code : Tout sélectionner

public class Vertice
    {
        public Vertice(ElementId _id)
        {
            
            //mon code plante a cette ligne:
            //coordonnee = TopSolidHost.Geometries3D.GetPointGeometry(_id);
            
            //si je debug cette ligne je vois que TypeGeometry est une face et non pas un point
            TypeGeometry = TopSolidHost.Geometries3D.GetGeometryType(_id);
        }
        public Point3D coord { get; set; }
        public GeometryType TypeGeometry { get; private set; }
    }
cordialement
Repier37
Major
Major
Messages : 162
Enregistré le : 29 août 2013, 09:29
Réponses : 9
Version TopSolid : 7.12
Module TopSolid : TopSolid'Design

Re: interface PHP / TopSolid

Message non lu par Repier37 »

Un ElementId contient plusieurs ElementItemID.

Dans ton cas tu as une liste de shapes via leurs ElementID.

Tu cherches à récupérer les ElementItemID des points et Faces.

Pour ca tu utilises dans IShapes :
GetVertices(ElementID) => Ici l'ElementId c'est l'id de ta shape, ca va te retourner une liste de ElementItemId (les ids des sommets)
GetFaces(ElementId elementId) => Idem

Tu peux ensuite utiliser le résultat de GetVertices avec les méthodes spécifiques dans IShapes pour récupérer la géométrie associé à tes items :
IShapes.GetVertexPoint(ElementItemId) => Id du point que tu veux récupérer

Je te conseille (avant ton appel à GetVertexPoint) de tester via IGeometries3D.GetGeometryType, que l'id que tu as correspond à un vertex.
baptisteMath
Caporal
Caporal
Messages : 23
Enregistré le : 22 mars 2021, 14:55
Version TopSolid : 6.24

Re: interface PHP / TopSolid

Message non lu par baptisteMath »

Merci pour le temps que vous prennez à m'expliquer, c'est très intéressant




baptisteMath
Caporal
Caporal
Messages : 23
Enregistré le : 22 mars 2021, 14:55
Version TopSolid : 6.24

Re: interface PHP / TopSolid

Message non lu par baptisteMath »

Bonsoir à tous,

voici une petite image de ce que j'essaye de faire en ce moment :
Capture d’écran 2021-05-06 195817.png
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Repier37
Major
Major
Messages : 162
Enregistré le : 29 août 2013, 09:29
Réponses : 9
Version TopSolid : 7.12
Module TopSolid : TopSolid'Design

Re: interface PHP / TopSolid

Message non lu par Repier37 »

Ha ca commence à rendre pas mal :D

Qu'utilises tu pour faire l'affichage ?

Deuxième question, j'ai l'impression que tu essayes d'avoir une preview de ta pièce dans ton interface c'est bien ça ?
La loutre
Lieutenant-colonel
Lieutenant-colonel
Messages : 1015
Enregistré le : 18 oct. 2020, 21:32
Réponses : 41
Version TopSolid : 7.13
Module TopSolid : TopSolid'Steel
Localisation : Valenciennes
Contact :

Re: interface PHP / TopSolid

Message non lu par La loutre »

Ce ne serait pas plus simple de récupérer l'aperçu du fichier ? Si ça t'intéresse, j'avais récupéré quelques routines pour extraire le bmp d'aperçu d'un fichier. C'était pour une application Solidworks mais je pense que pour Topsolid c'est pareil. C'est lié à la structure des fichiers Windows.
baptisteMath
Caporal
Caporal
Messages : 23
Enregistré le : 22 mars 2021, 14:55
Version TopSolid : 6.24

Re: interface PHP / TopSolid

Message non lu par baptisteMath »

Bonjour a tous,
Je cherche effectivement a redissiner une pièce sur une page web avec TreeJs (https://threejs.org/) , mais je galère beaucoup :?
Repier37
Major
Major
Messages : 162
Enregistré le : 29 août 2013, 09:29
Réponses : 9
Version TopSolid : 7.12
Module TopSolid : TopSolid'Design

Re: interface PHP / TopSolid

Message non lu par Repier37 »

Sympa,

Petite question, pourquoi ne pas exporter ta pièce (en stl par exemple) puis l'importer dans three.js ? Ca serait trop lourd ?
baptisteMath
Caporal
Caporal
Messages : 23
Enregistré le : 22 mars 2021, 14:55
Version TopSolid : 6.24

Re: interface PHP / TopSolid

Message non lu par baptisteMath »

Je n'ai pas du tout pense à ça
Répondre