1 // Created on: 1997-05-14
2 // Created by: Robert COUBLANC
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #include <Select3D_SensitiveTriangle.hxx>
19 #include <TopLoc_Location.hxx>
21 IMPLEMENT_STANDARD_RTTIEXT(Select3D_SensitiveTriangle,Select3D_SensitiveEntity)
23 //==================================================
26 //==================================================
27 Select3D_SensitiveTriangle::Select3D_SensitiveTriangle (const Handle(SelectMgr_EntityOwner)& theOwnerId,
28 const gp_Pnt& thePnt0,
29 const gp_Pnt& thePnt1,
30 const gp_Pnt& thePnt2,
31 const Select3D_TypeOfSensitivity theType)
32 : Select3D_SensitiveEntity (theOwnerId),
35 myPoints[0] = thePnt0;
36 myPoints[1] = thePnt1;
37 myPoints[2] = thePnt2;
38 myCentroid = (thePnt0.XYZ() + thePnt1.XYZ() + thePnt2.XYZ()) * (1.0 / 3.0);
41 //==================================================
43 // Purpose : Checks whether the triangle overlaps
44 // current selecting volume
45 //==================================================
46 Standard_Boolean Select3D_SensitiveTriangle::Matches (SelectBasics_SelectingVolumeManager& theMgr,
47 SelectBasics_PickResult& thePickResult)
49 if (!theMgr.IsOverlapAllowed())
51 if (theMgr.GetActiveSelectionType() == SelectMgr_SelectionType_Polyline)
53 SelectBasics_PickResult aDummy;
54 return theMgr.OverlapsTriangle (myPoints[0], myPoints[1], myPoints[2], mySensType, aDummy);
56 return theMgr.OverlapsPoint (myPoints[0])
57 && theMgr.OverlapsPoint (myPoints[1])
58 && theMgr.OverlapsPoint (myPoints[2]);
61 if (!theMgr.OverlapsTriangle (myPoints[0], myPoints[1], myPoints[2], mySensType, thePickResult))
63 return Standard_False;
66 thePickResult.SetDistToGeomCenter (theMgr.DistToGeometryCenter(myCentroid));
70 //==================================================
71 // Function: GetConnected
73 //==================================================
74 Handle(Select3D_SensitiveEntity) Select3D_SensitiveTriangle::GetConnected()
76 // Create a copy of this
77 Handle(Select3D_SensitiveEntity) aNewEntity =
78 new Select3D_SensitiveTriangle (myOwnerId, myPoints[0], myPoints[1], myPoints[2], mySensType);
83 //==================================================
84 // Function: BoundingBox
85 // Purpose : Returns bounding box of the triangle.
86 // If location transformation is set, it
88 //==================================================
89 Select3D_BndBox3d Select3D_SensitiveTriangle::BoundingBox()
91 const SelectMgr_Vec3 aMinPnt = SelectMgr_Vec3 (Min (myPoints[0].X(), Min (myPoints[1].X(), myPoints[2].X())),
92 Min (myPoints[0].Y(), Min (myPoints[1].Y(), myPoints[2].Y())),
93 Min (myPoints[0].Z(), Min (myPoints[1].Z(), myPoints[2].Z())));
94 const SelectMgr_Vec3 aMaxPnt = SelectMgr_Vec3 (Max (myPoints[0].X(), Max (myPoints[1].X(), myPoints[2].X())),
95 Max (myPoints[0].Y(), Max (myPoints[1].Y(), myPoints[2].Y())),
96 Max (myPoints[0].Z(), Max (myPoints[1].Z(), myPoints[2].Z())));
97 return Select3D_BndBox3d (aMinPnt, aMaxPnt);
100 //=======================================================================
101 //function : DumpJson
103 //=======================================================================
104 void Select3D_SensitiveTriangle::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
106 OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
107 OCCT_DUMP_BASE_CLASS (theOStream, theDepth, Select3D_SensitiveEntity)
109 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, mySensType)
111 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myPoints[0])
112 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myPoints[1])
113 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myPoints[2])
115 Select3D_BndBox3d aBoundingBox = ((Select3D_SensitiveTriangle*)this)->BoundingBox();
116 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &aBoundingBox)