You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
La structure Point3d représente un point dans un espace 3D avec des coordonnées X, Y, et Z. C'est l'une des classes géométriques les plus fondamentales de l'API AutoCAD .NET, utilisée intensivement pour positionner des entités, définir des sommets et effectuer des calculs géométriques.
Namespace
Autodesk.AutoCAD.Geometry
Propriétés Clés
Propriété
Type
Description
X
double
Obtient la coordonnée X
Y
double
Obtient la coordonnée Y
Z
double
Obtient la coordonnée Z
Origin
Point3d (statique)
Obtient le point d'origine (0, 0, 0)
Méthodes Clés
Méthode
Type de Retour
Description
Add(Vector3d)
Point3d
Ajoute un vecteur au point
Subtract(Vector3d)
Point3d
Soustrait un vecteur du point
GetVectorTo(Point3d)
Vector3d
Obtient le vecteur de ce point vers un autre
DistanceTo(Point3d)
double
Calcule la distance vers un autre point
TransformBy(Matrix3d)
Point3d
Transforme le point par une matrice
RotateBy(double, Vector3d, Point3d)
Point3d
Fait tourner le point autour d'un axe
Mirror(Plane)
Point3d
Miroite le point à travers un plan
ToArray()
double[]
Convertit en tableau [X, Y, Z]
Exemples de Code
Exemple 1: Création de Points
// Créer un point à l'originePoint3dorigin=Point3d.Origin;// (0, 0, 0)// Créer un point avec des coordonnéesPoint3dpt1=newPoint3d(10,20,0);Point3dpt2=newPoint3d(5.5,7.3,12.8);// Créer à partir d'un tableaudouble[]coords={15,25,35};Point3dpt3=newPoint3d(coords);ed.WriteMessage($"\nPoint 1 : ({pt1.X}, {pt1.Y}, {pt1.Z})");ed.WriteMessage($"\nPoint 2 : ({pt2.X}, {pt2.Y}, {pt2.Z})");ed.WriteMessage($"\nPoint 3 : ({pt3.X}, {pt3.Y}, {pt3.Z})");
Exemple 2: Arithmétique de Point
Point3dpt=newPoint3d(10,10,0);Vector3dvec=newVector3d(5,3,0);// Ajouter vecteur au pointPoint3dnewPt=pt.Add(vec);// (15, 13, 0)// Soustraire vecteur du pointPoint3dmovedPt=pt.Subtract(vec);// (5, 7, 0)// Obtenir vecteur entre deux pointsPoint3dpt1=newPoint3d(0,0,0);Point3dpt2=newPoint3d(10,10,0);Vector3ddirection=pt1.GetVectorTo(pt2);ed.WriteMessage($"\nOriginal : {pt}");ed.WriteMessage($"\nAprès ajout : {newPt}");ed.WriteMessage($"\nAprès soustraction : {movedPt}");ed.WriteMessage($"\nVecteur direction : {direction}");
Exemple 3: Calculs de Distance
Point3dpt1=newPoint3d(0,0,0);Point3dpt2=newPoint3d(10,0,0);Point3dpt3=newPoint3d(0,10,0);Point3dpt4=newPoint3d(10,10,10);// Calculer les distancesdoubledist12=pt1.DistanceTo(pt2);// 10.0doubledist13=pt1.DistanceTo(pt3);// 10.0doubledist14=pt1.DistanceTo(pt4);// 17.32 (distance 3D)ed.WriteMessage($"\nDistance pt1 vers pt2 : {dist12:F2}");ed.WriteMessage($"\nDistance pt1 vers pt3 : {dist13:F2}");ed.WriteMessage($"\nDistance pt1 vers pt4 : {dist14:F2}");
Exemple 4: Calcul de Point Médian
Point3dpt1=newPoint3d(0,0,0);Point3dpt2=newPoint3d(20,10,5);// Calculer le point médianPoint3dmidpoint=newPoint3d((pt1.X+pt2.X)/2,(pt1.Y+pt2.Y)/2,(pt1.Z+pt2.Z)/2);// Alternative utilisant vecteursVector3dhalfVector=pt1.GetVectorTo(pt2)*0.5;Point3dmidpoint2=pt1.Add(halfVector);ed.WriteMessage($"\nPoint médian : ({midpoint.X}, {midpoint.Y}, {midpoint.Z})");
Exemple 5: Transformation de Points
Point3dpt=newPoint3d(10,0,0);// Créer matrice de translation (déplacer de 5 unités en X, 10 en Y)Matrix3dtranslation=Matrix3d.Displacement(newVector3d(5,10,0));Point3dtranslatedPt=pt.TransformBy(translation);// Créer matrice de rotation (tourner de 90° autour de l'axe Z)Matrix3drotation=Matrix3d.Rotation(Math.PI/2,Vector3d.ZAxis,Point3d.Origin);Point3drotatedPt=pt.TransformBy(rotation);// Créer matrice de mise à l'échelle (échelle par 2)Matrix3dscaling=Matrix3d.Scaling(2.0,Point3d.Origin);Point3dscaledPt=pt.TransformBy(scaling);ed.WriteMessage($"\nOriginal : {pt}");ed.WriteMessage($"\nTranslaté : {translatedPt}");ed.WriteMessage($"\nTourné : {rotatedPt}");ed.WriteMessage($"\nMis à l'échelle : {scaledPt}");
Exemple 6: Rotation de Points
Point3dpt=newPoint3d(10,0,0);Point3dcenter=Point3d.Origin;// Tourner de 45° autour de l'axe Zdoubleangle=Math.PI/4;// 45 degrés en radiansPoint3drotated=pt.RotateBy(angle,Vector3d.ZAxis,center);ed.WriteMessage($"\nOriginal : ({pt.X:F2}, {pt.Y:F2}, {pt.Z:F2})");ed.WriteMessage($"\nTourné 45° : ({rotated.X:F2}, {rotated.Y:F2}, {rotated.Z:F2})");// Tourner plusieurs fois pour créer un motif circulairefor(inti=0;i<8;i++){doubleang=(i*2*Math.PI)/8;Point3dcircPt=pt.RotateBy(ang,Vector3d.ZAxis,center);ed.WriteMessage($"\nPoint {i} : ({circPt.X:F2}, {circPt.Y:F2})");}
Exemple 7: Création d'Entités avec des Points
using(Transactiontr=db.TransactionManager.StartTransaction()){BlockTableRecordbtr=tr.GetObject(db.CurrentSpaceId,OpenMode.ForWrite)asBlockTableRecord;// Créer ligne utilisant deux pointsPoint3dstartPt=newPoint3d(0,0,0);Point3dendPt=newPoint3d(10,10,0);Lineline=newLine(startPt,endPt);line.SetDatabaseDefaults();btr.AppendEntity(line);tr.AddNewlyCreatedDBObject(line,true);// Créer cercle utilisant point centralPoint3dcenter=newPoint3d(5,5,0);Circlecircle=newCircle(center,Vector3d.ZAxis,3.0);circle.SetDatabaseDefaults();btr.AppendEntity(circle);tr.AddNewlyCreatedDBObject(circle,true);// Créer arc utilisant centre, début, et finPoint3darcCenter=newPoint3d(0,0,0);doubleradius=5.0;doublestartAngle=0;doubleendAngle=Math.PI/2;Arcarc=newArc(arcCenter,Vector3d.ZAxis,radius,startAngle,endAngle);arc.SetDatabaseDefaults();btr.AppendEntity(arc);tr.AddNewlyCreatedDBObject(arc,true);tr.Commit();}
Exemple 8: Conversion Tableau de Points
Point3dpt=newPoint3d(10,20,30);// Convertir en tableaudouble[]coords=pt.ToArray();ed.WriteMessage("\nCoordonnées du point :");ed.WriteMessage($"\n X : {coords[0]}");ed.WriteMessage($"\n Y : {coords[1]}");ed.WriteMessage($"\n Z : {coords[2]}");// Créer point depuis tableauPoint3dnewPt=newPoint3d(coords);ed.WriteMessage($"\nPoint recréé : ({newPt.X}, {newPt.Y}, {newPt.Z})");
Exemple 9: Vérification d'Égalité de Points
Point3dpt1=newPoint3d(10,20,0);Point3dpt2=newPoint3d(10,20,0);Point3dpt3=newPoint3d(10.0001,20,0);// Égalité exacteboolexact=pt1==pt2;// vraiboolnotExact=pt1==pt3;// faux// Égalité basée sur toléranceTolerancetol=newTolerance(0.001,0.001);boolwithinTolerance=pt1.IsEqualTo(pt3,tol);// vrai si différence < 0.001ed.WriteMessage($"\nÉgalité exacte (pt1 == pt2) : {exact}");ed.WriteMessage($"\nÉgalité exacte (pt1 == pt3) : {notExact}");ed.WriteMessage($"\nDans la tolérance : {withinTolerance}");
Exemple 10: Trouver le Point le Plus Proche sur une Ligne
// Définir une lignePoint3dlineStart=newPoint3d(0,0,0);Point3dlineEnd=newPoint3d(10,0,0);// Point à projeterPoint3dtestPoint=newPoint3d(5,5,0);// Calculer le point le plus proche sur la ligneVector3dlineVector=lineStart.GetVectorTo(lineEnd);Vector3dpointVector=lineStart.GetVectorTo(testPoint);doubledotProduct=lineVector.DotProduct(pointVector);doublelineLength=lineVector.Length;doublet=dotProduct/(lineLength*lineLength);// Restreindre t à [0, 1] pour rester sur le segment de lignet=Math.Max(0,Math.Min(1,t));Point3dclosestPoint=lineStart.Add(lineVector*t);ed.WriteMessage($"\nPoint test : {testPoint}");ed.WriteMessage($"\nPoint le plus proche sur ligne : {closestPoint}");ed.WriteMessage($"\nDistance : {testPoint.DistanceTo(closestPoint):F2}");
Point3dstart=newPoint3d(0,0,0);Point3dend=newPoint3d(10,10,0);// Obtenir 10 points le long de la lignefor(inti=0;i<=10;i++){doublet=i/10.0;Vector3dvec=start.GetVectorTo(end)*t;Point3dinterpolated=start.Add(vec);}
Point3d vs Point2d
Fonctionnalité
Point3d
Point2d
Dimensions
X, Y, Z
X, Y
Namespace
Geometry
Geometry
Cas d'Usage
Coordonnées 3D
Coordonnées 2D
Conversion
Peut convertir en Point2d
Peut convertir en Point3d (Z=0)
Meilleures Pratiques
Utiliser Origin : Utilisez Point3d.Origin au lieu de new Point3d(0, 0, 0)
Immutabilité : Point3d est une structure ; les opérations retournent de nouveaux points
Tolérance : Utilisez l'égalité basée sur la tolérance pour les comparaisons à virgule flottante
Vecteurs : Utilisez GetVectorTo() pour les calculs de direction et de distance
Transformations : Utilisez TransformBy() pour les opérations géométriques complexes
Opérations 2D : Définissez Z=0 pour les opérations 2D dans le plan XY
Performance : Point3d est un type valeur (struct), passé par valeur
Vérifications Null : Point3d ne peut pas être null (c'est une structure)