SubDMesh (Maillage de Subdivision) représente un objet maillage moderne capable de lissage, de plissage et de modélisation organique complexe. Contrairement au PolygonMesh hérité, il supporte les faces n-gon, des niveaux de lissage variés et la pondération des arêtes/sommets.
Autodesk.AutoCAD.DatabaseServices
System.Object
└─ RXObject
└─ DBObject
└─ Entity
├─ SubDMesh
| Propriété | Type | Description |
|---|---|---|
SubdivisionLevel |
int |
Niveau de lissage actuel (0=non lissé). |
VertexCount |
int |
Nombre de sommets. |
FaceCount |
int |
Nombre de faces. |
Volume |
double |
Volume (si étanche). |
SurfaceArea |
double |
Aire de surface. |
| Méthode | Type de Retour | Description |
|---|---|---|
SetSubdivisionLevel(int) |
void |
Définit le lissage. |
SetBox(...) |
void |
Crée une boîte maillée. |
SetSphere(...) |
void |
Crée une sphère maillée. |
SubdivideFace(int) |
void |
Raffine une face spécifique. |
ExtrudeFaces(...) |
void |
Extrude des faces. |
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTableRecord btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
SubDMesh mesh = new SubDMesh();
// Boîte 10x10x10 avec subdivisions 4x4x4
mesh.SetBox(10, 10, 10, 4, 4, 4);
btr.AppendEntity(mesh);
tr.AddNewlyCreatedDBObject(mesh, true);
tr.Commit();
}mesh.SetSubdivisionLevel(2); // Lisse la géométrie du maillagePoint3dCollection vertices = new Point3dCollection();
vertices.Add(new Point3d(0,0,0));
vertices.Add(new Point3d(10,0,0));
vertices.Add(new Point3d(0,10,0));
// ...
Int32Collection faceCounts = new Int32Collection();
faceCounts.Add(3); // Triangle
Int32Collection faceIndices = new Int32Collection();
faceIndices.Add(0); faceIndices.Add(1); faceIndices.Add(2); // Indices des sommets
SubDMesh mesh = new SubDMesh();
mesh.SetSubDMesh(vertices, faceIndices, faceCounts.Count);// SubDMesh peut être converti en Solid3d s'il entoure un volume
if (mesh.Watertight)
{
Solid3d sol = mesh.ConvertToSolid(false, false);
// Ajouter sol à la base de données...
}// Convertir en Surface (NURBS)
Autodesk.AutoCAD.DatabaseServices.Surface surf = mesh.ConvertToSurface(false, false);// Accéder directement aux sommets
// Attention : Cela peut être lourd
foreach (Point3d pt in mesh.Vertices)
{
// ...
}// Appliquer un pli pour maintenir les arêtes vives pendant le lissage
FullSubentityPath[] edges = ...; // Besoin d'identifier les arêtes
mesh.SetCrease(edges, 1.0); // Pli complet// Avancé : Extruder une face de sous-entité
FullSubentityPath facePath = ...;
mesh.ExtrudeFaces(new[] { facePath }, 5.0, 0.0);- Vérification Étanchéité : Vérifiez la propriété
Watertightavant de tenter des calculs de volume ou une conversion en solide. - Niveau de Détail : Un
SubdivisionLevelélevé augmente exponentiellement le nombre de sommets. Gardez-le bas pour les performances. - Sous-entités : La manipulation des faces/arêtes individuelles nécessite de les identifier via
GetSubentPathsAtGsMarkerou des mécanismes de sélection similaires.
- Solid3d
- PolygonMesh (Hérité)