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:
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)
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
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
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
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; }
}
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.
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.