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 Plane représente un plan infini dans l'espace 3D, défini par un point sur le plan et un vecteur normal perpendiculaire à celui-ci. Les plans sont utilisés pour la symétrie, les projections, les définitions de systèmes de coordonnées et les calculs géométriques.
Namespace
Autodesk.AutoCAD.Geometry
Propriétés Clés
Propriété
Type
Description
Normal
Vector3d
Obtient le vecteur normal perpendiculaire au plan
PointOnPlane
Point3d
Obtient un point sur le plan
Constructeurs
Constructeur
Description
Plane(Point3d, Vector3d)
Crée un plan depuis un point et un vecteur normal
Plane(Point3d, Point3d, Point3d)
Crée un plan depuis trois points non colinéaires
Plane()
Crée le plan XY à l'origine
Méthodes Clés
Méthode
Type de Retour
Description
GetClosestPointTo(Point3d)
Point3d
Obtient le point le plus proche sur le plan vers un point donné
DistanceTo(Point3d)
double
Obtient la distance signée d'un point au plan
IsCoplanarTo(Plane)
bool
Vérifie si coplanaire avec un autre plan
IsPerpendicular(Plane)
bool
Vérifie si perpendiculaire à un autre plan
IsParallelTo(Plane)
bool
Vérifie si parallèle à un autre plan
IsEqualTo(Plane)
bool
Vérifie l'égalité avec la tolérance par défaut
IsEqualTo(Plane, Tolerance)
bool
Vérifie l'égalité avec une tolérance personnalisée
Exemples de Code
Exemple 1: Créer des Plans
// Plan XY à l'origine (Z = 0)PlanexyPlane=newPlane();// Plan depuis un point et une normalePoint3dorigin=Point3d.Origin;Vector3dnormal=Vector3d.ZAxis;PlanecustomPlane=newPlane(origin,normal);// Plan depuis trois pointsPoint3dp1=newPoint3d(0,0,0);Point3dp2=newPoint3d(10,0,0);Point3dp3=newPoint3d(0,10,0);PlaneplaneFrom3Pts=newPlane(p1,p2,p3);ed.WriteMessage($"\nNormale du plan XY : {xyPlane.Normal}");ed.WriteMessage($"\nPoint du plan personnalisé : {customPlane.PointOnPlane}");ed.WriteMessage($"\nNormale du plan 3 points : {planeFrom3Pts.Normal}");
Exemple 2: Distance Point-Plan
// Créer le plan XY à Z = 0PlanexyPlane=newPlane(Point3d.Origin,Vector3d.ZAxis);// Points de testPoint3dpt1=newPoint3d(5,5,10);// Au-dessus du planPoint3dpt2=newPoint3d(3,3,-5);// En dessous du planPoint3dpt3=newPoint3d(7,7,0);// Sur le plan// Calculer les distances signéesdoubledist1=xyPlane.DistanceTo(pt1);// +10doubledist2=xyPlane.DistanceTo(pt2);// -5doubledist3=xyPlane.DistanceTo(pt3);// 0ed.WriteMessage($"\nDistance pt1 au plan : {dist1:F2}");ed.WriteMessage($"\nDistance pt2 au plan : {dist2:F2}");ed.WriteMessage($"\nDistance pt3 au plan : {dist3:F2}");// Positif = au-dessus du plan (dans la direction de la normale)// Négatif = en dessous du plan (opposé à la normale)// Zéro = sur le plan
Exemple 3: Projeter des Points sur le Plan
// Créer un plan vertical (plan YZ à X = 0)PlaneyzPlane=newPlane(Point3d.Origin,Vector3d.XAxis);// Point à projeterPoint3dtestPoint=newPoint3d(10,5,3);// Obtenir le point le plus proche sur le plan (projection)Point3dprojected=yzPlane.GetClosestPointTo(testPoint);// Calculer la distance de projectiondoubledistance=yzPlane.DistanceTo(testPoint);ed.WriteMessage($"\nPoint original : {testPoint}");ed.WriteMessage($"\nPoint projeté : {projected}");ed.WriteMessage($"\nDistance de projection : {distance:F2}");// Dessiner une ligne montrant la projectionusing(Transactiontr=db.TransactionManager.StartTransaction()){LineprojLine=newLine(testPoint,projected);projLine.ColorIndex=1;// RougeBlockTableRecordbtr=tr.GetObject(db.CurrentSpaceId,OpenMode.ForWrite)asBlockTableRecord;btr.AppendEntity(projLine);tr.AddNewlyCreatedDBObject(projLine,true);tr.Commit();}
Exemple 4: Symétrie à Travers un Plan
// Créer un plan de symétrie (plan YZ)PlanemirrorPlane=newPlane(Point3d.Origin,Vector3d.XAxis);// Créer une transformation de symétrieMatrix3dmirror=Matrix3d.Mirroring(mirrorPlane);using(Transactiontr=db.TransactionManager.StartTransaction()){// Sélectionner l'entité à symétriserEntityent=tr.GetObject(selectedId,OpenMode.ForWrite)asEntity;// Appliquer la transformation de symétrieent.TransformBy(mirror);tr.Commit();}ed.WriteMessage($"\nEntité symétrisée à travers le plan");ed.WriteMessage($"\nNormale du plan : {mirrorPlane.Normal}");ed.WriteMessage($"\nPoint du plan : {mirrorPlane.PointOnPlane}");
Exemple 5: Vérifier les Relations entre Plans
// Créer des plansPlanexyPlane=newPlane(Point3d.Origin,Vector3d.ZAxis);PlaneparallelPlane=newPlane(newPoint3d(0,0,10),Vector3d.ZAxis);PlaneperpPlane=newPlane(Point3d.Origin,Vector3d.XAxis);// Vérifier les relationsboolisParallel=xyPlane.IsParallelTo(parallelPlane);// trueboolisPerpendicular=xyPlane.IsPerpendicular(perpPlane);// trueboolisCoplanar=xyPlane.IsCoplanarTo(parallelPlane);// falseed.WriteMessage($"\nXY parallèle à XY décalé : {isParallel}");ed.WriteMessage($"\nXY perpendiculaire à YZ : {isPerpendicular}");ed.WriteMessage($"\nXY coplanaire à XY décalé : {isCoplanar}");// Vérifier si même planPlanesamePlane=newPlane(newPoint3d(5,5,0),Vector3d.ZAxis);boolisCoplanar2=xyPlane.IsCoplanarTo(samePlane);// true (même plan)ed.WriteMessage($"\nXY coplanaire au même plan : {isCoplanar2}");
Exemple 6: Créer un Plan depuis une Entité
using(Transactiontr=db.TransactionManager.StartTransaction()){// Obtenir une entité planaire (ex: Circle, Region, Hatch)Circlecircle=tr.GetObject(circleId,OpenMode.ForRead)asCircle;// Créer un plan depuis les propriétés du cerclePlanecirclePlane=newPlane(circle.Center,circle.Normal);ed.WriteMessage($"\nCentre du cercle : {circle.Center}");ed.WriteMessage($"\nNormale du cercle : {circle.Normal}");ed.WriteMessage($"\nPlan créé depuis le cercle");// Vérifier si un point est sur le plan du cerclePoint3dtestPt=newPoint3d(10,10,0);doubledist=circlePlane.DistanceTo(testPt);boolisOnPlane=Math.Abs(dist)<0.001;ed.WriteMessage($"\nPoint de test sur le plan : {isOnPlane}");tr.Commit();}
Exemple 7: Plan depuis la Normale d'une Face
// Créer un plan depuis trois points définissant une facePoint3dp1=newPoint3d(0,0,0);Point3dp2=newPoint3d(10,0,0);Point3dp3=newPoint3d(5,10,5);// Calculer la normale en utilisant le produit vectorielVector3dv1=p1.GetVectorTo(p2);Vector3dv2=p1.GetVectorTo(p3);Vector3dnormal=v1.CrossProduct(v2).GetNormal();// Créer le planPlanefacePlane=newPlane(p1,normal);// Alternative : utiliser le constructeur 3 pointsPlanefacePlane2=newPlane(p1,p2,p3);ed.WriteMessage($"\nPlan depuis vecteurs - Normale : {facePlane.Normal}");ed.WriteMessage($"\nPlan depuis 3 points - Normale : {facePlane2.Normal}");
Exemple 8: Vérifier le Côté d'un Point par Rapport au Plan
// Créer un plan horizontal à Z = 5Planeplane=newPlane(newPoint3d(0,0,5),Vector3d.ZAxis);Point3dabove=newPoint3d(0,0,10);Point3dbelow=newPoint3d(0,0,2);Point3donPlane=newPoint3d(5,5,5);// Vérifier de quel côté du plandoubledistAbove=plane.DistanceTo(above);doubledistBelow=plane.DistanceTo(below);doubledistOn=plane.DistanceTo(onPlane);if(distAbove>0.001)ed.WriteMessage("\nLe point est au-dessus du plan (dans la direction de la normale)");elseif(distAbove<-0.001)ed.WriteMessage("\nLe point est en dessous du plan");elseed.WriteMessage("\nLe point est sur le plan");ed.WriteMessage($"\nDistances : au-dessus={distAbove:F2}, en dessous={distBelow:F2}, sur={distOn:F6}");
Modèles Courants
Créer un Plan de Construction
// Obtenir le plan UCSEditored=Application.DocumentManager.MdiActiveDocument.Editor;Matrix3ducs=ed.CurrentUserCoordinateSystem;CoordinateSystem3ducsCS=ucs.CoordinateSystem3d;PlaneucsPlane=newPlane(ucsCS.Origin,ucsCS.Zaxis);
Vérifier si des Points sont Coplanaires
Point3dp1=newPoint3d(0,0,0);Point3dp2=newPoint3d(10,0,0);Point3dp3=newPoint3d(0,10,0);Point3dp4=newPoint3d(5,5,0);// Créer un plan depuis les trois premiers pointsPlaneplane=newPlane(p1,p2,p3);// Vérifier si le quatrième point est sur le plandoubledistance=plane.DistanceTo(p4);boolisCoplanar=Math.Abs(distance)<0.001;ed.WriteMessage($"\nLes points sont coplanaires : {isCoplanar}");
Obtenir un Plan Perpendiculaire
// Plan original (XY)PlanexyPlane=newPlane(Point3d.Origin,Vector3d.ZAxis);// Créer un plan perpendiculaire passant par l'axe XPlaneperpPlane=newPlane(Point3d.Origin,Vector3d.YAxis);// Vérifier la perpendicularitéboolisPerp=xyPlane.IsPerpendicular(perpPlane);ed.WriteMessage($"\nPlans perpendiculaires : {isPerp}");
Bonnes Pratiques
Direction de la Normale : S'assurer que le vecteur normal est normalisé pour des résultats cohérents
Trois Points : Lors de la création depuis 3 points, s'assurer qu'ils ne sont pas colinéaires
Distance Signée : Se rappeler que la distance est signée (positive/négative selon la normale)
Tolérance : Utiliser la tolérance lors de la vérification si des points sont sur le plan
Systèmes de Coordonnées : Les plans sont fondamentaux pour les UCS et les transformations de coordonnées
Symétrie : Utiliser les plans pour les transformations de symétrie
Projections : Utiliser GetClosestPointTo() pour les projections point-plan
Classes Associées
Vector3d - Vecteur normal pour la définition du plan
Point3d - Point sur le plan
Matrix3d - Transformations de plan (symétrie, projection)
Line3d - Intersections ligne-plan
CoordinateSystem3d - Définition du système de coordonnées