0031456: Visualization - move out Dimensions and Relations from package AIS to PrsDims
authorkgv <kgv@opencascade.com>
Sat, 21 Mar 2020 13:31:03 +0000 (16:31 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 27 Mar 2020 14:58:00 +0000 (17:58 +0300)
The following classes and their subclasses within AIS package
have been moved to new package PrsDim and renamed:
- AIS_Relation  -> PrsDim_Relation;
- AIS_Dimension -> PrsDim_Dimension,

164 files changed:
adm/UDLIST
dox/dev_guides/upgrade/upgrade.md
dox/user_guides/visualization/visualization.md
samples/mfc/standard/Common/AngleParamsVerticesPage.cpp
samples/mfc/standard/Common/LengthParamsEdgePage.cpp
samples/mfc/standard/Common/LengthParamsEdgesPage.cpp
samples/mfc/standard/Common/LengthParamsVerticesPage.cpp
samples/mfc/standard/Common/ParamsFacesPage.cpp
samples/mfc/standard/Common/RadiusParamsPage.cpp
src/AIS/AIS.cxx [deleted file]
src/AIS/AIS.hxx
src/AIS/AIS_AngleDimension.cxx [deleted file]
src/AIS/AIS_AngleDimension.hxx [deleted file]
src/AIS/AIS_Chamf2dDimension.cxx [deleted file]
src/AIS/AIS_Chamf2dDimension.hxx [deleted file]
src/AIS/AIS_Chamf2dDimension.lxx [deleted file]
src/AIS/AIS_Chamf3dDimension.cxx [deleted file]
src/AIS/AIS_Chamf3dDimension.hxx [deleted file]
src/AIS/AIS_Chamf3dDimension.lxx [deleted file]
src/AIS/AIS_ConcentricRelation.cxx [deleted file]
src/AIS/AIS_ConcentricRelation.hxx [deleted file]
src/AIS/AIS_DiameterDimension.cxx [deleted file]
src/AIS/AIS_DiameterDimension.hxx [deleted file]
src/AIS/AIS_Dimension.cxx [deleted file]
src/AIS/AIS_Dimension.hxx [deleted file]
src/AIS/AIS_DimensionOwner.cxx [deleted file]
src/AIS/AIS_DimensionOwner.hxx [deleted file]
src/AIS/AIS_DimensionSelectionMode.hxx [deleted file]
src/AIS/AIS_DisplaySpecialSymbol.hxx [deleted file]
src/AIS/AIS_EllipseRadiusDimension.cxx [deleted file]
src/AIS/AIS_EllipseRadiusDimension.hxx [deleted file]
src/AIS/AIS_EqualDistanceRelation.cxx [deleted file]
src/AIS/AIS_EqualDistanceRelation.hxx [deleted file]
src/AIS/AIS_EqualDistanceRelation.lxx [deleted file]
src/AIS/AIS_EqualRadiusRelation.cxx [deleted file]
src/AIS/AIS_EqualRadiusRelation.hxx [deleted file]
src/AIS/AIS_FixRelation.cxx [deleted file]
src/AIS/AIS_FixRelation.hxx [deleted file]
src/AIS/AIS_IdenticRelation.cxx [deleted file]
src/AIS/AIS_IdenticRelation.hxx [deleted file]
src/AIS/AIS_KindOfDimension.hxx [deleted file]
src/AIS/AIS_KindOfRelation.hxx [deleted file]
src/AIS/AIS_KindOfSurface.hxx [deleted file]
src/AIS/AIS_KindOfUnit.hxx [deleted file]
src/AIS/AIS_LengthDimension.cxx [deleted file]
src/AIS/AIS_LengthDimension.hxx [deleted file]
src/AIS/AIS_MaxRadiusDimension.cxx [deleted file]
src/AIS/AIS_MaxRadiusDimension.hxx [deleted file]
src/AIS/AIS_MidPointRelation.cxx [deleted file]
src/AIS/AIS_MidPointRelation.hxx [deleted file]
src/AIS/AIS_MidPointRelation.lxx [deleted file]
src/AIS/AIS_MinRadiusDimension.cxx [deleted file]
src/AIS/AIS_MinRadiusDimension.hxx [deleted file]
src/AIS/AIS_OffsetDimension.cxx [deleted file]
src/AIS/AIS_OffsetDimension.hxx [deleted file]
src/AIS/AIS_OffsetDimension.lxx [deleted file]
src/AIS/AIS_ParallelRelation.cxx [deleted file]
src/AIS/AIS_ParallelRelation.hxx [deleted file]
src/AIS/AIS_ParallelRelation.lxx [deleted file]
src/AIS/AIS_PerpendicularRelation.cxx [deleted file]
src/AIS/AIS_PerpendicularRelation.hxx [deleted file]
src/AIS/AIS_RadiusDimension.cxx [deleted file]
src/AIS/AIS_RadiusDimension.hxx [deleted file]
src/AIS/AIS_Relation.cxx [deleted file]
src/AIS/AIS_Relation.hxx [deleted file]
src/AIS/AIS_SequenceOfDimension.hxx [deleted file]
src/AIS/AIS_StandardDatum.hxx [deleted file]
src/AIS/AIS_SymmetricRelation.cxx [deleted file]
src/AIS/AIS_SymmetricRelation.hxx [deleted file]
src/AIS/AIS_SymmetricRelation.lxx [deleted file]
src/AIS/AIS_TangentRelation.cxx [deleted file]
src/AIS/AIS_TangentRelation.hxx [deleted file]
src/AIS/AIS_TypeOfAngle.hxx [deleted file]
src/AIS/AIS_TypeOfAngleArrowVisibility.hxx [deleted file]
src/AIS/AIS_TypeOfDist.hxx [deleted file]
src/AIS/FILES
src/PrsDim/AIS_AngleDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_Chamf2dDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_Chamf3dDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_ConcentricRelation.hxx [new file with mode: 0644]
src/PrsDim/AIS_DiameterDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_Dimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_DimensionOwner.hxx [new file with mode: 0644]
src/PrsDim/AIS_EllipseRadiusDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_EqualDistanceRelation.hxx [new file with mode: 0644]
src/PrsDim/AIS_EqualRadiusRelation.hxx [new file with mode: 0644]
src/PrsDim/AIS_FixRelation.hxx [new file with mode: 0644]
src/PrsDim/AIS_IdenticRelation.hxx [new file with mode: 0644]
src/PrsDim/AIS_LengthDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_MaxRadiusDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_MidPointRelation.hxx [new file with mode: 0644]
src/PrsDim/AIS_MinRadiusDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_OffsetDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_ParallelRelation.hxx [new file with mode: 0644]
src/PrsDim/AIS_PerpendicularRelation.hxx [new file with mode: 0644]
src/PrsDim/AIS_RadiusDimension.hxx [new file with mode: 0644]
src/PrsDim/AIS_Relation.hxx [new file with mode: 0644]
src/PrsDim/AIS_SymmetricRelation.hxx [new file with mode: 0644]
src/PrsDim/AIS_TangentRelation.hxx [new file with mode: 0644]
src/PrsDim/FILES [new file with mode: 0644]
src/PrsDim/PrsDim.cxx [new file with mode: 0644]
src/PrsDim/PrsDim.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_AngleDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_AngleDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_Chamf2dDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_Chamf2dDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_Chamf3dDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_Chamf3dDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_ConcentricRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_ConcentricRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_DiameterDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_DiameterDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_Dimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_Dimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_DimensionOwner.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_DimensionOwner.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_DimensionSelectionMode.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_DisplaySpecialSymbol.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_EllipseRadiusDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_EllipseRadiusDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_EqualDistanceRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_EqualDistanceRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_EqualRadiusRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_EqualRadiusRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_FixRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_FixRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_IdenticRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_IdenticRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_KindOfDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_KindOfRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_KindOfSurface.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_LengthDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_LengthDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_MaxRadiusDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_MaxRadiusDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_MidPointRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_MidPointRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_MinRadiusDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_MinRadiusDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_OffsetDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_OffsetDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_ParallelRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_ParallelRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_PerpendicularRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_PerpendicularRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_RadiusDimension.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_RadiusDimension.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_Relation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_Relation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_SymmetricRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_SymmetricRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_TangentRelation.cxx [new file with mode: 0644]
src/PrsDim/PrsDim_TangentRelation.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_TypeOfAngle.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_TypeOfAngleArrowVisibility.hxx [new file with mode: 0644]
src/PrsDim/PrsDim_TypeOfDist.hxx [new file with mode: 0644]
src/QABugs/QABugs_16.cxx
src/QABugs/QABugs_17.cxx
src/QABugs/QABugs_3.cxx
src/TKV3d/PACKAGES
src/TPrsStd/TPrsStd_ConstraintDriver.cxx
src/TPrsStd/TPrsStd_ConstraintTools.cxx
src/ViewerTest/ViewerTest.cxx
src/ViewerTest/ViewerTest_RelationCommands.cxx

index f9645d7..b81cd39 100644 (file)
@@ -202,6 +202,7 @@ n InterfaceGraphic
 n AIS
 n Aspect
 n DsgPrs
+n PrsDim
 n Graphic3d
 n Image
 n Media
index 45c48ea..9f70d21 100644 (file)
@@ -1900,6 +1900,11 @@ The default value of Prs3d_Drawer::DeviationAngle() property has been changed fr
 Methods computing HLR presentation within *PrsMgr_PresentableObject::Compute()* have been renamed to *PrsMgr_PresentableObject::computeHLR()*
 and now accept *Graphic3d_Camera* object instead of removed *Prs3d_Projector*.
 
+@subsection upgrade_750_dimensions Dimension and Relation presentations moved from AIS to PrsDim
+
+Presentation classes displaying Dimensions and Relations have been moved from *AIS* package to *PrsDim*.
+Corresponding classes should be renamed in application code (like *AIS_LengthDimension* -> *PrsDim_LengthDimension*).
+
 @subsection upgrade_750_sensitiveEntity Select3D_SensitiveEntity interface change
 
 The method Select3D_SensitiveEntity::NbSubElements() has been changed to be constant. Select3D_SensitiveEntity subclasses at application level should be updated accordingly.
index 17735f3..2fc8473 100644 (file)
@@ -962,26 +962,26 @@ This command can also draw a sphere surface or a volume with a large amount of p
 
 The **Relation** is made up of constraints on one or more interactive shapes and the corresponding reference geometry. For example, you might want to constrain two edges in a parallel relation. This constraint is considered as an object in its own right, and is shown as a sensitive primitive. This takes the graphic form of a perpendicular arrow marked with the || symbol and lying between the two edges.
 
-The following relations are provided by *AIS*:
-  * *AIS_ConcentricRelation* 
-  * *AIS_FixRelation*
-  * *AIS_IdenticRelation* 
-  * *AIS_ParallelRelation*
-  * *AIS_PerpendicularRelation*
-  * *AIS_Relation*
-  * *AIS_SymmetricRelation*
-  * *AIS_TangentRelation*
+The following relations are provided by *PrsDim*:
+  * *PrsDim_ConcentricRelation*
+  * *PrsDim_FixRelation*
+  * *PrsDim_IdenticRelation*
+  * *PrsDim_ParallelRelation*
+  * *PrsDim_PerpendicularRelation*
+  * *PrsDim_Relation*
+  * *PrsDim_SymmetricRelation*
+  * *PrsDim_TangentRelation*
 
 The list of relations is not exhaustive.
 
 @subsubsection occt_visu_3_5_4 Dimensions
-  * *AIS_AngleDimension*
-  * *AIS_Chamf3dDimension*
-  * *AIS_DiameterDimension*
-  * *AIS_DimensionOwner*
-  * *AIS_LengthDimension*
-  * *AIS_OffsetDimension*
-  * *AIS_RadiusDimension*
+  * *PrsDim_AngleDimension*
+  * *PrsDim_Chamf3dDimension*
+  * *PrsDim_DiameterDimension*
+  * *PrsDim_DimensionOwner*
+  * *PrsDim_LengthDimension*
+  * *PrsDim_OffsetDimension*
+  * *PrsDim_RadiusDimension*
 
 @subsubsection occt_visu_3_5_5 MeshVS_Mesh
 
index 7bc3364..cb39df9 100644 (file)
@@ -6,8 +6,7 @@
 #include "DimensionDlg.h"
 
 #include <AIS_InteractiveContext.hxx>
-#include <AIS_LengthDimension.hxx>
-#include <AIS_AngleDimension.hxx>
+#include <PrsDim_AngleDimension.hxx>
 #include <BRep_Tool.hxx>
 #include <GC_MakePlane.hxx>
 #include <Prs3d_DimensionAspect.hxx>
@@ -128,7 +127,7 @@ void CAngleParamsVerticesPage::OnBnClickedVertex3Btn()
   GC_MakePlane aPlaneBuilder (aP1,aP2,aP3);
 
   Handle(Geom_Plane) aPlane = aPlaneBuilder.Value();
-  Handle(AIS_AngleDimension) anAngleDim = new AIS_AngleDimension (aP1,aP2,aP3);
+  Handle(PrsDim_AngleDimension) anAngleDim = new PrsDim_AngleDimension (aP1,aP2,aP3);
   Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
   anAspect->MakeArrows3d (Standard_False);
   anAspect->MakeText3d (aDimDlg->GetTextType());
@@ -146,7 +145,7 @@ void CAngleParamsVerticesPage::OnBnClickedVertex3Btn()
     }
     else // radians - no special symbol
     {
-      anAngleDim->SetDisplaySpecialSymbol (AIS_DSS_No);
+      anAngleDim->SetDisplaySpecialSymbol (PrsDim_DisplaySpecialSymbol_No);
     }
   }
   anAngleDim->SetDimensionAspect (anAspect);
index 02252f6..89c90ce 100644 (file)
@@ -7,7 +7,7 @@
 
 #include <Standard_Macro.hxx>
 #include <AIS_InteractiveContext.hxx>
-#include <AIS_LengthDimension.hxx>
+#include <PrsDim_LengthDimension.hxx>
 #include <GC_MakePlane.hxx>
 #include <TopExp.hxx>
 
@@ -91,7 +91,7 @@ void CLengthParamsEdgePage::OnBnClickedChooseEdgeBtn()
 
   CDimensionDlg *aDimDlg = (CDimensionDlg*)(GetParentOwner());
 
-  Handle(AIS_LengthDimension) aLenDim = new AIS_LengthDimension (TopoDS::Edge (anEdge), aPlane->Pln());
+  Handle(PrsDim_LengthDimension) aLenDim = new PrsDim_LengthDimension (TopoDS::Edge (anEdge), aPlane->Pln());
   Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
   anAspect->MakeArrows3d (Standard_False);
   anAspect->MakeText3d (aDimDlg->GetTextType());
index f4042b1..6a28148 100644 (file)
@@ -5,8 +5,8 @@
 #include "LengthParamsEdgesPage.h"
 #include "DimensionDlg.h"
 #include <AIS_InteractiveContext.hxx>
-#include <AIS_LengthDimension.hxx>
-#include <AIS_AngleDimension.hxx>
+#include <PrsDim_LengthDimension.hxx>
+#include <PrsDim_AngleDimension.hxx>
 #include <GC_MakePlane.hxx>
 // CLengthParamsEdgesPage dialog
 
@@ -119,7 +119,7 @@ void CLengthParamsEdgesPage::OnBnClickedEdge2Btn()
   if (myIsAngleDimension)
   {
     // Build an angle dimension between two non-parallel edges
-    Handle(AIS_AngleDimension) anAngleDim = new AIS_AngleDimension (myFirstEdge, mySecondEdge);
+    Handle(PrsDim_AngleDimension) anAngleDim = new PrsDim_AngleDimension (myFirstEdge, mySecondEdge);
     anAngleDim->SetDimensionAspect (anAspect);
     anAngleDim->DimensionAspect()->MakeUnitsDisplayed (aDimDlg->IsUnitsDisplayed());
     if (aDimDlg->IsUnitsDisplayed())
@@ -131,7 +131,7 @@ void CLengthParamsEdgesPage::OnBnClickedEdge2Btn()
       }
       else
       {
-        anAngleDim->SetDisplaySpecialSymbol (AIS_DSS_No);
+        anAngleDim->SetDisplaySpecialSymbol (PrsDim_DisplaySpecialSymbol_No);
       }
     }
 
@@ -140,7 +140,7 @@ void CLengthParamsEdgesPage::OnBnClickedEdge2Btn()
   }
   else
   {
-    Handle(AIS_LengthDimension) aLenDim = new AIS_LengthDimension (myFirstEdge, mySecondEdge, aPlane->Pln());
+    Handle(PrsDim_LengthDimension) aLenDim = new PrsDim_LengthDimension (myFirstEdge, mySecondEdge, aPlane->Pln());
     aLenDim->SetDimensionAspect (anAspect);
     aLenDim->SetFlyout (aDimDlg->GetFlyout());
     if (aDimDlg->IsUnitsDisplayed())
index ca61a5d..6b00519 100644 (file)
@@ -6,7 +6,7 @@
 #include "DimensionDlg.h"
 #include <Standard_Macro.hxx>
 #include <AIS_InteractiveContext.hxx>
-#include <AIS_LengthDimension.hxx>
+#include <PrsDim_LengthDimension.hxx>
 #include <GC_MakePlane.hxx>
 
 
@@ -103,7 +103,7 @@ void CLengthParamsVerticesPage::OnBnClickedVertex2Btn()
 
   CDimensionDlg *aDimDlg = (CDimensionDlg*)(this->GetParentOwner());
 
-  Handle(AIS_LengthDimension) aLenDim = new AIS_LengthDimension (aP1, aP2, aPlane->Pln());
+  Handle(PrsDim_LengthDimension) aLenDim = new PrsDim_LengthDimension (aP1, aP2, aPlane->Pln());
 
   Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
   anAspect->MakeArrows3d (Standard_False);
index 05c99d7..99d1747 100644 (file)
@@ -5,8 +5,8 @@
 #include "ParamsFacesPage.h"
 #include "DimensionDlg.h"
 #include <AIS_InteractiveContext.hxx>
-#include <AIS_LengthDimension.hxx>
-#include <AIS_AngleDimension.hxx>
+#include <PrsDim_LengthDimension.hxx>
+#include <PrsDim_AngleDimension.hxx>
 
 // CParamsFacesPage dialog
 
@@ -87,7 +87,7 @@ void CParamsFacesPage::OnBnClickedFacesbtn2()
   if (myIsAngleDimension)
   {
     // Build an angle dimension between two non-parallel edges
-    Handle(AIS_AngleDimension) anAngleDim = new AIS_AngleDimension (myFirstFace, mySecondFace);
+    Handle(PrsDim_AngleDimension) anAngleDim = new PrsDim_AngleDimension (myFirstFace, mySecondFace);
     anAngleDim->SetDimensionAspect (anAspect);
 
     if (aDimDlg->IsUnitsDisplayed())
@@ -99,7 +99,7 @@ void CParamsFacesPage::OnBnClickedFacesbtn2()
       }
       else
       {
-        anAngleDim->SetDisplaySpecialSymbol (AIS_DSS_No);
+        anAngleDim->SetDisplaySpecialSymbol (PrsDim_DisplaySpecialSymbol_No);
       }
     }
 
@@ -108,7 +108,7 @@ void CParamsFacesPage::OnBnClickedFacesbtn2()
   }
   else
   {
-    Handle(AIS_LengthDimension) aLenDim = new AIS_LengthDimension (myFirstFace, mySecondFace);
+    Handle(PrsDim_LengthDimension) aLenDim = new PrsDim_LengthDimension (myFirstFace, mySecondFace);
     aLenDim->SetDimensionAspect (anAspect);
 
     if (aLenDim->DimensionAspect()->IsUnitsDisplayed())
index deadf5d..f2275d1 100644 (file)
@@ -4,8 +4,8 @@
 #include "DimensionDlg.h"
 
 #include <AIS_InteractiveContext.hxx>
-#include <AIS_RadiusDimension.hxx>
-#include <AIS_DiameterDimension.hxx>
+#include <PrsDim_RadiusDimension.hxx>
+#include <PrsDim_DiameterDimension.hxx>
 #include <ElCLib.hxx>
 #include <TopoDS_Shape.hxx>
 
@@ -96,16 +96,16 @@ void CRadiusParamsPage::OnBnClickedObjectBtn()
   myAISContext->ClearSelected (Standard_False);
   CDimensionDlg *aDimDlg = (CDimensionDlg*)(this->GetParentOwner());
   // Try to create dimension if it is possible
-  Handle(AIS_Dimension) aDim;
+  Handle(PrsDim_Dimension) aDim;
   if (myIsDiameterDimension)
   {
-    aDim = new AIS_DiameterDimension (aCircle);
-    Handle(AIS_DiameterDimension)::DownCast(aDim)->SetFlyout (aDimDlg->GetFlyout());
+    aDim = new PrsDim_DiameterDimension (aCircle);
+    Handle(PrsDim_DiameterDimension)::DownCast(aDim)->SetFlyout (aDimDlg->GetFlyout());
   }
   else
   {
-    aDim = new AIS_RadiusDimension (aCircle);
-    Handle(AIS_RadiusDimension)::DownCast(aDim)->SetFlyout (aDimDlg->GetFlyout());
+    aDim = new PrsDim_RadiusDimension (aCircle);
+    Handle(PrsDim_RadiusDimension)::DownCast(aDim)->SetFlyout (aDimDlg->GetFlyout());
   }
 
   Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
diff --git a/src/AIS/AIS.cxx b/src/AIS/AIS.cxx
deleted file mode 100644 (file)
index d9129b0..0000000
+++ /dev/null
@@ -1,1535 +0,0 @@
-// Created on: 1996-12-11
-// Created by: Robert COUBLANC
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#include <AIS.hxx>
-
-#include <Adaptor3d_HCurve.hxx>
-#include <Adaptor3d_HSurface.hxx>
-#include <Bnd_Box.hxx>
-#include <BRep_Tool.hxx>
-#include <BRepAdaptor_Curve.hxx>
-#include <BRepAdaptor_HSurface.hxx>
-#include <BRepAdaptor_Surface.hxx>
-#include <BRepBuilderAPI_MakeEdge.hxx>
-#include <BRepBuilderAPI_MakeVertex.hxx>
-#include <BRepTools.hxx>
-#include <BRepTopAdaptor_FClass2d.hxx>
-#include <ElCLib.hxx>
-#include <ElSLib.hxx>
-#include <GccEnt_QualifiedLin.hxx>
-#include <gce_MakeDir.hxx>
-#include <gce_MakeLin.hxx>
-#include <Geom2d_Circle.hxx>
-#include <Geom_CartesianPoint.hxx>
-#include <Geom_Circle.hxx>
-#include <Geom_ConicalSurface.hxx>
-#include <Geom_Curve.hxx>
-#include <Geom_CylindricalSurface.hxx>
-#include <Geom_Ellipse.hxx>
-#include <Geom_Line.hxx>
-#include <Geom_OffsetSurface.hxx>
-#include <Geom_Plane.hxx>
-#include <Geom_SphericalSurface.hxx>
-#include <Geom_Surface.hxx>
-#include <Geom_SurfaceOfLinearExtrusion.hxx>
-#include <Geom_SurfaceOfRevolution.hxx>
-#include <Geom_ToroidalSurface.hxx>
-#include <Geom_TrimmedCurve.hxx>
-#include <GeomAPI_ExtremaCurveCurve.hxx>
-#include <GeomAPI_IntSS.hxx>
-#include <GeomAPI_ProjectPointOnCurve.hxx>
-#include <GeomAPI_ProjectPointOnSurf.hxx>
-#include <GeomLib.hxx>
-#include <GeomProjLib.hxx>
-#include <gp_Ax1.hxx>
-#include <gp_Ax3.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Elips.hxx>
-#include <gp_Lin.hxx>
-#include <gp_Pln.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Vec.hxx>
-#include <gp_XYZ.hxx>
-#include <Precision.hxx>
-#include <Prs3d_LineAspect.hxx>
-#include <Prs3d_PointAspect.hxx>
-#include <Prs3d_Presentation.hxx>
-#include <StdPrs_Point.hxx>
-#include <StdPrs_WFShape.hxx>
-#include <TColStd_Array1OfReal.hxx>
-#include <TColStd_Array2OfReal.hxx>
-#include <TopExp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Shape.hxx>
-#include <TopoDS_Vertex.hxx>
-#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
-
-const Standard_Real SquareTolerance = Precision::SquareConfusion();
-
-//=======================================================================
-//function : Nearest
-//purpose  :
-//=======================================================================
-gp_Pnt AIS::Nearest(const TopoDS_Shape& ashape, const gp_Pnt& apoint)
-{
-  Standard_Real dist2 = RealLast();
-  Standard_Real curdist2;
-  gp_Pnt result(0.0,0.0,0.0);
-  gp_Pnt curpnt(0.0,0.0,0.0);
-  TopExp_Explorer explo(ashape,TopAbs_VERTEX);
-  while (explo.More())
-    {
-      curpnt = BRep_Tool::Pnt(TopoDS::Vertex(explo.Current()));
-      curdist2 = apoint.SquareDistance(curpnt);
-      if (curdist2 < dist2)
-        {
-          result = curpnt;
-          dist2 = curdist2;
-        }
-      explo.Next();
-    }
-  return result;
-}
-
-//=======================================================================
-//function : Nearest
-//purpose  : For <thePoint> finds the nearest point on <theLine>.
-//=======================================================================
-gp_Pnt AIS::Nearest (const gp_Lin& theLine, const gp_Pnt& thePoint)
-{
-  Handle(Geom_Line) aLine = new Geom_Line (theLine);
-
-  GeomAPI_ProjectPointOnCurve aPointProj (thePoint, aLine);
-  return aPointProj.Point (1);
-}
-
-//=======================================================================
-//function : Nearest
-//purpose  : For the given point finds nearest point on the curve,
-//           return TRUE if found point is belongs to curve
-//              and FALSE otherwise.
-//=======================================================================
-Standard_Boolean AIS::Nearest (const Handle(Geom_Curve)& theCurve,
-                               const gp_Pnt& thePoint,
-                               const gp_Pnt& theFirstPoint,
-                               const gp_Pnt& theLastPoint,
-                               gp_Pnt& theNearestPoint)
-{
-  GeomAPI_ProjectPointOnCurve aPointProj (thePoint, theCurve);
-  theNearestPoint = theCurve->Value (aPointProj.LowerDistanceParameter());
-
-  Standard_Real aLength = theFirstPoint.Distance (theLastPoint);
-
-  if (theNearestPoint.Distance (theFirstPoint) > aLength
-      || theNearestPoint.Distance (theLastPoint) >aLength)
-  {
-    return Standard_False;
-  }
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : Farest
-//purpose  :
-//=======================================================================
-gp_Pnt AIS::Farest( const TopoDS_Shape& aShape, const gp_Pnt& aPoint )
-{
-  Standard_Real MaxDist2 = 0.0e0, curdist2;
-  gp_Pnt Result(0.0,0.0,0.0);
-  gp_Pnt curpnt(0.0,0.0,0.0);
-  TopExp_Explorer Explo( aShape, TopAbs_VERTEX );
-  for (; Explo.More(); Explo.Next())
-    {
-      curpnt = BRep_Tool::Pnt( TopoDS::Vertex( Explo.Current() ) );
-      curdist2 = aPoint.SquareDistance( curpnt );
-      if (curdist2 > MaxDist2)
-        {
-          MaxDist2 = curdist2;
-          Result = curpnt;
-        }
-    }
-  return Result;
-}
-
-
-//=======================================================================
-//function : ComputeGeometry
-//purpose  : for line, circle, ellipse.
-//=======================================================================
-Standard_Boolean AIS::ComputeGeometry (const TopoDS_Edge&  theEdge,
-                                       Handle(Geom_Curve)& theCurve,
-                                       gp_Pnt&             theFirstPnt,
-                                       gp_Pnt&             theLastPnt)
-{
-  TopLoc_Location anEdgeLoc;
-  Standard_Real aFirst, aLast;
-  theCurve = BRep_Tool::Curve (theEdge, anEdgeLoc, aFirst, aLast);
-  if (theCurve.IsNull())
-  {
-    return Standard_False;
-  }
-
-  if (!anEdgeLoc.IsIdentity())
-  {
-    Handle(Geom_Geometry) aGeometry = theCurve->Transformed (anEdgeLoc.Transformation());
-    theCurve = Handle(Geom_Curve)::DownCast (aGeometry);
-  }
-
-  if (theCurve->IsInstance (STANDARD_TYPE (Geom_TrimmedCurve)))
-  {
-    theCurve = Handle(Geom_TrimmedCurve)::DownCast (theCurve)->BasisCurve();
-  }
-
-  if (theCurve->IsInstance (STANDARD_TYPE (Geom_Line)))
-  {
-    Handle(Geom_Line) aLine = Handle(Geom_Line)::DownCast (theCurve);
-    theFirstPnt = ElCLib::Value (aFirst, aLine->Lin());
-    theLastPnt = ElCLib::Value (aLast, aLine->Lin());
-  }
-  else if (theCurve->IsInstance (STANDARD_TYPE (Geom_Circle)))
-  {
-    Handle(Geom_Circle) aCirc = Handle(Geom_Circle)::DownCast (theCurve);
-
-    theFirstPnt = ElCLib::Value (aFirst, aCirc->Circ());
-    theLastPnt = ElCLib::Value (aLast, aCirc->Circ());
-  }
-  else if (theCurve->IsInstance (STANDARD_TYPE (Geom_Ellipse)))
-  {
-    Handle(Geom_Ellipse) anEllipse = Handle(Geom_Ellipse)::DownCast (theCurve);
-    theFirstPnt = ElCLib::Value (aFirst, anEllipse->Elips());
-    theLastPnt = ElCLib::Value (aLast, anEllipse->Elips());
-  }
-  else
-  {
-    return Standard_False;
-  }
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputeGeometry
-//purpose  : for line, circle, ellipse.
-//=======================================================================
-Standard_Boolean AIS::ComputeGeometry (const TopoDS_Edge& theEdge,
-                                       Handle(Geom_Curve)& theCurve,
-                                       gp_Pnt& theFirstPnt,
-                                       gp_Pnt& theLastPnt,
-                                       Standard_Boolean& theIsInfinite)
-{
-  Standard_Real aFirst, aLast;
-
-  BRepAdaptor_Curve anAdaptor (theEdge);
-
-  theCurve = Handle(Geom_Curve)::DownCast
-    (anAdaptor.Curve().Curve()->Transformed (anAdaptor.Trsf()));
-
-  if (theCurve.IsNull())
-  {
-    return Standard_False;
-  }
-
-  aFirst = anAdaptor.FirstParameter();
-  aLast = anAdaptor.LastParameter();
-
-  theIsInfinite = (Precision::IsInfinite (aFirst) || Precision::IsInfinite (aLast));
-
-  if (theCurve->IsInstance (STANDARD_TYPE (Geom_TrimmedCurve)))
-  {
-    theCurve = Handle(Geom_TrimmedCurve)::DownCast (theCurve)->BasisCurve();
-  }
-
-  if (!theIsInfinite)
-  {
-    theFirstPnt = theCurve->Value (aFirst);
-    theLastPnt  = theCurve->Value (aLast);
-  }
-  else
-  {
-    theFirstPnt = gp::Origin();
-    theLastPnt  = gp::Origin();
-  }
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputeGeometry
-//purpose  :
-//=======================================================================
-
-Standard_Boolean AIS::ComputeGeometry (const TopoDS_Edge& theEdge,
-                                       Handle(Geom_Curve)& theCurve,
-                                       gp_Pnt& theFirstPnt,
-                                       gp_Pnt& theLastPnt,
-                                       Handle(Geom_Curve)& theExtCurve,
-                                       Standard_Boolean& theIsInfinite,
-                                       Standard_Boolean& theIsOnPlane,
-                                       const Handle(Geom_Plane)& thePlane)
-{
-  if (thePlane.IsNull())
-  {
-    return Standard_False;
-  }
-
-  Standard_Real aFirst, aLast;
-  BRepAdaptor_Curve aCurveAdaptor (theEdge);
-  theCurve = Handle(Geom_Curve)::DownCast (aCurveAdaptor.Curve().Curve()->Transformed (aCurveAdaptor.Trsf()));
-  aFirst = aCurveAdaptor.FirstParameter();
-  aLast = aCurveAdaptor.LastParameter();
-
-  if (theCurve.IsNull())
-  {
-    return Standard_False;
-  }
-  
-  theExtCurve = theCurve;
-  theIsInfinite = (Precision::IsInfinite (aFirst) || Precision::IsInfinite (aLast));
-
-  // Checks that the projected curve is not in the plane.
-  theIsOnPlane = Standard_True;
-  if (theExtCurve->IsInstance (STANDARD_TYPE (Geom_TrimmedCurve)))
-  {
-    theExtCurve = Handle(Geom_TrimmedCurve)::DownCast (theExtCurve)->BasisCurve();
-  }
-
-  if (theExtCurve->IsInstance (STANDARD_TYPE (Geom_Line)))
-  {
-    Handle(Geom_Line) aLine = Handle(Geom_Line)::DownCast (theExtCurve);
-    theIsOnPlane = thePlane->Pln().Contains (aLine->Lin(),
-                                             Precision::Confusion(),
-                                             Precision::Angular());
-  }
-  else if (theExtCurve->IsInstance (STANDARD_TYPE (Geom_Circle)))
-  {
-    Handle(Geom_Circle) aCircle = Handle(Geom_Circle)::DownCast (theExtCurve);
-
-    gp_Ax3 aCircPos (aCircle->Position());
-    theIsOnPlane = aCircPos.IsCoplanar (thePlane->Pln().Position(),
-                                                Precision::Confusion(),
-                                                Precision::Angular());
-  }
-
-  if (theIsOnPlane)
-  {
-    theExtCurve.Nullify();
-  }
-
-  theCurve = GeomProjLib::ProjectOnPlane (theCurve, thePlane,
-                                          thePlane->Pln().Axis().Direction(),
-                                          Standard_False);
-
-  if (theCurve->IsInstance (STANDARD_TYPE (Geom_Line)))
-  {
-    Handle(Geom_Line) aLine = Handle(Geom_Line)::DownCast (theCurve);
-    if (!theIsInfinite)
-    {
-      theFirstPnt = ElCLib::Value (aFirst, aLine->Lin());
-      theLastPnt = ElCLib::Value (aLast, aLine->Lin());
-    }
-  }
-  else if (theCurve->IsInstance (STANDARD_TYPE (Geom_Circle)))
-  {
-    Handle(Geom_Circle) aCirc = Handle(Geom_Circle)::DownCast (theCurve);
-
-    theFirstPnt = ElCLib::Value (aFirst, aCirc->Circ());
-    theLastPnt = ElCLib::Value (aLast, aCirc->Circ());
-  }
-  else if (theCurve->IsInstance (STANDARD_TYPE (Geom_Ellipse)))
-    {
-      Handle(Geom_Ellipse) anEllipse = Handle(Geom_Ellipse)::DownCast (theCurve);
-
-      theFirstPnt = ElCLib::Value (aFirst, anEllipse->Elips());
-      theLastPnt = ElCLib::Value (aLast, anEllipse->Elips());
-    }
-  else
-  {
-    return Standard_False;
-  }
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputeGeometry
-//purpose  :
-//=======================================================================
-Standard_Boolean AIS::ComputeGeometry (const TopoDS_Edge& theFirstEdge,
-                                      const TopoDS_Edge& theSecondEdge,
-                                      Handle(Geom_Curve)& theFirstCurve,
-                                      Handle(Geom_Curve)& theSecondCurve,
-                                      gp_Pnt& theFirstPnt1,
-                                      gp_Pnt& theLastPnt1,
-                                      gp_Pnt& theFirstPnt2,
-                                      gp_Pnt& theLastPnt2,
-                                      const Handle(Geom_Plane)& thePlane)
-{
-  if (thePlane.IsNull())
-  {
-    return Standard_False;
-  }
-
-  TopLoc_Location aFirstEdgeLoc, aSecondEdgeLoc;
-  Standard_Real aFirst1, aLast1, aFirst2, aLast2;
-  
-  theFirstCurve = BRep_Tool::Curve (theFirstEdge, aFirstEdgeLoc, aFirst1, aLast1);
-  theSecondCurve = BRep_Tool::Curve (theSecondEdge, aSecondEdgeLoc, aFirst2, aLast2);
-
-  if (theFirstCurve.IsNull())
-  {
-    return Standard_False;
-  }
-    
-  if (theSecondCurve.IsNull())
-  {
-    return Standard_False;
-  }
-  
-  if (!aFirstEdgeLoc.IsIdentity())
-  {
-    Handle(Geom_Geometry) aGeomGeometry = theFirstCurve->Transformed (aFirstEdgeLoc.Transformation());
-    theFirstCurve = Handle(Geom_Curve)::DownCast (aGeomGeometry);
-  }
-    
-  if (!aSecondEdgeLoc.IsIdentity())
-  {
-    Handle(Geom_Geometry) aGeomGeometry = theSecondCurve->Transformed (aSecondEdgeLoc.Transformation());
-    theSecondCurve = Handle(Geom_Curve)::DownCast (aGeomGeometry);
-  }
-
-  theFirstCurve = GeomProjLib::ProjectOnPlane (theFirstCurve, thePlane,
-                                               thePlane->Pln().Axis().Direction(),
-                                               Standard_False);
-
-
-  theSecondCurve = GeomProjLib::ProjectOnPlane (theSecondCurve, thePlane,
-                                                thePlane->Pln().Axis().Direction(),
-                                                Standard_False);
-
-
-  if (theFirstCurve->IsInstance (STANDARD_TYPE(Geom_TrimmedCurve)))
-  {
-    theFirstCurve = Handle(Geom_TrimmedCurve)::DownCast (theFirstCurve)->BasisCurve();
-  }
-    
-  if (theSecondCurve->IsInstance (STANDARD_TYPE (Geom_TrimmedCurve)))
-  {
-    theSecondCurve = Handle(Geom_TrimmedCurve)::DownCast (theSecondCurve)->BasisCurve();
-  }
-
-  if (theFirstCurve->IsInstance(STANDARD_TYPE(Geom_Line)))
-  {
-    Handle(Geom_Line) aLine = Handle(Geom_Line)::DownCast (theFirstCurve);
-
-    theFirstPnt1 = ElCLib::Value (aFirst1, aLine->Lin());
-    theLastPnt1 = ElCLib::Value (aLast1, aLine->Lin());
-  }
-  else if (theFirstCurve->IsInstance(STANDARD_TYPE(Geom_Circle)))
-  {
-    Handle(Geom_Circle) aCirc = Handle(Geom_Circle)::DownCast (theFirstCurve);
-      
-    theFirstPnt1 = ElCLib::Value (aFirst1, aCirc->Circ());
-    theLastPnt1 = ElCLib::Value (aLast1, aCirc->Circ());
-  }
-  else
-  {
-    return Standard_False;
-  }
-
-  if (theSecondCurve->IsInstance (STANDARD_TYPE (Geom_Line)))
-{
-    Handle(Geom_Line) aLine = Handle(Geom_Line)::DownCast (theSecondCurve);
-
-    theFirstPnt2 = ElCLib::Value (aFirst2, aLine->Lin());
-    theLastPnt2 = ElCLib::Value (aLast2, aLine->Lin());
-  }
-  else if (theSecondCurve->IsInstance (STANDARD_TYPE (Geom_Circle)))
-  {
-    Handle(Geom_Circle) aCirc = Handle(Geom_Circle)::DownCast (theSecondCurve);
-
-    theFirstPnt2 = ElCLib::Value (aFirst2, aCirc->Circ());
-    theLastPnt2 = ElCLib::Value (aLast2, aCirc->Circ());
-  }
-  else
-  {
-    return Standard_False;
-  }
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputeGeometry
-//purpose  : Computes the geometry of the 2 edges.
-//=======================================================================
-Standard_Boolean AIS::ComputeGeometry (const TopoDS_Edge& theFirstEdge,
-                                       const TopoDS_Edge& theSecondEdge,
-                                       Handle(Geom_Curve)& theFirstCurve,
-                                       Handle(Geom_Curve)& theSecondCurve,
-                                       gp_Pnt& theFirstPnt1,
-                                       gp_Pnt& theLastPnt1,
-                                       gp_Pnt& theFirstPnt2,
-                                       gp_Pnt& theLastPnt2,
-                                       Standard_Boolean& theIsInfinite1,
-                                       Standard_Boolean& theIsInfinite2)
-{
-    theIsInfinite1 = theIsInfinite2 = Standard_False;
-
-   if (!AIS::ComputeGeometry (theFirstEdge, theFirstCurve,theFirstPnt1, theLastPnt1, theIsInfinite1))
-   {
-     return Standard_False;
-   }
-
-   if (!AIS::ComputeGeometry (theSecondEdge, theSecondCurve,theFirstPnt2, theLastPnt2, theIsInfinite2))
-   {
-     return Standard_False;
-   }
-
-  if (theIsInfinite1 || theIsInfinite2)
-  {
-      if (theFirstCurve->DynamicType() == theSecondCurve->DynamicType())
-      {
-          gp_Lin aLin1 = Handle(Geom_Line)::DownCast (theFirstCurve)->Lin();
-          gp_Lin aLin2 = Handle(Geom_Line)::DownCast (theSecondCurve)->Lin();
-
-          if (theIsInfinite1)
-          {
-              theFirstPnt1 = ElCLib::Value (ElCLib::Parameter (aLin2, theFirstPnt2), aLin1);
-              theLastPnt1 = ElCLib::Value (ElCLib::Parameter (aLin2, theLastPnt2), aLin1);
-          }
-          else if (theIsInfinite2)
-          {
-              theFirstPnt2 = ElCLib::Value (ElCLib::Parameter (aLin1, theFirstPnt1), aLin2);
-              theLastPnt2 = ElCLib::Value (ElCLib::Parameter (aLin1, theLastPnt1), aLin2);
-          }
-      }
-      else
-      {
-        if (theIsInfinite1 && !theIsInfinite2)
-        {
-          GeomAPI_ProjectPointOnCurve aProjector (theFirstPnt2, theFirstCurve);
-          theFirstPnt1 = theFirstCurve->Value (aProjector.LowerDistanceParameter ());
-
-          aProjector.Init (theLastPnt2, theFirstCurve);
-          theLastPnt1 = theFirstCurve->Value (aProjector.LowerDistanceParameter ());
-        }
-        else if (!theIsInfinite1 && theIsInfinite2)
-        {
-          GeomAPI_ProjectPointOnCurve aProjector (theFirstPnt1, theSecondCurve);
-          theFirstPnt2 = theSecondCurve->Value (aProjector.LowerDistanceParameter ());
-
-          aProjector.Init (theLastPnt1, theSecondCurve);
-          theLastPnt2 = theSecondCurve->Value (aProjector.LowerDistanceParameter ());
-        }
-        else
-        {
-          return Standard_False;
-        }
-      }
-  }
-
-    return Standard_True;
-}
-
-//=======================================================================
-//function : ComputeGeometry
-//purpose  : Computes the geometry of the 2 edges in the current wp
-//           and the 'right' geometry of the edges if one doesn't
-//           belong to the current working plane.
-//           There may be only one curve that can't belong to the
-//           current working plane ( attachement constraint)
-//           if the 2 edges belong to the current WP, <WhatProj> = 0
-//
-//           indexExt = 0 2 edges are in the current wp
-//           indexExt = 1 first edge is not in the current wp
-//           indexExt = 2 second edge is not in the current wp
-//           if none of the two edges is in the current wp ,
-//           it returns Standard_False
-//=======================================================================
-Standard_Boolean AIS::ComputeGeometry (const TopoDS_Edge& theFirstEdge,
-                                       const TopoDS_Edge& theSecondEdge,
-                                       Standard_Integer& theExtIndex,
-                                       Handle(Geom_Curve)& theFirstCurve,
-                                       Handle(Geom_Curve)& theSecondCurve,
-                                       gp_Pnt& theFirstPnt1,
-                                       gp_Pnt& theLastPnt1,
-                                       gp_Pnt& theFirstPnt2,
-                                       gp_Pnt& theLastPnt2,
-                                       Handle(Geom_Curve)& theExtCurve,
-                                       Standard_Boolean& theIsInfinite1,
-                                       Standard_Boolean& theIsInfinite2,
-                                       const Handle(Geom_Plane)& thePlane)
-{
-  if (thePlane.IsNull())
-  {
-    return Standard_False;
-  }
-
-  theExtCurve.Nullify();
-  theExtIndex = 0;
-
-  Standard_Real aFirst1, aLast1, aFirst2, aLast2;
-  theIsInfinite1 = theIsInfinite2 = Standard_False;
-
-  BRepAdaptor_Curve aFirstAdaptor (theFirstEdge);
-  BRepAdaptor_Curve aSecondAdaptor (theSecondEdge);
-
-  theFirstCurve = Handle(Geom_Curve)::DownCast
-                  (aFirstAdaptor.Curve().Curve()->Transformed (aFirstAdaptor.Trsf()));
-  theSecondCurve = Handle(Geom_Curve)::DownCast
-                  (aSecondAdaptor.Curve().Curve()->Transformed (aSecondAdaptor.Trsf()));
-
-  if (theFirstCurve->IsInstance (STANDARD_TYPE (Geom_TrimmedCurve)))
-  {
-    theFirstCurve = Handle(Geom_TrimmedCurve)::DownCast (theFirstCurve)->BasisCurve();
-  }
-  if (theSecondCurve->IsInstance (STANDARD_TYPE (Geom_TrimmedCurve)))
-  {
-    theSecondCurve = Handle(Geom_TrimmedCurve)::DownCast (theSecondCurve)->BasisCurve();
-  }
-
-  aFirst1 = aFirstAdaptor.FirstParameter();
-  aLast1 = aFirstAdaptor.LastParameter();
-
-  aFirst2 = aSecondAdaptor.FirstParameter();
-  aLast2 = aSecondAdaptor.LastParameter();
-
-  if (theFirstCurve.IsNull() || theSecondCurve.IsNull())
-  {
-    return Standard_False;
-  }
-
-  Handle(Geom_Curve) aFirstSaved = theFirstCurve;
-  Handle(Geom_Curve) aSecondSaved = theSecondCurve;
-
-  // Checks that the projected curve is not in the plane
-  Standard_Boolean isFirstOnPlane,isSecondOnPlane;
-
-  if ((!ComputeGeomCurve (theFirstCurve, aFirst1, aLast1, theFirstPnt1, theLastPnt1, thePlane, isFirstOnPlane))
-      || (!ComputeGeomCurve( theSecondCurve, aFirst2, aLast2, theFirstPnt2, theLastPnt2, thePlane,isSecondOnPlane)))
-  {
-    return Standard_False;
-  }
-
-  if (Precision::IsInfinite (aFirst1) || Precision::IsInfinite (aLast1))
-  {
-    theIsInfinite1 = Standard_True;
-    theExtIndex = 1;
-  }
-  if (Precision::IsInfinite (aFirst2) || Precision::IsInfinite (aLast2))
-  {
-    theIsInfinite2 = Standard_True;
-    theExtIndex = 2;
-  }
-  if (theIsInfinite1 && theIsInfinite2)
-  {
-    theExtIndex = 0;
-  }
-
-  if (theIsInfinite1 || theIsInfinite2)
-  {
-    if (theFirstCurve->DynamicType() == theSecondCurve->DynamicType())
-    {
-      gp_Lin aLin1 = Handle(Geom_Line)::DownCast (theFirstCurve)->Lin();
-      gp_Lin aLin2 = Handle(Geom_Line)::DownCast (theSecondCurve)->Lin();
-
-      if (theExtIndex == 1)
-      {
-        theFirstPnt1 = ElCLib::Value (ElCLib::Parameter (aLin2, theFirstPnt2), aLin1);
-        theLastPnt1 = ElCLib::Value (ElCLib::Parameter (aLin2, theLastPnt2), aLin1);
-      }
-      else if (theExtIndex == 2)
-      {
-        theFirstPnt2 = ElCLib::Value (ElCLib::Parameter (aLin1, theFirstPnt1), aLin2);
-        theLastPnt2 = ElCLib::Value (ElCLib::Parameter (aLin1, theLastPnt1), aLin2);
-      }
-    }
-  }
-
-  if (isFirstOnPlane && isSecondOnPlane)
-  {
-    return Standard_True;
-  }
-
-  if (!isFirstOnPlane && isSecondOnPlane)
-  {// curve 2 only in the plane
-    theExtIndex = 1;
-    theExtCurve = aFirstSaved;
-  }
-  else if (isFirstOnPlane && !isSecondOnPlane)
-  {// curve 1 only in the plane
-    theExtIndex = 2;
-    theExtCurve = aSecondSaved;
-  }
-  else
-  {
-    return Standard_False;
-  }
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputeGeomCurve
-//purpose  : Checks if aCurve belongs to aPlane; if not, projects aCurve in aPlane
-//           and returns aCurveproj;
-//           Return TRUE if ok
-//=======================================================================
-Standard_Boolean AIS::ComputeGeomCurve (Handle(Geom_Curve)& aCurve,
-                                        const Standard_Real first1,
-                                        const Standard_Real last1,
-                                        gp_Pnt& FirstPnt1,
-                                        gp_Pnt& LastPnt1,
-                                        const Handle(Geom_Plane)& aPlane,
-                                        Standard_Boolean& isOnPlane)
-{
-  isOnPlane = Standard_True;
-  const Standard_Integer NodeNumber = 20;
-  Standard_Real Delta = (last1 - first1) / (NodeNumber - 1);
-  if (Delta <= Precision::PConfusion())
-  {
-    Delta = last1 - first1;
-  }
-
-  gp_Pnt CurPnt(0.0, 0.0, 0.0);
-  Standard_Real CurPar = first1;
-  for (Standard_Integer i = 1; i <= NodeNumber; i++)
-  {
-    CurPnt = aCurve->Value( CurPar );
-    if (aPlane->Pln().SquareDistance( CurPnt ) > SquareTolerance)
-    {
-      isOnPlane = Standard_False;
-      break;
-    }
-    CurPar += Delta;
-  }
-
-  if (!Precision::IsInfinite(first1) && !Precision::IsInfinite(last1))
-  {
-    FirstPnt1 = aCurve->Value (first1);
-    LastPnt1  = aCurve->Value (last1);
-  }
-
-  if (!isOnPlane)
-  {
-    Handle(Geom_Curve) aGeomCurve = GeomProjLib::ProjectOnPlane (aCurve,
-                                                                aPlane,
-                                                                aPlane->Pln().Axis().Direction(),
-                                                                Standard_False);
-    aCurve = aGeomCurve;
-    if (aCurve->IsInstance(STANDARD_TYPE(Geom_TrimmedCurve)))
-    {
-      aCurve = Handle(Geom_TrimmedCurve)::DownCast (aCurve)->BasisCurve();
-    }
-    if (! Precision::IsInfinite(first1) && ! Precision::IsInfinite(last1))
-    {
-      FirstPnt1 = AIS::ProjectPointOnPlane( FirstPnt1, aPlane->Pln() );
-      LastPnt1 = AIS::ProjectPointOnPlane( LastPnt1, aPlane->Pln() );
-    }
-  }
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputeGeometry
-//purpose  : computes the point corresponding to the vertex <aVertex>
-//           in the plane <aPlane>. If the vertex is already in the plane
-//           <isOnPlane>, <isOnPlane> = true.
-//           <point> is the projected vertex in the plane.
-//=======================================================================
-Standard_Boolean  AIS::ComputeGeometry(const TopoDS_Vertex& aVertex,
-                                       gp_Pnt& point,
-                                       const Handle(Geom_Plane)& aPlane,
-                                       Standard_Boolean& isOnPlane)
-{
-  point = BRep_Tool::Pnt(aVertex);
-  isOnPlane = aPlane->Pln().Contains(point,  Precision::Confusion());
-  if ( !isOnPlane) {
-    point = AIS::ProjectPointOnPlane( point, aPlane->Pln() );
-  }
-  return Standard_True;
-}
-
-//=======================================================================
-//function : GetPlaneFromFace
-//purpose  :
-//           Returns type of surface which can be Plane or OtherSurface
-//=======================================================================
-Standard_Boolean AIS::GetPlaneFromFace(const TopoDS_Face&            aFace,
-                                        gp_Pln &                     aPlane,
-                                        Handle( Geom_Surface )&      aSurf,
-                                        AIS_KindOfSurface &          aSurfType,
-                                        Standard_Real &              Offset)
-
-{
-  Standard_Boolean Result = Standard_False;
-  BRepAdaptor_Surface surf1( aFace );
-  Handle( Adaptor3d_HSurface ) surf2;
-  Standard_Boolean isOffset = Standard_False;
-  Offset = 0.0;
-
-  if (surf1.GetType() == GeomAbs_OffsetSurface)
-  {
-    // Extracting Basis Surface
-    surf2 = surf1.BasisSurface();
-    isOffset = Standard_True;
-  }
-  else
-    surf2 = new BRepAdaptor_HSurface( surf1 );
-
-  aSurf = surf1.Surface().Surface();
-  //  aSurf->Transform(surf1.Trsf()) ;
-  aSurf = Handle( Geom_Surface )::DownCast( aSurf->Transformed( surf1.Trsf() ) );
-
-  if (surf2->GetType() == GeomAbs_Plane)
-  {
-    aPlane = surf2->Plane();
-    aSurfType = AIS_KOS_Plane;
-    Result = Standard_True;
-  }
-
-  else if (surf2->GetType() == GeomAbs_SurfaceOfExtrusion)
-  {
-    Handle( Adaptor3d_HCurve ) BasisCurve = surf2->BasisCurve();
-    gp_Dir ExtrusionDir = surf2->Direction();
-    if (BasisCurve->GetType() == GeomAbs_Line)
-    {
-      gp_Lin BasisLine = BasisCurve->Line();
-      gp_Dir LineDir = BasisLine.Direction();
-      gp_Pnt LinePos = BasisLine.Location();
-      gp_Pln thePlane( LinePos, LineDir ^ ExtrusionDir);
-      aPlane = thePlane;
-      aSurfType = AIS_KOS_Plane;
-      Result = Standard_True;
-    }
-  }
-
-  if (Result == Standard_True && isOffset)
-  {
-    aSurf = (Handle( Geom_OffsetSurface )::DownCast( aSurf ))->Surface();
-    aPlane = (Handle( Geom_Plane )::DownCast( aSurf ))->Pln();
-  }
-  if (Result == Standard_False)
-  {
-    if (isOffset)
-    {
-      Handle( Standard_Type ) TheType = aSurf->DynamicType();
-      if (TheType == STANDARD_TYPE(Geom_CylindricalSurface) ||
-        TheType == STANDARD_TYPE(Geom_ConicalSurface)     ||
-        TheType == STANDARD_TYPE(Geom_SphericalSurface)   ||
-        TheType == STANDARD_TYPE(Geom_ToroidalSurface))
-      {
-        aSurf = (Handle( Geom_OffsetSurface )::DownCast( aSurf ))->Surface();
-      }
-      else
-      {
-        Offset = (Handle( Geom_OffsetSurface )::DownCast( aSurf ))->Offset();
-        aSurf =  (Handle( Geom_OffsetSurface )::DownCast( aSurf ))->BasisSurface();
-      }
-    }
-    Handle( Standard_Type ) TheType = aSurf->DynamicType();
-    if (TheType == STANDARD_TYPE(Geom_CylindricalSurface))
-      aSurfType = AIS_KOS_Cylinder;
-    else if (TheType == STANDARD_TYPE(Geom_ConicalSurface))
-      aSurfType = AIS_KOS_Cone;
-    else if (TheType == STANDARD_TYPE(Geom_SphericalSurface))
-      aSurfType = AIS_KOS_Sphere;
-    else if (TheType == STANDARD_TYPE(Geom_ToroidalSurface))
-      aSurfType = AIS_KOS_Torus;
-    else if (TheType == STANDARD_TYPE(Geom_SurfaceOfRevolution))
-      aSurfType = AIS_KOS_Revolution;
-    else if (TheType == STANDARD_TYPE(Geom_SurfaceOfLinearExtrusion))
-      aSurfType = AIS_KOS_Extrusion;
-    else
-      aSurfType = AIS_KOS_OtherSurface;
-  }
-  return Result;
-}
-
-
-//=======================================================================
-//function : ProjectPointOnPlane
-//purpose  :
-//=======================================================================
-
-gp_Pnt AIS::ProjectPointOnPlane( const gp_Pnt & aPoint, const gp_Pln & aPlane )
-{
-  gp_Vec aVec( aPlane.Location(), aPoint );
-  gp_Vec Normal = aPlane.Axis().Direction();
-  Normal = (aVec * Normal) * Normal;
-
-  return ( aPoint.Translated( -Normal ) );
-}
-
-//=======================================================================
-//function : ProjectPointOnLine
-//purpose  :
-//=======================================================================
-
-gp_Pnt AIS::ProjectPointOnLine( const gp_Pnt & aPoint, const gp_Lin & aLine )
-{
-  gp_XYZ LinLoc = aLine.Location().XYZ();
-  gp_XYZ LinDir = aLine.Direction().XYZ();
-  Standard_Real Parameter = (aPoint.XYZ() - LinLoc) * LinDir;
-  gp_Pnt Result( LinLoc + Parameter * LinDir );
-  return Result;
-}
-
-//=======================================================================
-//function : InitFaceLength
-//purpose  : 
-//=======================================================================
-void AIS::InitFaceLength (const TopoDS_Face& theFace,
-                          gp_Pln& thePlane,
-                          Handle(Geom_Surface)& theSurface,
-                          AIS_KindOfSurface& theSurfaceType,
-                          Standard_Real& theOffset)
-{
-  if (AIS::GetPlaneFromFace (theFace, thePlane, theSurface, theSurfaceType, theOffset)
-   && Abs (theOffset) > Precision::Confusion())
-  {
-    theSurface = new Geom_OffsetSurface (theSurface, theOffset);
-    theOffset = 0.0e0;
-  }
-}
-
-//=======================================================================
-//function : InitAngleBetweenPlanarFaces
-//purpose  :
-//=======================================================================
-Standard_Boolean AIS::InitAngleBetweenPlanarFaces (const TopoDS_Face&          theFirstFace,
-                                                   const TopoDS_Face&          theSecondFace,
-                                                   gp_Pnt &                    theCenter,
-                                                   gp_Pnt &                    theFirstAttach,
-                                                   gp_Pnt &                    theSecondAttach,
-                                                   const Standard_Boolean      theIsFirstPointSet)
-{
-  Handle(Geom_Plane) aFirstPlane = Handle(Geom_Plane)::DownCast (BRep_Tool::Surface (theFirstFace));
-  Handle(Geom_Plane) aSecondPlane = Handle(Geom_Plane)::DownCast (BRep_Tool::Surface (theSecondFace));
-
-  GeomAPI_IntSS aPlaneIntersector (aFirstPlane, aSecondPlane, Precision::Confusion());
-
-  // Fails if two planes haven't only one intersection line.
-  if (!aPlaneIntersector.IsDone())
-  {
-    return Standard_False;
-  }
-
-  if (aPlaneIntersector.NbLines() != 1)
-  {
-    return Standard_False;
-  }
-
-  // Get intersect line.
-  Handle(Geom_Curve) anIntersectCurve = aPlaneIntersector.Line (1);
-
-  Handle(Geom_Line) anIntersectLine = Handle(Geom_Line)::DownCast (anIntersectCurve);
-
-  if (anIntersectLine.IsNull())
-  {
-    return Standard_False;
-  }
-
-  gp_Lin anIntersectLin = anIntersectLine->Lin();
-
-  gp_Pnt aFirstCenter, aSecondCenter;
-  Standard_Real anU1Min, anU1Max, aV1Min, aV1Max;
-  Standard_Real anU2Min, anU2Max, aV2Min, aV2Max;
-
-  BRepTools::UVBounds (theFirstFace, anU1Min, anU1Max, aV1Min, aV1Max);
-  BRepTools::UVBounds (theSecondFace, anU2Min, anU2Max, aV2Min, aV2Max);
-
-  // Get first and second attach.
-  if (theIsFirstPointSet)
-  {
-    GeomAPI_ProjectPointOnSurf aProjector (theFirstAttach, aFirstPlane);
-    if (!aProjector.IsDone())
-    {
-      return Standard_False;
-    }
-
-    aFirstCenter = aProjector.Point (1);
-  }
-  else
-  {
-    aFirstCenter = aFirstPlane->Value ((anU1Min + anU1Max) * 0.5, (aV1Min + aV1Max) * 0.5);
-  }
-
-  aSecondCenter = aSecondPlane->Value ((anU2Min + anU2Max) * 0.5, (aV2Min + aV2Max) * 0.5);
-
-  GeomAPI_ProjectPointOnCurve aProj (aFirstCenter, anIntersectCurve);
-  theCenter = aProj.NearestPoint();
-
-  gp_Vec aFirstNormal = anIntersectLin.Direction() ^ aFirstPlane->Pln().Axis().Direction();
-  if (aFirstNormal * gp_Vec (theCenter, aFirstCenter) < 0.0)
-  {
-    aFirstNormal.Reverse();
-  }
-  theFirstAttach = theCenter.Translated (aFirstNormal);
-
-  gp_Vec aSecondNormal = anIntersectLin.Direction() ^ aSecondPlane->Pln().Axis().Direction();
-  if (aSecondNormal * gp_Vec (theCenter, aSecondCenter) < 0.0)
-  {
-    aSecondNormal.Reverse();
-  }
-  theSecondAttach = theCenter.Translated (aSecondNormal);
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : InitAngleBetweenCurvilinearFaces
-//purpose  :
-//=======================================================================
-Standard_Boolean AIS::InitAngleBetweenCurvilinearFaces (const TopoDS_Face&          theFirstFace,
-                                                        const TopoDS_Face&          theSecondFace,
-                                                        const AIS_KindOfSurface     theFirstSurfType,
-                                                        const AIS_KindOfSurface     theSecondSurfType,
-                                                        gp_Pnt&                     theCenter,
-                                                        gp_Pnt&                     theFirstAttach,
-                                                        gp_Pnt&                     theSecondAttach,
-                                                        const Standard_Boolean      theIsFirstPointSet)
-{
-  Handle(Geom_Surface) aFirstSurf = BRep_Tool::Surface (theFirstFace);
-  Handle(Geom_Surface) aSecondSurf = BRep_Tool::Surface (theSecondFace);
-
-  // Find intersection curve between two surfaces.
-  GeomAPI_IntSS aSurfaceIntersector (aFirstSurf, aSecondSurf, Precision::Confusion());
-
-  // Fails if two planes haven't only one intersection line.
-  if (!aSurfaceIntersector.IsDone())
-  {
-    return Standard_False;
-  }
-
-  if (aSurfaceIntersector.NbLines() != 1)
-  {
-    return Standard_False;
-  }
-
-  // Get intersect line.
-  Handle(Geom_Curve) anIntersectCurve = aSurfaceIntersector.Line (1);
-
-  Handle(Geom_Line) aFirstLine, aSecondLine;
-  Standard_Real aFirstU = 0.0;
-  Standard_Real aFirstV = 0.0;
-
-  if (theIsFirstPointSet)
-  {
-    GeomAPI_ProjectPointOnSurf aProjector (theFirstAttach, aFirstSurf);
-    if (!aProjector.IsDone())
-    {
-      return Standard_False;
-    }
-
-    theFirstAttach = aProjector.Point (1);
-  }
-  else
-  {
-    theFirstAttach = aFirstSurf->Value (aFirstU, aFirstV);
-  }
-
-  aFirstLine = Handle(Geom_Line)::DownCast (aFirstSurf->UIso (aFirstU));
-
-  if (theSecondSurfType == AIS_KOS_Cylinder)
-  {
-    Handle(Geom_CylindricalSurface) aCylinder = Handle(Geom_CylindricalSurface)::DownCast (aSecondSurf);
-
-    Standard_Real aSecondU = aCylinder->Cylinder().XAxis().Direction().Angle(
-                               gce_MakeDir (ProjectPointOnLine (theFirstAttach,
-                                                                gp_Lin (aCylinder->Cylinder().Axis())),
-                                            theFirstAttach));
-
-    aSecondLine = Handle(Geom_Line)::DownCast (aCylinder->UIso (aSecondU));
-  }
-  else if (theSecondSurfType == AIS_KOS_Cone)
-  {
-    Handle(Geom_ConicalSurface) aCone = Handle(Geom_ConicalSurface)::DownCast (aSecondSurf);
-
-    gp_Dir anXdirection = aCone->Cone().XAxis().Direction();
-
-    gp_Dir aToFirstAttach = gce_MakeDir (ProjectPointOnLine (theFirstAttach,
-                                                             gp_Lin (aCone->Cone().Axis())),
-                                         theFirstAttach);
-
-    Standard_Real aSecondU = anXdirection.Angle (aToFirstAttach);
-
-    // Check sign
-    if (!anXdirection.IsEqual (aToFirstAttach, Precision::Angular()) &&
-        !anXdirection.IsOpposite (aToFirstAttach, Precision::Angular()) &&
-        (anXdirection ^ aToFirstAttach) * aCone->Cone().Axis().Direction() < 0.0)
-    {
-      aSecondU = 2*M_PI - aSecondU;
-    }
-    aSecondLine = Handle( Geom_Line )::DownCast (aCone->UIso(aSecondU));
-  }
-  else
-  {
-    return Standard_False;
-  }
-
-  // If angle can be computed between two lines.
-  if (!(aFirstLine->Lin().Direction().IsEqual (aSecondLine->Lin().Direction(), Precision::Angular() )) &&
-      !(aFirstLine->Lin().Direction().IsOpposite (aSecondLine->Lin().Direction(), Precision::Angular())))
-  {
-    GeomAPI_ExtremaCurveCurve anIntersector (aFirstLine, aSecondLine);
-    anIntersector.Points (1, theCenter, theCenter);
-
-    // Move theFirstAttach on aFirstLine if it is on theCenter.
-    if (theCenter.SquareDistance(theFirstAttach ) <= SquareTolerance)
-    {
-      gp_Vec aDir (aFirstLine->Lin().Direction());
-      theFirstAttach = theCenter.Translated (aDir);
-
-      // theFirstAttach should be on theFirstSurf.
-      Standard_Real anU, aV;
-      if (theFirstSurfType == AIS_KOS_Cylinder)
-      {
-        ElSLib::Parameters ((Handle(Geom_CylindricalSurface)::DownCast (aFirstSurf))->Cylinder(),
-                            theFirstAttach, anU, aV);
-
-        theFirstAttach = ElSLib::Value (aFirstU, aV,
-                                        (Handle( Geom_CylindricalSurface )::DownCast (aFirstSurf))->Cylinder() );
-      }
-      else if (theFirstSurfType == AIS_KOS_Cone)
-      {
-        ElSLib::Parameters ((Handle(Geom_ConicalSurface)::DownCast (aFirstSurf))->Cone(),
-                             theFirstAttach, anU, aV);
-        theFirstAttach = ElSLib::Value (aFirstU, aV,
-                                       (Handle(Geom_ConicalSurface)::DownCast (aFirstSurf))->Cone());
-      }
-      else
-      {
-        return Standard_False;
-      }
-    }
-
-    // Find theSecondAttach
-    GeomAPI_ProjectPointOnSurf aProjector (theFirstAttach, aSecondSurf);
-    if (!aProjector.IsDone())
-    {
-      return Standard_False;
-    }
-    Standard_Real anU, aV;
-    aProjector.LowerDistanceParameters (anU, aV);
-    theSecondAttach = aSecondSurf->Value (anU, aV);
-  }
-  else // aFirstLine and aSecondLine are coincident
-  {
-      gp_Vec aDir (aFirstLine->Lin().Direction());
-      theFirstAttach = theCenter.Translated (aDir);
-      theSecondAttach = theCenter.Translated (-aDir);
-  }
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputeLengthBetweenCurvilinearFaces
-//purpose  : 
-//=======================================================================
-void AIS::InitLengthBetweenCurvilinearFaces (const TopoDS_Face&    theFirstFace,
-                                             const TopoDS_Face&    theSecondFace,
-                                             Handle(Geom_Surface)& theFirstSurf,
-                                             Handle(Geom_Surface)& theSecondSurf,
-                                             gp_Pnt&               theFirstAttach,
-                                             gp_Pnt&               theSecondAttach,
-                                             gp_Dir&               theDirOnPlane)
-{
-  GeomAPI_ProjectPointOnSurf aProjector;
-  Standard_Real aPU, aPV;
-
-  TopExp_Explorer anExplorer (theFirstFace, TopAbs_VERTEX);
-
-  theFirstAttach = BRep_Tool::Pnt (TopoDS::Vertex (anExplorer.Current()));
-  aProjector.Init (theFirstAttach, theFirstSurf);
-
-  theFirstAttach = aProjector.NearestPoint();
-  aProjector.LowerDistanceParameters (aPU, aPV);
-
-  gp_Vec aD1U, aD1V;
-  theFirstSurf->D1 (aPU, aPV, theFirstAttach, aD1U, aD1V);
-
-  if (aD1U.SquareMagnitude() <= SquareTolerance || aD1V.SquareMagnitude() <= SquareTolerance)
-  {
-    theFirstAttach = AIS::Farest (theFirstFace, theFirstAttach);
-    aProjector.Init (theFirstAttach, theFirstSurf);
-    aProjector.LowerDistanceParameters (aPU, aPV);
-    theFirstSurf->D1 (aPU, aPV, theFirstAttach, aD1U, aD1V);
-  }
-
-  aD1U.Normalize();
-  aD1V.Normalize();
-
-  theDirOnPlane = gp_Dir (aD1U);
-
-  gp_Dir aFirstSurfN = gp_Dir (aD1U ^ aD1V);
-
-  aProjector.Init (theFirstAttach, theSecondSurf);
-
-  Standard_Integer aBestPointIndex = 0;
-  Standard_Real aMinDist = RealLast();
-  gp_Dir aLocalDir;
-
-  for (Standard_Integer aPointIt = 1; aPointIt <= aProjector.NbPoints(); aPointIt++)
-  {
-    aProjector.Parameters (aPointIt, aPU, aPV);
-
-    theSecondSurf->D1 (aPU, aPV, theSecondAttach, aD1U, aD1V);
-
-    aLocalDir = aD1U.SquareMagnitude() <= SquareTolerance || aD1V.SquareMagnitude() <= SquareTolerance
-              ? gp_Dir (gp_Vec (theFirstAttach, aProjector.Point (aPointIt)))
-              : gp_Dir (aD1U ^ aD1V);
-
-    if (aFirstSurfN.IsParallel (aLocalDir, Precision::Angular()) && aProjector.Distance (aPointIt) < aMinDist)
-    {
-      aBestPointIndex = aPointIt;
-      aMinDist = aProjector.Distance (aPointIt);
-    }
-  }
-
-  if (aBestPointIndex == 0)
-  {
-    theSecondAttach = theFirstAttach;
-  }
-  else
-  {
-    theSecondAttach = aProjector.Point (aBestPointIndex);
-    aProjector.Parameters (aBestPointIndex, aPU, aPV);
-
-    // Now there is projection of FirstAttach onto SecondSurf in aProjector
-    BRepTopAdaptor_FClass2d aClassifier (theSecondFace, Precision::Confusion());
-
-    TopAbs_State aState = 
-      aClassifier.Perform (gp_Pnt2d (aPU, aPV), theSecondSurf->IsUPeriodic() || theSecondSurf->IsVPeriodic());
-
-    if (aState == TopAbs_OUT || aState == TopAbs_UNKNOWN)
-    {
-      theSecondAttach = AIS::Nearest (theSecondFace, theSecondAttach);
-    }
-  }
-}
-
-gp_Pnt AIS::TranslatePointToBound( const gp_Pnt & aPoint, const gp_Dir & aDir, const Bnd_Box & aBndBox )
-{
-  if (aBndBox.IsOut( aPoint ))
-    return aPoint;
-  else
-    {
-      gp_Pnt Result(0.0,0.0,0.0);
-      TColStd_Array2OfReal Bound( 1, 3, 1, 2 );
-      TColStd_Array1OfReal Origin( 1, 3 );
-      TColStd_Array1OfReal Dir( 1, 3 );
-      Standard_Real t;
-      
-      aBndBox.Get( Bound(1,1), Bound(2,1), Bound(3,1), Bound(1,2),  Bound(2,2), Bound(3,2) );
-      aPoint.Coord( Origin(1), Origin(2), Origin(3) );
-      aDir.Coord( Dir(1), Dir(2), Dir(3) );
-
-      Bnd_Box EnlargedBox = aBndBox;
-      EnlargedBox.Enlarge( aBndBox.GetGap() + Precision::Confusion() );
-
-      Standard_Boolean IsFound = Standard_False;
-      for (Standard_Integer i = 1; i <= 3; i++)
-       {
-         if (Abs( Dir( i ) ) <= gp::Resolution())
-           continue;
-         for (Standard_Integer j = 1; j <= 2; j++)
-           {
-             t = (Bound( i, j ) - Origin( i )) / Dir( i );
-             if (t < 0.0e0)
-               continue;
-             Result = aPoint.Translated( gp_Vec( aDir ) * t );
-             if (! EnlargedBox.IsOut( Result ))
-               {
-                 IsFound = Standard_True;
-                 break;
-               }
-           }
-         if (IsFound) break;
-       }
-      return Result;
-    }
-}
-
-
-//=======================================================================
-//function : InDomain
-//purpose  : 
-//=======================================================================
-
-Standard_Boolean AIS::InDomain(const Standard_Real fpar,
-                              const Standard_Real lpar,
-                              const Standard_Real para) 
-{
-  if (fpar >= 0.) {
-    if(lpar > fpar)
-      return ((para >= fpar) && (para <= lpar));
-    else { // fpar > lpar
-      Standard_Real delta = 2*M_PI-fpar;
-      Standard_Real lp, par, fp;
-      lp = lpar + delta;
-      par = para + delta;
-      while(lp > 2*M_PI) lp-=2*M_PI;
-      while(par > 2*M_PI) par-=2*M_PI;
-      fp = 0.;
-      return ((par >= fp) && (par <= lp));
-    }
-      
-  }
-  if (para >= (fpar+2*M_PI)) return Standard_True;
-  if (para <= lpar) return Standard_True;
-  return Standard_False;
-}
-
-//=======================================================================
-//function : DistanceFromApex
-//purpose  : calculates parametric length arc of ellipse
-//=======================================================================
-
-Standard_Real AIS::DistanceFromApex(const gp_Elips & elips,
-                                   const gp_Pnt   & Apex,
-                                   const Standard_Real par)
-{
-  Standard_Real dist;
-  Standard_Real parApex = ElCLib::Parameter ( elips, Apex );
-  if(parApex == 0.0 || parApex == M_PI) 
-    {//Major case
-      if(parApex == 0.0) //pos Apex
-       dist = (par < M_PI) ? par : (2*M_PI - par);
-      else //neg Apex
-       dist = (par < M_PI) ? ( M_PI - par) : ( par - M_PI );
-    }
-  else 
-    {// Minor case
-      if(parApex == M_PI / 2) //pos Apex
-       {
-         if(par <= parApex + M_PI && par > parApex) // 3/2*M_PI < par < M_PI/2
-           dist = par - parApex;
-         else 
-           { 
-             if(par >  parApex + M_PI) // 3/2*M_PI < par < 2*M_PI
-               dist = 2*M_PI - par + parApex;
-             else
-               dist = parApex - par; 
-           }
-         }
-      else //neg Apex == 3/2*M_PI
-       {
-         if(par <= parApex && par >= M_PI/2) // M_PI/2 < par < 3/2*M_PI
-           dist = parApex - par;
-         else
-           {
-             if(par >  parApex) // 3/2*M_PI < par < 2*M_PI
-               dist = par - parApex;
-             else
-               dist = par + M_PI/2; // 0 < par < M_PI/2
-           }
-       }
-    }
-  return dist;
-}
-
-//=======================================================================
-//function : NearestApex
-//purpose  : 
-//=======================================================================
-
-gp_Pnt AIS::NearestApex(const gp_Elips & elips,
-                       const gp_Pnt   & pApex,
-                       const gp_Pnt   & nApex,
-                       const Standard_Real fpara,
-                       const Standard_Real lpara,
-                             Standard_Boolean & IsInDomain)
-{
-  Standard_Real parP, parN;
-  gp_Pnt EndOfArrow(0.0,0.0,0.0);
-  IsInDomain = Standard_True;
-  parP = ElCLib::Parameter ( elips, pApex );
-  if(InDomain(fpara, lpara, parP)) EndOfArrow = pApex;
-  else 
-    {
-      parN = ElCLib::Parameter ( elips, nApex );
-      if(InDomain(fpara, lpara, parN)) EndOfArrow = nApex;
-      else {
-       IsInDomain = Standard_False;
-       Standard_Real posd = Min(DistanceFromApex (elips,pApex, fpara), 
-                                DistanceFromApex (elips,pApex, lpara));
-       Standard_Real negd = Min(DistanceFromApex (elips,nApex, fpara), 
-                                DistanceFromApex (elips,nApex, lpara));
-       if( posd < negd ) 
-         EndOfArrow = pApex;
-       else
-         EndOfArrow = nApex;
-      }
-    }
-  return EndOfArrow;
-}
-
-//=======================================================================
-//function : ComputeProjEdgePresentation
-//purpose  : 
-//=======================================================================
-
-void AIS::ComputeProjEdgePresentation (const Handle(Prs3d_Presentation)& aPresentation,
-                                       const Handle(Prs3d_Drawer)& aDrawer,
-                                       const TopoDS_Edge& anEdge,
-                                       const Handle(Geom_Curve)& ProjCurve,
-                                       const gp_Pnt& FirstP,
-                                       const gp_Pnt& LastP,
-                                       const Quantity_NameOfColor aColor,
-                                       const Standard_Real aWidth,
-                                       const Aspect_TypeOfLine aProjTOL,
-                                       const Aspect_TypeOfLine aCallTOL)
-{
-  if (!aDrawer->HasOwnWireAspect()){
-    aDrawer->SetWireAspect(new Prs3d_LineAspect(aColor,aProjTOL,2.));}
-  else {
-    // CLE
-    // const Handle(Prs3d_LineAspect)& li = aDrawer->WireAspect();
-    Handle(Prs3d_LineAspect) li = aDrawer->WireAspect();
-    // ENDCLE
-    li->SetColor(aColor);
-    li->SetTypeOfLine(aProjTOL);
-    li->SetWidth(aWidth);
-  }
-
-  Standard_Real pf, pl;
-  TopLoc_Location loc;
-  Handle(Geom_Curve) curve;
-  Standard_Boolean isInfinite;
-  curve = BRep_Tool::Curve(anEdge,loc,pf,pl);
-  isInfinite = (Precision::IsInfinite(pf) || Precision::IsInfinite(pl));
-
-  TopoDS_Edge E;
-
-  // Calculate  presentation of the edge
-  if (ProjCurve->IsInstance(STANDARD_TYPE(Geom_Line)) ) {
-    // CLE
-    // Handle(Geom_Line) gl (Handle(Geom_Line)::DownCast (ProjCurve));
-    Handle(Geom_Line) gl = Handle(Geom_Line)::DownCast (ProjCurve);
-    // ENDCLE
-    if ( !isInfinite) {
-      pf = ElCLib::Parameter(gl->Lin(),FirstP);
-      pl = ElCLib::Parameter(gl->Lin(),LastP);
-      BRepBuilderAPI_MakeEdge MakEd(gl->Lin(), pf, pl);
-      E = MakEd.Edge();
-    }
-    else {
-      BRepBuilderAPI_MakeEdge MakEd(gl->Lin());
-      E = MakEd.Edge();
-    }
-  }
-  else if (ProjCurve->IsInstance(STANDARD_TYPE(Geom_Circle)) ) {
-    // CLE
-    // Handle(Geom_Circle) gc (Handle(Geom_Circle)::DownCast (ProjCurve));
-    Handle(Geom_Circle) gc = Handle(Geom_Circle)::DownCast (ProjCurve);
-    // ENDCLE
-    pf = ElCLib::Parameter(gc->Circ(),FirstP);
-    pl = ElCLib::Parameter(gc->Circ(),LastP);
-    BRepBuilderAPI_MakeEdge MakEd(gc->Circ(),pf, pl);
-    E = MakEd.Edge();
-  }
-  StdPrs_WFShape::Add (aPresentation, E, aDrawer);
-
-  //Calculate the presentation of line connections
-  aDrawer->WireAspect()->SetTypeOfLine(aCallTOL);
-  if (!isInfinite) {
-    gp_Pnt ppf(0.0,0.0,0.0), ppl(0.0,0.0,0.0);
-    ppf = BRep_Tool::Pnt( TopExp::FirstVertex(TopoDS::Edge(anEdge)));
-    ppl = BRep_Tool::Pnt( TopExp::LastVertex(TopoDS::Edge(anEdge)));
-
-    // it is patch!
-    if (FirstP.SquareDistance (ppf) > SquareTolerance)
-    {
-      BRepBuilderAPI_MakeEdge MakEd1 (FirstP, ppf);
-      StdPrs_WFShape::Add (aPresentation, MakEd1.Edge(), aDrawer);
-    }
-    else
-    {
-      BRepBuilderAPI_MakeVertex MakVert1 (FirstP);
-      StdPrs_WFShape::Add (aPresentation, MakVert1.Vertex(), aDrawer);
-    }
-    if (LastP.SquareDistance (ppl) > SquareTolerance)
-    {
-      BRepBuilderAPI_MakeEdge MakEd2 (LastP, ppl);
-      StdPrs_WFShape::Add (aPresentation, MakEd2.Edge(), aDrawer);
-    }
-    else
-    {
-      BRepBuilderAPI_MakeVertex MakVert2 (LastP);
-      StdPrs_WFShape::Add (aPresentation, MakVert2.Vertex(), aDrawer);
-    }
-/*
-    BRepBuilderAPI_MakeEdge MakEd1 (FirstP, ppf);
-    StdPrs_WFShape::Add (aPresentation, MakEd1.Edge(), aDrawer);
-    BRepBuilderAPI_MakeEdge MakEd2 (LastP, ppl);
-    StdPrs_WFShape::Add (aPresentation, MakEd2.Edge(), aDrawer);
-*/
-  }
-}
-
-//=======================================================================
-//function : ComputeProjVertexPresentation
-//purpose  : 
-//=======================================================================
-
-void AIS::ComputeProjVertexPresentation (const Handle( Prs3d_Presentation )& aPresentation,
-                                         const Handle( Prs3d_Drawer )& aDrawer,
-                                         const TopoDS_Vertex& aVertex,
-                                         const gp_Pnt& ProjPoint,
-                                         const Quantity_NameOfColor aColor,
-                                         const Standard_Real aWidth,
-                                         const Aspect_TypeOfMarker aProjTOM,
-                                         const Aspect_TypeOfLine aCallTOL)
-{
-  if (!aDrawer->HasOwnPointAspect()){
-    aDrawer->SetPointAspect(new Prs3d_PointAspect(aProjTOM, aColor,1));}
-  else {
-    // CLE
-    // const Handle(Prs3d_PointAspect)& pa = aDrawer->PointAspect();
-    Handle(Prs3d_PointAspect) pa = aDrawer->PointAspect();
-    // ENDCLE
-    pa->SetColor(aColor);
-    pa->SetTypeOfMarker(aProjTOM);
-  }
-  
-  // calculate the projection
-  StdPrs_Point::Add(aPresentation, new Geom_CartesianPoint(ProjPoint), aDrawer);
-
-  if (!aDrawer->HasOwnWireAspect()){
-    aDrawer->SetWireAspect(new Prs3d_LineAspect(aColor,aCallTOL,2.));}
-  else {
-    // CLE
-    // const Handle(Prs3d_LineAspect)& li = aDrawer->WireAspect();
-    Handle(Prs3d_LineAspect) li = aDrawer->WireAspect();
-    // ENDCLE
-    li->SetColor(aColor);
-    li->SetTypeOfLine(aCallTOL);
-    li->SetWidth(aWidth);
-  }
-  
-  // If the points are not mixed...
-  if (!ProjPoint.IsEqual (BRep_Tool::Pnt (aVertex), Precision::Confusion()))
-  {
-    // calculate the lines of recall
-    BRepBuilderAPI_MakeEdge MakEd (ProjPoint, BRep_Tool::Pnt (aVertex));
-    StdPrs_WFShape::Add (aPresentation, MakEd.Edge(), aDrawer);
-  }
-}
index 70cc8ce..579f156 100644 (file)
 #ifndef _AIS_HeaderFile
 #define _AIS_HeaderFile
 
-#include <AIS_KindOfSurface.hxx>
-#include <Aspect_TypeOfLine.hxx>
-#include <Aspect_TypeOfMarker.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Pnt.hxx>
-#include <Quantity_NameOfColor.hxx>
-#include <Prs3d_Drawer.hxx>
 #include <Prs3d_Presentation.hxx>
 #include <Standard.hxx>
 #include <Standard_DefineAlloc.hxx>
-#include <Standard_Handle.hxx>
-
-class Bnd_Box;
-class Geom_Curve;
-class Geom_Plane;
-class Geom_Surface;
-class TopoDS_Edge;
-class TopoDS_Face;
-class TopoDS_Shape;
-class TopoDS_Vertex;
 
 //! Application Interactive Services provide the means to create links between an application GUI viewer and
 //! the packages which are used to manage selection and presentation.
@@ -90,119 +73,6 @@ public:
 
   DEFINE_STANDARD_ALLOC
 
-  
-
-  //! Returns the nearest point in a shape. This is used by
-  //! several classes in calculation of dimensions.
-  Standard_EXPORT static gp_Pnt Nearest (const TopoDS_Shape& aShape, const gp_Pnt& aPoint);
-  
-
-  //! @return the nearest point on the line.
-  Standard_EXPORT static gp_Pnt Nearest (const gp_Lin& theLine, const gp_Pnt& thePoint);
-  
-
-  //! For the given point finds nearest point on the curve,
-  //! @return TRUE if found point is belongs to the curve
-  //! and FALSE otherwise.
-  Standard_EXPORT static Standard_Boolean Nearest (const Handle(Geom_Curve)& theCurve, const gp_Pnt& thePoint, const gp_Pnt& theFirstPoint, const gp_Pnt& theLastPoint, gp_Pnt& theNearestPoint);
-  
-  Standard_EXPORT static gp_Pnt Farest (const TopoDS_Shape& aShape, const gp_Pnt& aPoint);
-  
-  //! Used by 2d Relation only
-  //! Computes the 3d geometry of <anEdge> in the current WorkingPlane
-  //! and the extremities if any
-  //! Return TRUE if ok.
-  Standard_EXPORT static Standard_Boolean ComputeGeometry (const TopoDS_Edge& theEdge, Handle(Geom_Curve)& theCurve, gp_Pnt& theFirstPnt, gp_Pnt& theLastPnt);
-  
-  //! Used by dimensions only.
-  //! Computes the 3d geometry of <anEdge>.
-  //! Return TRUE if ok.
-  Standard_EXPORT static Standard_Boolean ComputeGeometry (const TopoDS_Edge& theEdge, Handle(Geom_Curve)& theCurve, gp_Pnt& theFirstPnt, gp_Pnt& theLastPnt, Standard_Boolean& theIsInfinite);
-  
-  //! Used by 2d Relation only
-  //! Computes the 3d geometry of <anEdge> in the current WorkingPlane
-  //! and the extremities if any.
-  //! If <aCurve> is not in the current plane, <extCurve> contains
-  //! the not projected curve associated to <anEdge>.
-  //! If <anEdge> is infinite, <isinfinite> = true and the 2
-  //! parameters <FirstPnt> and <LastPnt> have no signification.
-  //! Return TRUE if ok.
-  Standard_EXPORT static Standard_Boolean ComputeGeometry (const TopoDS_Edge& theEdge, Handle(Geom_Curve)& theCurve, gp_Pnt& theFirstPnt, gp_Pnt& theLastPnt, Handle(Geom_Curve)& theExtCurve, Standard_Boolean& theIsInfinite, Standard_Boolean& theIsOnPlane, const Handle(Geom_Plane)& thePlane);
-  
-  //! Used by 2d Relation only
-  //! Computes the 3d geometry of <anEdge> in the current WorkingPlane
-  //! and the extremities if any
-  //! Return TRUE if ok.
-  Standard_EXPORT static Standard_Boolean ComputeGeometry (const TopoDS_Edge& theFirstEdge, const TopoDS_Edge& theSecondEdge, Handle(Geom_Curve)& theFirstCurve, Handle(Geom_Curve)& theSecondCurve, gp_Pnt& theFirstPnt1, gp_Pnt& theLastPnt1, gp_Pnt& theFirstPnt2, gp_Pnt& theLastPnt2, const Handle(Geom_Plane)& thePlane);
-  
-  //! Used  by  dimensions  only.Computes  the  3d geometry
-  //! of<anEdge1> and <anEdge2> and checks if they are infinite.
-  Standard_EXPORT static Standard_Boolean ComputeGeometry (const TopoDS_Edge& theFirstEdge, const TopoDS_Edge& theSecondEdge, Handle(Geom_Curve)& theFirstCurve, Handle(Geom_Curve)& theSecondCurve, gp_Pnt& theFirstPnt1, gp_Pnt& theLastPnt1, gp_Pnt& theFirstPnt2, gp_Pnt& theLastPnt2, Standard_Boolean& theIsinfinite1, Standard_Boolean& theIsinfinite2);
-  
-  //! Used  by  2d Relation  only Computes  the  3d geometry
-  //! of<anEdge1> and <anEdge2> in the current Plane and the
-  //! extremities if any.   Return in ExtCurve  the 3d curve
-  //! (not projected  in the  plane)  of the  first edge  if
-  //! <indexExt> =1 or of the 2nd edge if <indexExt> = 2. If
-  //! <indexExt> = 0, ExtCurve is Null.  if there is an edge
-  //! external to the  plane,  <isinfinite> is true if  this
-  //! edge is infinite.  So, the extremities of it are not
-  //! significant.  Return TRUE if ok
-  Standard_EXPORT static Standard_Boolean ComputeGeometry (const TopoDS_Edge& theFirstEdge, const TopoDS_Edge& theSecondEdge, Standard_Integer& theExtIndex, Handle(Geom_Curve)& theFirstCurve, Handle(Geom_Curve)& theSecondCurve, gp_Pnt& theFirstPnt1, gp_Pnt& theLastPnt1, gp_Pnt& theFirstPnt2, gp_Pnt& theLastPnt2, Handle(Geom_Curve)& theExtCurve, Standard_Boolean& theIsinfinite1, Standard_Boolean& theIsinfinite2, const Handle(Geom_Plane)& thePlane);
-  
-  //! Checks if aCurve belongs to aPlane; if not, projects aCurve in aPlane
-  //! and returns aCurve;
-  //! Return TRUE if ok
-  Standard_EXPORT static Standard_Boolean ComputeGeomCurve (Handle(Geom_Curve)& aCurve, const Standard_Real first1, const Standard_Real last1, gp_Pnt& FirstPnt1, gp_Pnt& LastPnt1, const Handle(Geom_Plane)& aPlane, Standard_Boolean& isOnPlane);
-  
-  Standard_EXPORT static Standard_Boolean ComputeGeometry (const TopoDS_Vertex& aVertex, gp_Pnt& point, const Handle(Geom_Plane)& aPlane, Standard_Boolean& isOnPlane);
-  
-  //! Tryes to get Plane from Face.  Returns Surface of Face
-  //! in aSurf.  Returns Standard_True  and Plane of Face in
-  //! aPlane in following  cases:
-  //! Face is Plane, Offset of Plane,
-  //! Extrusion of Line  and Offset of  Extrusion of Line
-  //! Returns pure type of Surface which can be:
-  //! Plane, Cylinder, Cone, Sphere, Torus,
-  //! SurfaceOfRevolution, SurfaceOfExtrusion
-  Standard_EXPORT static Standard_Boolean GetPlaneFromFace (const TopoDS_Face& aFace, gp_Pln& aPlane, Handle(Geom_Surface)& aSurf, AIS_KindOfSurface& aSurfType, Standard_Real& Offset);
-  
-  Standard_EXPORT static void InitFaceLength (const TopoDS_Face& aFace, gp_Pln& aPlane, Handle(Geom_Surface)& aSurface, AIS_KindOfSurface& aSurfaceType, Standard_Real& anOffset);
-  
-  //! Finds attachment points on two curvilinear faces for length dimension.
-  //! @param thePlaneDir [in] the direction on the dimension plane to
-  //! compute the plane automatically. It will not be taken into account if
-  //! plane is defined by user.
-  Standard_EXPORT static void InitLengthBetweenCurvilinearFaces (const TopoDS_Face& theFirstFace, const TopoDS_Face& theSecondFace, Handle(Geom_Surface)& theFirstSurf, Handle(Geom_Surface)& theSecondSurf, gp_Pnt& theFirstAttach, gp_Pnt& theSecondAttach, gp_Dir& theDirOnPlane);
-  
-  //! Finds three points for the angle dimension between
-  //! two planes.
-  Standard_EXPORT static Standard_Boolean InitAngleBetweenPlanarFaces (const TopoDS_Face& theFirstFace, const TopoDS_Face& theSecondFace, gp_Pnt& theCenter, gp_Pnt& theFirstAttach, gp_Pnt& theSecondAttach, const Standard_Boolean theIsFirstPointSet = Standard_False);
-  
-  //! Finds three points for the angle dimension between
-  //! two curvilinear surfaces.
-  Standard_EXPORT static Standard_Boolean InitAngleBetweenCurvilinearFaces (const TopoDS_Face& theFirstFace, const TopoDS_Face& theSecondFace, const AIS_KindOfSurface theFirstSurfType, const AIS_KindOfSurface theSecondSurfType, gp_Pnt& theCenter, gp_Pnt& theFirstAttach, gp_Pnt& theSecondAttach, const Standard_Boolean theIsFirstPointSet = Standard_False);
-  
-  Standard_EXPORT static gp_Pnt ProjectPointOnPlane (const gp_Pnt& aPoint, const gp_Pln& aPlane);
-  
-  Standard_EXPORT static gp_Pnt ProjectPointOnLine (const gp_Pnt& aPoint, const gp_Lin& aLine);
-  
-  Standard_EXPORT static gp_Pnt TranslatePointToBound (const gp_Pnt& aPoint, const gp_Dir& aDir, const Bnd_Box& aBndBox);
-  
-  //! returns  True  if  point  with anAttachPar  is
-  //! in  domain  of  arc
-  Standard_EXPORT static Standard_Boolean InDomain (const Standard_Real aFirstPar, const Standard_Real aLastPar, const Standard_Real anAttachPar);
-  
-  //! computes  nearest  to  ellipse  arc  apex
-  Standard_EXPORT static gp_Pnt NearestApex (const gp_Elips& elips, const gp_Pnt& pApex, const gp_Pnt& nApex, const Standard_Real fpara, const Standard_Real lpara, Standard_Boolean& IsInDomain);
-  
-  //! computes  length  of  ellipse  arc  in  parametric  units
-  Standard_EXPORT static Standard_Real DistanceFromApex (const gp_Elips& elips, const gp_Pnt& Apex, const Standard_Real par);
-  
-  Standard_EXPORT static void ComputeProjEdgePresentation (const Handle(Prs3d_Presentation)& aPres, const Handle(Prs3d_Drawer)& aDrawer, const TopoDS_Edge& anEdge, const Handle(Geom_Curve)& ProjCurve, const gp_Pnt& FirstP, const gp_Pnt& LastP, const Quantity_NameOfColor aColor = Quantity_NOC_PURPLE, const Standard_Real aWidth = 2, const Aspect_TypeOfLine aProjTOL = Aspect_TOL_DASH, const Aspect_TypeOfLine aCallTOL = Aspect_TOL_DOT);
-  
-  Standard_EXPORT static void ComputeProjVertexPresentation (const Handle(Prs3d_Presentation)& aPres, const Handle(Prs3d_Drawer)& aDrawer, const TopoDS_Vertex& aVertex, const gp_Pnt& ProjPoint, const Quantity_NameOfColor aColor = Quantity_NOC_PURPLE, const Standard_Real aWidth = 2, const Aspect_TypeOfMarker aProjTOM = Aspect_TOM_PLUS, const Aspect_TypeOfLine aCallTOL = Aspect_TOL_DOT);
-
 };
 
 #endif // _AIS_HeaderFile
diff --git a/src/AIS/AIS_AngleDimension.cxx b/src/AIS/AIS_AngleDimension.cxx
deleted file mode 100644 (file)
index f55900b..0000000
+++ /dev/null
@@ -1,1478 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Arnaud BOUZY/Odile Olivier
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#include <AIS_AngleDimension.hxx>
-
-#include <AIS.hxx>
-#include <BRepBuilderAPI_MakeFace.hxx>
-#include <BRepAdaptor_Curve.hxx>
-#include <BRepAdaptor_Surface.hxx>
-#include <BRepLib_MakeVertex.hxx>
-#include <BRep_Tool.hxx>
-#include <ElCLib.hxx>
-#include <GCPnts_UniformAbscissa.hxx>
-#include <GC_MakeArcOfCircle.hxx>
-#include <gce_MakeLin2d.hxx>
-#include <gce_MakeLin.hxx>
-#include <gce_MakeCirc.hxx>
-#include <gce_MakeCone.hxx>
-#include <gce_MakePln.hxx>
-#include <gce_MakeDir.hxx>
-#include <Geom_Circle.hxx>
-#include <Geom_TrimmedCurve.hxx>
-#include <Geom_ConicalSurface.hxx>
-#include <Geom_SurfaceOfRevolution.hxx>
-#include <Geom_OffsetSurface.hxx>
-#include <Graphic3d_ArrayOfSegments.hxx>
-#include <Graphic3d_Group.hxx>
-#include <Graphic3d_ArrayOfPolylines.hxx>
-#include <IntAna2d_AnaIntersection.hxx>
-#include <ProjLib.hxx>
-#include <Prs3d_Root.hxx>
-#include <Prs3d_ShadingAspect.hxx>
-#include <PrsMgr_PresentationManager3d.hxx>
-#include <Select3D_SensitiveGroup.hxx>
-#include <Select3D_SensitiveSegment.hxx>
-#include <SelectMgr_Selection.hxx>
-#include <Standard_ProgramError.hxx>
-#include <UnitsAPI.hxx>
-#include <Geom_Line.hxx>
-#include <Geom_Plane.hxx>
-
-
-IMPLEMENT_STANDARD_RTTIEXT(AIS_AngleDimension,AIS_Dimension)
-
-namespace
-{
-  static const TCollection_ExtendedString THE_EMPTY_LABEL_STRING;
-  static const Standard_Real              THE_EMPTY_LABEL_WIDTH = 0.0;
-  static const Standard_ExtCharacter      THE_DEGREE_SYMBOL (0x00B0);
-  static const Standard_Real              THE_3D_TEXT_MARGIN = 0.1;
-
-  //! Returns true if the given points lie on a same line.
-  static Standard_Boolean isSameLine (const gp_Pnt& theFirstPoint,
-                                      const gp_Pnt& theCenterPoint,
-                                      const gp_Pnt& theSecondPoint)
-  {
-    gp_Vec aVec1 (theFirstPoint, theCenterPoint);
-    gp_Vec aVec2 (theCenterPoint, theSecondPoint);
-
-    return aVec1.IsParallel (aVec2, Precision::Angular());
-  }
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_AngleDimension::AIS_AngleDimension (const TopoDS_Edge& theFirstEdge,
-                                        const TopoDS_Edge& theSecondEdge)
-: AIS_Dimension (AIS_KOD_PLANEANGLE)
-{
-  Init();
-  SetMeasuredGeometry (theFirstEdge, theSecondEdge);
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_AngleDimension::AIS_AngleDimension (const gp_Pnt& theFirstPoint,
-                                        const gp_Pnt& theSecondPoint,
-                                        const gp_Pnt& theThirdPoint)
-: AIS_Dimension (AIS_KOD_PLANEANGLE)
-{
-  Init();
-  SetMeasuredGeometry (theFirstPoint, theSecondPoint, theThirdPoint);
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_AngleDimension::AIS_AngleDimension (const TopoDS_Vertex& theFirstVertex,
-                                        const TopoDS_Vertex& theSecondVertex,
-                                        const TopoDS_Vertex& theThirdVertex)
-: AIS_Dimension (AIS_KOD_PLANEANGLE)
-{
-  Init();
-  SetMeasuredGeometry (theFirstVertex, theSecondVertex, theThirdVertex);
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_AngleDimension::AIS_AngleDimension (const TopoDS_Face& theCone)
-: AIS_Dimension (AIS_KOD_PLANEANGLE)
-{
-  Init();
-  SetMeasuredGeometry (theCone);
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_AngleDimension::AIS_AngleDimension (const TopoDS_Face& theFirstFace,
-                                        const TopoDS_Face& theSecondFace)
-: AIS_Dimension (AIS_KOD_PLANEANGLE)
-{
-  Init();
-  SetMeasuredGeometry (theFirstFace, theSecondFace);
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_AngleDimension::AIS_AngleDimension (const TopoDS_Face& theFirstFace,
-                                        const TopoDS_Face& theSecondFace,
-                                        const gp_Pnt& thePoint)
-: AIS_Dimension (AIS_KOD_PLANEANGLE)
-{
-  Init();
-  SetMeasuredGeometry (theFirstFace, theSecondFace, thePoint);
-}
-
-//=======================================================================
-//function : SetMeasuredGeometry
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::SetMeasuredGeometry (const TopoDS_Edge& theFirstEdge,
-                                              const TopoDS_Edge& theSecondEdge)
-{
-  gp_Pln aComputedPlane;
-
-  myFirstShape      = theFirstEdge;
-  mySecondShape     = theSecondEdge;
-  myThirdShape      = TopoDS_Shape();
-  myGeometryType    = GeometryType_Edges;
-  myIsGeometryValid = InitTwoEdgesAngle (aComputedPlane);
-
-  if (myIsGeometryValid && !myIsPlaneCustom)
-  {
-    myPlane = aComputedPlane;
-  }
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetMeasuredGeometry
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::SetMeasuredGeometry (const gp_Pnt& theFirstPoint,
-                                              const gp_Pnt& theSecondPoint,
-                                              const gp_Pnt& theThirdPoint)
-{
-  myFirstPoint    = theFirstPoint;
-  myCenterPoint   = theSecondPoint;
-  mySecondPoint   = theThirdPoint;
-  myFirstShape    = BRepLib_MakeVertex (myFirstPoint);
-  mySecondShape   = BRepLib_MakeVertex (myCenterPoint);
-  myThirdShape    = BRepLib_MakeVertex (mySecondPoint);
-  myGeometryType  = GeometryType_Points;
-  myIsGeometryValid       = IsValidPoints (myFirstPoint, myCenterPoint, mySecondPoint);
-
-  Standard_Boolean anIsSameLine = isSameLine (myFirstPoint, myCenterPoint, mySecondPoint);
-  if (myIsGeometryValid && !myIsPlaneCustom && !anIsSameLine)
-  {
-    ComputePlane();
-  }
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetMeasuredGeometry
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::SetMeasuredGeometry (const TopoDS_Vertex& theFirstVertex,
-                                              const TopoDS_Vertex& theSecondVertex,
-                                              const TopoDS_Vertex& theThirdVertex)
-{
-  myFirstShape      = theFirstVertex;
-  mySecondShape     = theSecondVertex;
-  myThirdShape      = theThirdVertex;
-  myFirstPoint      = BRep_Tool::Pnt (theFirstVertex);
-  myCenterPoint     = BRep_Tool::Pnt (theSecondVertex);
-  mySecondPoint     = BRep_Tool::Pnt (theThirdVertex);
-  myGeometryType    = GeometryType_Points;
-  myIsGeometryValid = IsValidPoints (myFirstPoint, myCenterPoint, mySecondPoint);
-
-  Standard_Boolean anIsSameLine = isSameLine (myFirstPoint, myCenterPoint, mySecondPoint);
-  if (myIsGeometryValid && !myIsPlaneCustom && !anIsSameLine)
-  {
-    ComputePlane();
-  }
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetMeasuredGeometry
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::SetMeasuredGeometry (const TopoDS_Face& theCone)
-{
-  myFirstShape      = theCone;
-  mySecondShape     = TopoDS_Shape();
-  myThirdShape      = TopoDS_Shape();
-  myGeometryType    = GeometryType_Face;
-  myIsGeometryValid = InitConeAngle();
-
-  if (myIsGeometryValid && !myIsPlaneCustom)
-  {
-    ComputePlane();
-  }
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetMeasuredGeometry
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::SetMeasuredGeometry (const TopoDS_Face& theFirstFace,
-                                              const TopoDS_Face& theSecondFace)
-{
-  myFirstShape      = theFirstFace;
-  mySecondShape     = theSecondFace;
-  myThirdShape      = TopoDS_Shape();
-  myGeometryType    = GeometryType_Faces;
-  myIsGeometryValid = InitTwoFacesAngle();
-
-  if (myIsGeometryValid && !myIsPlaneCustom)
-  {
-    ComputePlane();
-  }
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetMeasuredGeometry
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::SetMeasuredGeometry (const TopoDS_Face& theFirstFace,
-                                              const TopoDS_Face& theSecondFace,
-                                              const gp_Pnt& thePoint)
-{
-  myFirstShape      = theFirstFace;
-  mySecondShape     = theSecondFace;
-  myThirdShape      = TopoDS_Shape();
-  myGeometryType    = GeometryType_Faces;
-  myIsGeometryValid = InitTwoFacesAngle (thePoint);
-
-  if (myIsGeometryValid && !myIsPlaneCustom)
-  {
-    ComputePlane();
-  }
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : Init
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::Init()
-{
-  SetType (AIS_TOA_Interior);
-  SetArrowsVisibility (AIS_TOAV_Both);
-  SetSpecialSymbol (THE_DEGREE_SYMBOL);
-  SetDisplaySpecialSymbol (AIS_DSS_After);
-  SetFlyout (15.0);
-}
-
-//=======================================================================
-//function: GetCenterOnArc
-//purpose :
-//=======================================================================
-gp_Pnt AIS_AngleDimension::GetCenterOnArc (const gp_Pnt& theFirstAttach,
-                                           const gp_Pnt& theSecondAttach,
-                                           const gp_Pnt& theCenter) const
-{
-  // construct plane where the circle and the arc are located
-  gce_MakePln aConstructPlane (theFirstAttach, theSecondAttach, theCenter);
-  if (!aConstructPlane.IsDone())
-  {
-    return gp::Origin();
-  }
-  
-  gp_Pln aPlane = aConstructPlane.Value();
-  // to have an exterior angle presentation, a plane for further constructed circle should be reversed
-  if (myType == AIS_TOA_Exterior)
-  {
-    gp_Ax1 anAxis = aPlane.Axis();
-    gp_Dir aDir = anAxis.Direction();
-    aDir.Reverse();
-    aPlane.SetAxis(gp_Ax1(anAxis.Location(), aDir));
-  }
-
-  Standard_Real aRadius = theFirstAttach.Distance (theCenter);
-
-  // construct circle forming the arc
-  gce_MakeCirc aConstructCircle (theCenter, aPlane, aRadius);
-  if (!aConstructCircle.IsDone())
-  {
-    return gp::Origin();
-  }
-
-  gp_Circ aCircle = aConstructCircle.Value();
-
-  // compute angle parameters of arc end-points on circle
-  Standard_Real aParamBeg = ElCLib::Parameter (aCircle, theFirstAttach);
-  Standard_Real aParamEnd = ElCLib::Parameter (aCircle, theSecondAttach);
-  ElCLib::AdjustPeriodic (0.0, M_PI * 2, Precision::PConfusion(), aParamBeg, aParamEnd);
-
-  return ElCLib::Value ((aParamBeg + aParamEnd) * 0.5, aCircle);
-}
-
-//=======================================================================
-//function : GetNormalForMinAngle
-//purpose  :
-//=======================================================================
-gp_Dir AIS_AngleDimension::GetNormalForMinAngle() const
-{
-  const gp_Dir& aNormal = myPlane.Axis().Direction();
-  gp_Dir aFirst (gp_Vec (myCenterPoint, myFirstPoint) );
-  gp_Dir aSecond (gp_Vec (myCenterPoint, mySecondPoint) );
-
-  return aFirst.AngleWithRef (aSecond, aNormal) < 0.0
-    ? aNormal.Reversed()
-    : aNormal;
-}
-
-//=======================================================================
-//function : DrawArc
-//purpose  : draws the arc between two attach points
-//=======================================================================
-void AIS_AngleDimension::DrawArc (const Handle(Prs3d_Presentation)& thePresentation,
-                                  const gp_Pnt& theFirstAttach,
-                                  const gp_Pnt& theSecondAttach,
-                                  const gp_Pnt& theCenter,
-                                  const Standard_Real theRadius,
-                                  const Standard_Integer theMode)
-{
-  gp_Pln aPlane (myCenterPoint, GetNormalForMinAngle());
-
-  // to have an exterior angle presentation, a plane for further constructed circle should be reversed
-  if (myType == AIS_TOA_Exterior)
-  {
-    gp_Ax1 anAxis = aPlane.Axis();
-    gp_Dir aDir = anAxis.Direction();
-    aDir.Reverse();
-    aPlane.SetAxis(gp_Ax1(anAxis.Location(), aDir));
-  }
-
-  // construct circle forming the arc
-  gce_MakeCirc aConstructCircle (theCenter, aPlane, theRadius);
-  if (!aConstructCircle.IsDone())
-  {
-    return;
-  }
-
-  gp_Circ aCircle = aConstructCircle.Value();
-
-  // construct the arc
-  GC_MakeArcOfCircle aConstructArc (aCircle, theFirstAttach, theSecondAttach, Standard_True);
-  if (!aConstructArc.IsDone())
-  {
-    return;
-  }
-
-  // generate points with specified deflection
-  const Handle(Geom_TrimmedCurve)& anArcCurve = aConstructArc.Value();
-  
-  GeomAdaptor_Curve anArcAdaptor (anArcCurve, anArcCurve->FirstParameter(), anArcCurve->LastParameter());
-
-  // compute number of discretization elements in old-fanshioned way
-  gp_Vec aCenterToFirstVec  (theCenter, theFirstAttach);
-  gp_Vec aCenterToSecondVec (theCenter, theSecondAttach);
-  Standard_Real anAngle = aCenterToFirstVec.Angle (aCenterToSecondVec);
-  if (myType == AIS_TOA_Exterior)
-    anAngle = 2.0 * M_PI - anAngle;
-  // it sets 50 points on PI, and a part of points if angle is less
-  const Standard_Integer aNbPoints = Max (4, Standard_Integer (50.0 * anAngle / M_PI));
-
-  GCPnts_UniformAbscissa aMakePnts (anArcAdaptor, aNbPoints);
-  if (!aMakePnts.IsDone())
-  {
-    return;
-  }
-
-  // init data arrays for graphical and selection primitives
-  Handle(Graphic3d_ArrayOfPolylines) aPrimSegments = new Graphic3d_ArrayOfPolylines (aNbPoints);
-
-  SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
-
-  // load data into arrays
-  for (Standard_Integer aPntIt = 1; aPntIt <= aMakePnts.NbPoints(); ++aPntIt)
-  {
-    gp_Pnt aPnt = anArcAdaptor.Value (aMakePnts.Parameter (aPntIt));
-
-    aPrimSegments->AddVertex (aPnt);
-
-    aSensitiveCurve.Append (aPnt);
-  }
-
-  // add display presentation
-  if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
-  {
-    Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_True);
-  }
-  Handle(Graphic3d_AspectLine3d) aDimensionLineStyle = myDrawer->DimensionAspect()->LineAspect()->Aspect();
-  Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionLineStyle);
-  Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
-  if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
-  {
-    Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_False);
-  }
-}
-
-//=======================================================================
-//function: DrawArcWithText
-//purpose :
-//=======================================================================
-void AIS_AngleDimension::DrawArcWithText (const Handle(Prs3d_Presentation)& thePresentation,
-                                          const gp_Pnt& theFirstAttach,
-                                          const gp_Pnt& theSecondAttach,
-                                          const gp_Pnt& theCenter,
-                                          const TCollection_ExtendedString& theText,
-                                          const Standard_Real theTextWidth,
-                                          const Standard_Integer theMode,
-                                          const Standard_Integer theLabelPosition)
-{
-  gp_Pln aPlane (myCenterPoint, GetNormalForMinAngle());
-  
-  Standard_Real aRadius = theFirstAttach.Distance (myCenterPoint);
-
-  // construct circle forming the arc
-  gce_MakeCirc aConstructCircle (theCenter, aPlane, aRadius);
-  if (!aConstructCircle.IsDone())
-  {
-    return;
-  }
-
-  gp_Circ aCircle = aConstructCircle.Value();
-
-  // compute angle parameters of arc end-points on circle
-  Standard_Real aParamBeg = ElCLib::Parameter (aCircle, theFirstAttach);
-  Standard_Real aParamEnd = ElCLib::Parameter (aCircle, theSecondAttach);
-  ElCLib::AdjustPeriodic (0.0, M_PI * 2, Precision::PConfusion(), aParamBeg, aParamEnd);
-
-  // middle point of arc parameter on circle
-  Standard_Real aParamMid = (aParamBeg + aParamEnd) * 0.5;
-
-  // add text graphical primitives
-  if (theMode == ComputeMode_All || theMode == ComputeMode_Text)
-  {
-    gp_Pnt aTextPos = ElCLib::Value (aParamMid, aCircle);
-    gp_Dir aTextDir = gce_MakeDir (theFirstAttach, theSecondAttach);
-
-    // Drawing text
-    drawText (thePresentation,
-              aTextPos,
-              aTextDir,
-              theText,
-              theLabelPosition);
-  }
-
-  if (theMode != ComputeMode_All && theMode != ComputeMode_Line)
-  {
-    return;
-  }
-
-  Handle(Prs3d_DimensionAspect) aDimensionAspect = myDrawer->DimensionAspect();
-
-  Standard_Boolean isLineBreak = aDimensionAspect->TextVerticalPosition() == Prs3d_DTVP_Center
-                              && aDimensionAspect->IsText3d();
-
-  if (isLineBreak)
-  {
-    // compute gap for label as parameteric size of sector on circle segment
-    Standard_Real aSectorOfText = theTextWidth / aRadius;
-    Standard_Real aTextBegin = aParamMid - aSectorOfText * 0.5;
-    Standard_Real aTextEnd = aParamMid + aSectorOfText * 0.5;
-    gp_Pnt aTextPntBeg = ElCLib::Value (aTextBegin, aCircle);
-    gp_Pnt aTextPntEnd = ElCLib::Value (aTextEnd, aCircle);
-
-    // Drawing arcs
-    if (aTextBegin > aParamBeg)
-    {
-      DrawArc (thePresentation, theFirstAttach, aTextPntBeg, theCenter, aRadius, theMode);
-    }
-    if (aTextEnd < aParamEnd)
-    {
-      DrawArc (thePresentation, aTextPntEnd, theSecondAttach, theCenter, aRadius, theMode);
-    }
-  }
-  else
-  {
-    DrawArc (thePresentation, theFirstAttach, theSecondAttach, theCenter, aRadius, theMode);
-  }
-}
-
-//=======================================================================
-//function : CheckPlane
-//purpose  : 
-//=======================================================================
-Standard_Boolean AIS_AngleDimension::CheckPlane (const gp_Pln& thePlane)const
-{
-  if (!thePlane.Contains (myFirstPoint, Precision::Confusion()) &&
-      !thePlane.Contains (mySecondPoint, Precision::Confusion()) &&
-      !thePlane.Contains (myCenterPoint, Precision::Confusion()))
-  {
-    return Standard_False;
-  }
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputePlane
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::ComputePlane()
-{
-  if (!myIsGeometryValid)
-  {
-    return;
-  }
-
-  // Compute working plane so that Y axis is codirectional
-  // with Y axis of text coordinate system (necessary for text alignment)
-  gp_Vec aFirstVec   = gp_Vec (myCenterPoint, myFirstPoint);
-  gp_Vec aSecondVec  = gp_Vec (myCenterPoint, mySecondPoint);
-  gp_Vec aDirectionN = aSecondVec ^ aFirstVec;
-  gp_Vec aDirectionY = aFirstVec + aSecondVec;
-  gp_Vec aDirectionX = aDirectionY ^ aDirectionN;
-
-  myPlane = gp_Pln (gp_Ax3 (myCenterPoint, gp_Dir (aDirectionN), gp_Dir (aDirectionX)));
-}
-
-//=======================================================================
-//function : GetModelUnits
-//purpose  :
-//=======================================================================
-const TCollection_AsciiString& AIS_AngleDimension::GetModelUnits() const
-{
-  return myDrawer->DimAngleModelUnits();
-}
-
-//=======================================================================
-//function : GetDisplayUnits
-//purpose  :
-//=======================================================================
-const TCollection_AsciiString& AIS_AngleDimension::GetDisplayUnits() const
-{
-  return myDrawer->DimAngleDisplayUnits();
-}
-
-//=======================================================================
-//function : SetModelUnits
-//purpose  :
-//=======================================================================
-void AIS_AngleDimension::SetModelUnits (const TCollection_AsciiString& theUnits)
-{
-  myDrawer->SetDimAngleModelUnits (theUnits);
-}
-
-//=======================================================================
-//function : SetDisplayUnits
-//purpose  :
-//=======================================================================
-void AIS_AngleDimension::SetDisplayUnits (const TCollection_AsciiString& theUnits)
-{
-  myDrawer->SetDimAngleDisplayUnits (theUnits);
-}
-
-//=======================================================================
-//function : ComputeValue
-//purpose  : 
-//=======================================================================
-Standard_Real AIS_AngleDimension::ComputeValue() const
-{
-  if (!IsValid())
-  {
-    return 0.0;
-  }
-
-  gp_Vec aVec1 (myCenterPoint, myFirstPoint);
-  gp_Vec aVec2 (myCenterPoint, mySecondPoint);
-
-  Standard_Real anAngle = aVec1.AngleWithRef (aVec2, GetNormalForMinAngle());
-
-  return anAngle > 0.0 ? anAngle : (2.0 * M_PI + anAngle);
-}
-
-//=======================================================================
-//function : Compute
-//purpose  : Having three gp_Pnt points compute presentation
-//=======================================================================
-void AIS_AngleDimension::Compute (const Handle(PrsMgr_PresentationManager3d)& /*thePM*/,
-                                  const Handle(Prs3d_Presentation)& thePresentation,
-                                  const Standard_Integer theMode)
-{
-  mySelectionGeom.Clear (theMode);
-
-  if (!IsValid())
-  {
-    return;
-  }
-
-  // Parameters for presentation
-  Handle(Prs3d_DimensionAspect) aDimensionAspect = myDrawer->DimensionAspect();
-
-  Prs3d_Root::CurrentGroup(thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
-
-  Standard_Real anArrowLength = aDimensionAspect->ArrowAspect()->Length();
-
-  // prepare label string and compute its geometrical width
-  Standard_Real aLabelWidth;
-  TCollection_ExtendedString aLabelString = GetValueString (aLabelWidth);
-
-  // add margins to label width
-  if (aDimensionAspect->IsText3d())
-  {
-    aLabelWidth += aDimensionAspect->TextAspect()->Height() * THE_3D_TEXT_MARGIN * 2.0;
-  }
-
-  // Get parameters from aspect or adjust it according with custom text position
-  Standard_Real anExtensionSize = aDimensionAspect->ExtensionSize();
-  Prs3d_DimensionTextHorizontalPosition aHorisontalTextPos = aDimensionAspect->TextHorizontalPosition();
-
-  if (IsTextPositionCustom())
-  {
-    AdjustParameters (myFixedTextPosition,anExtensionSize, aHorisontalTextPos, myFlyout);
-  }
-
-  // Handle user-defined and automatic arrow placement
-  Standard_Boolean isArrowsExternal = Standard_False;
-  Standard_Integer aLabelPosition = LabelPosition_None;
-
-  FitTextAlignment (aHorisontalTextPos, aLabelPosition, isArrowsExternal);
-
-  gp_Pnt aFirstAttach = myCenterPoint.Translated (gp_Vec(myCenterPoint, myFirstPoint).Normalized() * GetFlyout());
-  gp_Pnt aSecondAttach = myCenterPoint.Translated (gp_Vec(myCenterPoint, mySecondPoint).Normalized() * GetFlyout());
-
-  //Arrows positions and directions
-  gp_Vec aWorkingPlaneDir (GetNormalForMinAngle());
-
-  gp_Dir aFirstExtensionDir  = aWorkingPlaneDir.Reversed() ^ gp_Vec (myCenterPoint, aFirstAttach);
-  gp_Dir aSecondExtensionDir = aWorkingPlaneDir            ^ gp_Vec (myCenterPoint, aSecondAttach);
-
-  gp_Vec aFirstArrowVec  = gp_Vec (aFirstExtensionDir)  * anArrowLength;
-  gp_Vec aSecondArrowVec = gp_Vec (aSecondExtensionDir) * anArrowLength;
-
-  if (isArrowsExternal)
-  {
-    aFirstArrowVec.Reverse();
-    aSecondArrowVec.Reverse();
-  }
-
-  gp_Pnt aFirstArrowBegin  (0.0, 0.0, 0.0);
-  gp_Pnt aFirstArrowEnd    (0.0, 0.0, 0.0);
-  gp_Pnt aSecondArrowBegin (0.0, 0.0, 0.0);
-  gp_Pnt aSecondArrowEnd   (0.0, 0.0, 0.0);
-
-  aFirstArrowBegin  = aFirstAttach;
-  aSecondArrowBegin = aSecondAttach;
-  aFirstArrowEnd    = aFirstAttach.Translated (-aFirstArrowVec);
-  aSecondArrowEnd   = aSecondAttach.Translated (-aSecondArrowVec);
-
-  // Group1: stenciling text and the angle dimension arc
-  Prs3d_Root::NewGroup (thePresentation);
-
-  Standard_Integer aHPosition = aLabelPosition & LabelPosition_HMask;
-
-  // draw text label
-  switch (aHPosition)
-  {
-    case LabelPosition_HCenter :
-    {
-      Standard_Boolean isLineBreak = aDimensionAspect->TextVerticalPosition() == Prs3d_DTVP_Center
-                                  && aDimensionAspect->IsText3d();
-
-      if (isLineBreak)
-      {
-        DrawArcWithText (thePresentation,
-                         aFirstAttach,
-                         aSecondAttach,
-                         myCenterPoint,
-                         aLabelString,
-                         aLabelWidth,
-                         theMode,
-                         aLabelPosition);
-        break;
-      }
-
-      // compute text primitives
-      if (theMode == ComputeMode_All || theMode == ComputeMode_Text)
-      {
-        gp_Vec aDimensionDir (aFirstAttach, aSecondAttach);
-        gp_Pnt aTextPos = IsTextPositionCustom() ? myFixedTextPosition
-                                                : GetCenterOnArc (aFirstAttach, aSecondAttach, myCenterPoint);
-        gp_Dir aTextDir = aDimensionDir;
-
-        drawText (thePresentation,
-                  aTextPos,
-                  aTextDir,
-                  aLabelString,
-                  aLabelPosition);
-      }
-
-      if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
-      {
-        DrawArc (thePresentation,
-                 (isArrowsExternal || !isArrowVisible(AIS_TOAV_First)) ? aFirstAttach : aFirstArrowEnd,
-                 (isArrowsExternal || !isArrowVisible(AIS_TOAV_Second)) ? aSecondAttach : aSecondArrowEnd,
-                 myCenterPoint,
-                 Abs (GetFlyout()),
-                 theMode);
-      }
-    }
-    break;
-
-    case LabelPosition_Left :
-    {
-      DrawExtension (thePresentation,
-                     anExtensionSize,
-                     (isArrowsExternal && isArrowVisible(AIS_TOAV_First)) ? aFirstArrowEnd : aFirstAttach,
-                     aFirstExtensionDir,
-                     aLabelString,
-                     aLabelWidth,
-                     theMode,
-                     aLabelPosition);
-    }
-    break;
-
-    case LabelPosition_Right :
-    {
-      DrawExtension (thePresentation,
-                     anExtensionSize,
-                     (isArrowsExternal && isArrowVisible(AIS_TOAV_Second)) ? aSecondArrowEnd : aSecondAttach,
-                     aSecondExtensionDir,
-                     aLabelString,
-                     aLabelWidth,
-                     theMode,
-                     aLabelPosition);
-    }
-    break;
-  }
-
-  // dimension arc without text
-  if ((theMode == ComputeMode_All || theMode == ComputeMode_Line) && aHPosition != LabelPosition_HCenter)
-  {
-    Prs3d_Root::NewGroup (thePresentation);
-
-    DrawArc (thePresentation,
-             (isArrowsExternal || !isArrowVisible(AIS_TOAV_First)) ? aFirstAttach  : aFirstArrowEnd,
-             (isArrowsExternal || !isArrowVisible(AIS_TOAV_Second)) ? aSecondAttach : aSecondArrowEnd,
-             myCenterPoint,
-             Abs(GetFlyout ()),
-             theMode);
-  }
-
-  // arrows and arrow extensions
-  if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
-  {
-    Prs3d_Root::NewGroup (thePresentation);
-
-    if (isArrowVisible(AIS_TOAV_First))
-      DrawArrow (thePresentation, aFirstArrowBegin,  gp_Dir (aFirstArrowVec));
-    if (isArrowVisible(AIS_TOAV_Second))
-      DrawArrow (thePresentation, aSecondArrowBegin, gp_Dir (aSecondArrowVec));
-  }
-
-  if ((theMode == ComputeMode_All || theMode == ComputeMode_Line) && isArrowsExternal)
-  {
-    Prs3d_Root::NewGroup (thePresentation);
-
-    if (aHPosition != LabelPosition_Left && isArrowVisible(AIS_TOAV_First))
-    {
-      DrawExtension (thePresentation,
-                     aDimensionAspect->ArrowTailSize(),
-                     aFirstArrowEnd,
-                     aFirstExtensionDir,
-                     THE_EMPTY_LABEL_STRING,
-                     THE_EMPTY_LABEL_WIDTH,
-                     theMode,
-                     LabelPosition_None);
-    }
-
-    if (aHPosition != LabelPosition_Right && isArrowVisible(AIS_TOAV_Second))
-    {
-      DrawExtension (thePresentation,
-                     aDimensionAspect->ArrowTailSize(),
-                     aSecondArrowEnd,
-                     aSecondExtensionDir,
-                     THE_EMPTY_LABEL_STRING,
-                     THE_EMPTY_LABEL_WIDTH,
-                     theMode,
-                     LabelPosition_None);
-    }
-  }
-
-  // flyouts
-  if (theMode == ComputeMode_All)
-  {
-    Prs3d_Root::NewGroup (thePresentation);
-
-    Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (4);
-    aPrimSegments->AddVertex (myCenterPoint);
-    aPrimSegments->AddVertex (aFirstAttach);
-    aPrimSegments->AddVertex (myCenterPoint);
-    aPrimSegments->AddVertex (aSecondAttach);
-
-    Handle(Graphic3d_AspectLine3d) aFlyoutStyle = myDrawer->DimensionAspect()->LineAspect()->Aspect();
-    Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aFlyoutStyle);
-    Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
-  }
-
-  mySelectionGeom.IsComputed = Standard_True;
-}
-
-//=======================================================================
-//function : ComputeFlyoutSelection
-//purpose  : computes selection for flyouts
-//=======================================================================
-void AIS_AngleDimension::ComputeFlyoutSelection (const Handle(SelectMgr_Selection)& theSelection,
-                                                 const Handle(SelectMgr_EntityOwner)& theOwner)
-{
-  gp_Pnt aFirstAttach  = myCenterPoint.Translated (gp_Vec (myCenterPoint, myFirstPoint).Normalized()  * GetFlyout());
-  gp_Pnt aSecondAttach = myCenterPoint.Translated (gp_Vec (myCenterPoint, mySecondPoint).Normalized() * GetFlyout());
-
-  Handle(Select3D_SensitiveGroup) aSensitiveEntity = new Select3D_SensitiveGroup (theOwner);
-  aSensitiveEntity->Add (new Select3D_SensitiveSegment (theOwner, myCenterPoint, aFirstAttach));
-  aSensitiveEntity->Add (new Select3D_SensitiveSegment (theOwner, myCenterPoint, aSecondAttach));
-
-  theSelection->Add (aSensitiveEntity);
-}
-
-//=======================================================================
-//function : InitTwoEdgesAngle
-//purpose  : 
-//=======================================================================
-Standard_Boolean AIS_AngleDimension::InitTwoEdgesAngle (gp_Pln& theComputedPlane)
-{
-  TopoDS_Edge aFirstEdge  = TopoDS::Edge (myFirstShape);
-  TopoDS_Edge aSecondEdge = TopoDS::Edge (mySecondShape);
-
-  BRepAdaptor_Curve aMakeFirstLine  (aFirstEdge);
-  BRepAdaptor_Curve aMakeSecondLine (aSecondEdge);
-
-  if (aMakeFirstLine.GetType() != GeomAbs_Line || aMakeSecondLine.GetType() != GeomAbs_Line)
-  {
-    return  Standard_False;
-  }
-
-  Handle(Geom_Line) aFirstLine  = new Geom_Line (aMakeFirstLine.Line());
-  Handle(Geom_Line) aSecondLine = new Geom_Line (aMakeSecondLine.Line());
-
-  gp_Lin aFirstLin  = aFirstLine->Lin();
-  gp_Lin aSecondLin = aSecondLine->Lin();
-
-  Standard_Boolean isParallelLines = aFirstLin.Direction().IsParallel (aSecondLin.Direction(), Precision::Angular());
-
-  theComputedPlane = isParallelLines ? gp_Pln(gp::XOY())
-                                     : gp_Pln (aSecondLin.Location(), gp_Vec (aFirstLin.Direction()) ^ gp_Vec (aSecondLin.Direction()));
-
-  // Compute geometry for this plane and edges
-  Standard_Boolean isInfinite1,isInfinite2;
-  gp_Pnt aFirstPoint1, aLastPoint1, aFirstPoint2, aLastPoint2;
-  Handle(Geom_Curve) aFirstCurve = aFirstLine, aSecondCurve = aSecondLine;
-  if (!AIS::ComputeGeometry (aFirstEdge, aSecondEdge,
-                             aFirstCurve, aSecondCurve,
-                             aFirstPoint1, aLastPoint1,
-                             aFirstPoint2, aLastPoint2,
-                             isInfinite1, isInfinite2))
-  {
-    return Standard_False;
-  }
-
-  Standard_Boolean isSameLines = aFirstLin.Direction().IsEqual (aSecondLin.Direction(), Precision::Angular())
-                              && aFirstLin.Location().IsEqual (aSecondLin.Location(),Precision::Confusion());
-
-  // It can be the same gp_Lin geometry but the different begin and end parameters
-  Standard_Boolean isSameEdges =
-    (aFirstPoint1.IsEqual (aFirstPoint2, Precision::Confusion()) && aLastPoint1.IsEqual (aLastPoint2, Precision::Confusion()))
-    || (aFirstPoint1.IsEqual (aLastPoint2, Precision::Confusion()) && aLastPoint1.IsEqual (aFirstPoint2, Precision::Confusion()));
-
-  if (isParallelLines)
-  {
-    // Zero angle, it could not handle this geometry
-    if (isSameLines && isSameEdges)
-    {
-      return Standard_False;
-    }
-
-    // Handle the case of Pi angle
-    const Standard_Real aParam11 = ElCLib::Parameter (aFirstLin, aFirstPoint1);
-    const Standard_Real aParam12 = ElCLib::Parameter (aFirstLin, aLastPoint1);
-    const Standard_Real aParam21 = ElCLib::Parameter (aFirstLin, aFirstPoint2);
-    const Standard_Real aParam22 = ElCLib::Parameter (aFirstLin, aLastPoint2);
-    myCenterPoint = ElCLib::Value ( (Min (aParam11, aParam12) + Max (aParam21, aParam22)) * 0.5, aFirstLin);
-    myFirstPoint = myCenterPoint.Translated (gp_Vec (aFirstLin.Direction()) * Abs (GetFlyout()));
-    mySecondPoint = myCenterPoint.XYZ() + (aFirstLin.Direction().IsEqual (aSecondLin.Direction(), Precision::Angular())
-      ? aFirstLin.Direction().Reversed().XYZ() * Abs (GetFlyout())
-      : aSecondLin.Direction().XYZ() * Abs (GetFlyout()));
-  }
-  else
-  {
-    // Find intersection
-    gp_Lin2d aFirstLin2d  = ProjLib::Project (theComputedPlane, aFirstLin);
-    gp_Lin2d aSecondLin2d = ProjLib::Project (theComputedPlane, aSecondLin);
-
-    IntAna2d_AnaIntersection anInt2d (aFirstLin2d, aSecondLin2d);
-    gp_Pnt2d anIntersectPoint;
-    if (!anInt2d.IsDone() || anInt2d.IsEmpty())
-    {
-      return Standard_False;
-    }
-
-    anIntersectPoint = gp_Pnt2d (anInt2d.Point(1).Value());
-    myCenterPoint = ElCLib::To3d (theComputedPlane.Position().Ax2(), anIntersectPoint);
-
-    if (isInfinite1 || isInfinite2)
-    {
-      myFirstPoint  = myCenterPoint.Translated (gp_Vec (aFirstLin.Direction()) * Abs (GetFlyout()));
-      mySecondPoint = myCenterPoint.Translated (gp_Vec (aSecondLin.Direction()) * Abs (GetFlyout()));
-
-      return IsValidPoints (myFirstPoint, myCenterPoint, mySecondPoint);
-    }
-
-    // |
-    // | <- dimension should be here
-    // *----
-    myFirstPoint  = myCenterPoint.Distance (aFirstPoint1) > myCenterPoint.Distance (aLastPoint1)
-                  ? aFirstPoint1
-                  : aLastPoint1;
-
-    mySecondPoint = myCenterPoint.Distance (aFirstPoint2) > myCenterPoint.Distance (aLastPoint2)
-                  ? aFirstPoint2
-                  : aLastPoint2;
-  }
-
-  return IsValidPoints (myFirstPoint, myCenterPoint, mySecondPoint);
-}
-
-//=======================================================================
-//function : InitTwoFacesAngle
-//purpose  : initialization of angle dimension between two faces
-//=======================================================================
-Standard_Boolean AIS_AngleDimension::InitTwoFacesAngle()
-{
-  TopoDS_Face aFirstFace = TopoDS::Face (myFirstShape);
-  TopoDS_Face aSecondFace = TopoDS::Face (mySecondShape);
-
-  gp_Dir aFirstDir, aSecondDir;
-  gp_Pln aFirstPln, aSecondPln;
-  Handle(Geom_Surface) aFirstBasisSurf, aSecondBasisSurf;
-  AIS_KindOfSurface aFirstSurfType, aSecondSurfType;
-  Standard_Real aFirstOffset, aSecondOffset;
-
-  AIS::GetPlaneFromFace (aFirstFace, aFirstPln,
-                         aFirstBasisSurf,aFirstSurfType,aFirstOffset);
-
-  AIS::GetPlaneFromFace (aSecondFace, aSecondPln,
-                         aSecondBasisSurf, aSecondSurfType, aSecondOffset);
-
-  if (aFirstSurfType == AIS_KOS_Plane && aSecondSurfType == AIS_KOS_Plane)
-  {
-    //Planar faces angle
-    Handle(Geom_Plane) aFirstPlane = Handle(Geom_Plane)::DownCast (aFirstBasisSurf);
-    Handle(Geom_Plane) aSecondPlane = Handle(Geom_Plane)::DownCast (aSecondBasisSurf);
-    return AIS::InitAngleBetweenPlanarFaces (aFirstFace,
-                                             aSecondFace,
-                                             myCenterPoint,
-                                             myFirstPoint,
-                                             mySecondPoint)
-           && IsValidPoints (myFirstPoint,
-                             myCenterPoint,
-                             mySecondPoint);
-  }
-  else
-  {
-    // Curvilinear faces angle
-    return AIS::InitAngleBetweenCurvilinearFaces (aFirstFace,
-                                                  aSecondFace,
-                                                  aFirstSurfType,
-                                                  aSecondSurfType,
-                                                  myCenterPoint,
-                                                  myFirstPoint,
-                                                  mySecondPoint)
-           && IsValidPoints (myFirstPoint,
-                             myCenterPoint,
-                             mySecondPoint);
-  }
-}
-
-//=======================================================================
-//function : InitTwoFacesAngle
-//purpose  : initialization of angle dimension between two faces
-//=======================================================================
-Standard_Boolean AIS_AngleDimension::InitTwoFacesAngle (const gp_Pnt thePointOnFirstFace)
-{
-  TopoDS_Face aFirstFace = TopoDS::Face (myFirstShape);
-  TopoDS_Face aSecondFace = TopoDS::Face (mySecondShape);
-
-  gp_Dir aFirstDir, aSecondDir;
-  gp_Pln aFirstPln, aSecondPln;
-  Handle(Geom_Surface) aFirstBasisSurf, aSecondBasisSurf;
-  AIS_KindOfSurface aFirstSurfType, aSecondSurfType;
-  Standard_Real aFirstOffset, aSecondOffset;
-
-  AIS::GetPlaneFromFace (aFirstFace, aFirstPln,
-                         aFirstBasisSurf,aFirstSurfType,aFirstOffset);
-
-  AIS::GetPlaneFromFace (aSecondFace, aSecondPln,
-                         aSecondBasisSurf, aSecondSurfType, aSecondOffset);
-
-  myFirstPoint = thePointOnFirstFace;
-  if (aFirstSurfType == AIS_KOS_Plane && aSecondSurfType == AIS_KOS_Plane)
-  {
-    //Planar faces angle
-    Handle(Geom_Plane) aFirstPlane = Handle(Geom_Plane)::DownCast (aFirstBasisSurf);
-    Handle(Geom_Plane) aSecondPlane = Handle(Geom_Plane)::DownCast (aSecondBasisSurf);
-    return AIS::InitAngleBetweenPlanarFaces (aFirstFace,
-                                             aSecondFace,
-                                             myCenterPoint,
-                                             myFirstPoint,
-                                             mySecondPoint,
-                                             Standard_True)
-           && IsValidPoints (myFirstPoint,
-                             myCenterPoint,
-                             mySecondPoint);
-  }
-  else
-  {
-    // Curvilinear faces angle
-    return AIS::InitAngleBetweenCurvilinearFaces (aFirstFace,
-                                                  aSecondFace,
-                                                  aFirstSurfType,
-                                                  aSecondSurfType,
-                                                  myCenterPoint,
-                                                  myFirstPoint,
-                                                  mySecondPoint,
-                                                  Standard_True)
-           && IsValidPoints (myFirstPoint,
-                             myCenterPoint,
-                             mySecondPoint);
-  }
-}
-
-//=======================================================================
-//function : InitConeAngle
-//purpose  : initialization of the cone angle
-//=======================================================================
-Standard_Boolean AIS_AngleDimension::InitConeAngle()
-{
-  if (myFirstShape.IsNull())
-  {
-    return Standard_False;
-  }
-
-  TopoDS_Face aConeShape = TopoDS::Face (myFirstShape);
-  gp_Pln aPln;
-  gp_Cone aCone;
-  gp_Circ aCircle;
-  // A surface from the Face
-  Handle(Geom_Surface) aSurf;
-  Handle(Geom_OffsetSurface) aOffsetSurf; 
-  Handle(Geom_ConicalSurface) aConicalSurf;
-  Handle(Geom_SurfaceOfRevolution) aRevSurf;
-  Handle(Geom_Line) aLine;
-  BRepAdaptor_Surface aConeAdaptor (aConeShape);
-  TopoDS_Face aFace;
-  AIS_KindOfSurface aSurfType;
-  Standard_Real anOffset = 0.;
-  Handle(Standard_Type) aType;
-
-  Standard_Real aMaxV = aConeAdaptor.FirstVParameter();
-  Standard_Real aMinV = aConeAdaptor.LastVParameter();
-
-  AIS::GetPlaneFromFace (aConeShape, aPln, aSurf, aSurfType, anOffset);
-
-  if (aSurfType == AIS_KOS_Revolution)
-  {
-    // Surface of revolution
-    aRevSurf = Handle(Geom_SurfaceOfRevolution)::DownCast(aSurf);
-    gp_Lin aLin (aRevSurf->Axis());
-    Handle(Geom_Curve) aBasisCurve = aRevSurf->BasisCurve();
-    //Must be a part of line (basis curve should be linear)
-    if (aBasisCurve ->DynamicType() != STANDARD_TYPE(Geom_Line))
-      return Standard_False;
-
-    gp_Pnt aFirst1 = aConeAdaptor.Value (0., aMinV);
-    gp_Pnt aLast1 = aConeAdaptor.Value (0., aMaxV);
-    gp_Vec aVec1 (aFirst1, aLast1);
-
-    //Projection <aFirst> on <aLin>
-    gp_Pnt aFirst2 = ElCLib::Value (ElCLib::Parameter (aLin, aFirst1), aLin);
-    // Projection <aLast> on <aLin>
-    gp_Pnt aLast2 = ElCLib::Value (ElCLib::Parameter (aLin, aLast1), aLin);
-
-    gp_Vec aVec2 (aFirst2, aLast2);
-
-    // Check if two parts of revolution are parallel (it's a cylinder) or normal (it's a circle).
-    if (aVec1.IsParallel (aVec2, Precision::Angular())
-        || aVec1.IsNormal (aVec2,Precision::Angular()))
-      return Standard_False;
-
-    gce_MakeCone aMkCone (aRevSurf->Axis(), aFirst1, aLast1);
-    aCone =  aMkCone.Value();
-    myCenterPoint = aCone.Apex();
-  }
-  else
-  {
-    aType = aSurf->DynamicType();
-    if (aType == STANDARD_TYPE(Geom_OffsetSurface) || anOffset > 0.01)
-    {
-      // Offset surface
-      aOffsetSurf = new Geom_OffsetSurface (aSurf, anOffset);
-      aSurf = aOffsetSurf->Surface();
-      BRepBuilderAPI_MakeFace aMkFace(aSurf, Precision::Confusion());
-      aMkFace.Build();
-      if (!aMkFace.IsDone())
-        return Standard_False;
-      aConeAdaptor.Initialize (aMkFace.Face());
-    }
-    aCone = aConeAdaptor.Cone();
-    aConicalSurf = Handle(Geom_ConicalSurface)::DownCast (aSurf);
-    myCenterPoint =  aConicalSurf->Apex();
-  }
-
-  // A circle where the angle is drawn
-  Handle(Geom_Curve) aCurve;
-  Standard_Real aMidV = ( aMinV + aMaxV ) / 2.5;
-  aCurve = aSurf->VIso (aMidV);
-  aCircle = Handle(Geom_Circle)::DownCast (aCurve)->Circ();
-
-  aCurve = aSurf->VIso(aMaxV);
-  gp_Circ aCircVmax = Handle(Geom_Circle)::DownCast(aCurve)->Circ();
-  aCurve = aSurf->VIso(aMinV);
-  gp_Circ aCircVmin = Handle(Geom_Circle)::DownCast(aCurve)->Circ();
-
-  if (aCircVmax.Radius() < aCircVmin.Radius())
-  {
-   gp_Circ aTmpCirc = aCircVmax;
-   aCircVmax = aCircVmin;
-   aCircVmin = aTmpCirc;
-  }
-
-  myFirstPoint  = ElCLib::Value (0, aCircle);
-  mySecondPoint = ElCLib::Value (M_PI, aCircle);
-  return Standard_True;
-}
-
-//=======================================================================
-//function : IsValidPoints
-//purpose  : 
-//=======================================================================
-Standard_Boolean AIS_AngleDimension::IsValidPoints (const gp_Pnt& theFirstPoint,
-                                                    const gp_Pnt& theCenterPoint,
-                                                    const gp_Pnt& theSecondPoint) const
-{
-  return theFirstPoint.Distance (theCenterPoint) > Precision::Confusion()
-      && theSecondPoint.Distance (theCenterPoint) > Precision::Confusion()
-      && gp_Vec (theCenterPoint, theFirstPoint).Angle (
-           gp_Vec (theCenterPoint, theSecondPoint)) > Precision::Angular();
-}
-
-//=======================================================================
-//function : isArrowVisible
-//purpose  : compares given and internal arrows types, returns true if the the type should be shown
-//=======================================================================
-Standard_Boolean AIS_AngleDimension::isArrowVisible(const AIS_TypeOfAngleArrowVisibility& theArrowType) const
-{
-  switch (theArrowType)
-  {
-    case AIS_TOAV_Both:
-      return myArrowsVisibility == AIS_TOAV_Both;
-    case AIS_TOAV_First:
-      return myArrowsVisibility == AIS_TOAV_Both || myArrowsVisibility == AIS_TOAV_First;
-    case AIS_TOAV_Second:
-      return myArrowsVisibility == AIS_TOAV_Both || myArrowsVisibility == AIS_TOAV_Second;
-    case AIS_TOAV_None:
-      return false;
-  }
-  return false;
-}
-
-//=======================================================================
-//function : GetTextPosition
-//purpose  : 
-//=======================================================================
-const gp_Pnt AIS_AngleDimension::GetTextPosition() const
-{
-  if (!IsValid())
-  {
-    return gp::Origin();
-  }
-
-  if (IsTextPositionCustom())
-  {
-    return myFixedTextPosition;
-  }
-
-  // Counts text position according to the dimension parameters
-  gp_Pnt aTextPosition (gp::Origin());
-
-  Handle(Prs3d_DimensionAspect) aDimensionAspect = myDrawer->DimensionAspect();
-
-  // Prepare label string and compute its geometrical width
-  Standard_Real aLabelWidth;
-  TCollection_ExtendedString aLabelString = GetValueString (aLabelWidth);
-
-  gp_Pnt aFirstAttach = myCenterPoint.Translated (gp_Vec(myCenterPoint, myFirstPoint).Normalized() * GetFlyout());
-  gp_Pnt aSecondAttach = myCenterPoint.Translated (gp_Vec(myCenterPoint, mySecondPoint).Normalized() * GetFlyout());
-
-  // Handle user-defined and automatic arrow placement
-  Standard_Boolean isArrowsExternal = Standard_False;
-  Standard_Integer aLabelPosition = LabelPosition_None;
-  FitTextAlignment (aDimensionAspect->TextHorizontalPosition(),
-                    aLabelPosition, isArrowsExternal);
-
-  // Get text position
-  switch (aLabelPosition & LabelPosition_HMask)
-  {
-  case LabelPosition_HCenter:
-    {
-      aTextPosition = GetCenterOnArc (aFirstAttach, aSecondAttach, myCenterPoint);
-    }
-    break;
-  case LabelPosition_Left:
-    {
-      gp_Dir aPlaneNormal = gp_Vec (aFirstAttach, aSecondAttach) ^ gp_Vec (myCenterPoint, aFirstAttach);
-      gp_Dir anExtensionDir = aPlaneNormal ^ gp_Vec (myCenterPoint, aFirstAttach);
-      Standard_Real anExtensionSize = aDimensionAspect->ExtensionSize();
-      Standard_Real anOffset = isArrowsExternal
-          ? anExtensionSize + aDimensionAspect->ArrowAspect()->Length()
-          : anExtensionSize;
-      gp_Vec anExtensionVec  = gp_Vec (anExtensionDir) * -anOffset;
-      aTextPosition = aFirstAttach.Translated (anExtensionVec);
-    }
-    break;
-  case LabelPosition_Right:
-    {
-      gp_Dir aPlaneNormal = gp_Vec (aFirstAttach, aSecondAttach) ^ gp_Vec (myCenterPoint, aFirstAttach);
-      gp_Dir anExtensionDir = aPlaneNormal ^ gp_Vec (myCenterPoint, aSecondAttach);
-      Standard_Real anExtensionSize = aDimensionAspect->ExtensionSize();
-      Standard_Real anOffset = isArrowsExternal
-          ? anExtensionSize + aDimensionAspect->ArrowAspect()->Length()
-          : anExtensionSize;
-      gp_Vec anExtensionVec  = gp_Vec (anExtensionDir) * anOffset;
-      aTextPosition = aSecondAttach.Translated (anExtensionVec);
-    }
-    break;
-  }
-
-  return aTextPosition;
-}
-
-//=======================================================================
-//function : SetTextPosition
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::SetTextPosition (const gp_Pnt& theTextPos)
-{
-  if (!IsValid())
-  {
-    return;
-  }
-
-  // The text position point for angle dimension should belong to the working plane.
-  if (!GetPlane().Contains (theTextPos, Precision::Confusion()))
-  {
-    throw Standard_ProgramError("The text position point for angle dimension doesn't belong to the working plane.");
-  }
-
-  myIsTextPositionFixed = Standard_True;
-  myFixedTextPosition = theTextPos;
-}
-
-//=======================================================================
-//function : AdjustParameters
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::AdjustParameters (const gp_Pnt& theTextPos,
-                                           Standard_Real& theExtensionSize,
-                                           Prs3d_DimensionTextHorizontalPosition& theAlignment,
-                                           Standard_Real& theFlyout) const
-{
-  Handle(Prs3d_DimensionAspect) aDimensionAspect = myDrawer->DimensionAspect();
-  Standard_Real anArrowLength = aDimensionAspect->ArrowAspect()->Length();
-
-  // Build circle with radius that is equal to distance from text position to the center point.
-  Standard_Real aRadius = gp_Vec (myCenterPoint, theTextPos).Magnitude();
-
-  // Set attach points in positive direction of the flyout.
-  gp_Pnt aFirstAttach = myCenterPoint.Translated (gp_Vec (myCenterPoint, myFirstPoint).Normalized() * aRadius);
-  gp_Pnt aSecondAttach = myCenterPoint.Translated (gp_Vec (myCenterPoint, mySecondPoint).Normalized() * aRadius);
-
-  gce_MakeCirc aConstructCircle (myCenterPoint, GetPlane(), aRadius);
-  if (!aConstructCircle.IsDone())
-  {
-    return;
-  }
-  gp_Circ aCircle = aConstructCircle.Value();
-
-  // Default values
-  theExtensionSize = aDimensionAspect->ArrowAspect()->Length();
-  theAlignment = Prs3d_DTHP_Center;
-
-  Standard_Real aParamBeg = ElCLib::Parameter (aCircle, aFirstAttach);
-  Standard_Real aParamEnd = ElCLib::Parameter (aCircle, aSecondAttach);
-  if (aParamEnd < aParamBeg)
-  {
-    Standard_Real aParam = aParamEnd;
-    aParamEnd = aParamBeg;
-    aParamBeg = aParam;
-  }
-
-  ElCLib::AdjustPeriodic (0.0, M_PI * 2, Precision::PConfusion(), aParamBeg, aParamEnd);
-  Standard_Real aTextPar = ElCLib::Parameter (aCircle , theTextPos);
-
-  // Horizontal center
-  if (aTextPar > aParamBeg && aTextPar < aParamEnd)
-  {
-    theFlyout = aRadius;
-    return;
-  }
-
-  aParamBeg += M_PI;
-  aParamEnd += M_PI;
-  ElCLib::AdjustPeriodic (0.0, M_PI * 2, Precision::PConfusion(), aParamBeg, aParamEnd);
-
-  if (aTextPar > aParamBeg  && aTextPar < aParamEnd)
-  {
-    theFlyout = -aRadius;
-    return;
-  }
-
-  // Text on the extensions
-  gp_Lin aFirstLine = gce_MakeLin (myCenterPoint, myFirstPoint);
-  gp_Lin aSecondLine = gce_MakeLin (myCenterPoint, mySecondPoint);
-  gp_Pnt aFirstTextProj = AIS::Nearest (aFirstLine, theTextPos);
-  gp_Pnt aSecondTextProj = AIS::Nearest (aSecondLine, theTextPos);
-  Standard_Real aFirstDist = aFirstTextProj.Distance (theTextPos);
-  Standard_Real aSecondDist = aSecondTextProj.Distance (theTextPos);
-
-  if (aFirstDist <= aSecondDist)
-  {
-    aRadius = myCenterPoint.Distance (aFirstTextProj);
-    Standard_Real aNewExtensionSize = aFirstDist - anArrowLength;
-    theExtensionSize = aNewExtensionSize < 0.0 ? 0.0 : aNewExtensionSize;
-
-    theAlignment = Prs3d_DTHP_Left;
-
-    gp_Vec aPosFlyoutDir = gp_Vec (myCenterPoint, myFirstPoint).Normalized().Scaled (aRadius);
-
-    theFlyout = aFirstTextProj.Distance (myCenterPoint.Translated (aPosFlyoutDir)) > Precision::Confusion()
-                ? -aRadius : aRadius;
-  }
-  else
-  {
-    aRadius = myCenterPoint.Distance (aSecondTextProj);
-
-    Standard_Real aNewExtensionSize = aSecondDist - anArrowLength;
-
-    theExtensionSize = aNewExtensionSize < 0.0 ? 0.0 : aNewExtensionSize;
-
-    theAlignment = Prs3d_DTHP_Right;
-
-    gp_Vec aPosFlyoutDir = gp_Vec (myCenterPoint, mySecondPoint).Normalized().Scaled (aRadius);
-
-    theFlyout = aSecondTextProj.Distance (myCenterPoint.Translated (aPosFlyoutDir)) > Precision::Confusion()
-                ? -aRadius : aRadius;
-  }
-}
-
-//=======================================================================
-//function : FitTextAlignment
-//purpose  : 
-//=======================================================================
-void AIS_AngleDimension::FitTextAlignment (const Prs3d_DimensionTextHorizontalPosition& theHorizontalTextPos,
-                                           Standard_Integer& theLabelPosition,
-                                           Standard_Boolean& theIsArrowsExternal) const
-{
-  Handle(Prs3d_DimensionAspect) aDimensionAspect = myDrawer->DimensionAspect();
-
-  Standard_Real anArrowLength = aDimensionAspect->ArrowAspect()->Length();
-
-  // Prepare label string and compute its geometrical width
-  Standard_Real aLabelWidth;
-  TCollection_ExtendedString aLabelString = GetValueString (aLabelWidth);
-
-  // add margins to label width
-  if (aDimensionAspect->IsText3d())
-  {
-    aLabelWidth += aDimensionAspect->TextAspect()->Height() * THE_3D_TEXT_MARGIN * 2.0;
-  }
-
-  gp_Pnt aFirstAttach = myCenterPoint.Translated (gp_Vec (myCenterPoint, myFirstPoint).Normalized() * GetFlyout());
-  gp_Pnt aSecondAttach = myCenterPoint.Translated (gp_Vec (myCenterPoint, mySecondPoint).Normalized() * GetFlyout());
-
-  // Handle user-defined and automatic arrow placement
-  switch (aDimensionAspect->ArrowOrientation())
-  {
-    case Prs3d_DAO_External: theIsArrowsExternal = true; break;
-    case Prs3d_DAO_Internal: theIsArrowsExternal = false; break;
-    case Prs3d_DAO_Fit:
-    {
-      gp_Vec anAttachVector (aFirstAttach, aSecondAttach);
-      Standard_Real aDimensionWidth = anAttachVector.Magnitude();
-
-      // Add margin to ensure a small tail between text and arrow
-      Standard_Real anArrowMargin   = aDimensionAspect->IsText3d() 
-                                    ? aDimensionAspect->TextAspect()->Height() * THE_3D_TEXT_MARGIN
-                                    : 0.0;
-
-      Standard_Real anArrowsWidth   = (anArrowLength + anArrowMargin) * 2.0;
-
-      theIsArrowsExternal = aDimensionWidth < aLabelWidth + anArrowsWidth;
-      break;
-    }
-  }
-
-  // Handle user-defined and automatic text placement
-  switch (theHorizontalTextPos)
-  {
-    case Prs3d_DTHP_Left  : theLabelPosition |= LabelPosition_Left; break;
-    case Prs3d_DTHP_Right : theLabelPosition |= LabelPosition_Right; break;
-    case Prs3d_DTHP_Center: theLabelPosition |= LabelPosition_HCenter; break;
-    case Prs3d_DTHP_Fit:
-    {
-      gp_Vec anAttachVector (aFirstAttach, aSecondAttach);
-      Standard_Real aDimensionWidth = anAttachVector.Magnitude();
-      Standard_Real anArrowsWidth   = anArrowLength * 2.0;
-      Standard_Real aContentWidth   = theIsArrowsExternal ? aLabelWidth : aLabelWidth + anArrowsWidth;
-
-      theLabelPosition |= aDimensionWidth < aContentWidth ? LabelPosition_Left : LabelPosition_HCenter;
-      break;
-    }
-  }
-
-  switch (aDimensionAspect->TextVerticalPosition())
-  {
-    case Prs3d_DTVP_Above  : theLabelPosition |= LabelPosition_Above; break;
-    case Prs3d_DTVP_Below  : theLabelPosition |= LabelPosition_Below; break;
-    case Prs3d_DTVP_Center : theLabelPosition |= LabelPosition_VCenter; break;
-  }
-}
diff --git a/src/AIS/AIS_AngleDimension.hxx b/src/AIS/AIS_AngleDimension.hxx
deleted file mode 100755 (executable)
index 7c9c1ce..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-// Copyright (c) 1995-1999 Matra Datavision
-// Copyright (c) 1999-2013 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#ifndef _AIS_AngleDimension_HeaderFile
-#define _AIS_AngleDimension_HeaderFile
-
-#include <AIS_Dimension.hxx>
-#include <AIS_TypeOfAngle.hxx>
-#include <AIS_TypeOfAngleArrowVisibility.hxx>
-
-#include <Geom_Plane.hxx>
-#include <Geom_Line.hxx>
-#include <Geom_Transformation.hxx>
-#include <gp.hxx>
-#include <gp_Ax1.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Pnt.hxx>
-#include <Prs3d_DimensionAspect.hxx>
-#include <Prs3d_Presentation.hxx>
-#include <Standard.hxx>
-#include <Standard_Macro.hxx>
-#include <Standard_Type.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Vertex.hxx>
-
-class AIS_AngleDimension;
-DEFINE_STANDARD_HANDLE (AIS_AngleDimension, AIS_Dimension)
-
-//! Angle dimension. Can be constructed:
-//! - on two intersected edges.
-//! - on three points or vertices.
-//! - on conical face.
-//! - between two intersected faces.
-//!
-//! In case of three points or two intersected edges the dimension plane
-//! (on which dimension presentation is built) can be computed uniquely
-//! as through three defined points can be built only one plane.
-//! Therefore, if user-defined plane differs from this one, the dimension can't be built.
-//!
-//! In cases of two planes automatic plane by default is built on point of the
-//! origin of parametric space of the first face (the basis surface) so, that
-//! the working plane and two faces intersection forms minimal angle between the faces.
-//! User can define the other point which the dimension plane should pass through
-//! using the appropriate constructor. This point can lay on the one of the faces or not.
-//! Also user can define his own plane but it should pass through the three points
-//! computed on the geometry initialization step (when the constructor or SetMeasuredGeometry() method
-//! is called). 
-//!
-//! In case of the conical face the center point of the angle is the apex of the conical surface.
-//! The attachment points are points of the first and the last parameter of the basis circle of the cone.
-//!
-class AIS_AngleDimension : public AIS_Dimension
-{
-public:
-
-  //! Constructs minimum angle dimension between two linear edges (where possible).
-  //! These two edges should be intersected by each other. Otherwise the geometry is not valid.
-  //! @param theFirstEdge [in] the first edge.
-  //! @param theSecondEdge [in] the second edge.
-  Standard_EXPORT AIS_AngleDimension (const TopoDS_Edge& theFirstEdge,
-                                      const TopoDS_Edge& theSecondEdge);
-
-  //! Constructs the angle display object defined by three points.
-  //! @param theFirstPoint [in] the first point (point on first angle flyout).
-  //! @param theSecondPoint [in] the center point of angle dimension.
-  //! @param theThirdPoint [in] the second point (point on second angle flyout).
-  Standard_EXPORT AIS_AngleDimension (const gp_Pnt& theFirstPoint,
-                                      const gp_Pnt& theSecondPoint,
-                                      const gp_Pnt& theThirdPoint);
-
-  //! Constructs the angle display object defined by three vertices.
-  //! @param theFirstVertex [in] the first vertex (vertex for first angle flyout).
-  //! @param theSecondVertex [in] the center vertex of angle dimension.
-  //! @param theThirdPoint [in] the second vertex (vertex for second angle flyout).
-  Standard_EXPORT AIS_AngleDimension (const TopoDS_Vertex& theFirstVertex,
-                                      const TopoDS_Vertex& theSecondVertex,
-                                      const TopoDS_Vertex& theThirdVertex);
-
-  //! Constructs angle dimension for the cone face.
-  //! @param theCone [in] the conical face.
-  Standard_EXPORT AIS_AngleDimension (const TopoDS_Face& theCone);
-
-  //! Constructs angle dimension between two planar faces.
-  //! @param theFirstFace [in] the first face.
-  //! @param theSecondFace [in] the second face.
-  Standard_EXPORT AIS_AngleDimension (const TopoDS_Face& theFirstFace,
-                                      const TopoDS_Face& theSecondFace);
-
-  //! Constructs angle dimension between two planar faces.
-  //! @param theFirstFace [in] the first face.
-  //! @param theSecondFace [in] the second face.
-  //! @param thePoint [in] the point which the dimension plane should pass through.
-  //! This point can lay on the one of the faces or not.
-  Standard_EXPORT AIS_AngleDimension (const TopoDS_Face& theFirstFace,
-                                      const TopoDS_Face& theSecondFace,
-                                      const gp_Pnt& thePoint);
-
-public:
-
-  //! @return first point forming the angle.
-  const gp_Pnt& FirstPoint() const
-  {
-    return myFirstPoint;
-  }
-
-  //! @return second point forming the angle.
-  const gp_Pnt& SecondPoint() const
-  {
-    return mySecondPoint;
-  }
-
-  //! @return center point forming the angle.
-  const gp_Pnt& CenterPoint() const
-  {
-    return myCenterPoint;
-  }
-
-  //! @return first argument shape.
-  const TopoDS_Shape& FirstShape() const
-  {
-    return myFirstShape;
-  }
-
-  //! @return second argument shape.
-  const TopoDS_Shape& SecondShape() const
-  {
-    return mySecondShape;
-  }
-
-  //! @return third argument shape.
-  const TopoDS_Shape& ThirdShape() const
-  {
-    return myThirdShape;
-  }
-
-public:
-
-  //! Measures minimum angle dimension between two linear edges.
-  //! These two edges should be intersected by each other. Otherwise the geometry is not valid.
-  //! @param theFirstEdge [in] the first edge.
-  //! @param theSecondEdge [in] the second edge.
-  Standard_EXPORT void SetMeasuredGeometry (const TopoDS_Edge& theFirstEdge,
-                                            const TopoDS_Edge& theSecondEdge);
-
-  //! Measures angle defined by three points.
-  //! @param theFirstPoint [in] the first point (point on first angle flyout).
-  //! @param theSecondPoint [in] the center point of angle dimension.
-  //! @param theThirdPoint [in] the second point (point on second angle flyout).
-  Standard_EXPORT void SetMeasuredGeometry (const gp_Pnt& theFirstPoint,
-                                            const gp_Pnt& theSecondPoint,
-                                            const gp_Pnt& theThridPoint);
-
-  //! Measures angle defined by three vertices.
-  //! @param theFirstVertex [in] the first vertex (vertex for first angle flyout).
-  //! @param theSecondVertex [in] the center vertex of angle dimension.
-  //! @param theThirdPoint [in] the second vertex (vertex for second angle flyout).
-  Standard_EXPORT void SetMeasuredGeometry (const TopoDS_Vertex& theFirstVertex,
-                                            const TopoDS_Vertex& theSecondVertex,
-                                            const TopoDS_Vertex& theThirdVertex);
-
-  //! Measures angle of conical face.
-  //! @param theCone [in] the shape to measure.
-  Standard_EXPORT void SetMeasuredGeometry (const TopoDS_Face& theCone);
-
-  //! Measures angle between two planar faces.
-  //! @param theFirstFace [in] the first face.
-  //! @param theSecondFace [in] the second face..
-  Standard_EXPORT void SetMeasuredGeometry (const TopoDS_Face& theFirstFace,
-                                            const TopoDS_Face& theSecondFace);
-
-  //! Measures angle between two planar faces.
-  //! @param theFirstFace [in] the first face.
-  //! @param theSecondFace [in] the second face.
-  //! @param thePoint [in] the point which the dimension plane should pass through.
-  //! This point can lay on the one of the faces or not.
-  Standard_EXPORT void SetMeasuredGeometry (const TopoDS_Face& theFirstFace,
-                                            const TopoDS_Face& theSecondFace,
-                                            const gp_Pnt& thePoint);
-
-  //! @return the display units string.
-  Standard_EXPORT virtual const TCollection_AsciiString& GetDisplayUnits() const Standard_OVERRIDE;
-  
-  //! @return the model units string.
-  Standard_EXPORT virtual const TCollection_AsciiString& GetModelUnits() const Standard_OVERRIDE;
-
-  Standard_EXPORT virtual void SetDisplayUnits (const TCollection_AsciiString& theUnits) Standard_OVERRIDE;
-
-  Standard_EXPORT virtual void SetModelUnits (const TCollection_AsciiString& theUnits) Standard_OVERRIDE;
-
-  //! Principle of horizontal text alignment settings:
-  //! - divide circle into two halves according to attachment points
-  //! - if aTextPos is between attach points -> Center + positive flyout
-  //! - if aTextPos is not between attach points but in this half -> Left or Right + positive flyout
-  //! - if aTextPos is between reflections of attach points -> Center + negative flyout
-  //! - if aTextPos is not between reflections of attach points -> Left or Right + negative flyout
-  Standard_EXPORT virtual void SetTextPosition (const gp_Pnt& theTextPos) Standard_OVERRIDE;
-
-  Standard_EXPORT virtual const gp_Pnt GetTextPosition () const Standard_OVERRIDE;
-
-  //! Sets angle type.
-  //! @param theType [in] the type value.
-  void SetType(const AIS_TypeOfAngle theType)
-  {
-    myType = theType;
-  }
-
-  //! @return the current angle type.
-  AIS_TypeOfAngle GetType() const
-  {
-    return myType;
-  }
-
-  //! Sets visible arrows type
-  //! @param theType [in] the type of visibility of arrows.
-  void SetArrowsVisibility(const AIS_TypeOfAngleArrowVisibility& theType)
-  {
-    myArrowsVisibility = theType;
-  }
-
-  //! @return the type of visibility of arrows.
-  AIS_TypeOfAngleArrowVisibility GetArrowsVisibility() const
-  {
-    return myArrowsVisibility;
-  }
-
-public:
-
-  DEFINE_STANDARD_RTTIEXT(AIS_AngleDimension,AIS_Dimension)
-
-protected:
-
-  //! Initialization of fields that is common to all constructors. 
-  Standard_EXPORT void Init();
-
-  //! Gets plane normal for minimal angle.
-  //! Dimension computation is based on three attach points and plane normal.
-  //! Based on this normal angle arc, arrows and extensions are constructed.
-  gp_Dir GetNormalForMinAngle() const;
-
-  //! @param theFirstAttach [in] the first attachment point.
-  //! @param theSecondAttach [in] the second attachment point.
-  //! @param theCenter [in] the center point (center point of the angle).  
-  //! @return the center of the dimension arc (the main dimension line in case of angle). 
-  Standard_EXPORT gp_Pnt GetCenterOnArc (const gp_Pnt& theFirstAttach,
-                                         const gp_Pnt& theSecondAttach,
-                                         const gp_Pnt& theCenter) const;
-
-  //! Draws main dimension line (arc).
-  //! @param thePresentation [in] the dimension presentation.
-  //! @param theFirstAttach [in] the first attachment point.
-  //! @param theSecondAttach [in] the second attachment point.
-  //! @param theCenter [in] the center point (center point of the angle).
-  //! @param theRadius [in] the radius of the dimension arc.
-  //! @param theMode [in] the display mode.
-  Standard_EXPORT void DrawArc (const Handle(Prs3d_Presentation)& thePresentation,
-                                const gp_Pnt& theFirstAttach,
-                                const gp_Pnt& theSecondAttach,
-                                const gp_Pnt& theCenter,
-                                const Standard_Real theRadius,
-                                const Standard_Integer theMode);
-
-  //! Draws main dimension line (arc) with text.
-  //! @param thePresentation [in] the dimension presentation.
-  //! @param theFirstAttach [in] the first attachment point.
-  //! @param theSecondAttach [in] the second attachment point.
-  //! @param theCenter [in] the center point (center point of the angle).
-  //! @param theText [in] the text label string.
-  //! @param theTextWidth [in] the text label width. 
-  //! @param theMode [in] the display mode.
-  //! @param theLabelPosition [in] the text label vertical and horizontal positioning option
-  //! respectively to the main dimension line. 
-  Standard_EXPORT void DrawArcWithText (const Handle(Prs3d_Presentation)& thePresentation,
-                                        const gp_Pnt& theFirstAttach,
-                                        const gp_Pnt& theSecondAttach,
-                                        const gp_Pnt& theCenter,
-                                        const TCollection_ExtendedString& theText,
-                                        const Standard_Real theTextWidth,
-                                        const Standard_Integer theMode,
-                                        const Standard_Integer theLabelPosition);
-
-  //! Fits text alignment relatively to the dimension line;
-  //! it computes the value of label position and arrow orientation
-  //! according set in the aspect and dimension properties.
-  //! @param theHorizontalTextPos [in] the horizontal alignment for text position.
-  //! @param theLabelPosition [out] the label position, contains bits that defines
-  //! vertical and horizontal alignment. (for internal usage in count text position).
-  //! @param theIsArrowExternal [out] is the arrows external,
-  //! if arrow orientation in the dimension aspect is Prs3d_DAO_Fit, it fits arrow
-  //! orientation automatically.
-  Standard_EXPORT void FitTextAlignment (const Prs3d_DimensionTextHorizontalPosition& theHorizontalTextPos,
-                                         Standard_Integer& theLabelPosition,
-                                         Standard_Boolean& theIsArrowsExternal) const;
-
-  //! Adjusts aspect parameters according the text position:
-  //! extension size, vertical text alignment and flyout.
-  //! @param theTextPos [in] the user defined 3d point of text position.
-  //! @param theExtensionSize [out] the adjusted extension size.
-  //! @param theAlignment [out] the horizontal label alignment.
-  //! @param theFlyout [out] the adjusted value of flyout.
-  Standard_EXPORT void AdjustParameters (const gp_Pnt& theTextPos,
-                                         Standard_Real& theExtensionSize,
-                                         Prs3d_DimensionTextHorizontalPosition& theAlignment,
-                                         Standard_Real& theFlyout) const;
-
-protected:
-
-  Standard_EXPORT virtual void ComputePlane();
-
-  //! Checks if the plane includes three angle points to build dimension.
-  Standard_EXPORT virtual Standard_Boolean CheckPlane (const gp_Pln& thePlane) const Standard_OVERRIDE;
-
-  Standard_EXPORT virtual Standard_Real ComputeValue() const Standard_OVERRIDE;
-
-  Standard_EXPORT  virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& thePM,
-                                         const Handle(Prs3d_Presentation)& thePresentation,
-                                         const Standard_Integer theMode = 0) Standard_OVERRIDE;
-
-  Standard_EXPORT virtual void ComputeFlyoutSelection (const Handle(SelectMgr_Selection)& theSelection,
-                                                       const Handle(SelectMgr_EntityOwner)& theOwner) Standard_OVERRIDE;
-
-protected:
-
-  //! Init angular dimension to measure angle between two linear edges.
-  //! @return TRUE if the angular dimension can be constructured
-  //!         for the passed edges.
-  Standard_EXPORT Standard_Boolean InitTwoEdgesAngle (gp_Pln& theComputedPlane);
-
-  //! Init angular dimension to measure angle between two planar faces.
-  //! there is no user-defined poisitoning. So attach points are set
-  //! according to faces geometry (in origin of the first face basis surface).
-  //! @return TRUE if the angular dimension can be constructed
-  //!         for the passed faces.
-  Standard_EXPORT Standard_Boolean InitTwoFacesAngle();
-
-  //! Init angular dimension to measure angle between two planar faces.
-  //! @param thePointOnFirstFace [in] the point which the dimension plane should pass through.
-  //! This point can lay on the one of the faces or not.
-  //! It will be projected on the first face and this point will be set
-  //! as the first point attach point.
-  //! It defines some kind of dimension positioning over the faces.
-  //! @return TRUE if the angular dimension can be constructed
-  //!         for the passed faces.
-  Standard_EXPORT Standard_Boolean InitTwoFacesAngle (const gp_Pnt thePointOnFirstFace);
-
-  //! Init angular dimension to measure cone face.
-  //! @return TRUE if the angular dimension can be constructed
-  //!              for the passed cone.
-  Standard_EXPORT Standard_Boolean InitConeAngle();
-
-  //! Check that the points forming angle are valid.
-  //! @return TRUE if the points met the following requirements:
-  //!         The (P1, Center), (P2, Center) can be built.
-  //!         The angle between the vectors > Precision::Angular().
-  Standard_EXPORT Standard_Boolean IsValidPoints (const gp_Pnt& theFirstPoint,
-                                                  const gp_Pnt& theCenterPoint,
-                                                  const gp_Pnt& theSecondPoint) const;
-
-
-  //! Returns true if the arrow should be visible
-  //! @param theArrowType an arrow type
-  //! @return TRUE if the arrow should be visible
-  Standard_EXPORT Standard_Boolean isArrowVisible(const AIS_TypeOfAngleArrowVisibility& theArrowType) const;
-
-private:
-  AIS_TypeOfAngle myType; //!< type of angle
-  AIS_TypeOfAngleArrowVisibility myArrowsVisibility; //!< type of arrows visibility
-
-  gp_Pnt myFirstPoint;
-  gp_Pnt mySecondPoint;
-  gp_Pnt myCenterPoint;
-  TopoDS_Shape myFirstShape;
-  TopoDS_Shape mySecondShape;
-  TopoDS_Shape myThirdShape;
-};
-
-#endif // _AIS_AngleDimension_HeaderFile
diff --git a/src/AIS/AIS_Chamf2dDimension.cxx b/src/AIS/AIS_Chamf2dDimension.cxx
deleted file mode 100644 (file)
index d9c5982..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Flore Lantheaume/Odile Olivier
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-
-#include <AIS.hxx>
-#include <AIS_Chamf2dDimension.hxx>
-#include <Bnd_Box.hxx>
-#include <BRepAdaptor_Surface.hxx>
-#include <BRepBndLib.hxx>
-#include <BRepTools_WireExplorer.hxx>
-#include <DsgPrs_Chamf2dPresentation.hxx>
-#include <ElCLib.hxx>
-#include <Geom_Line.hxx>
-#include <Geom_Plane.hxx>
-#include <Geom_Transformation.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Pln.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Vec.hxx>
-#include <Precision.hxx>
-#include <ProjLib.hxx>
-#include <Prs3d_ArrowAspect.hxx>
-#include <Prs3d_DimensionAspect.hxx>
-#include <Prs3d_Drawer.hxx>
-#include <Prs3d_Presentation.hxx>
-#include <Select3D_SensitiveBox.hxx>
-#include <Select3D_SensitiveSegment.hxx>
-#include <SelectMgr_EntityOwner.hxx>
-#include <SelectMgr_Selection.hxx>
-#include <Standard_NotImplemented.hxx>
-#include <Standard_Type.hxx>
-#include <TCollection_AsciiString.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <TopAbs_Orientation.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Shape.hxx>
-
-IMPLEMENT_STANDARD_RTTIEXT(AIS_Chamf2dDimension,AIS_Relation)
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_Chamf2dDimension::AIS_Chamf2dDimension(const TopoDS_Shape& aFShape, 
-                                          const Handle(Geom_Plane)& aPlane, 
-                                          const Standard_Real aVal, 
-                                          const TCollection_ExtendedString& aText)
-:AIS_Relation()
-{
-  myFShape = aFShape;
-  myPlane = aPlane;
-  myVal = aVal;
-  myText = aText;
-  mySymbolPrs = DsgPrs_AS_LASTAR;
-  myAutomaticPosition = Standard_True;
-
-  myArrowSize = myVal / 100.;
-}
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_Chamf2dDimension::AIS_Chamf2dDimension(const TopoDS_Shape& aFShape, 
-                                          const Handle(Geom_Plane)& aPlane, 
-                                          const Standard_Real aVal, 
-                                          const TCollection_ExtendedString& aText,
-                                          const gp_Pnt& aPosition, 
-                                          const DsgPrs_ArrowSide aSymbolPrs ,
-                                          const Standard_Real anArrowSize)
-:AIS_Relation()
-{
-  myFShape = aFShape;
-  myPlane = aPlane;
-  myVal = aVal;
-  myText = aText;
-  myPosition = aPosition;
-  mySymbolPrs = aSymbolPrs;
-  SetArrowSize( anArrowSize );
-  myAutomaticPosition = Standard_False;
-}
-
-
-//=======================================================================
-//function : Compute
-//purpose  : 
-//=======================================================================
-
-void AIS_Chamf2dDimension::Compute(const Handle(PrsMgr_PresentationManager3d)& , 
-                                  const Handle(Prs3d_Presentation)& aPresentation, 
-                                  const Standard_Integer)
-{
-    Handle(Geom_Curve) gcurv;
-    gp_Pnt pfirst,plast;
-    const TopoDS_Edge& thechamfedge = TopoDS::Edge(myFShape);
-    if (!AIS::ComputeGeometry (thechamfedge, gcurv, pfirst, plast))
-      return;
-
-    Handle(Geom_Line) glin = Handle(Geom_Line)::DownCast (gcurv);
-    gp_Dir dir1 (glin->Position().Direction());
-    gp_Dir norm1 = myPlane->Pln().Axis().Direction();
-    myDir = norm1.Crossed(dir1);
-    
-
-    //-------------------------------------------------
-    // calcul d'une direction orthogonale a l'edge du
-    // chanfrein et dirigee vers l'ext. du contour
-    //-------------------------------------------------
-    
-
-    // recup. d'une edge adjacente a l'edge du chanfrein
-    /*TopoDS_Edge nextedge = TopoDS::Edge(mySShape);
-
-    gp_Pnt pfirstnext,plastnext;
-    Handle(Geom_Line) glinnext;
-    if (!AIS::ComputeGeometry(nextedge,glinnext,pfirstnext,plastnext) )
-      return;
-    
-    gp_Vec v1(pfirst,plast);
-    gp_Vec v2;
-    if (pfirst.IsEqual(plastnext, Precision::Confusion()))
-      v2.SetXYZ(pfirstnext.XYZ() - pfirst.XYZ());
-    else
-      v2.SetXYZ(plastnext.XYZ() - pfirst.XYZ());
-    gp_Vec crossvec = v1.Crossed(v2);
-    
-    myDir = dimserv.GetDirection().Crossed(glin->Position().Direction());
-    if (crossvec.Dot(dimserv.GetDirection()) > 0 )
-      myDir.Reverse();*/     //       myDir   => donne a la creation
-    
-    //--------------------------------------------
-    //Calcul du point de positionnement du texte
-    //--------------------------------------------
-    gp_Pnt curpos;
-    if (myAutomaticPosition) {
-      myPntAttach.SetXYZ((pfirst.XYZ()+plast.XYZ())/2);
-      gp_Vec transVec(myDir);
-      transVec*=myVal;
-      curpos = myPntAttach.Translated(transVec);
-
-      if (myIsSetBndBox)
-       curpos = AIS::TranslatePointToBound( curpos, myDir, myBndBox );
-
-      myPosition = curpos;
-    }
-    else {
-
-      myPntAttach.SetXYZ((pfirst.XYZ()+plast.XYZ())/2);
-      Handle(Geom_Line) dimLin = new Geom_Line(myPntAttach, myDir);
-      Standard_Real parcurpos = ElCLib::Parameter(dimLin->Lin(),myPosition);
-      curpos = ElCLib::Value(parcurpos,dimLin->Lin());
-      //static Standard_Real minlength = 0.005;
-      //taille minimale de la dimension
-
-      if ( curpos.Distance(myPntAttach) < 5. ) {
-       gp_Vec transVec(myDir);
-       transVec*=5.;
-       curpos = myPntAttach.Translated(transVec);
-      }
-      myPosition = curpos;
-    }
-    
-    Handle(Prs3d_DimensionAspect) la = myDrawer->DimensionAspect();
-    Handle(Prs3d_ArrowAspect) arr = la->ArrowAspect();
-    
-    //-------------------------------------------------
-    //Calcul de la boite englobante du component pour
-    //determiner la taille de la fleche
-    //-------------------------------------------------
-
-    if( !myArrowSizeIsDefined ) {
-      Standard_Real arrsize = myArrowSize;
-      if ( (myVal/4) < arrsize)
-        arrsize = myVal/4;
-      if (arrsize > 30.) 
-        arrsize = 30.;
-      else if (arrsize < 8.)
-        arrsize = 8.;
-      myArrowSize = arrsize;
-    }
-    arr->SetLength(myArrowSize);
-    
-    //Calcul de la presentation
-    DsgPrs_Chamf2dPresentation::Add(aPresentation,
-                                   myDrawer,
-                                   myPntAttach,
-                                   curpos,
-                                   myText,
-                                   mySymbolPrs);
-  
-  }
-
-//=======================================================================
-//function : ComputeSelection
-//purpose  : 
-//=======================================================================
-
-void AIS_Chamf2dDimension::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection, 
-                                           const Standard_Integer)
-{
-  Handle(SelectMgr_EntityOwner) own = new SelectMgr_EntityOwner(this,7);
-  Handle(Select3D_SensitiveSegment) seg = new Select3D_SensitiveSegment(own,myPntAttach,myPosition);
-  aSelection->Add(seg);
-
-  // Text
-  Standard_Real size(Min(myVal/100.+1.e-6,myArrowSize+1.e-6));
-  Handle( Select3D_SensitiveBox ) box = new Select3D_SensitiveBox( own,
-                                                                  myPosition.X(),
-                                                                  myPosition.Y(),
-                                                                  myPosition.Z(),
-                                                                  myPosition.X() + size,
-                                                                  myPosition.Y() + size,
-                                                                  myPosition.Z() + size);    
-  aSelection->Add(box);
-}
-
diff --git a/src/AIS/AIS_Chamf2dDimension.hxx b/src/AIS/AIS_Chamf2dDimension.hxx
deleted file mode 100644 (file)
index 0b145ae..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Flore Lantheaume/Odile Olivier
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#ifndef _AIS_Chamf2dDimension_HeaderFile
-#define _AIS_Chamf2dDimension_HeaderFile
-
-#include <AIS_KindOfDimension.hxx>
-#include <AIS_Relation.hxx>
-#include <DsgPrs_ArrowSide.hxx>
-#include <gp_Dir.hxx>
-
-class Geom_Plane;
-
-DEFINE_STANDARD_HANDLE(AIS_Chamf2dDimension, AIS_Relation)
-
-//! A framework to define display of 2D chamfers.
-//! A chamfer is displayed with arrows and text. The text
-//! gives the length of the chamfer if it is a symmetrical
-//! chamfer, or the angle if it is not.
-class AIS_Chamf2dDimension : public AIS_Relation
-{
-  DEFINE_STANDARD_RTTIEXT(AIS_Chamf2dDimension, AIS_Relation)
-public:
-
-  //! Constructs the display object for 2D chamfers.
-  //! This object is defined by the face aFShape, the
-  //! dimension aVal, the plane aPlane and the text aText.
-  Standard_EXPORT AIS_Chamf2dDimension(const TopoDS_Shape& aFShape, const Handle(Geom_Plane)& aPlane, const Standard_Real aVal, const TCollection_ExtendedString& aText);
-  
-  //! Constructs the display object for 2D chamfers.
-  //! This object is defined by the face aFShape, the plane
-  //! aPlane, the dimension aVal, the position aPosition,
-  //! the type of arrow aSymbolPrs with the size
-  //! anArrowSize, and the text aText.
-  Standard_EXPORT AIS_Chamf2dDimension(const TopoDS_Shape& aFShape, const Handle(Geom_Plane)& aPlane, const Standard_Real aVal, const TCollection_ExtendedString& aText, const gp_Pnt& aPosition, const DsgPrs_ArrowSide aSymbolPrs, const Standard_Real anArrowSize = 0.0);
-  
-  //! Indicates that we are concerned with a 2d length.
-    virtual AIS_KindOfDimension KindOfDimension() const Standard_OVERRIDE;
-  
-  //! Returns true if the 2d chamfer dimension is movable.
-    virtual Standard_Boolean IsMovable() const Standard_OVERRIDE;
-
-private:
-  
-  Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
-
-  Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& aSelection, const Standard_Integer aMode) Standard_OVERRIDE;
-
-  gp_Pnt myPntAttach;
-  gp_Dir myDir;
-
-};
-
-#include <AIS_Chamf2dDimension.lxx>
-
-#endif // _AIS_Chamf2dDimension_HeaderFile
diff --git a/src/AIS/AIS_Chamf2dDimension.lxx b/src/AIS/AIS_Chamf2dDimension.lxx
deleted file mode 100644 (file)
index ff9fb7f..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// Created on: 1997-02-28
-// Created by: Jean-Pierre COMBE
-// Copyright (c) 1997-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-//=======================================================================
-//function : KindOfDimension
-//purpose  : 
-//=======================================================================
-inline AIS_KindOfDimension AIS_Chamf2dDimension::KindOfDimension() const 
-{
-  return AIS_KOD_LENGTH;
-}
-
-//=======================================================================
-//function : IsMovable
-//purpose  : 
-//=======================================================================
-inline Standard_Boolean AIS_Chamf2dDimension::IsMovable() const 
-{
-  return Standard_True;
-}
diff --git a/src/AIS/AIS_Chamf3dDimension.cxx b/src/AIS/AIS_Chamf3dDimension.cxx
deleted file mode 100644 (file)
index c3edce7..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Odile Olivier
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-
-#include <AIS.hxx>
-#include <AIS_Chamf3dDimension.hxx>
-#include <Bnd_Box.hxx>
-#include <BRepAdaptor_Surface.hxx>
-#include <BRepBndLib.hxx>
-#include <BRepTools_WireExplorer.hxx>
-#include <DsgPrs_Chamf2dPresentation.hxx>
-#include <ElCLib.hxx>
-#include <Geom_Line.hxx>
-#include <Geom_Transformation.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Pln.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Vec.hxx>
-#include <Precision.hxx>
-#include <ProjLib.hxx>
-#include <Prs3d_ArrowAspect.hxx>
-#include <Prs3d_DimensionAspect.hxx>
-#include <Prs3d_Drawer.hxx>
-#include <Prs3d_Presentation.hxx>
-#include <Select3D_SensitiveBox.hxx>
-#include <Select3D_SensitiveSegment.hxx>
-#include <SelectMgr_EntityOwner.hxx>
-#include <SelectMgr_Selection.hxx>
-#include <Standard_NotImplemented.hxx>
-#include <Standard_Type.hxx>
-#include <TCollection_AsciiString.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <TopAbs_Orientation.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Shape.hxx>
-
-IMPLEMENT_STANDARD_RTTIEXT(AIS_Chamf3dDimension,AIS_Relation)
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_Chamf3dDimension::AIS_Chamf3dDimension(const TopoDS_Shape& aFShape, 
-                                          const Standard_Real aVal, 
-                                          const TCollection_ExtendedString& aText)
-:AIS_Relation()
-{
-  myFShape = aFShape;
-  myVal = aVal;
-  myText = aText;
-  mySymbolPrs = DsgPrs_AS_LASTAR;
-  myAutomaticPosition = Standard_True;
-
-  myArrowSize = myVal / 100.;
-}
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_Chamf3dDimension::AIS_Chamf3dDimension(const TopoDS_Shape& aFShape, 
-                                          const Standard_Real aVal, 
-                                          const TCollection_ExtendedString& aText,
-                                          const gp_Pnt& aPosition, 
-                                          const DsgPrs_ArrowSide aSymbolPrs ,
-                                          const Standard_Real anArrowSize)
-:AIS_Relation()
-{
-  myFShape = aFShape;
-  myVal = aVal;
-  myText = aText;
-  myPosition = aPosition;
-  mySymbolPrs = aSymbolPrs;
-  SetArrowSize( anArrowSize );
-  myAutomaticPosition = Standard_False;
-}
-
-
-//=======================================================================
-//function : Compute
-//purpose  : 
-//=======================================================================
-
-void AIS_Chamf3dDimension::Compute(const Handle(PrsMgr_PresentationManager3d)& , 
-                                  const Handle(Prs3d_Presentation)& aPresentation, 
-                                  const Standard_Integer)
-{
-  //----------------------------
-  // Calcul du centre de la face
-  //----------------------------
-  BRepAdaptor_Surface surfAlgo (TopoDS::Face(myFShape));
-  Standard_Real uFirst, uLast, vFirst, vLast;
-  uFirst = surfAlgo.FirstUParameter();
-  uLast = surfAlgo.LastUParameter();
-  vFirst = surfAlgo.FirstVParameter();
-  vLast = surfAlgo.LastVParameter();
-  Standard_Real uMoy = (uFirst + uLast)/2;
-  Standard_Real vMoy = (vFirst + vLast)/2;
-  gp_Pnt apos ;
-  gp_Vec d1u, d1v;
-  surfAlgo.D1(uMoy, vMoy, apos, d1u, d1v);
-  myPntAttach = apos;
-
-  myDir = d1u ^ d1v;
-//  myDir = surfAlgo.Plane().Axis().Direction();
-
-
-   
-  //--------------------------------------------
-  //Calcul du point de positionnement du texte
-  //--------------------------------------------
-  gp_Pnt curpos;
-  if (myAutomaticPosition) {
-    gp_Vec transVec(myDir);
-    transVec*=myVal;
-    curpos = myPntAttach.Translated(transVec);
-    
-    if (myIsSetBndBox)
-      curpos = AIS::TranslatePointToBound( curpos, myDir, myBndBox );
-    
-    myPosition = curpos;
-  }
-  else {
-    
-    Handle(Geom_Line) dimLin = new Geom_Line(myPntAttach, myDir);
-    Standard_Real parcurpos = ElCLib::Parameter(dimLin->Lin(),myPosition);
-    curpos = ElCLib::Value(parcurpos,dimLin->Lin());
-
-    if ( curpos.Distance(myPntAttach) < 5. ) {
-      gp_Vec transVec(myDir);
-      transVec*=5.;
-      curpos = myPntAttach.Translated(transVec);
-    }
-    myPosition = curpos;
-  }
-    
-  Handle(Prs3d_DimensionAspect) la = myDrawer->DimensionAspect();
-  Handle(Prs3d_ArrowAspect) arr = la->ArrowAspect();
-    
-  //-------------------------------------------------
-  //Calcul de la boite englobante du component pour
-  //determiner la taille de la fleche
-  //-------------------------------------------------
-  if( !myArrowSizeIsDefined ) {
-    Standard_Real arrsize = myArrowSize;
-    if ( (myVal/4) < arrsize)
-      arrsize = myVal/4;
-    if (arrsize > 30.) 
-      arrsize = 30.;
-    else if (arrsize < 8.)
-      arrsize = 8.;
-    myArrowSize = arrsize;
-  }
-  arr->SetLength(myArrowSize);
-  
-  //Calcul de la presentation
-  DsgPrs_Chamf2dPresentation::Add(aPresentation,
-                                 myDrawer,
-                                 myPntAttach,
-                                 curpos,
-                                 myText,
-                                 mySymbolPrs);
-  
-}
-
-//=======================================================================
-//function : ComputeSelection
-//purpose  : 
-//=======================================================================
-
-void AIS_Chamf3dDimension::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection, 
-                                           const Standard_Integer)
-{
-  Handle(SelectMgr_EntityOwner) own = new SelectMgr_EntityOwner(this,7);
-  Handle(Select3D_SensitiveSegment) seg = new Select3D_SensitiveSegment(own,myPntAttach,myPosition);
-  aSelection->Add(seg);
-
-  // Text
-  Standard_Real size(Min(myVal/100.+1.e-6,myArrowSize+1.e-6));
-  Handle( Select3D_SensitiveBox ) box = new Select3D_SensitiveBox( own,
-                                                                  myPosition.X(),
-                                                                  myPosition.Y(),
-                                                                  myPosition.Z(),
-                                                                  myPosition.X() + size,
-                                                                  myPosition.Y() + size,
-                                                                  myPosition.Z() + size);    
-  aSelection->Add(box);
-}
-
diff --git a/src/AIS/AIS_Chamf3dDimension.hxx b/src/AIS/AIS_Chamf3dDimension.hxx
deleted file mode 100644 (file)
index d33117a..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Odile Olivier
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#ifndef _AIS_Chamf3dDimension_HeaderFile
-#define _AIS_Chamf3dDimension_HeaderFile
-
-#include <AIS_KindOfDimension.hxx>
-#include <AIS_Relation.hxx>
-#include <DsgPrs_ArrowSide.hxx>
-#include <gp_Dir.hxx>
-
-DEFINE_STANDARD_HANDLE(AIS_Chamf3dDimension, AIS_Relation)
-
-//! A framework to define display of 3D chamfers.
-//! A chamfer is displayed with arrows and text. The text
-//! gives the length of the chamfer if it is a symmetrical
-//! chamfer, or the angle if it is not.
-class AIS_Chamf3dDimension : public AIS_Relation
-{
-  DEFINE_STANDARD_RTTIEXT(AIS_Chamf3dDimension, AIS_Relation)
-public:
-
-  //! Constructs a display object for 3D chamfers.
-  //! This object is defined by the shape aFShape, the
-  //! dimension aVal and the text aText.
-  Standard_EXPORT AIS_Chamf3dDimension(const TopoDS_Shape& aFShape, const Standard_Real aVal, const TCollection_ExtendedString& aText);
-  
-  //! Constructs a display object for 3D chamfers.
-  //! This object is defined by the shape aFShape, the
-  //! dimension aVal, the text aText, the point of origin of
-  //! the chamfer aPosition, the type of arrow aSymbolPrs
-  //! with the size anArrowSize.
-  Standard_EXPORT AIS_Chamf3dDimension(const TopoDS_Shape& aFShape, const Standard_Real aVal, const TCollection_ExtendedString& aText, const gp_Pnt& aPosition, const DsgPrs_ArrowSide aSymbolPrs, const Standard_Real anArrowSize = 0.0);
-  
-  //! Indicates that we are concerned with a 3d length.
-    virtual AIS_KindOfDimension KindOfDimension() const Standard_OVERRIDE;
-  
-  //! Returns true if the 3d chamfer dimension is movable.
-    virtual Standard_Boolean IsMovable() const Standard_OVERRIDE;
-
-private:
-
-  Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
-  
-  Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& aSelection, const Standard_Integer aMode) Standard_OVERRIDE;
-
-  gp_Pnt myPntAttach;
-  gp_Dir myDir;
-
-};
-
-#include <AIS_Chamf3dDimension.lxx>
-
-#endif // _AIS_Chamf3dDimension_HeaderFile
diff --git a/src/AIS/AIS_Chamf3dDimension.lxx b/src/AIS/AIS_Chamf3dDimension.lxx
deleted file mode 100644 (file)
index 4b1bcdc..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// Created on: 1997-02-28
-// Created by: Jean-Pierre COMBE
-// Copyright (c) 1997-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-//=======================================================================
-//function : KindOfDimension
-//purpose  : 
-//=======================================================================
-inline AIS_KindOfDimension AIS_Chamf3dDimension::KindOfDimension() const 
-{
-  return AIS_KOD_LENGTH;
-}
-
-//=======================================================================
-//function : IsMovable
-//purpose  : 
-//=======================================================================
-inline Standard_Boolean AIS_Chamf3dDimension::IsMovable() const 
-{
-  return Standard_True;
-}
diff --git a/src/AIS/AIS_ConcentricRelation.cxx b/src/AIS/AIS_ConcentricRelation.cxx
deleted file mode 100644 (file)
index bf03ae4..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Flore Lantheaume/Odile Olivier
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-
-#include <AIS.hxx>
-#include <AIS_ConcentricRelation.hxx>
-#include <BRepAdaptor_Curve.hxx>
-#include <DsgPrs_ConcentricPresentation.hxx>
-#include <Geom_Circle.hxx>
-#include <Geom_Plane.hxx>
-#include <Geom_Transformation.hxx>
-#include <GeomAbs_CurveType.hxx>
-#include <gp_Ax1.hxx>
-#include <gp_Ax2.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Pln.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Vec.hxx>
-#include <Prs3d_Presentation.hxx>
-#include <Select3D_SensitiveCircle.hxx>
-#include <Select3D_SensitiveSegment.hxx>
-#include <SelectMgr_EntityOwner.hxx>
-#include <SelectMgr_Selection.hxx>
-#include <Standard_NotImplemented.hxx>
-#include <Standard_Type.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Shape.hxx>
-#include <TopoDS_Vertex.hxx>
-
-IMPLEMENT_STANDARD_RTTIEXT(AIS_ConcentricRelation,AIS_Relation)
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_ConcentricRelation::AIS_ConcentricRelation(
-       const TopoDS_Shape& aFShape, 
-       const TopoDS_Shape& aSShape, 
-       const Handle(Geom_Plane)& aPlane)
-{
-  myFShape = aFShape;
-  mySShape = aSShape;
-  myPlane = aPlane;
-  myDir = aPlane->Pln().Axis().Direction();
-}
-
-//=======================================================================
-//function : Compute
-//purpose  : 
-//=======================================================================
-void AIS_ConcentricRelation::Compute(const Handle(PrsMgr_PresentationManager3d)&, 
-                                    const Handle(Prs3d_Presentation)& aPresentation, 
-                                    const Standard_Integer)
-{
-  TopAbs_ShapeEnum type2(mySShape.ShapeType());
-  aPresentation->SetInfiniteState(Standard_True);
-  switch (myFShape.ShapeType()) {
-  case TopAbs_EDGE: 
-    {
-      if (type2 == TopAbs_EDGE) ComputeTwoEdgesConcentric(aPresentation);
-      else if (type2 == TopAbs_VERTEX) ComputeEdgeVertexConcentric(aPresentation);
-    }
-  break;
-  
-  case TopAbs_VERTEX: 
-    {
-      if (type2 == TopAbs_VERTEX) ComputeTwoVerticesConcentric(aPresentation);
-      else if (type2 == TopAbs_EDGE) ComputeEdgeVertexConcentric(aPresentation);      
-    }
-  break;
-  default: {return;}
-  }  
-}
-
-//=======================================================================
-//function : ComputeTwoEdgesConcentric
-//purpose  : 
-//=======================================================================
-void AIS_ConcentricRelation::ComputeEdgeVertexConcentric(const Handle(Prs3d_Presentation)& aPresentation)
-{
-  TopoDS_Edge E;
-  TopoDS_Vertex V;
-  if (myFShape.ShapeType() == TopAbs_EDGE) {
-    E = TopoDS::Edge(myFShape);
-    V = TopoDS::Vertex(mySShape);
-  }
-  else {
-    E = TopoDS::Edge(mySShape);
-    V = TopoDS::Vertex(myFShape);
-  }
-  gp_Pnt p1,p2;
-  Handle(Geom_Curve) C;
-  Handle(Geom_Curve) extCurv;
-  Standard_Boolean isInfinite;
-  Standard_Boolean isOnPlanEdge, isOnPlanVertex;
-  if (!AIS::ComputeGeometry(E,C,p1,p2,extCurv,isInfinite,isOnPlanEdge,myPlane)) return;
-  gp_Pnt P;
-  AIS::ComputeGeometry(V,P, myPlane, isOnPlanVertex);
-
-  Handle(Geom_Circle) CIRCLE (Handle(Geom_Circle)::DownCast (C));
-  myCenter = CIRCLE->Location();
-  myRad = Min(CIRCLE->Radius()/5.,15.);
-  gp_Dir vec(p1.XYZ() - myCenter.XYZ() );
-  gp_Vec vectrans(vec);
-  myPnt = myCenter.Translated(vectrans.Multiplied(myRad));
-  DsgPrs_ConcentricPresentation::Add(aPresentation,myDrawer,myCenter,myRad,myDir,myPnt);
-  if (!isOnPlanEdge) AIS::ComputeProjEdgePresentation(aPresentation,myDrawer,E,CIRCLE,p1,p2);
-  if (!isOnPlanVertex) AIS::ComputeProjVertexPresentation(aPresentation,myDrawer,V,P);
-}
-
-//=======================================================================
-//function : ComputeTwoEdgesConcentric
-//purpose  : 
-//=======================================================================
-void AIS_ConcentricRelation::ComputeTwoVerticesConcentric(const Handle(Prs3d_Presentation)& aPresentation)
-{
-  TopoDS_Vertex V1,V2;
-  V1 = TopoDS::Vertex(myFShape);
-  V2 = TopoDS::Vertex(myFShape);  
-  Standard_Boolean isOnPlanVertex1(Standard_True),isOnPlanVertex2(Standard_True);
-  gp_Pnt P1,P2;
-  AIS::ComputeGeometry(V1,P1, myPlane,isOnPlanVertex1);
-  AIS::ComputeGeometry(V2,P2, myPlane,isOnPlanVertex2);
-  myCenter = P1;
-  myRad    = 15.;
-  gp_Dir vec(myPlane->Pln().Position().XDirection());
-  gp_Vec vectrans(vec);
-  myPnt = myCenter.Translated(vectrans.Multiplied(myRad));
-  DsgPrs_ConcentricPresentation::Add(aPresentation,myDrawer,myCenter,myRad,myDir,myPnt);
-  if (!isOnPlanVertex1) AIS::ComputeProjVertexPresentation(aPresentation,myDrawer,V1,P1);
-  if (!isOnPlanVertex2) AIS::ComputeProjVertexPresentation(aPresentation,myDrawer,V2,P2);
-}
-
-//=======================================================================
-//function : ComputeTwoEdgesConcentric
-//purpose  : 
-//=======================================================================
-void AIS_ConcentricRelation::ComputeTwoEdgesConcentric(const Handle(Prs3d_Presentation)& aPresentation)
-{
-  BRepAdaptor_Curve curv1(TopoDS::Edge(myFShape));
-  BRepAdaptor_Curve curv2(TopoDS::Edge(mySShape));
-  
-  gp_Pnt ptat11,ptat12,ptat21,ptat22;
-  Handle(Geom_Curve) geom1,geom2;
-  Standard_Boolean isInfinite1,isInfinite2;
-  Handle(Geom_Curve) extCurv;
-  if (!AIS::ComputeGeometry(TopoDS::Edge(myFShape),
-                           TopoDS::Edge(mySShape),
-                           myExtShape,
-                           geom1,
-                           geom2,
-                           ptat11,
-                           ptat12,
-                           ptat21,
-                           ptat22,
-                           extCurv,
-                           isInfinite1,isInfinite2,
-                           myPlane)) {
-    return;
-  }
-  
-  Handle(Geom_Circle) gcirc1 (Handle(Geom_Circle)::DownCast (geom1));
-  Handle(Geom_Circle) gcirc2 (Handle(Geom_Circle)::DownCast (geom2));
-  
-  myCenter = gcirc1->Location();
-  
-  // choose the radius equal to 1/5 of the smallest radius of 
-  // 2 circles. Limit is imposed ( 0.02 by chance)
-  Standard_Real aRad1 = gcirc1->Radius();
-  Standard_Real aRad2 = gcirc2->Radius();
-  myRad = (aRad1 > aRad2 ) ? aRad2 : aRad1;
-  myRad /= 5;
-  if (myRad > 15.) myRad =15.;
-  
-  
-  //Calculate a point of circle of radius myRad
-  gp_Dir vec(ptat11.XYZ() - myCenter.XYZ() );
-  gp_Vec vectrans(vec);
-  myPnt = myCenter.Translated(vectrans.Multiplied(myRad));
-  
-  DsgPrs_ConcentricPresentation::Add(aPresentation,
-                                    myDrawer,
-                                    myCenter,
-                                    myRad,
-                                    myDir,
-                                    myPnt);
-  if ( (myExtShape != 0) &&  !extCurv.IsNull()) {
-    gp_Pnt pf, pl;
-    if ( myExtShape == 1 ) {
-      if (!isInfinite1) {
-       pf = ptat11; 
-       pl = ptat12;
-      }
-      ComputeProjEdgePresentation(aPresentation,TopoDS::Edge(myFShape),gcirc1,pf,pl);
-    }
-    else {
-      if (!isInfinite2) {
-       pf = ptat21; 
-       pl = ptat22;
-      }
-      ComputeProjEdgePresentation(aPresentation,TopoDS::Edge(mySShape),gcirc2,pf,pl);
-    }
-  }
-}
-
-//=======================================================================
-//function : ComputeSelection
-//purpose  : 
-//=======================================================================
-
-void AIS_ConcentricRelation::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection, 
-                                             const Standard_Integer)
-{
-  Handle(SelectMgr_EntityOwner) own = new SelectMgr_EntityOwner(this,7);
-  
-  //Creation of 2 sensitive circles
-     // the greater
-  gp_Ax2 ax(myCenter, myDir);
-  Handle(Geom_Circle) Circ = new Geom_Circle(ax, myRad) ;
-  Handle(Select3D_SensitiveCircle) 
-    sensit = new Select3D_SensitiveCircle (own,
-                                          Circ);
-  aSelection->Add(sensit);
-     // the smaller
-  Circ->SetRadius(myRad/2);
-  sensit = new Select3D_SensitiveCircle (own,
-                                        Circ);
-  aSelection->Add(sensit);
-
-  //Creation of 2 segments sensitive for the cross
-  Handle(Select3D_SensitiveSegment) seg;
-  gp_Pnt otherPnt = myPnt.Mirrored(myCenter);
-  seg = new Select3D_SensitiveSegment(own,
-                                     otherPnt,
-                                     myPnt);
-  aSelection->Add(seg);
-
-  gp_Ax1 RotateAxis(myCenter, myDir);
-  gp_Pnt FPnt = myCenter.Rotated(RotateAxis, M_PI/2);
-  gp_Pnt SPnt = myCenter.Rotated(RotateAxis, -M_PI/2);
-  seg = new Select3D_SensitiveSegment(own,
-                                     FPnt,
-                                     SPnt);
-  aSelection->Add(seg);
-
-}
-
diff --git a/src/AIS/AIS_ConcentricRelation.hxx b/src/AIS/AIS_ConcentricRelation.hxx
deleted file mode 100644 (file)
index 8bcbccf..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Flore Lantheaume/Odile Olivier
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#ifndef _AIS_ConcentricRelation_HeaderFile
-#define _AIS_ConcentricRelation_HeaderFile
-
-#include <AIS_Relation.hxx>
-#include <gp_Dir.hxx>
-
-class Geom_Plane;
-
-DEFINE_STANDARD_HANDLE(AIS_ConcentricRelation, AIS_Relation)
-
-//! A framework to define a constraint by a relation of
-//! concentricity between two or more interactive datums.
-//! The display of this constraint is also defined.
-//! A plane is used to create an axis along which the
-//! relation of concentricity can be extended.
-class AIS_ConcentricRelation : public AIS_Relation
-{
-  DEFINE_STANDARD_RTTIEXT(AIS_ConcentricRelation, AIS_Relation)
-public:
-
-  //! Constructs the display object for concentric relations
-  //! between shapes.
-  //! This object is defined by the two shapes, aFShape
-  //! and aSShape and the plane aPlane.
-  //! aPlane is provided to create an axis along which the
-  //! relation of concentricity can be extended.
-  Standard_EXPORT AIS_ConcentricRelation(const TopoDS_Shape& aFShape, const TopoDS_Shape& aSShape, const Handle(Geom_Plane)& aPlane);
-
-private:
-
-  Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
-  
-  Standard_EXPORT void ComputeTwoEdgesConcentric (const Handle(Prs3d_Presentation)& aPresentationManager);
-  
-  Standard_EXPORT void ComputeEdgeVertexConcentric (const Handle(Prs3d_Presentation)& aPresentationManager);
-  
-  Standard_EXPORT void ComputeTwoVerticesConcentric (const Handle(Prs3d_Presentation)& aPresentationManager);
-  
-  Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& aSelection, const Standard_Integer aMode) Standard_OVERRIDE;
-
-  gp_Pnt myCenter;
-  Standard_Real myRad;
-  gp_Dir myDir;
-  gp_Pnt myPnt;
-
-};
-
-#endif // _AIS_ConcentricRelation_HeaderFile
diff --git a/src/AIS/AIS_DiameterDimension.cxx b/src/AIS/AIS_DiameterDimension.cxx
deleted file mode 100644 (file)
index d9da0ea..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Jacques MINOT/Odile Olivier/Sergey ZARITCHNY
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#include <AIS_DiameterDimension.hxx>
-
-#include <AIS.hxx>
-#include <BRepLib_MakeEdge.hxx>
-#include <ElCLib.hxx>
-#include <GeomAPI_IntCS.hxx>
-#include <Geom_Circle.hxx>
-#include <Geom_Plane.hxx>
-#include <gce_MakeDir.hxx>
-#include <Standard_ProgramError.hxx>
-
-
-IMPLEMENT_STANDARD_RTTIEXT(AIS_DiameterDimension,AIS_Dimension)
-
-namespace
-{
-  static const Standard_ExtCharacter THE_DIAMETER_SYMBOL (0x00D8);
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_DiameterDimension::AIS_DiameterDimension (const gp_Circ& theCircle)
-: AIS_Dimension (AIS_KOD_DIAMETER)
-{
-  SetMeasuredGeometry (theCircle);
-  SetSpecialSymbol (THE_DIAMETER_SYMBOL);
-  SetDisplaySpecialSymbol (AIS_DSS_Before);
-  SetFlyout (0.0);
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_DiameterDimension::AIS_DiameterDimension (const gp_Circ& theCircle,
-                                              const gp_Pln& thePlane)
-: AIS_Dimension (AIS_KOD_DIAMETER)
-{
-  SetCustomPlane (thePlane);
-  SetMeasuredGeometry (theCircle);
-  SetSpecialSymbol (THE_DIAMETER_SYMBOL);
-  SetDisplaySpecialSymbol (AIS_DSS_Before);
-  SetFlyout (0.0);
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_DiameterDimension::AIS_DiameterDimension (const TopoDS_Shape& theShape)
-: AIS_Dimension (AIS_KOD_DIAMETER)
-{
-  SetMeasuredGeometry (theShape);
-  SetSpecialSymbol (THE_DIAMETER_SYMBOL);
-  SetDisplaySpecialSymbol (AIS_DSS_Before);
-  SetFlyout (0.0);
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_DiameterDimension::AIS_DiameterDimension (const TopoDS_Shape& theShape,
-                                              const gp_Pln& thePlane)
-: AIS_Dimension (AIS_KOD_DIAMETER)
-{
-  SetCustomPlane (thePlane);
-  SetMeasuredGeometry (theShape);
-  SetSpecialSymbol (THE_DIAMETER_SYMBOL);
-  SetDisplaySpecialSymbol (AIS_DSS_Before);
-  SetFlyout (0.0);
-}
-
-//=======================================================================
-//function : AnchorPoint
-//purpose  : 
-//=======================================================================
-gp_Pnt AIS_DiameterDimension::AnchorPoint()
-{
-  if (!IsValid())
-  {
-    return gp::Origin();
-  }
-
-  return myAnchorPoint;
-}
-
-//=======================================================================
-//function : SetMeasuredGeometry
-//purpose  : 
-//=======================================================================
-void AIS_DiameterDimension::SetMeasuredGeometry (const gp_Circ& theCircle)
-{
-  myCircle          = theCircle;
-  myGeometryType    = GeometryType_Edge;
-  myShape           = BRepLib_MakeEdge (theCircle);
-  myAnchorPoint     = gp::Origin();
-  myIsGeometryValid = IsValidCircle (myCircle);
-
-  if (myIsGeometryValid && myIsPlaneCustom)
-  {
-    ComputeAnchorPoint();
-  }
-  else if (!myIsPlaneCustom)
-  {
-    ComputePlane();
-    myAnchorPoint = ElCLib::Value (0.0, myCircle);
-  }
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetMeasuredGeometry
-//purpose  : 
-//=======================================================================
-void AIS_DiameterDimension::SetMeasuredGeometry (const TopoDS_Shape& theShape)
-{
-  gp_Pnt aDummyPnt (gp::Origin());
-  Standard_Boolean isClosed = Standard_False;
-
-  myGeometryType    = GeometryType_UndefShapes;
-  myShape           = theShape;
-  myAnchorPoint     = gp::Origin();
-  myIsGeometryValid = InitCircularDimension (theShape, myCircle, aDummyPnt, isClosed)
-                      && IsValidCircle (myCircle)
-                      && isClosed;
-
-  if (myIsGeometryValid && myIsPlaneCustom)
-  {
-    ComputeAnchorPoint();
-  }
-  else if (!myIsPlaneCustom)
-  {
-    ComputePlane();
-    myAnchorPoint = ElCLib::Value (0.0, myCircle);
-  }
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : CheckPlane
-//purpose  : 
-//=======================================================================
-Standard_Boolean AIS_DiameterDimension::CheckPlane (const gp_Pln& thePlane) const
-{
-  // Check if the circle center point belongs to plane.
-  if (!thePlane.Contains (myCircle.Location(), Precision::Confusion()))
-  {
-    return Standard_False;
-  }
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputePlane
-//purpose  : 
-//=======================================================================
-void AIS_DiameterDimension::ComputePlane()
-{
-  if (!myIsGeometryValid)
-  {
-    return;
-  }
-
-  myPlane = gp_Pln (gp_Ax3 (myCircle.Position()));
-}
-
-//=======================================================================
-//function : ComputeAnchorPoint
-//purpose  : 
-//=======================================================================
-void AIS_DiameterDimension::ComputeAnchorPoint()
-{
-  // Anchor point is an intersection of dimension plane and circle.
-  Handle(Geom_Circle) aCircle = new Geom_Circle (myCircle);
-  Handle(Geom_Plane) aPlane = new Geom_Plane (myPlane);
-  GeomAPI_IntCS anIntersector (aCircle, aPlane);
-  if (!anIntersector.IsDone())
-  {
-    myIsGeometryValid = Standard_False;
-    return;
-  }
-
-  // The circle lays on the plane.
-  if (anIntersector.NbPoints() != 2)
-  {
-    myAnchorPoint = ElCLib::Value (0.0, myCircle);
-    myIsGeometryValid = Standard_True;
-    return;
-  }
-
-  gp_Pnt aFirstPoint = anIntersector.Point (1);
-  gp_Pnt aSecondPoint = anIntersector.Point (2);
-
-  // Choose one of two intersection points that stands with
-  // positive direction of flyout.
-  // An anchor point is supposed to be the left attachment point.
-  gp_Dir aFirstDir = gce_MakeDir (aFirstPoint, myCircle.Location());
-  gp_Dir aDir = myPlane.Axis().Direction() ^ aFirstDir;
-  myAnchorPoint = (gp_Vec (aDir) * gp_Vec(myCircle.Position().Direction()) > 0.0)
-                  ? aFirstPoint
-                  : aSecondPoint;
-
-}
-
-//=======================================================================
-//function : GetModelUnits
-//purpose  :
-//=======================================================================
-const TCollection_AsciiString& AIS_DiameterDimension::GetModelUnits() const
-{
-  return myDrawer->DimLengthModelUnits();
-}
-
-//=======================================================================
-//function : GetDisplayUnits
-//purpose  :
-//=======================================================================
-const TCollection_AsciiString& AIS_DiameterDimension::GetDisplayUnits() const
-{
-  return myDrawer->DimLengthDisplayUnits();
-}
-
-//=======================================================================
-//function : SetModelUnits
-//purpose  :
-//=======================================================================
-void AIS_DiameterDimension::SetModelUnits (const TCollection_AsciiString& theUnits)
-{
-  myDrawer->SetDimLengthModelUnits (theUnits);
-}
-
-//=======================================================================
-//function : SetDisplayUnits
-//purpose  :
-//=======================================================================
-void AIS_DiameterDimension::SetDisplayUnits (const TCollection_AsciiString& theUnits)
-{
-  myDrawer->SetDimLengthDisplayUnits (theUnits);
-}
-
-//=======================================================================
-//function : ComputeValue
-//purpose  : 
-//=======================================================================
-Standard_Real AIS_DiameterDimension::ComputeValue() const
-{
-  if (!IsValid())
-  {
-    return 0.0;
-  }
-
-  return myCircle.Radius() * 2.0;
-}
-
-//=======================================================================
-//function : Compute
-//purpose  : 
-//=======================================================================
-void AIS_DiameterDimension::Compute (const Handle(PrsMgr_PresentationManager3d)& /*thePM*/,
-                                     const Handle(Prs3d_Presentation)& thePresentation, 
-                                     const Standard_Integer theMode)
-{
-  mySelectionGeom.Clear (theMode);
-
-  if (!IsValid())
-  {
-    return;
-  }
-
-  gp_Pnt aFirstPnt (gp::Origin());
-  gp_Pnt aSecondPnt (gp::Origin());
-  ComputeSidePoints (myCircle, aFirstPnt, aSecondPnt);
-
-  DrawLinearDimension (thePresentation, theMode, aFirstPnt, aSecondPnt);
-}
-
-//=======================================================================
-//function : ComputeFlyoutSelection
-//purpose  : 
-//=======================================================================
-void AIS_DiameterDimension::ComputeFlyoutSelection (const Handle(SelectMgr_Selection)& theSelection,
-                                                    const Handle(SelectMgr_EntityOwner)& theEntityOwner)
-{
-  if (!IsValid())
-  {
-    return;
-  }
-
-  gp_Pnt aFirstPnt (gp::Origin());
-  gp_Pnt aSecondPnt (gp::Origin());
-  ComputeSidePoints (myCircle, aFirstPnt, aSecondPnt);
-
-  ComputeLinearFlyouts (theSelection, theEntityOwner, aFirstPnt, aSecondPnt);
-}
-
-//=======================================================================
-//function : ComputeSidePoints
-//purpose  : 
-//=======================================================================
-void AIS_DiameterDimension::ComputeSidePoints (const gp_Circ& theCircle,
-                                               gp_Pnt& theFirstPnt,
-                                               gp_Pnt& theSecondPnt)
-{
-  theFirstPnt = AnchorPoint();
-
-  gp_Vec aRadiusVector (theCircle.Location(), theFirstPnt);
-  theSecondPnt = theCircle.Location().Translated (-aRadiusVector);
-}
-
-//=======================================================================
-//function : IsValidCircle
-//purpose  : 
-//=======================================================================
-Standard_Boolean AIS_DiameterDimension::IsValidCircle (const gp_Circ& theCircle) const
-{
-  return (theCircle.Radius() * 2.0) > Precision::Confusion();
-}
-
-//=======================================================================
-//function : IsValidAnchor
-//purpose  : 
-//=======================================================================
-Standard_Boolean AIS_DiameterDimension::IsValidAnchor (const gp_Circ& theCircle,
-                                                       const gp_Pnt& theAnchor) const
-{
-  gp_Pln aCirclePlane (theCircle.Location(), theCircle.Axis().Direction());
-  Standard_Real anAnchorDist = theAnchor.Distance (theCircle.Location());
-  Standard_Real aRadius      = myCircle.Radius();
-
-  return Abs (anAnchorDist - aRadius) > Precision::Confusion()
-      && aCirclePlane.Contains (theAnchor, Precision::Confusion());
-}
-
-//=======================================================================
-//function : GetTextPosition
-//purpose  : 
-//=======================================================================
-const gp_Pnt AIS_DiameterDimension::GetTextPosition() const
-{
-  if (IsTextPositionCustom())
-  {
-    return myFixedTextPosition;
-  }
-  
-  // Counts text position according to the dimension parameters
-  return GetTextPositionForLinear (myAnchorPoint, myCircle.Location());
-}
-
-//=======================================================================
-//function : GetTextPosition
-//purpose  : 
-//=======================================================================
-void AIS_DiameterDimension::SetTextPosition (const gp_Pnt& theTextPos)
-{
-  if (!IsValid())
-  {
-    return;
-  }
-
-  myIsTextPositionFixed = Standard_True;
-  myFixedTextPosition = theTextPos;
-
-  SetToUpdate();
-}
diff --git a/src/AIS/AIS_DiameterDimension.hxx b/src/AIS/AIS_DiameterDimension.hxx
deleted file mode 100644 (file)
index 0217edb..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright (c) 1995-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-
-#ifndef _AIS_DiameterDimension_HeaderFile
-#define _AIS_DiameterDimension_HeaderFile
-
-#include <AIS.hxx>
-#include <AIS_Dimension.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Circ.hxx>
-#include <Standard.hxx>
-#include <Standard_Macro.hxx>
-#include <Standard_Type.hxx>
-
-class AIS_DiameterDimension;
-DEFINE_STANDARD_HANDLE (AIS_DiameterDimension, AIS_Dimension)
-
-//! Diameter dimension. Can be constructued:
-//! - On generic circle.
-//! - On generic circle with user-defined anchor point on that circle
-//!   (dimension plane is oriented to follow the anchor point).
-//! - On generic circle in the specified plane.
-//! - On generic shape containing geometry that can be measured
-//!   by diameter dimension: circle wire, circular face, etc.
-//! The anchor point is the location of the left attachement point of
-//! dimension on the circle.
-//! The anchor point computation is processed after dimension plane setting
-//! so that positive flyout direction stands with normal of the circle and
-//! the normal of the plane.
-//! If the plane is user-defined the anchor point was computed as intersection
-//! of the plane and the basis circle. Among two intersection points
-//! the one is selected so that positive flyout direction vector and
-//! the circle normal on the one side form the circle plane.
-//! (corner between positive flyout directio nand the circle normal is acute.)
-//! If the plane is computed automatically (by default it is the circle plane),
-//! the anchor point is the zero parameter point of the circle.
-//!
-//! The dimension is considered as invalid if the user-defined plane
-//! does not include th enachor point and th ecircle center,
-//! if the diameter of the circle is less than Precision::Confusion().
-//! In case if the dimension is built on the arbitrary shape, it can be considered
-//! as invalid if the shape does not contain circle geometry.
-//!
-class AIS_DiameterDimension : public AIS_Dimension
-{
-public:
-
-  //! Construct diameter dimension for the circle.
-  //! @param theCircle [in] the circle to measure.
-  Standard_EXPORT AIS_DiameterDimension (const gp_Circ& theCircle);
-
-  //! Construct diameter dimension for the circle and orient it correspondingly
-  //! to the passed plane.
-  //! @param theCircle [in] the circle to measure.
-  //! @param thePlane [in] the plane defining preferred orientation
-  //!        for dimension.
-  Standard_EXPORT AIS_DiameterDimension (const gp_Circ& theCircle,
-                                         const gp_Pln& thePlane);
-
-  //! Construct diameter on the passed shape, if applicable.
-  //! @param theShape [in] the shape to measure.
-  Standard_EXPORT AIS_DiameterDimension (const TopoDS_Shape& theShape);
-
-  //! Construct diameter on the passed shape, if applicable - and
-  //! define the preferred plane to orient the dimension.
-  //! @param theShape [in] the shape to measure.
-  //! @param thePlane [in] the plane defining preferred orientation
-  //!        for dimension.
-  Standard_EXPORT AIS_DiameterDimension (const TopoDS_Shape& theShape,
-                                         const gp_Pln& thePlane);
-
-public:
-
-  //! @return measured geometry circle.
-  const gp_Circ& Circle() const
-  {
-    return myCircle;
-  }
-
-  //! @return anchor point on circle for diameter dimension.
-  Standard_EXPORT gp_Pnt AnchorPoint();
-
-  //! @return the measured shape.
-  const TopoDS_Shape& Shape() const
-  {
-    return myShape;
-  }
-
-public:
-
-  //! Measure diameter of the circle.
-  //! The actual dimension plane is used for determining anchor points
-  //! on the circle to attach the dimension lines to.
-  //! The dimension will become invalid if the diameter of the circle
-  //! is less than Precision::Confusion().
-  //! @param theCircle [in] the circle to measure.
-  Standard_EXPORT void SetMeasuredGeometry (const gp_Circ& theCircle);
-
-  //! Measure diameter on the passed shape, if applicable.
-  //! The dimension will become invalid if the passed shape is not
-  //! measurable or if measured diameter value is less than Precision::Confusion().
-  //! @param theShape [in] the shape to measure.
-  Standard_EXPORT void SetMeasuredGeometry (const TopoDS_Shape& theShape);
-
-  //! @return the display units string.
-  Standard_EXPORT virtual const TCollection_AsciiString& GetDisplayUnits() const Standard_OVERRIDE;
-  
-  //! @return the model units string.
-  Standard_EXPORT virtual const TCollection_AsciiString& GetModelUnits() const Standard_OVERRIDE;
-
-  Standard_EXPORT virtual void SetDisplayUnits (const TCollection_AsciiString& theUnits) Standard_OVERRIDE;
-
-  Standard_EXPORT virtual void SetModelUnits (const TCollection_AsciiString& theUnits) Standard_OVERRIDE;
-
-  Standard_EXPORT virtual void SetTextPosition (const gp_Pnt& theTextPos) Standard_OVERRIDE;
-
-  Standard_EXPORT virtual const gp_Pnt GetTextPosition() const Standard_OVERRIDE;
-
-public:
-
-  DEFINE_STANDARD_RTTIEXT(AIS_DiameterDimension,AIS_Dimension)
-
-protected:
-
-  //! Override this method to change logic of anchor point computation.
-  //! Computes anchor point. Its computation is based on the current
-  //! dimension plane. Therfore, anchor point is an intersection of plane
-  //! and circle.
-  //! ATTENTION!
-  //! 1) The plane should be set or computed before.
-  //! 2) The plane should inclide th ecircle center to be valid.
-  Standard_EXPORT virtual void ComputeAnchorPoint();
-
-  Standard_EXPORT virtual void ComputePlane();
-
-  //! Checks if the center of the circle is on the plane.
-  Standard_EXPORT virtual Standard_Boolean CheckPlane (const gp_Pln& thePlane) const Standard_OVERRIDE;
-
-  Standard_EXPORT virtual Standard_Real ComputeValue() const Standard_OVERRIDE;
-
-  Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& thePresentationManager,
-                                        const Handle(Prs3d_Presentation)& thePresentation,
-                                        const Standard_Integer theMode = 0) Standard_OVERRIDE;
-
-  Standard_EXPORT virtual void ComputeFlyoutSelection (const Handle(SelectMgr_Selection)& theSelection,
-                                                       const Handle(SelectMgr_EntityOwner)& theEntityOwner) Standard_OVERRIDE;
-
-protected:
-
-  //! Compute points on the circle sides for the dimension plane.
-  //! Program error exception is raised if the dimension plane "x" direction 
-  //! is orthogonal to plane (the "impossible" case). The passed dimension plane
-  //! is the one specially computed to locate dimension presentation in circle.
-  //! @param theCircle [in] the circle.
-  //! @param theFirstPnt [out] the first point.
-  //! @param theSecondPnt [out] the second point.
-  Standard_EXPORT void ComputeSidePoints (const gp_Circ& theCircle,
-                                          gp_Pnt& theFirstPnt,
-                                          gp_Pnt& theSecondPnt);
-
-  Standard_EXPORT Standard_Boolean IsValidCircle (const gp_Circ& theCircle) const;
-
-  Standard_EXPORT Standard_Boolean IsValidAnchor (const gp_Circ& theCircle,
-                                                  const gp_Pnt& thePnt) const;
-
-private:
-
-  gp_Circ          myCircle;
-  gp_Pnt           myAnchorPoint;
-  TopoDS_Shape     myShape;
-};
-
-#endif // _AIS_DiameterDimension_HeaderFile
diff --git a/src/AIS/AIS_Dimension.cxx b/src/AIS/AIS_Dimension.cxx
deleted file mode 100755 (executable)
index 4fcfd6f..0000000
+++ /dev/null
@@ -1,1704 +0,0 @@
-// Created on: 2013-11-11
-// Created by: Anastasia BORISOVA
-// Copyright (c) 2013-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#include <AIS_Dimension.hxx>
-
-#include <AIS.hxx>
-#include <AIS_DimensionOwner.hxx>
-#include <Adaptor3d_HCurve.hxx>
-#include <BRepAdaptor_Curve.hxx>
-#include <BRepAdaptor_Surface.hxx>
-#include <BRepBndLib.hxx>
-#include <Bnd_Box.hxx>
-#include <ElCLib.hxx>
-#include <Font_BRepFont.hxx>
-#include <Font_BRepTextBuilder.hxx>
-#include <GC_MakeCircle.hxx>
-#include <Geom_Line.hxx>
-#include <GeomAdaptor_Curve.hxx>
-#include <Geom_Circle.hxx>
-#include <Geom_TrimmedCurve.hxx>
-#include <gce_MakeDir.hxx>
-#include <gce_MakeLin.hxx>
-#include <gce_MakePln.hxx>
-#include <Graphic3d_ArrayOfSegments.hxx>
-#include <Graphic3d_ArrayOfTriangles.hxx>
-#include <Graphic3d_AspectLine3d.hxx>
-#include <Graphic3d_AspectFillArea3d.hxx>
-#include <Graphic3d_AspectText3d.hxx>
-#include <Graphic3d_Group.hxx>
-#include <PrsMgr_PresentationManager3d.hxx>
-#include <Prs3d_Arrow.hxx>
-#include <Prs3d_ArrowAspect.hxx>
-#include <Prs3d_Drawer.hxx>
-#include <Prs3d_LineAspect.hxx>
-#include <Prs3d_Presentation.hxx>
-#include <Prs3d_Root.hxx>
-#include <Prs3d_ShadingAspect.hxx>
-#include <Prs3d_Text.hxx>
-#include <SelectMgr_EntityOwner.hxx>
-#include <SelectMgr_Selection.hxx>
-#include <SelectMgr_SequenceOfOwner.hxx>
-#include <Select3D_SensitiveCircle.hxx>
-#include <Select3D_SensitiveGroup.hxx>
-#include <Select3D_SensitiveCurve.hxx>
-#include <Select3D_SensitiveSegment.hxx>
-#include <Select3D_SensitiveTriangle.hxx>
-#include <Select3D_SensitiveTriangulation.hxx>
-#include <Poly_Array1OfTriangle.hxx>
-#include <Poly_Triangulation.hxx>
-#include <Standard_CString.hxx>
-#include <Standard_ProgramError.hxx>
-#include <StdPrs_ShadedShape.hxx>
-#include <StdPrs_WFShape.hxx>
-#include <TCollection_AsciiString.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Vertex.hxx>
-#include <Units.hxx>
-#include <Units_UnitsDictionary.hxx>
-#include <UnitsAPI.hxx>
-#include <UnitsAPI_SystemUnits.hxx>
-
-
-IMPLEMENT_STANDARD_RTTIEXT(AIS_Dimension,AIS_InteractiveObject)
-
-namespace
-{
-  // default text strings
-  static const TCollection_ExtendedString THE_EMPTY_LABEL;
-  static const TCollection_AsciiString    THE_UNDEFINED_UNITS;
-
-  // default text margin and resolution
-  static const Standard_Real THE_3D_TEXT_MARGIN    = 0.1;
-  static const unsigned int  THE_2D_TEXT_RESOLUTION = 72;
-
-  // default selection priorities
-  static const Standard_Integer THE_NEUTRAL_SEL_PRIORITY = 5;
-  static const Standard_Integer THE_LOCAL_SEL_PRIORITY   = 6;
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_Dimension::AIS_Dimension (const AIS_KindOfDimension theType)
-: AIS_InteractiveObject  (),
-  mySelToleranceForText2d(0.0),
-  myValueType            (ValueType_Computed),
-  myCustomValue          (0.0),
-  myCustomStringValue    (),
-  myIsTextPositionFixed  (Standard_False), 
-  mySpecialSymbol        (' '),
-  myDisplaySpecialSymbol (AIS_DSS_No),
-  myGeometryType         (GeometryType_UndefShapes),
-  myIsPlaneCustom        (Standard_False),
-  myFlyout               (0.0),
-  myIsGeometryValid      (Standard_False),
-  myKindOfDimension      (theType)
-{
-}
-
-//=======================================================================
-//function : SetCustomValue
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::SetCustomValue (const Standard_Real theValue)
-{
-  if (myValueType == ValueType_CustomReal && myCustomValue == theValue)
-  {
-    return;
-  }
-
-  myValueType = ValueType_CustomReal;
-  myCustomValue = theValue;
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetCustomValue
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::SetCustomValue (const TCollection_ExtendedString& theValue)
-{
-  if (myValueType == ValueType_CustomText && myCustomStringValue == theValue)
-  {
-    return;
-  }
-
-  myValueType = ValueType_CustomText;
-  myCustomStringValue = theValue;
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : GetCustomValue
-//purpose  : 
-//=======================================================================
-const TCollection_ExtendedString& AIS_Dimension::GetCustomValue () const
-{
-  return myCustomStringValue;
-}
-
-//=======================================================================
-//function : GetPlane
-//purpose  : 
-//=======================================================================
-const gp_Pln& AIS_Dimension::GetPlane() const
-{
-  return myPlane;
-}
-
-//=======================================================================
-//function : SetUserPlane
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::SetCustomPlane (const gp_Pln& thePlane)
-{
-  myPlane = thePlane;
-  myIsPlaneCustom = Standard_True;
-
-  // Disable fixed (custom) text position
-  UnsetFixedTextPosition();
-
-  // Check validity if geometry has been set already.
-  if (IsValid())
-  {
-    SetToUpdate();
-  }
-}
-
-//=======================================================================
-//function : SetDimensionAspect
-//purpose  :
-//=======================================================================
-void AIS_Dimension::SetDimensionAspect (const Handle(Prs3d_DimensionAspect)& theDimensionAspect)
-{
-  myDrawer->SetDimensionAspect (theDimensionAspect);
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetDisplaySpecialSymbol
-//purpose  :
-//=======================================================================
-void AIS_Dimension::SetDisplaySpecialSymbol (const AIS_DisplaySpecialSymbol theDisplaySpecSymbol)
-{
-  if (myDisplaySpecialSymbol == theDisplaySpecSymbol)
-  {
-    return;
-  }
-
-  myDisplaySpecialSymbol = theDisplaySpecSymbol;
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetSpecialSymbol
-//purpose  :
-//=======================================================================
-void AIS_Dimension::SetSpecialSymbol (const Standard_ExtCharacter theSpecialSymbol)
-{
-  if (mySpecialSymbol == theSpecialSymbol)
-  {
-    return;
-  }
-
-  mySpecialSymbol = theSpecialSymbol;
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetSelToleranceForText2d
-//purpose  :
-//=======================================================================
-void AIS_Dimension::SetSelToleranceForText2d (const Standard_Real theTol)
-{
-  if (mySelToleranceForText2d == theTol)
-  {
-    return;
-  }
-
-  mySelToleranceForText2d = theTol;
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : SetFlyout
-//purpose  :
-//=======================================================================
-void AIS_Dimension::SetFlyout (const Standard_Real theFlyout)
-{
-  if (myFlyout == theFlyout)
-  {
-    return;
-  }
-
-  myFlyout = theFlyout;
-
-  // Disable fixed text position
-  UnsetFixedTextPosition();
-
-  SetToUpdate();
-}
-
-//=======================================================================
-//function : GetDisplayUnits
-//purpose  :
-//=======================================================================
-const TCollection_AsciiString& AIS_Dimension::GetDisplayUnits() const
-{
-  return THE_UNDEFINED_UNITS;
-}
-
-//=======================================================================
-//function : GetModelUnits
-//purpose  :
-//=======================================================================
-const TCollection_AsciiString& AIS_Dimension::GetModelUnits() const
-{
-  return THE_UNDEFINED_UNITS;
-}
-
-//=======================================================================
-//function : ValueToDisplayUnits
-//purpose  :
-//=======================================================================
-Standard_Real AIS_Dimension::ValueToDisplayUnits() const
-{
-  return UnitsAPI::AnyToAny (GetValue(),
-                             GetModelUnits().ToCString(),
-                             GetDisplayUnits().ToCString());
-}
-
-//=======================================================================
-//function : GetValueString
-//purpose  : 
-//=======================================================================
-TCollection_ExtendedString AIS_Dimension::GetValueString (Standard_Real& theWidth) const
-{
-  TCollection_ExtendedString aValueStr;
-  if (myValueType == ValueType_CustomText)
-  {
-    aValueStr = myCustomStringValue;
-  }
-  else
-  {
-    // format value string using "sprintf"
-    TCollection_AsciiString aFormatStr = myDrawer->DimensionAspect()->ValueStringFormat();
-
-    char aFmtBuffer[256];
-    sprintf (aFmtBuffer, aFormatStr.ToCString(), ValueToDisplayUnits());
-    aValueStr = TCollection_ExtendedString (aFmtBuffer);
-  }
-
-  // add units to values string
-  if (myDrawer->DimensionAspect()->IsUnitsDisplayed())
-  {
-    aValueStr += " ";
-    aValueStr += TCollection_ExtendedString (GetDisplayUnits());
-  }
-
-  switch (myDisplaySpecialSymbol)
-  {
-    case AIS_DSS_Before : aValueStr.Insert (1, mySpecialSymbol); break;
-    case AIS_DSS_After  : aValueStr.Insert (aValueStr.Length() + 1, mySpecialSymbol); break;
-    case AIS_DSS_No     : break;
-  }
-
-  // Get text style parameters
-  Handle(Prs3d_TextAspect) aTextAspect = myDrawer->DimensionAspect()->TextAspect();
-  NCollection_Utf8String anUTFString (aValueStr.ToExtString());
-
-  theWidth = 0.0;
-
-  if (myDrawer->DimensionAspect()->IsText3d())
-  {
-    // text width produced by BRepFont
-    Font_BRepFont aFont;
-    if (aFont.FindAndInit (aTextAspect->Aspect()->Font(), aTextAspect->Aspect()->GetTextFontAspect(), aTextAspect->Height(), Font_StrictLevel_Any))
-    {
-      for (NCollection_Utf8Iter anIter = anUTFString.Iterator(); *anIter != 0; )
-      {
-        Standard_Utf32Char aCurrChar = *anIter;
-        Standard_Utf32Char aNextChar = *(++anIter);
-        theWidth += aFont.AdvanceX (aCurrChar, aNextChar);
-      }
-    }
-  }
-  else
-  {
-    // Text width for 1:1 scale 2D case
-    Font_FTFontParams aFontParams;
-    aFontParams.PointSize  = (unsigned int )aTextAspect->Height();
-    aFontParams.Resolution = THE_2D_TEXT_RESOLUTION;
-    if (Handle(Font_FTFont) aFont = Font_FTFont::FindAndCreate (aTextAspect->Aspect()->Font(), aTextAspect->Aspect()->GetTextFontAspect(), aFontParams, Font_StrictLevel_Any))
-    {
-      for (NCollection_Utf8Iter anIter = anUTFString.Iterator(); *anIter != 0; )
-      {
-        Standard_Utf32Char aCurrChar = *anIter;
-        Standard_Utf32Char aNextChar = *(++anIter);
-        theWidth += (Standard_Real) aFont->AdvanceX (aCurrChar, aNextChar);
-      }
-    }
-  }
-
-  return aValueStr;
-}
-
-//=======================================================================
-//function : DrawArrow
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::DrawArrow (const Handle(Prs3d_Presentation)& thePresentation,
-                               const gp_Pnt& theLocation,
-                               const gp_Dir& theDirection)
-{
-  Handle(Graphic3d_Group) aGroup = Prs3d_Root::NewGroup (thePresentation);
-
-  Standard_Real aLength = myDrawer->DimensionAspect()->ArrowAspect()->Length();
-  Standard_Real anAngle = myDrawer->DimensionAspect()->ArrowAspect()->Angle();
-
-  if (myDrawer->DimensionAspect()->IsArrows3d())
-  {
-    Prs3d_Arrow::Draw (aGroup,
-                       theLocation,
-                       theDirection,
-                       anAngle,
-                       aLength);
-    aGroup->SetGroupPrimitivesAspect (myDrawer->DimensionAspect()->ArrowAspect()->Aspect());
-  }
-  else
-  {
-    gp_Pnt aLeftPoint (gp::Origin());
-    gp_Pnt aRightPoint (gp::Origin());
-    const gp_Dir& aPlane = GetPlane().Axis().Direction();
-
-    PointsForArrow (theLocation, theDirection, aPlane, aLength, anAngle, aLeftPoint, aRightPoint);
-
-    Handle(Graphic3d_ArrayOfTriangles) anArrow = new Graphic3d_ArrayOfTriangles(3);
-
-    anArrow->AddVertex (aLeftPoint);
-    anArrow->AddVertex (theLocation);
-    anArrow->AddVertex (aRightPoint);
-
-    // Set aspect for arrow triangles
-    Graphic3d_PolygonOffset aPolOffset;
-    aPolOffset.Mode = Aspect_POM_Off;
-    aPolOffset.Factor = 0.0f;
-    aPolOffset.Units  = 0.0f;
-    Handle(Graphic3d_AspectFillArea3d) aShadingStyle = new Graphic3d_AspectFillArea3d();
-    aShadingStyle->SetInteriorStyle (Aspect_IS_SOLID);
-    aShadingStyle->SetColor (myDrawer->DimensionAspect()->ArrowAspect()->Aspect()->Color());
-    aShadingStyle->SetShadingModel (Graphic3d_TOSM_UNLIT);
-    aShadingStyle->SetPolygonOffset (aPolOffset);
-
-    aGroup->SetPrimitivesAspect (aShadingStyle);
-    aGroup->AddPrimitiveArray (anArrow);
-  }
-
-  SelectionGeometry::Arrow& aSensitiveArrow = mySelectionGeom.NewArrow();
-  aSensitiveArrow.Position  = theLocation;
-  aSensitiveArrow.Direction = theDirection;
-}
-
-//=======================================================================
-//function : drawText
-//purpose  :
-//=======================================================================
-void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
-                              const gp_Pnt& theTextPos,
-                              const gp_Dir& theTextDir,
-                              const TCollection_ExtendedString& theText,
-                              const Standard_Integer theLabelPosition)
-{
-  Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
-  if (myDrawer->DimensionAspect()->IsText3d())
-  {
-    // getting font parameters
-    Handle(Prs3d_TextAspect) aTextAspect = myDrawer->DimensionAspect()->TextAspect();
-    Quantity_Color  aColor      = aTextAspect->Aspect()->Color();
-    Font_FontAspect aFontAspect = aTextAspect->Aspect()->GetTextFontAspect();
-    Standard_Real   aFontHeight = aTextAspect->Height();
-
-    // creating TopoDS_Shape for text
-    Font_BRepFont aFont (aTextAspect->Aspect()->Font().ToCString(),
-                         aFontAspect, aFontHeight);
-    NCollection_Utf8String anUTFString (theText.ToExtString());
-
-    Font_BRepTextBuilder aBuilder;
-    TopoDS_Shape aTextShape = aBuilder.Perform (aFont, anUTFString);
-
-    // compute text width with kerning
-    Standard_Real aTextWidth  = 0.0;
-    Standard_Real aTextHeight = aFont.Ascender() + aFont.Descender();
-
-    for (NCollection_Utf8Iter anIter = anUTFString.Iterator(); *anIter != 0; )
-    {
-      Standard_Utf32Char aCurrChar = *anIter;
-      Standard_Utf32Char aNextChar = *(++anIter);
-      aTextWidth += aFont.AdvanceX (aCurrChar, aNextChar);
-    }
-
-    // formating text position in XOY plane
-    Standard_Integer aHLabelPos = theLabelPosition & LabelPosition_HMask;
-    Standard_Integer aVLabelPos = theLabelPosition & LabelPosition_VMask;
-
-    gp_Dir aTextDir (aHLabelPos == LabelPosition_Left ? -theTextDir : theTextDir);
-
-    // compute label offsets
-    Standard_Real aMarginSize    = aFontHeight * THE_3D_TEXT_MARGIN;
-    Standard_Real aCenterHOffset = 0.0;
-    Standard_Real aCenterVOffset = 0.0;
-    switch (aHLabelPos)
-    {
-      case LabelPosition_HCenter : aCenterHOffset =  0.0; break;
-      case LabelPosition_Right   : aCenterHOffset =  aTextWidth / 2.0 + aMarginSize; break;
-      case LabelPosition_Left    : aCenterHOffset = -aTextWidth / 2.0 - aMarginSize; break;
-    }
-    switch (aVLabelPos)
-    {
-      case LabelPosition_VCenter : aCenterVOffset =  0.0; break;
-      case LabelPosition_Above   : aCenterVOffset =  aTextHeight / 2.0 + aMarginSize; break;
-      case LabelPosition_Below   : aCenterVOffset = -aTextHeight / 2.0 - aMarginSize; break;
-    }
-
-    // compute shape offset transformation
-    Standard_Real aShapeHOffset = aCenterHOffset - aTextWidth / 2.0;
-    Standard_Real aShapeVOffset = aCenterVOffset - aTextHeight / 2.0;
-
-    // center shape in its bounding box (suppress border spacing added by FT_Font)
-    Bnd_Box aShapeBnd;
-    BRepBndLib::AddClose (aTextShape, aShapeBnd);
-
-    Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
-    aShapeBnd.Get (aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
-
-    Standard_Real aXalign = aTextWidth  * 0.5 - (aXmax + aXmin) * 0.5;
-    Standard_Real aYalign = aTextHeight * 0.5 - (aYmax + aYmin) * 0.5;
-    aShapeHOffset += aXalign;
-    aShapeVOffset += aYalign;
-
-    gp_Trsf anOffsetTrsf;
-    anOffsetTrsf.SetTranslation (gp::Origin(), gp_Pnt (aShapeHOffset, aShapeVOffset, 0.0));
-    aTextShape.Move (anOffsetTrsf);
-
-    // transform text to myWorkingPlane coordinate system
-    gp_Ax3 aTextCoordSystem (theTextPos, GetPlane().Axis().Direction(), aTextDir);
-    gp_Trsf aTextPlaneTrsf;
-    aTextPlaneTrsf.SetTransformation (aTextCoordSystem, gp_Ax3 (gp::XOY()));
-    aTextShape.Move (aTextPlaneTrsf);
-
-    // set text flipping anchors
-    gp_Trsf aCenterOffsetTrsf;
-    gp_Pnt aCenterOffset (aCenterHOffset, aCenterVOffset, 0.0);
-    aCenterOffsetTrsf.SetTranslation (gp::Origin(), aCenterOffset);
-
-    gp_Pnt aCenterOfLabel (gp::Origin());
-    aCenterOfLabel.Transform (aCenterOffsetTrsf);
-    aCenterOfLabel.Transform (aTextPlaneTrsf);
-
-    gp_Ax2 aFlippingAxes (aCenterOfLabel, GetPlane().Axis().Direction(), aTextDir);
-    aGroup->SetFlippingOptions (Standard_True, aFlippingAxes);
-
-    // draw text
-    if (myDrawer->DimensionAspect()->IsTextShaded())
-    {
-      // Setting text shading and color parameters
-      if (!myDrawer->HasOwnShadingAspect())
-      {
-        myDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
-      }
-
-      Graphic3d_MaterialAspect aShadeMat (Graphic3d_NOM_DEFAULT);
-      aShadeMat.SetAmbientColor (Quantity_NOC_BLACK);
-      aShadeMat.SetDiffuseColor (Quantity_NOC_BLACK);
-      aShadeMat.SetSpecularColor(Quantity_NOC_BLACK);
-      myDrawer->ShadingAspect()->Aspect()->SetInteriorColor (aColor);
-      myDrawer->ShadingAspect()->Aspect()->SetBackInteriorColor (aColor);
-      myDrawer->ShadingAspect()->SetMaterial (aShadeMat);
-
-      // drawing text
-      StdPrs_ShadedShape::Add (thePresentation, aTextShape, myDrawer);
-    }
-    else
-    {
-      // Setting color for text
-      if (!myDrawer->HasOwnFreeBoundaryAspect())
-      {
-        myDrawer->SetFreeBoundaryAspect (new Prs3d_LineAspect (aColor, Aspect_TOL_SOLID, 1.0));
-      }
-      myDrawer->FreeBoundaryAspect()->Aspect()->SetColor (aColor);
-
-      // drawing text
-      if (Handle(Graphic3d_ArrayOfPrimitives) anEdges = StdPrs_WFShape::AddAllEdges (aTextShape, myDrawer))
-      {
-        aGroup->SetGroupPrimitivesAspect (myDrawer->FreeBoundaryAspect()->Aspect());
-        aGroup->AddPrimitiveArray (anEdges);
-      }
-    }
-    Prs3d_Root::CurrentGroup (thePresentation)->SetFlippingOptions (Standard_False, gp_Ax2());
-
-    mySelectionGeom.TextPos    = aCenterOfLabel;
-    mySelectionGeom.TextDir    = aTextDir;
-    mySelectionGeom.TextWidth  = aTextWidth + aMarginSize * 2.0;
-    mySelectionGeom.TextHeight = aTextHeight;
-
-    return;
-  }
-
-  // generate primitives for 2D text
-  myDrawer->DimensionAspect()->TextAspect()->Aspect()->SetDisplayType (Aspect_TODT_DIMENSION);
-
-  Prs3d_Text::Draw (aGroup,
-                    myDrawer->DimensionAspect()->TextAspect(),
-                    theText,
-                    theTextPos);
-
-  mySelectionGeom.TextPos    = theTextPos;
-  mySelectionGeom.TextDir    = theTextDir;
-  mySelectionGeom.TextWidth  = 0.0;
-  mySelectionGeom.TextHeight = 0.0;
-}
-
-//=======================================================================
-//function : DrawExtension
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::DrawExtension (const Handle(Prs3d_Presentation)& thePresentation,
-                                   const Standard_Real theExtensionSize,
-                                   const gp_Pnt& theExtensionStart,
-                                   const gp_Dir& theExtensionDir,
-                                   const TCollection_ExtendedString& theLabelString,
-                                   const Standard_Real theLabelWidth,
-                                   const Standard_Integer theMode,
-                                   const Standard_Integer theLabelPosition)
-{
-  // reference line for extension starting at its connection point
-  gp_Lin anExtensionLine (theExtensionStart, theExtensionDir);
-
-  Standard_Boolean hasLabel = theLabelString.Length() > 0;
-  if (hasLabel && (theMode == ComputeMode_All || theMode == ComputeMode_Text))
-  {
-    // compute text primitives; get its model width
-    gp_Pnt aTextPos = ElCLib::Value (theExtensionSize, anExtensionLine);
-    gp_Dir aTextDir = theExtensionDir;
-
-    Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
-    drawText (thePresentation,
-              aTextPos,
-              aTextDir,
-              theLabelString,
-              theLabelPosition);
-  }
-
-  if (theMode != ComputeMode_All && theMode != ComputeMode_Line)
-  {
-    return;
-  }
-
-  Standard_Boolean isShortLine =  !myDrawer->DimensionAspect()->IsText3d()
-                               || theLabelPosition & LabelPosition_VCenter;
-
-  // compute graphical primitives and sensitives for extension line
-  gp_Pnt anExtStart = theExtensionStart;
-  gp_Pnt anExtEnd   = !hasLabel || isShortLine
-    ? ElCLib::Value (theExtensionSize, anExtensionLine)
-    : ElCLib::Value (theExtensionSize + theLabelWidth, anExtensionLine);
-
-  // add graphical primitives
-  Handle(Graphic3d_ArrayOfSegments) anExtPrimitive = new Graphic3d_ArrayOfSegments (2);
-  anExtPrimitive->AddVertex (anExtStart);
-  anExtPrimitive->AddVertex (anExtEnd);
-
-  // add selection primitives
-  SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
-  aSensitiveCurve.Append (anExtStart);
-  aSensitiveCurve.Append (anExtEnd);
-
-  Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
-  if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
-  {
-    aGroup->SetStencilTestOptions (Standard_True);
-  }
-  Handle(Graphic3d_AspectLine3d) aDimensionLineStyle = myDrawer->DimensionAspect()->LineAspect()->Aspect();
-  aGroup->SetPrimitivesAspect (aDimensionLineStyle);
-  aGroup->AddPrimitiveArray (anExtPrimitive);
-  if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
-  {
-    aGroup->SetStencilTestOptions (Standard_False);
-  }
-}
-
-//=======================================================================
-//function : DrawLinearDimension
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePresentation,
-                                         const Standard_Integer theMode,
-                                         const gp_Pnt& theFirstPoint,
-                                         const gp_Pnt& theSecondPoint,
-                                         const Standard_Boolean theIsOneSide)
-{
-  // do not build any dimension for equal points
-  if (theFirstPoint.IsEqual (theSecondPoint, Precision::Confusion()))
-  {
-    throw Standard_ProgramError("Can not build presentation for equal points.");
-  }
-
-  Handle(Prs3d_DimensionAspect) aDimensionAspect = myDrawer->DimensionAspect();
-
-  // For extensions we need to know arrow size, text size and extension size: get it from aspect
-  Standard_Real anArrowLength   = aDimensionAspect->ArrowAspect()->Length();
-  Standard_Real anExtensionSize = aDimensionAspect->ExtensionSize();
-  // prepare label string and compute its geometrical width
-  Standard_Real aLabelWidth;
-  TCollection_ExtendedString aLabelString = GetValueString (aLabelWidth);
-
-  // add margins to cut dimension lines for 3d text
-  if (aDimensionAspect->IsText3d())
-  {
-    aLabelWidth += aDimensionAspect->TextAspect()->Height() * THE_3D_TEXT_MARGIN * 2.0;
-  }
-
-  // handle user-defined and automatic arrow placement
-  Standard_Boolean isArrowsExternal = Standard_False;
-  Standard_Integer aLabelPosition = LabelPosition_None;
-
-  Prs3d_DimensionTextHorizontalPosition aHorisontalTextPos = aDimensionAspect->TextHorizontalPosition();
-  if (IsTextPositionCustom())
-  {
-    if (!AdjustParametersForLinear (myFixedTextPosition, theFirstPoint, theSecondPoint,
-                                    anExtensionSize, aHorisontalTextPos, myFlyout, myPlane, myIsPlaneCustom))
-    {
-      throw Standard_ProgramError("Can not adjust plane to the custom label position.");
-    }
-  }
-
-  FitTextAlignmentForLinear (theFirstPoint, theSecondPoint, theIsOneSide, aHorisontalTextPos,
-                             aLabelPosition, isArrowsExternal);
-
-  // compute dimension line points
-  gp_Pnt aLineBegPoint, aLineEndPoint;
-  ComputeFlyoutLinePoints (theFirstPoint, theSecondPoint, aLineBegPoint, aLineEndPoint);
-  gp_Lin aDimensionLine = gce_MakeLin (aLineBegPoint, aLineEndPoint);
-
-  // compute arrows positions and directions
-  gp_Dir aFirstArrowDir       = aDimensionLine.Direction().Reversed();
-  gp_Dir aSecondArrowDir      = aDimensionLine.Direction();
-  gp_Dir aFirstExtensionDir   = aDimensionLine.Direction().Reversed();
-  gp_Dir aSecondExtensionDir  = aDimensionLine.Direction();
-
-  gp_Pnt aFirstArrowBegin  (0.0, 0.0, 0.0);
-  gp_Pnt aFirstArrowEnd    (0.0, 0.0, 0.0);
-  gp_Pnt aSecondArrowBegin (0.0, 0.0, 0.0);
-  gp_Pnt aSecondArrowEnd   (0.0, 0.0, 0.0);
-
-  if (isArrowsExternal)
-  {
-    aFirstArrowDir.Reverse();
-    aSecondArrowDir.Reverse();
-  }
-
-  aFirstArrowBegin  = aLineBegPoint;
-  aSecondArrowBegin = aLineEndPoint;
-  aFirstArrowEnd    = aLineBegPoint.Translated (-gp_Vec (aFirstArrowDir).Scaled (anArrowLength));
-  aSecondArrowEnd   = aLineEndPoint.Translated (-gp_Vec (aSecondArrowDir).Scaled (anArrowLength));
-
-  gp_Pnt aCenterLineBegin = isArrowsExternal 
-    ? aLineBegPoint : aFirstArrowEnd;
-
-  gp_Pnt aCenterLineEnd = isArrowsExternal || theIsOneSide
-    ? aLineEndPoint : aSecondArrowEnd;
-
-
-  switch (aLabelPosition & LabelPosition_HMask)
-  {
-    // ------------------------------------------------------------------------ //
-    //                                CENTER                                    //
-    // -------------------------------------------------------------------------//
-    case LabelPosition_HCenter:
-    {
-      // add label on dimension or extension line to presentation
-      gp_Pnt aTextPos = IsTextPositionCustom() ? myFixedTextPosition
-                                              : (aCenterLineBegin.XYZ() + aCenterLineEnd.XYZ()) * 0.5;
-      gp_Dir aTextDir = aDimensionLine.Direction();
-
-      // add text primitives
-      if (theMode == ComputeMode_All || theMode == ComputeMode_Text)
-      {
-        thePresentation->NewGroup();
-        drawText (thePresentation,
-                  aTextPos,
-                  aTextDir,
-                  aLabelString,
-                  aLabelPosition);
-      }
-
-      // add dimension line primitives
-      if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
-      {
-        Standard_Boolean isLineBreak = aDimensionAspect->TextVerticalPosition() == Prs3d_DTVP_Center
-                                    && aDimensionAspect->IsText3d();
-
-        Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (isLineBreak ? 4 : 2);
-
-        // compute continuous or sectioned main line segments
-        if (isLineBreak)
-        {
-          Standard_Real aPTextPosition = ElCLib::Parameter (aDimensionLine, aTextPos);
-          gp_Pnt aSection1Beg = aCenterLineBegin;
-          gp_Pnt aSection1End = ElCLib::Value (aPTextPosition - (aLabelWidth * 0.5), aDimensionLine);
-          gp_Pnt aSection2Beg = ElCLib::Value (aPTextPosition + (aLabelWidth * 0.5), aDimensionLine);
-          gp_Pnt aSection2End = aCenterLineEnd;
-
-          aPrimSegments->AddVertex (aSection1Beg);
-          aPrimSegments->AddVertex (aSection1End);
-          aPrimSegments->AddVertex (aSection2Beg);
-          aPrimSegments->AddVertex (aSection2End);
-
-          SelectionGeometry::Curve& aLeftSensitiveCurve  = mySelectionGeom.NewCurve();
-          SelectionGeometry::Curve& aRightSensitiveCurve = mySelectionGeom.NewCurve();
-          aLeftSensitiveCurve.Append (aSection1Beg);
-          aLeftSensitiveCurve.Append (aSection1End);
-          aRightSensitiveCurve.Append (aSection2Beg);
-          aRightSensitiveCurve.Append (aSection2End);
-        }
-        else
-        {
-          aPrimSegments->AddVertex (aCenterLineBegin);
-          aPrimSegments->AddVertex (aCenterLineEnd);
-
-          SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
-          aSensitiveCurve.Append (aCenterLineBegin);
-          aSensitiveCurve.Append (aCenterLineEnd);
-        }
-
-        // set text label justification
-        Graphic3d_VerticalTextAlignment aTextJustificaton = Graphic3d_VTA_BOTTOM;
-        switch (aLabelPosition & LabelPosition_VMask)
-        {
-          case LabelPosition_Above   :
-          case LabelPosition_VCenter : aTextJustificaton = Graphic3d_VTA_BOTTOM; break;
-          case LabelPosition_Below   : aTextJustificaton = Graphic3d_VTA_TOP;    break;
-        }
-        aDimensionAspect->TextAspect()->SetVerticalJustification (aTextJustificaton);
-
-        // main dimension line, short extension
-        {
-          Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
-          if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
-          {
-            aGroup->SetStencilTestOptions (Standard_True);
-          }
-          aGroup->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
-          aGroup->AddPrimitiveArray (aPrimSegments);
-          if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
-          {
-            aGroup->SetStencilTestOptions (Standard_False);
-          }
-        }
-
-        // add arrows to presentation
-        {
-          Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
-          DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
-          if (!theIsOneSide)
-          {
-            DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
-          }
-        }
-
-        if (!isArrowsExternal)
-        {
-          break;
-        }
-
-        // add arrow extension lines to presentation
-        {
-          DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
-                         aFirstArrowEnd, aFirstExtensionDir,
-                         THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
-          if (!theIsOneSide)
-          {
-            DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
-                           aSecondArrowEnd, aSecondExtensionDir,
-                           THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
-          }
-        }
-      }
-      break;
-    }
-    // ------------------------------------------------------------------------ //
-    //                                LEFT                                      //
-    // -------------------------------------------------------------------------//
-
-    case LabelPosition_Left:
-    {
-      // add label on dimension or extension line to presentation
-      {
-        // Left extension with the text
-        DrawExtension (thePresentation, anExtensionSize,
-                       isArrowsExternal
-                         ? aFirstArrowEnd
-                         : aFirstArrowBegin,
-                       aFirstExtensionDir,
-                       aLabelString,
-                       aLabelWidth,
-                       theMode,
-                       aLabelPosition);
-      }
-
-      // add dimension line primitives
-      if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
-      {
-        // add central dimension line
-        {
-          Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
-
-          // add graphical primitives
-          Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
-          aPrimSegments->AddVertex (aCenterLineBegin);
-          aPrimSegments->AddVertex (aCenterLineEnd);
-
-          aGroup->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
-          aGroup->AddPrimitiveArray (aPrimSegments);
-
-          // add selection primitives
-          SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
-          aSensitiveCurve.Append (aCenterLineBegin);
-          aSensitiveCurve.Append (aCenterLineEnd);
-        }
-
-        // add arrows to presentation
-        {
-          Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
-          DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
-          if (!theIsOneSide)
-          {
-            DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
-          }
-        }
-
-        if (!isArrowsExternal || theIsOneSide)
-        {
-          break;
-        }
-
-        // add extension lines for external arrows
-        {
-          DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
-                         aSecondArrowEnd, aSecondExtensionDir,
-                         THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
-        }
-      }
-
-      break;
-    }
-    // ------------------------------------------------------------------------ //
-    //                                RIGHT                                     //
-    // -------------------------------------------------------------------------//
-
-    case LabelPosition_Right:
-    {
-      // add label on dimension or extension line to presentation
-
-      // Right extension with text
-      DrawExtension (thePresentation, anExtensionSize,
-                     isArrowsExternal
-                       ? aSecondArrowEnd
-                       : aSecondArrowBegin,
-                     aSecondExtensionDir,
-                     aLabelString, aLabelWidth,
-                     theMode,
-                     aLabelPosition);
-
-      if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
-      {
-        // add central dimension line
-        {
-          Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
-
-          // add graphical primitives
-          Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
-          aPrimSegments->AddVertex (aCenterLineBegin);
-          aPrimSegments->AddVertex (aCenterLineEnd);
-          aGroup->SetGroupPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
-          aGroup->AddPrimitiveArray (aPrimSegments);
-
-          // add selection primitives
-          SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
-          aSensitiveCurve.Append (aCenterLineBegin);
-          aSensitiveCurve.Append (aCenterLineEnd);
-        }
-
-        // add arrows to presentation
-        {
-          thePresentation->NewGroup();
-          DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
-          if (!theIsOneSide)
-          {
-            DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
-          }
-        }
-
-        if (!isArrowsExternal || theIsOneSide)
-        {
-          break;
-        }
-
-        // add extension lines for external arrows
-        {
-          DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
-                         aFirstArrowEnd, aFirstExtensionDir,
-                         THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
-        }
-      }
-
-      break;
-    }
-  }
-
-  // add flyout lines to presentation
-  if (theMode == ComputeMode_All)
-  {
-    Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
-
-    Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments(4);
-    aPrimSegments->AddVertex (theFirstPoint);
-    aPrimSegments->AddVertex (aLineBegPoint);
-
-    aPrimSegments->AddVertex (theSecondPoint);
-    aPrimSegments->AddVertex (aLineEndPoint);
-
-    aGroup->SetGroupPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
-    aGroup->AddPrimitiveArray (aPrimSegments);
-  }
-
-  mySelectionGeom.IsComputed = Standard_True;
-}
-
-//=======================================================================
-//function : ComputeFlyoutLinePoints
-//purpose  :
-//=======================================================================
-void AIS_Dimension::ComputeFlyoutLinePoints (const gp_Pnt& theFirstPoint, const gp_Pnt& theSecondPoint,
-                                             gp_Pnt& theLineBegPoint, gp_Pnt& theLineEndPoint)
-{
-  // compute dimension line points
-  gp_Ax1 aPlaneNormal = GetPlane().Axis();
-  // compute flyout direction vector
-  gp_Dir aTargetPointsVector = gce_MakeDir (theFirstPoint, theSecondPoint);
-  gp_Dir aFlyoutVector = aPlaneNormal.Direction() ^ aTargetPointsVector;
-  // create lines for layouts
-  gp_Lin aLine1 (theFirstPoint, aFlyoutVector);
-  gp_Lin aLine2 (theSecondPoint, aFlyoutVector);
-
-  // Get flyout end points
-  theLineBegPoint = ElCLib::Value (ElCLib::Parameter (aLine1, theFirstPoint)  + GetFlyout(), aLine1);
-  theLineEndPoint = ElCLib::Value (ElCLib::Parameter (aLine2, theSecondPoint) + GetFlyout(), aLine2);
-}
-
-//=======================================================================
-//function : ComputeLinearFlyouts
-//purpose  :
-//=======================================================================
-void AIS_Dimension::ComputeLinearFlyouts (const Handle(SelectMgr_Selection)& theSelection,
-                                          const Handle(SelectMgr_EntityOwner)& theOwner,
-                                          const gp_Pnt& theFirstPoint,
-                                          const gp_Pnt& theSecondPoint)
-{
-  // count flyout direction
-  gp_Ax1 aPlaneNormal = GetPlane().Axis();
-  gp_Dir aTargetPointsVector = gce_MakeDir (theFirstPoint, theSecondPoint);
-
-  // count a flyout direction vector.
-  gp_Dir aFlyoutVector = aPlaneNormal.Direction() ^ aTargetPointsVector;
-
-  // create lines for layouts
-  gp_Lin aLine1 (theFirstPoint,  aFlyoutVector);
-  gp_Lin aLine2 (theSecondPoint, aFlyoutVector);
-
-  // get flyout end points
-  gp_Pnt aFlyoutEnd1 = ElCLib::Value (ElCLib::Parameter (aLine1, theFirstPoint) + GetFlyout(), aLine1);
-  gp_Pnt aFlyoutEnd2 = ElCLib::Value (ElCLib::Parameter (aLine2, theSecondPoint) + GetFlyout(), aLine2);
-
-  // fill sensitive entity for flyouts
-  Handle(Select3D_SensitiveGroup) aSensitiveEntity = new Select3D_SensitiveGroup (theOwner);
-  aSensitiveEntity->Add (new Select3D_SensitiveSegment (theOwner, theFirstPoint, aFlyoutEnd1));
-  aSensitiveEntity->Add (new Select3D_SensitiveSegment (theOwner, theSecondPoint, aFlyoutEnd2));
-  theSelection->Add (aSensitiveEntity);
-}
-
-//=======================================================================
-//function : CircleFromPlanarFace
-//purpose  : if possible computes circle from planar face
-//=======================================================================
-Standard_Boolean AIS_Dimension::CircleFromPlanarFace (const TopoDS_Face& theFace,
-                                                      Handle(Geom_Curve)& theCurve,
-                                                      gp_Pnt& theFirstPoint,
-                                                      gp_Pnt& theLastPoint)
-{
-  TopExp_Explorer anIt (theFace, TopAbs_EDGE);
-  for ( ; anIt.More(); anIt.Next())
-  {
-    TopoDS_Edge aCurEdge =  TopoDS::Edge (anIt.Current());
-    if (AIS::ComputeGeometry (aCurEdge, theCurve, theFirstPoint, theLastPoint))
-    {
-      if (theCurve->IsInstance (STANDARD_TYPE(Geom_Circle)))
-      {
-        return Standard_True;
-      }
-    }
-  }
-  return Standard_False;
-}
-
-//=======================================================================
-//function : CircleFromEdge
-//purpose  : if possible computes circle from edge
-//=======================================================================
-Standard_Boolean AIS_Dimension::CircleFromEdge (const TopoDS_Edge& theEdge,
-                                                gp_Circ&           theCircle,
-                                                gp_Pnt&            theFirstPoint,
-                                                gp_Pnt&            theLastPoint)
-{
-  BRepAdaptor_Curve anAdaptedCurve (theEdge);
-  switch (anAdaptedCurve.GetType())
-  {
-    case GeomAbs_Circle:
-    {
-      theCircle = anAdaptedCurve.Circle();
-      break;
-    }
-    case GeomAbs_Ellipse:
-    {
-      gp_Elips anEll = anAdaptedCurve.Ellipse();
-      if ((anEll.MinorRadius() - anEll.MajorRadius()) >= Precision::Confusion())
-      {
-        return Standard_False;
-      }
-      theCircle = gp_Circ(anEll.Position(),anEll.MinorRadius());
-      break;
-    }
-    case GeomAbs_Line:
-    case GeomAbs_Hyperbola:
-    case GeomAbs_Parabola:
-    case GeomAbs_BezierCurve:
-    case GeomAbs_BSplineCurve:
-    case GeomAbs_OtherCurve:
-    default:
-      return Standard_False;
-  }
-
-  theFirstPoint = anAdaptedCurve.Value (anAdaptedCurve.FirstParameter());
-  theLastPoint  = anAdaptedCurve.Value (anAdaptedCurve.LastParameter());
-  return Standard_True;
-}
-
-//=======================================================================
-//function : InitCircularDimension
-//purpose  : 
-//=======================================================================
-Standard_Boolean AIS_Dimension::InitCircularDimension (const TopoDS_Shape& theShape,
-                                                       gp_Circ& theCircle,
-                                                       gp_Pnt& theMiddleArcPoint,
-                                                       Standard_Boolean& theIsClosed)
-{
-  gp_Pln aPln;
-  Handle(Geom_Surface) aBasisSurf;
-  AIS_KindOfSurface aSurfType = AIS_KOS_OtherSurface;
-  gp_Pnt aFirstPoint, aLastPoint;
-  Standard_Real anOffset    = 0.0;
-  Standard_Real aFirstParam = 0.0;
-  Standard_Real aLastParam  = 0.0;
-
-  // Discover circular geometry
-  switch (theShape.ShapeType())
-  {
-    case TopAbs_FACE:
-    {
-      AIS::GetPlaneFromFace (TopoDS::Face (theShape), aPln, aBasisSurf, aSurfType, anOffset);
-
-      if (aSurfType == AIS_KOS_Plane)
-      {
-        Handle(Geom_Curve) aCurve;
-        if (!CircleFromPlanarFace (TopoDS::Face (theShape), aCurve, aFirstPoint, aLastPoint))
-        {
-          return Standard_False;
-        }
-
-        theCircle = Handle(Geom_Circle)::DownCast (aCurve)->Circ();
-      }
-      else
-      {
-        gp_Pnt aCurPos;
-        BRepAdaptor_Surface aSurf1 (TopoDS::Face (theShape));
-        Standard_Real aFirstU = aSurf1.FirstUParameter();
-        Standard_Real aLastU  = aSurf1.LastUParameter();
-        Standard_Real aFirstV = aSurf1.FirstVParameter();
-        Standard_Real aLastV  = aSurf1.LastVParameter();
-        Standard_Real aMidU   = (aFirstU + aLastU) * 0.5;
-        Standard_Real aMidV   = (aFirstV + aLastV) * 0.5;
-        aSurf1.D0 (aMidU, aMidV, aCurPos);
-        Handle (Adaptor3d_HCurve) aBasisCurve;
-        Standard_Boolean isExpectedType = Standard_False;
-        if (aSurfType == AIS_KOS_Cylinder)
-        {
-          isExpectedType = Standard_True;
-        }
-        else
-        {
-          if (aSurfType == AIS_KOS_Revolution)
-          {
-            aBasisCurve = aSurf1.BasisCurve();
-            if (aBasisCurve->GetType() == GeomAbs_Line)
-            {
-              isExpectedType = Standard_True;
-            }
-          }
-          else if (aSurfType == AIS_KOS_Extrusion)
-          {
-            aBasisCurve = aSurf1.BasisCurve();
-            if (aBasisCurve->GetType() == GeomAbs_Circle)
-            {
-              isExpectedType = Standard_True;
-            }
-          }
-        }
-
-        if (!isExpectedType)
-        {
-          return Standard_False;
-        }
-
-        Handle(Geom_Curve) aCurve = aBasisSurf->VIso(aMidV);
-        if (aCurve->DynamicType() == STANDARD_TYPE (Geom_Circle))
-        {
-          theCircle = Handle(Geom_Circle)::DownCast (aCurve)->Circ();
-        }
-        else if (aCurve->DynamicType() == STANDARD_TYPE (Geom_TrimmedCurve))
-        {
-          Handle(Geom_TrimmedCurve) aTrimmedCurve = Handle(Geom_TrimmedCurve)::DownCast (aCurve);
-          aFirstU = aTrimmedCurve->FirstParameter();
-          aLastU  = aTrimmedCurve->LastParameter();
-          if (aTrimmedCurve->BasisCurve()->DynamicType() == STANDARD_TYPE (Geom_Circle))
-          {
-            theCircle = Handle(Geom_Circle)::DownCast(aTrimmedCurve->BasisCurve())->Circ();
-          }
-        }
-        else
-        {
-          // Compute a circle from 3 points on "aCurve"
-          gp_Pnt aP1, aP2;
-          aSurf1.D0 (aFirstU, aMidV, aP1);
-          aSurf1.D0 (aLastU, aMidV, aP2);
-          GC_MakeCircle aMkCirc (aP1, aCurPos, aP2);
-          theCircle = aMkCirc.Value()->Circ();
-        }
-
-        aFirstPoint = ElCLib::Value (aFirstU, theCircle);
-        aLastPoint = ElCLib::Value (aLastU,  theCircle);
-      }
-      break;
-    }
-    case TopAbs_WIRE:
-    {
-      TopoDS_Edge anEdge;
-      TopExp_Explorer anIt (theShape, TopAbs_EDGE);
-      if (anIt.More())
-      {
-        anEdge = TopoDS::Edge (anIt.Current());
-      }
-      if (!AIS_Dimension::CircleFromEdge (anEdge, theCircle, aFirstPoint, aLastPoint))
-      {
-        return Standard_False;
-      }
-      break;
-    }
-    case TopAbs_EDGE:
-    {
-      TopoDS_Edge anEdge = TopoDS::Edge (theShape);
-      if (!AIS_Dimension::CircleFromEdge (anEdge, theCircle, aFirstPoint, aLastPoint))
-      {
-        return Standard_False;
-      }
-      break;
-    }
-    case TopAbs_COMPOUND:
-    case TopAbs_COMPSOLID:
-    case TopAbs_SOLID:
-    case TopAbs_SHELL:
-    case TopAbs_VERTEX:
-    case TopAbs_SHAPE:
-    default:
-      return Standard_False;
-  }
-
-  theIsClosed = aFirstPoint.IsEqual (aLastPoint, Precision::Confusion());
-
-  gp_Pnt aCenter = theCircle.Location();
-
-  if (theIsClosed) // Circle
-  {
-    gp_Dir anXDir = theCircle.XAxis().Direction();
-    theMiddleArcPoint = aCenter.Translated (gp_Vec (anXDir) * theCircle.Radius());
-  }
-  else // Arc
-  {
-    aFirstParam = ElCLib::Parameter (theCircle, aFirstPoint);
-    aLastParam  = ElCLib::Parameter (theCircle, aLastPoint);
-    if (aFirstParam > aLastParam)
-    {
-      aFirstParam -= 2.0 * M_PI;
-    }
-
-    Standard_Real aParCurPos = (aFirstParam + aLastParam) * 0.5;
-    gp_Vec aVec = gp_Vec (aCenter, ElCLib::Value (aParCurPos, theCircle)).Normalized () * theCircle.Radius ();
-    theMiddleArcPoint = aCenter.Translated (aVec);
-  }
-
-  return Standard_True;
-}
-
-//=======================================================================
-//function : ComputeSelection
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
-                                      const Standard_Integer theMode)
-{
-  if (!mySelectionGeom.IsComputed)
-  {
-    return;
-  }
-
-  AIS_DimensionSelectionMode aSelectionMode = (AIS_DimensionSelectionMode)theMode;
-
-  // init appropriate entity owner
-  Handle(SelectMgr_EntityOwner) aSensitiveOwner;
-
-  switch (aSelectionMode)
-  {
-    // neutral selection owner
-    case AIS_DSM_All :
-      aSensitiveOwner = new SelectMgr_EntityOwner (this, THE_NEUTRAL_SEL_PRIORITY);
-      break;
-
-    // local selection owners
-    case AIS_DSM_Line :
-    case AIS_DSM_Text :
-      aSensitiveOwner = new AIS_DimensionOwner (this, aSelectionMode, THE_LOCAL_SEL_PRIORITY);
-      break;
-  }
-
-  if (aSelectionMode == AIS_DSM_All || aSelectionMode == AIS_DSM_Line)
-  {
-    // sensitives for dimension line segments
-    Handle(Select3D_SensitiveGroup) aGroupOfSensitives = new Select3D_SensitiveGroup (aSensitiveOwner);
-
-    SelectionGeometry::SeqOfCurves::Iterator aCurveIt (mySelectionGeom.DimensionLine);
-    for (; aCurveIt.More(); aCurveIt.Next())
-    {
-      const SelectionGeometry::HCurve& aCurveData = aCurveIt.Value();
-
-      TColgp_Array1OfPnt aSensitivePnts (1, aCurveData->Length());
-      for (Standard_Integer aPntIt = 1; aPntIt <= aCurveData->Length(); ++aPntIt)
-      {
-        aSensitivePnts.ChangeValue (aPntIt) = aCurveData->Value (aPntIt);
-      }
-
-      aGroupOfSensitives->Add (new Select3D_SensitiveCurve (aSensitiveOwner, aSensitivePnts));
-    }
-
-    Standard_Real anArrowLength = myDrawer->DimensionAspect()->ArrowAspect()->Length();
-    Standard_Real anArrowAngle  = myDrawer->DimensionAspect()->ArrowAspect()->Angle();
-
-    // sensitives for arrows
-    SelectionGeometry::SeqOfArrows::Iterator anArrowIt (mySelectionGeom.Arrows);
-    for (; anArrowIt.More(); anArrowIt.Next())
-    {
-      const SelectionGeometry::HArrow& anArrow = anArrowIt.Value();
-
-      gp_Pnt aSidePnt1 (gp::Origin());
-      gp_Pnt aSidePnt2 (gp::Origin());
-      const gp_Dir& aPlane = GetPlane().Axis().Direction();
-      const gp_Pnt& aPeak  = anArrow->Position;
-      const gp_Dir& aDir   = anArrow->Direction;
-
-      // compute points for arrow in plane
-      PointsForArrow (aPeak, aDir, aPlane, anArrowLength, anArrowAngle, aSidePnt1, aSidePnt2);
-
-      aGroupOfSensitives->Add (new Select3D_SensitiveTriangle (aSensitiveOwner, aPeak, aSidePnt1, aSidePnt2));
-
-      if (!myDrawer->DimensionAspect()->IsArrows3d())
-      {
-        continue;
-      }
-
-      // compute points for orthogonal sensitive plane
-      gp_Dir anOrthoPlane = anArrow->Direction.Crossed (aPlane);
-
-      PointsForArrow (aPeak, aDir, anOrthoPlane, anArrowLength, anArrowAngle, aSidePnt1, aSidePnt2);
-
-      aGroupOfSensitives->Add (new Select3D_SensitiveTriangle (aSensitiveOwner, aPeak, aSidePnt1, aSidePnt2));
-    }
-
-    theSelection->Add (aGroupOfSensitives);
-  }
-
-  // sensitives for text element
-  if (aSelectionMode == AIS_DSM_All || aSelectionMode == AIS_DSM_Text)
-  {
-    Handle(Select3D_SensitiveEntity) aTextSensitive;
-
-    gp_Ax2 aTextAxes (mySelectionGeom.TextPos,
-                      GetPlane().Axis().Direction(),
-                      mySelectionGeom.TextDir);
-
-    if (myDrawer->DimensionAspect()->IsText3d())
-    {
-      // sensitive planar rectangle for text
-      Standard_Real aDx = mySelectionGeom.TextWidth  * 0.5;
-      Standard_Real aDy = mySelectionGeom.TextHeight * 0.5;
-
-      gp_Trsf aLabelPlane;
-      aLabelPlane.SetTransformation (aTextAxes, gp::XOY());
-
-      TColgp_Array1OfPnt aRectanglePoints(1, 4);
-      aRectanglePoints.ChangeValue(1) = gp_Pnt (-aDx, -aDy, 0.0).Transformed (aLabelPlane);
-      aRectanglePoints.ChangeValue(2) = gp_Pnt (-aDx,  aDy, 0.0).Transformed (aLabelPlane);
-      aRectanglePoints.ChangeValue(3) = gp_Pnt ( aDx,  aDy, 0.0).Transformed (aLabelPlane);
-      aRectanglePoints.ChangeValue(4) = gp_Pnt ( aDx, -aDy, 0.0).Transformed (aLabelPlane);
-
-      Poly_Array1OfTriangle aTriangles(1, 2);
-      aTriangles.ChangeValue(1) = Poly_Triangle(1, 2, 3);
-      aTriangles.ChangeValue(2) = Poly_Triangle(1, 3, 4);
-
-      Handle(Poly_Triangulation) aRectanglePoly = 
-        new Poly_Triangulation(aRectanglePoints, aTriangles);
-
-      aTextSensitive =
-        new Select3D_SensitiveTriangulation (aSensitiveOwner, aRectanglePoly, TopLoc_Location(), Standard_True);
-    }
-    else
-    {
-      gp_Circ aTextGeom (aTextAxes, mySelToleranceForText2d != 0.0 
-                                      ? mySelToleranceForText2d : 1.0);
-
-      Handle(Geom_Circle) aSensGeom = new Geom_Circle (aTextGeom);
-
-      aTextSensitive = new Select3D_SensitiveCircle (aSensitiveOwner, aSensGeom, Standard_True);
-    }
-
-    theSelection->Add (aTextSensitive);
-  }
-
-  // callback for flyout sensitive calculation
-  if (aSelectionMode == AIS_DSM_All)
-  {
-    ComputeFlyoutSelection (theSelection, aSensitiveOwner);
-  }
-}
-
-//=======================================================================
-//function : PointsForArrow
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::PointsForArrow (const gp_Pnt& thePeakPnt,
-                                    const gp_Dir& theDirection,
-                                    const gp_Dir& thePlane,
-                                    const Standard_Real theArrowLength,
-                                    const Standard_Real theArrowAngle,
-                                    gp_Pnt& theSidePnt1,
-                                    gp_Pnt& theSidePnt2)
-{
-  gp_Lin anArrowLin (thePeakPnt, theDirection.Reversed());
-  gp_Pnt anArrowEnd = ElCLib::Value (theArrowLength, anArrowLin);
-  gp_Lin anEdgeLin (anArrowEnd, theDirection.Crossed (thePlane));
-
-  Standard_Real anEdgeLength = Tan (theArrowAngle) * theArrowLength;
-
-  theSidePnt1 = ElCLib::Value ( anEdgeLength, anEdgeLin);
-  theSidePnt2 = ElCLib::Value (-anEdgeLength, anEdgeLin);
-}
-
-//=======================================================================
-//function : GetTextPositionForLinear
-//purpose  : 
-//=======================================================================
-gp_Pnt AIS_Dimension::GetTextPositionForLinear (const gp_Pnt& theFirstPoint,
-                                                const gp_Pnt& theSecondPoint,
-                                                const Standard_Boolean theIsOneSide) const
-{
-  if (!IsValid())
-  {
-    return gp::Origin();
-  }
-
-  gp_Pnt aTextPosition (gp::Origin());
-
-  Handle(Prs3d_DimensionAspect) aDimensionAspect = myDrawer->DimensionAspect();
-
-  // Get label alignment and arrow orientation.
-  Standard_Integer aLabelPosition = 0;
-  Standard_Boolean isArrowsExternal = Standard_False;
-  FitTextAlignmentForLinear (theFirstPoint, theSecondPoint, theIsOneSide,
-                             aDimensionAspect->TextHorizontalPosition(),
-                             aLabelPosition, isArrowsExternal);
-
-  // Compute dimension line points.
-  gp_Dir aPlaneNormal = GetPlane().Axis().Direction();
-  gp_Vec aTargetPointsVec (theFirstPoint, theSecondPoint);
-
-  // Compute flyout direction vector
-  gp_Dir aFlyoutVector = aPlaneNormal ^ gp_Dir (aTargetPointsVec);
-
-  // create lines for layouts
-  gp_Lin aLine1 (theFirstPoint, aFlyoutVector);
-  gp_Lin aLine2 (theSecondPoint, aFlyoutVector);
-  // Get flyout end points
-  gp_Pnt aLineBegPoint = ElCLib::Value (ElCLib::Parameter (aLine1, theFirstPoint)  + GetFlyout(), aLine1);
-  gp_Pnt aLineEndPoint = ElCLib::Value (ElCLib::Parameter (aLine2, theSecondPoint) + GetFlyout(), aLine2);
-
-  // Get text position.
-  switch (aLabelPosition & LabelPosition_HMask)
-  {
-  case LabelPosition_Left:
-    {
-      gp_Dir aTargetPointsDir = gce_MakeDir (theFirstPoint, theSecondPoint);
-      Standard_Real anExtensionSize = aDimensionAspect->ExtensionSize();
-
-      Standard_Real anOffset = isArrowsExternal
-                                 ? anExtensionSize + aDimensionAspect->ArrowAspect()->Length()
-                                 : anExtensionSize;
-      gp_Vec anExtensionVec = gp_Vec (aTargetPointsDir) * -anOffset;
-      aTextPosition = aLineEndPoint.Translated (anExtensionVec);
-    }
-    break;
-  case LabelPosition_Right:
-    {
-      gp_Dir aTargetPointsDir = gce_MakeDir (theFirstPoint, theSecondPoint);
-      Standard_Real anExtensionSize = aDimensionAspect->ExtensionSize();
-
-      Standard_Real anOffset = isArrowsExternal
-                                 ? anExtensionSize + aDimensionAspect->ArrowAspect()->Length()
-                                 : anExtensionSize;
-      gp_Vec anExtensionVec = gp_Vec (aTargetPointsDir) * anOffset;
-      aTextPosition = aLineBegPoint.Translated (anExtensionVec);
-    }
-    break;
-  case LabelPosition_HCenter:
-    {
-      aTextPosition = (aLineBegPoint.XYZ() + aLineEndPoint.XYZ()) * 0.5;
-    }
-    break;
-  }
-
-  return aTextPosition;
-}
-
-//=======================================================================
-//function : AdjustParametersForLinear
-//purpose  : 
-//=======================================================================
-Standard_Boolean AIS_Dimension::AdjustParametersForLinear (const gp_Pnt& theTextPos,
-                                                           const gp_Pnt& theFirstPoint,
-                                                           const gp_Pnt& theSecondPoint,
-                                                           Standard_Real& theExtensionSize,
-                                                           Prs3d_DimensionTextHorizontalPosition& theAlignment,
-                                                           Standard_Real& theFlyout,
-                                                           gp_Pln& thePlane,
-                                                           Standard_Boolean& theIsPlaneOld) const
-{
-  Handle(Prs3d_DimensionAspect) aDimensionAspect = myDrawer->DimensionAspect();
-  Standard_Real anArrowLength = aDimensionAspect->ArrowAspect()->Length();
-
-  gp_Dir aTargetPointsDir = gce_MakeDir (theFirstPoint, theSecondPoint);
-  gp_Vec aTargetPointsVec (theFirstPoint, theSecondPoint);
-
-  // Don't set new plane if the text position lies on the attachment points line.
-  gp_Lin aTargetPointsLin (theFirstPoint, aTargetPointsDir);
-  if (!aTargetPointsLin.Contains (theTextPos, Precision::Confusion()))
-  {
-    //Set new automatic plane.
-    thePlane = gce_MakePln (theTextPos, theFirstPoint, theSecondPoint);
-    theIsPlaneOld = Standard_False;
-  }
-
-  // Compute flyout direction vector.
-  gp_Dir aPlaneNormal = GetPlane().Axis().Direction();
-  gp_Dir aPositiveFlyout = aPlaneNormal ^ aTargetPointsDir;
-
-  // Additional check of collinearity of the plane normal and attachment points vector.
-  if (aPlaneNormal.IsParallel (aTargetPointsDir, Precision::Angular()))
-  {
-    return Standard_False;
-  }
-
-  // Set flyout.
-  gp_Vec aFirstToTextVec (theFirstPoint, theTextPos);
-
-  Standard_Real aCos = aFirstToTextVec.Normalized() * gp_Vec (aTargetPointsDir);
-
-  gp_Pnt aTextPosProj = theFirstPoint.Translated
-    (gp_Vec (aTargetPointsDir) * aFirstToTextVec.Magnitude() * aCos);
-
-  // Compute flyout value and direction.
-  gp_Vec aFlyoutVector = gp_Vec (aTextPosProj, theTextPos);
-
-  theFlyout = 0.0;
-  if (aFlyoutVector.Magnitude() > Precision::Confusion())
-  {
-    theFlyout = gp_Dir (aFlyoutVector).IsOpposite (aPositiveFlyout, Precision::Angular())
-                ? -aFlyoutVector.Magnitude()
-                :  aFlyoutVector.Magnitude();
-  }
-  
-  // Compute attach points (through which main dimension line passes).
-  gp_Pnt aFirstAttach  = theFirstPoint.Translated (aFlyoutVector);
-  gp_Pnt aSecondAttach = theSecondPoint.Translated (aFlyoutVector);
-
-  // Set horizontal text alignment.
-  if (aCos < 0.0)
-  {
-    theAlignment = Prs3d_DTHP_Left;
-
-    Standard_Real aNewExtSize = theTextPos.Distance (aFirstAttach) - anArrowLength;
-    theExtensionSize = aNewExtSize < 0.0 ? 0.0 : aNewExtSize;
-  }
-  else if (aTextPosProj.Distance (theFirstPoint) > theFirstPoint.Distance (theSecondPoint))
-  {
-    theAlignment = Prs3d_DTHP_Right;
-
-    Standard_Real aNewExtSize = theTextPos.Distance (aSecondAttach) - anArrowLength;
-    theExtensionSize = aNewExtSize < 0.0 ? 0.0 : aNewExtSize;
-  }
-  else
-  {
-    theAlignment = Prs3d_DTHP_Center;
-  }
-  return Standard_True;
-}
-
-//=======================================================================
-//function : FitTextAlignmentForLinear
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::FitTextAlignmentForLinear (const gp_Pnt& theFirstPoint,
-                                               const gp_Pnt& theSecondPoint,
-                                               const Standard_Boolean theIsOneSide,
-                                               const Prs3d_DimensionTextHorizontalPosition& theHorizontalTextPos,
-                                               Standard_Integer& theLabelPosition,
-                                               Standard_Boolean& theIsArrowsExternal) const
-{
-  theLabelPosition = LabelPosition_None;
-  theIsArrowsExternal = Standard_False;
-
-  // Compute dimension line points
-  gp_Ax1 aPlaneNormal = GetPlane().Axis();
-  gp_Dir aTargetPointsVector = gce_MakeDir (theFirstPoint, theSecondPoint);
-
-  // compute flyout direction vector
-  gp_Dir aFlyoutVector = aPlaneNormal.Direction() ^ aTargetPointsVector;
-
-  // create lines for layouts
-  gp_Lin aLine1 (theFirstPoint, aFlyoutVector);
-  gp_Lin aLine2 (theSecondPoint, aFlyoutVector);
-
-  // Get flyout end points
-  gp_Pnt aLineBegPoint = ElCLib::Value (ElCLib::Parameter (aLine1, theFirstPoint)  + GetFlyout(), aLine1);
-  gp_Pnt aLineEndPoint = ElCLib::Value (ElCLib::Parameter (aLine2, theSecondPoint) + GetFlyout(), aLine2);
-
-  Handle(Prs3d_DimensionAspect) aDimensionAspect = myDrawer->DimensionAspect();
-
-  // For extensions we need to know arrow size, text size and extension size: get it from aspect
-  Standard_Real anArrowLength = aDimensionAspect->ArrowAspect()->Length();
-
-  // prepare label string and compute its geometrical width
-  Standard_Real aLabelWidth;
-  TCollection_ExtendedString aLabelString = GetValueString (aLabelWidth);
-
-  // Add margins to cut dimension lines for 3d text
-  if (aDimensionAspect->IsText3d())
-  {
-    aLabelWidth += aDimensionAspect->TextAspect()->Height() * THE_3D_TEXT_MARGIN * 2.0;
-  }
-
-  // Handle user-defined and automatic arrow placement
-  switch (aDimensionAspect->ArrowOrientation())
-  {
-    case Prs3d_DAO_External: theIsArrowsExternal = true; break;
-    case Prs3d_DAO_Internal: theIsArrowsExternal = false; break;
-    case Prs3d_DAO_Fit:
-    {
-      // Add margin to ensure a small tail between text and arrow
-      Standard_Real anArrowMargin   = aDimensionAspect->IsText3d() 
-                                    ? aDimensionAspect->TextAspect()->Height() * THE_3D_TEXT_MARGIN
-                                    : 0.0;
-
-      Standard_Real aDimensionWidth = aLineBegPoint.Distance (aLineEndPoint);
-      Standard_Real anArrowsWidth   = theIsOneSide 
-                                      ?  anArrowLength + anArrowMargin
-                                      : (anArrowLength + anArrowMargin) * 2.0;
-
-      theIsArrowsExternal = aDimensionWidth < aLabelWidth + anArrowsWidth;
-      break;
-    }
-  }
-
-  // Handle user-defined and automatic text placement
-  switch (theHorizontalTextPos)
-  {
-    case Prs3d_DTHP_Left  : theLabelPosition |= LabelPosition_Left; break;
-    case Prs3d_DTHP_Right : theLabelPosition |= LabelPosition_Right; break;
-    case Prs3d_DTHP_Center: theLabelPosition |= LabelPosition_HCenter; break;
-    case Prs3d_DTHP_Fit:
-    {
-      Standard_Real aDimensionWidth = aLineBegPoint.Distance (aLineEndPoint);
-      Standard_Real anArrowsWidth   = theIsOneSide ? anArrowLength : 2.0 * anArrowLength;
-      Standard_Real aContentWidth   = theIsArrowsExternal ? aLabelWidth : aLabelWidth + anArrowsWidth;
-
-      theLabelPosition |= aDimensionWidth < aContentWidth ? LabelPosition_Left : LabelPosition_HCenter;
-      break;
-    }
-  }
-
-  // Handle vertical text placement options
-  switch (aDimensionAspect->TextVerticalPosition())
-  {
-    case Prs3d_DTVP_Above  : theLabelPosition |= LabelPosition_Above; break;
-    case Prs3d_DTVP_Below  : theLabelPosition |= LabelPosition_Below; break;
-    case Prs3d_DTVP_Center : theLabelPosition |= LabelPosition_VCenter; break;
-  }
-}
-
-//=======================================================================
-//function : UnsetFixedTextPosition
-//purpose  : 
-//=======================================================================
-void AIS_Dimension::UnsetFixedTextPosition()
-{
-  myIsTextPositionFixed = Standard_False;
-  myFixedTextPosition = gp::Origin();
-}
diff --git a/src/AIS/AIS_Dimension.hxx b/src/AIS/AIS_Dimension.hxx
deleted file mode 100755 (executable)
index 6e923db..0000000
+++ /dev/null
@@ -1,711 +0,0 @@
-// Created on: 2013-11-11
-// Created by: Anastasia BORISOVA
-// Copyright (c) 2013-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#ifndef _AIS_Dimension_HeaderFile
-#define _AIS_Dimension_HeaderFile
-
-#include <AIS_DimensionSelectionMode.hxx>
-#include <AIS_DimensionOwner.hxx>
-#include <AIS_DisplaySpecialSymbol.hxx>
-#include <AIS_InteractiveObject.hxx>
-#include <AIS_KindOfInteractive.hxx>
-#include <AIS_KindOfDimension.hxx>
-#include <AIS_KindOfSurface.hxx>
-#include <Geom_Curve.hxx>
-#include <gp_Pln.hxx>
-#include <Prs3d_ArrowAspect.hxx>
-#include <Prs3d_DimensionAspect.hxx>
-#include <Prs3d_DimensionUnits.hxx>
-#include <Prs3d_Drawer.hxx>
-#include <Prs3d_LineAspect.hxx>
-#include <Prs3d_Presentation.hxx>
-#include <Prs3d_TextAspect.hxx>
-#include <SelectMgr_EntityOwner.hxx>
-#include <Standard.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <TColgp_HSequenceOfPnt.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Shape.hxx>
-#include <NCollection_Sequence.hxx>
-#include <NCollection_Handle.hxx>
-
-class AIS_Dimension;
-DEFINE_STANDARD_HANDLE(AIS_Dimension, AIS_InteractiveObject)
-
-//! AIS_Dimension is a base class for 2D presentations of linear (length, diameter, radius)
-//! and angular dimensions.
-//!
-//! The dimensions provide measurement of quantities, such as lengths or plane angles.
-//! The measurement of dimension "value" is done in model space "as is".
-//! These "value" are said to be represented in "model units", which can be specified by user.
-//! During the display the measured value converted from "model units" to "display units".
-//! The display and model units are stored in common Prs3d_Drawer (drawer of the context)
-//! to share it between all dimensions.
-//! The specified by user units are stored in the dimension's drawer.
-//!
-//! As a drawing, the dimension is composed from the following components:
-//! - Attachment (binding) points. The points where the dimension lines attaches to, for
-//!   length dimensions the distances are measured between these points.
-//! - Main dimension line. The which extends from the attachment points in "up" direction,
-//!   and which contains text label on it with value string.
-//! - Flyouts. The lines connecting the attachment points with main dimension line.
-//! - Extension. The lines used to extend the main dimension line in the cases when text
-//!   or arrows do not fit into the main dimension line due to their size.
-//! - Arrows.
-//!
-//! <pre>
-//!  Linear dimensions:
-//!
-//!  extension
-//!   line                                     arrow
-//!       -->|------- main dimension line -------|<--
-//!          |                                   |
-//!          |flyout                       flyout|
-//!          |                                   |
-//!          +-----------------------------------+
-//! attachment                                attachment
-//!  point                                       point
-//!
-//!  Angular dimensions:
-//!
-//!                  extension
-//!                     line
-//!                        -->|+++++
-//!                     arrow |     +++
-//!                           |        90(deg) - main dimension line
-//!                    flyout |         +++
-//!                           |           +
-//!                           o---flyout---
-//!                         center         ^ 
-//!                         point          | extension
-//!                                          line
-//! </pre>
-//!
-//! Being a 2D drawings, the dimensions are created on imaginary plane, called "dimension plane",
-//! which can be thought of as reference system of axes (X,Y,N) for constructing the presentation.
-//!
-//! The role of axes of the dimension plane is to guide you through the encapsualted automations
-//! of presentation building to help you understand how is the presentation will look and how it
-//! will be oriented in model space during construction.
-//! 
-//! Orientation of dimension line in model space relatively to the base shapes is defined 
-//! with the flyouts. Flyouts specify length of flyout lines and their orientation relatively
-//! to the attachment points on the working plane.
-//! For linear dimensions: 
-//!   Direction of flyouts is specified with direction of main dimension line
-//!   (vector from the first attachment to the second attachment) and the normal of the dimension plane.
-//!   Positive direction of flyouts is defined by vector multiplication: AttachVector * PlaneNormal.
-//! For angular dimensions:
-//!   Flyouts are defined by vectors from the center point to the attachment points.
-//!   These vectors directions are supposed to be the positive directions of flyouts.
-//!   Negative flyouts directions means that these vectors should be reversed
-//!   (and dimension will be built out of the angle constructed with center and two attach points).
-//!
-//! The dimension plane can be constructed automatically by application (where possible,
-//! it depends on the measured geometry).
-//! It can be also set by user. However, if the user-defined plane does not fit the
-//! geometry of the dimension (attach points do not belong to it), the dimension could not
-//! be built.
-//! If it is not possible to compute automatic plane (for example, in case of length between 
-//! two points) the user is supposed to specify the custom plane.
-//!
-//! Since the dimensions feature automated construction procedures from an arbitrary shapes,
-//! the interfaces to check the validness are also implemented. Once the measured geometry is
-//! specified, the one can inquire the validness status by calling "IsValid()" method. If the result
-//! is TRUE, then all of public parameters should be pre-computed and ready. The presentation
-//! should be also computable. Otherwise, the parameters may return invalid values. In this case,
-//! the presentation will not be computed and displayed.
-//! 
-//! The dimension support two local selection modes: main dimension line selection and text label
-//! selection. These modes can be used to develop interactive modification of dimension presentations.
-//! The component highlighting in these selection modes is provided by AIS_DimensionOwner class.
-//! Please note that selection is unavailable until the presentation is computed.
-//! 
-//! The specific drawing attributes are controlled through Prs3d_DimensionAspect. The one can change
-//! color, arrows, text and arrow style and specify positioning of value label by setting corresponding
-//! values to the aspect.
-//!
-//! Such set of parameters that consists of:
-//! - flyout size and direction,
-//! - user-defined  dimension plane,
-//! - horizontal and vertical text alignment
-//! can be uniquely replaced with text position in 3d space. Therefore, there are methods to convert
-//! this set of parameters to the text position and vice versa:
-//!
-//! - If the fixed text position is defined by user, called SetTextPosition (theTextPos) method converts
-//! this 3d point to the set of parameters including adjusting of the dimension plane (this plane will be
-//! automatic plane, NOT user-defined one).
-//! If the fixed text position is set, the flag myIsFixedTextPosition is set to TRUE.
-//! ATTENSION! myIsFixedTextPosition fixes all parameters of the set from recomputing inside
-//! SetMeasureGeometry() methods. Parameters in dimension aspect (they are horizontal text position
-//! and extension size) are adjusted on presentation computing step, user-defined values in
-//! dimension aspect are not changed.
-//! But plane and flyout as dimension position parameters are changed by SetTextPosition() method
-//! according with user-defined text position.
-//! If parameters from the set are changed by user with calls of setters, it leads to disabling of
-//! fixed text position (myIsFixedTextPosition is set to FALSE).
-//! If the fixed text position is set and geometry is changed by user (SetMeasureGeometry() method
-//! is called) and the geometry doesn't satisfy computed dimension plane, the dimension is not valid.
-//!
-//! - If the set of parameters was set by user (may be without the user-defined plane or with it),
-//! it can be converted to the text position by calling the method GetTextPosition(). In this case
-//! the text position is NOT fixed, and SetMeasureGeometry() without user-defined plane adjusts
-//! the automatic plane according input geometry (if it is possible).
-//!
-class AIS_Dimension : public AIS_InteractiveObject
-{
-protected:
-
-  //! Geometry type defines type of shapes on which the dimension is to be built.
-  //! Some type of geometry allows automatic plane computing and
-  //! can be built without user-defined plane
-  //! Another types can't be built without user-defined plane.
-  enum GeometryType
-  {
-    GeometryType_UndefShapes,
-    GeometryType_Edge,
-    GeometryType_Face,
-    GeometryType_Points,
-    GeometryType_Edges,
-    GeometryType_Faces,
-    GeometryType_EdgeFace,
-    GeometryType_EdgeVertex
-  };
-
-  //! Specifies supported at base level horizontal and vertical
-  //! label positions for drawing extension lines and centered text.
-  enum LabelPosition
-  {
-    LabelPosition_None    = 0x00,
-
-    LabelPosition_Left    = 0x01,
-    LabelPosition_Right   = 0x02,
-    LabelPosition_HCenter = 0x04,
-    LabelPosition_HMask   = LabelPosition_Left | LabelPosition_Right | LabelPosition_HCenter,
-
-    LabelPosition_Above   = 0x10,
-    LabelPosition_Below   = 0x20,
-    LabelPosition_VCenter = 0x40,
-    LabelPosition_VMask   = LabelPosition_Above | LabelPosition_Below | LabelPosition_VCenter
-  };
-
-  enum ValueType
-  {
-    ValueType_Computed,
-    ValueType_CustomReal,
-    ValueType_CustomText
-  };
-
-public:
-
-  //! Specifies supported presentation compute modes.
-  //! Used to compute only parts of presentation for
-  //! advanced highlighting.
-  enum ComputeMode
-  {
-    ComputeMode_All  = 0, //!< "0" is reserved as neutral mode
-    ComputeMode_Line = 1, //!< corresponds to selection mode
-    ComputeMode_Text = 2  //!< corresponds to selection mode
-  };
-
-public:
-
-  //! Constructor with default parameters values.
-  //! @param theType [in] the type of dimension.
-  Standard_EXPORT AIS_Dimension (const AIS_KindOfDimension theType);
-
-  //! Gets dimension measurement value. If the value to display is not
-  //! specified by user, then the dimension object is responsible to
-  //! compute it on its own in model space coordinates.
-  //! @return the dimension value (in model units) which is used
-  //! during display of the presentation.
-  Standard_Real GetValue() const
-  {
-    return myValueType == ValueType_CustomReal ? myCustomValue : ComputeValue();
-  }
-
-  //! Sets computed dimension value. Resets custom value mode if it was set.
-  void SetComputedValue ()
-  {
-    myValueType = ValueType_Computed;
-  }
-
-  //! Sets user-defined dimension value.
-  //! The user-defined dimension value is specified in model space,
-  //! and affect by unit conversion during the display.
-  //! @param theValue [in] the user-defined value to display.
-  Standard_EXPORT void SetCustomValue (const Standard_Real theValue);
-
-  //! Sets user-defined dimension value.
-  //! Unit conversion during the display is not applyed.
-  //! @param theValue [in] the user-defined value to display.
-  Standard_EXPORT void SetCustomValue (const TCollection_ExtendedString& theValue);
-
-  //! Gets user-defined dimension value.
-  //! @return dimension value string.
-  Standard_EXPORT const TCollection_ExtendedString& GetCustomValue () const;
-
-  //! Get the dimension plane in which the 2D dimension presentation is computed.
-  //! By default, if plane is not defined by user, it is computed automatically
-  //! after dimension geometry is computed.
-  //! If computed dimension geometry (points) can't be placed on the user-defined
-  //! plane, dimension geometry was set as invalid (validity flag is set to false)
-  //! and dimension presentation will not be computed.
-  //! If user-defined plane allow geometry placement on it, it will be used for
-  //! computing of the dimension presentation.
-  //! @return dimension plane used for presentation computing.
-  Standard_EXPORT const gp_Pln& GetPlane() const;
-
-  //! Geometry type defines type of shapes on which the dimension is to be built. 
-  //! @return type of geometry on which the dimension will be built.
-  Standard_Integer GetGeometryType () const { return myGeometryType; }
-
-  //! Sets user-defined plane where the 2D dimension presentation will be placed.
-  //! Checks validity of this plane if geometry has been set already.
-  //! Validity of the plane is checked according to the geometry set
-  //! and has different criteria for different kinds of dimensions.
-  Standard_EXPORT virtual void SetCustomPlane (const gp_Pln& thePlane);
-
-  //! Unsets user-defined plane. Therefore the plane for dimension will be
-  //! computed automatically.
-  void UnsetCustomPlane() { myIsPlaneCustom = Standard_False; }
-
-  //! @return TRUE if text position is set by user with method SetTextPosition().
-  Standard_Boolean IsTextPositionCustom() const
-  {
-    return myIsTextPositionFixed;
-  }
-
-  //! Fixes the absolute text position and adjusts flyout, plane and text alignment
-  //! according to it. Updates presentation if the text position is valid.
-  //! ATTENTION! It does not change vertical text alignment.
-  //! @param theTextPos [in] the point of text position.
-  virtual void SetTextPosition (const gp_Pnt& /*theTextPos*/) { }
-
-  //! Computes absolute text position from dimension parameters
-  //! (flyout, plane and text alignment).
-  virtual const gp_Pnt GetTextPosition () const { return gp_Pnt(); }
-
-public:
-
-  //! Gets the dimension aspect from AIS object drawer.
-  //! Dimension aspect contains aspects of line, text and arrows for dimension presentation.
-  Handle(Prs3d_DimensionAspect) DimensionAspect() const
-  {
-    return myDrawer->DimensionAspect();
-  }
-
-  //! Sets new dimension aspect for the interactive object drawer.
-  //! The dimension aspect provides dynamic properties which are generally
-  //! used during computation of dimension presentations.
-  Standard_EXPORT void SetDimensionAspect (const Handle(Prs3d_DimensionAspect)& theDimensionAspect);
-
-  //! @return the kind of dimension.
-  AIS_KindOfDimension KindOfDimension() const
-  {
-    return myKindOfDimension;
-  }
-
-  //! @return the kind of interactive.
-  virtual AIS_KindOfInteractive Type() const Standard_OVERRIDE
-  {
-    return AIS_KOI_Dimension;
-  }
-
-  //! Returns true if the class of objects accepts the display mode theMode.
-  //! The interactive context can have a default mode of representation for
-  //! the set of Interactive Objects. This mode may not be accepted by object.
-  virtual Standard_Boolean AcceptDisplayMode (const Standard_Integer theMode) const Standard_OVERRIDE
-  {
-    return theMode == ComputeMode_All;
-  }
-
-public:
-
-  //! @return dimension special symbol display options.
-  AIS_DisplaySpecialSymbol DisplaySpecialSymbol() const
-  {
-    return myDisplaySpecialSymbol;
-  }
-
-  //! Specifies whether to display special symbol or not.
-  Standard_EXPORT void SetDisplaySpecialSymbol (const AIS_DisplaySpecialSymbol theDisplaySpecSymbol);
-
-  //! @return special symbol.
-  Standard_ExtCharacter SpecialSymbol() const
-  {
-    return mySpecialSymbol;
-  }
-
-  //! Specifies special symbol.
-  Standard_EXPORT void SetSpecialSymbol (const Standard_ExtCharacter theSpecialSymbol);
-
-  Standard_EXPORT virtual const TCollection_AsciiString& GetDisplayUnits() const;
-
-  Standard_EXPORT virtual const TCollection_AsciiString& GetModelUnits() const;
-
-  virtual void SetDisplayUnits (const TCollection_AsciiString& /*theUnits*/) { }
-
-  virtual void SetModelUnits (const TCollection_AsciiString& /*theUnits*/) { }
-
-  //! Unsets user defined text positioning and enables text positioning
-  //!  by other parameters: text alignment, extension size, flyout and custom plane.
-  Standard_EXPORT void UnsetFixedTextPosition();
-
-public:
-
-  //! Returns selection tolerance for text2d:
-  //! For 2d text selection detection sensitive point with tolerance is used
-  //! Important! Only for 2d text.
-  Standard_Real SelToleranceForText2d() const
-  {
-    return mySelToleranceForText2d;
-  }
-
-  //! Sets selection tolerance for text2d:
-  //! For 2d text selection detection sensitive point with tolerance is used
-  //! to change this tolerance use this method
-  //! Important! Only for 2d text.
-  Standard_EXPORT void SetSelToleranceForText2d (const Standard_Real theTol);
-
-  //! @return flyout value for dimension.
-  Standard_Real GetFlyout() const
-  {
-    return myFlyout;
-  }
-
-  //! Sets flyout value for dimension.
-  Standard_EXPORT void SetFlyout (const Standard_Real theFlyout);
-
-  //! Check that the input geometry for dimension is valid and the
-  //! presentation can be successfully computed.
-  //! @return TRUE if dimension geometry is ok.
-  virtual Standard_Boolean IsValid() const
-  {
-    return myIsGeometryValid && CheckPlane (GetPlane());
-  }
-
-public:
-
-  DEFINE_STANDARD_RTTIEXT(AIS_Dimension,AIS_InteractiveObject)
-
-protected:
-
-  Standard_EXPORT Standard_Real ValueToDisplayUnits() const;
-
-  //! Get formatted value string and its model space width.
-  //! @param theWidth [out] the model space with of the string.
-  //! @return formatted dimension value string.
-  Standard_EXPORT TCollection_ExtendedString GetValueString (Standard_Real& theWidth) const;
-
-  //! Performs drawing of 2d or 3d arrows on the working plane
-  //! @param theLocation [in] the location of the arrow tip.
-  //! @param theDirection [in] the direction from the tip to the bottom of the arrow.
-  Standard_EXPORT void DrawArrow (const Handle(Prs3d_Presentation)& thePresentation,
-                                  const gp_Pnt& theLocation,
-                                  const gp_Dir& theDirection);
-
-  //! Performs drawing of 2d or 3d text on the working plane
-  //! @param theTextPos [in] the position of the text label.
-  //! @param theTestDir [in] the direction of the text label.
-  //! @param theText [in] the text label string.
-  //! @param theLabelPosition [in] the text label vertical and horizontal positioning option
-  //! respectively to the main dimension line. 
-  //! @return text width relative to the dimension working plane. For 2d text this value will be zero.
-  Standard_EXPORT void drawText (const Handle(Prs3d_Presentation)& thePresentation,
-                                 const gp_Pnt& theTextPos,
-                                 const gp_Dir& theTextDir,
-                                 const TCollection_ExtendedString& theText,
-                                 const Standard_Integer theLabelPosition);
-
-  //! Performs computing of dimension linear extension with text
-  //! @param thePresentation [in] the presentation to fill with graphical primitives.
-  //! @param theExtensionSize [in] the size of extension line.
-  //! @param theExtensionStart [in] the point where extension line connects to dimension.
-  //! @param theExtensionDir [in] the direction of extension line.
-  //! @param theLabelString [in] the string with value.
-  //! @param theLabelWidth [in] the geometrical width computed for value string.
-  //! @param theMode [in] the display mode.
-  //! @param theLabelPosition [in] position flags for the text label.
-  Standard_EXPORT void DrawExtension (const Handle(Prs3d_Presentation)& thePresentation,
-                                      const Standard_Real theExtensionSize,
-                                      const gp_Pnt& theExtensionStart,
-                                      const gp_Dir& theExtensionDir,
-                                      const TCollection_ExtendedString& theLabelString,
-                                      const Standard_Real theLabelWidth,
-                                      const Standard_Integer theMode,
-                                      const Standard_Integer theLabelPosition);
-
-  //! Performs computing of linear dimension (for length, diameter, radius and so on).
-  //! Please note that this method uses base dimension properties, like working plane
-  //! flyout length, drawer attributes.
-  //! @param thePresentation [in] the presentation to fill with primitives.
-  //! @param theMode [in] the presentation compute mode.
-  //! @param theFirstPoint [in] the first attach point of linear dimension.
-  //! @param theSecondPoint [in] the second attach point of linear dimension.
-  //! @param theIsOneSide [in] specifies whether the dimension has only one flyout line.
-  Standard_EXPORT void DrawLinearDimension (const Handle(Prs3d_Presentation)& thePresentation,
-                                            const Standard_Integer theMode,
-                                            const gp_Pnt& theFirstPoint,
-                                            const gp_Pnt& theSecondPoint,
-                                            const Standard_Boolean theIsOneSide = Standard_False);
-
-  //! Computes points bounded the flyout line for linear dimension.
-  //! @param theFirstPoint [in] the first attach point of linear dimension.
-  //! @param theSecondPoint [in] the second attach point of linear dimension.
-  //! @param theLineBegPoint [out] the first attach point of linear dimension.
-  //! @param theLineEndPoint [out] the second attach point of linear dimension.
-  Standard_EXPORT virtual void ComputeFlyoutLinePoints (const gp_Pnt& theFirstPoint, const gp_Pnt& theSecondPoint,
-                                                        gp_Pnt& theLineBegPoint, gp_Pnt& theLineEndPoint);
-
-  //! Compute selection sensitives for linear dimension flyout lines (length, diameter, radius).
-  //! Please note that this method uses base dimension properties: working plane and flyout length.
-  //! @param theSelection [in] the selection structure to fill with selection primitives.
-  //! @param theOwner [in] the selection entity owner.
-  //! @param theFirstPoint [in] the first attach point of linear dimension.
-  //! @param theSecondPoint [in] the second attach point of linear dimension.
-  Standard_EXPORT void ComputeLinearFlyouts (const Handle(SelectMgr_Selection)& theSelection,
-                                             const Handle(SelectMgr_EntityOwner)& theOwner,
-                                             const gp_Pnt& theFirstPoint,
-                                             const gp_Pnt& theSecondPoint);
-
-
-  //! Performs initialization of circle and middle arc point from the passed
-  //! shape which is assumed to contain circular geometry.
-  //! @param theShape [in] the shape to explore.
-  //! @param theCircle [out] the circle geometry.
-  //! @param theMiddleArcPoint [out] the middle point of the arc.
-  //! @param theIsClosed [out] returns TRUE if the geometry is closed circle.
-  //! @return TRUE if the the circle is successfully got from the input shape.
-  Standard_EXPORT Standard_Boolean InitCircularDimension (const TopoDS_Shape& theShape,
-                                                          gp_Circ& theCircle,
-                                                          gp_Pnt& theMiddleArcPoint,
-                                                          Standard_Boolean& theIsClosed);
-  //! Produce points for triangular arrow face.
-  //! @param thePeakPnt [in] the arrow peak position.
-  //! @param theDirection [in] the arrow direction.
-  //! @param thePlane [in] the face plane.
-  //! @param theArrowLength [in] the length of arrow.
-  //! @param theArrowAngle [in] the angle of arrow.
-  //! @param theSidePnt1 [out] the first side point.
-  //! @param theSidePnt2 [out] the second side point.
-  Standard_EXPORT void PointsForArrow (const gp_Pnt& thePeakPnt,
-                                       const gp_Dir& theDirection,
-                                       const gp_Dir& thePlane,
-                                       const Standard_Real theArrowLength,
-                                       const Standard_Real theArrowAngle,
-                                       gp_Pnt& theSidePnt1,
-                                       gp_Pnt& theSidePnt2);
-
-  //! Compute point of text position for dimension parameters
-  //! for linear kinds of dimensions (length, radius, diameter).
-  Standard_EXPORT gp_Pnt GetTextPositionForLinear (const gp_Pnt& theFirstPoint,
-                                                   const gp_Pnt& theSecondPoint,
-                                                   const Standard_Boolean theIsOneSide = Standard_False) const;
-
-  //! Fits text alignment relatively to the dimension line.
-  //! @param theFirstPoint [in] the first attachment point.
-  //! @param theSecondPoint [in] the second attachment point.
-  //! @param theIsOneSide [in] is the arrow displayed only on the one side of the dimension.
-  //! @param theHorizontalTextPos [in] the text horizontal position (alignment).
-  //! @param theLabelPosition [out] the label position, contains bits that defines
-  //! vertical and horizontal alignment. (for internal usage in count text position)
-  //! @param theIsArrowExternal [out] is the arrows external,
-  //! if arrow orientation in the dimension aspect is Prs3d_DAO_Fit, it fits arrow
-  //! orientation automatically.
-  Standard_EXPORT void FitTextAlignmentForLinear (const gp_Pnt& theFirstPoint,
-                                                  const gp_Pnt& theSecondPoint,
-                                                  const Standard_Boolean theIsOneSide,
-                                                  const Prs3d_DimensionTextHorizontalPosition& theHorizontalTextPos,
-                                                  Standard_Integer& theLabelPosition,
-                                                  Standard_Boolean& theIsArrowsExternal) const;
-
-  //! Adjusts aspect parameters according the text position:
-  //! extension size, vertical text alignment and flyout.
-  //! @param theTextPos [in] the user defined 3d point of text position
-  //! @param theFirstPoint [in] the first point of linear measurement.
-  //! @param theSecondPoint [in] the second point of linear measurement.
-  //! @param theExtensionSize [out] the adjusted extension size
-  //! @param theAlignment [out] the horizontal label alignment.
-  //! @param theFlyout [out] the adjusted value of flyout.
-  //! @param thePlane [out] the new plane that contains theTextPos and attachment points.
-  //! @param theIsPlaneOld [out] shows if new plane is computed.
-  Standard_EXPORT Standard_Boolean AdjustParametersForLinear (const gp_Pnt& theTextPos,
-                                                              const gp_Pnt& theFirstPoint,
-                                                              const gp_Pnt& theSecondPoint,
-                                                              Standard_Real& theExtensionSize,
-                                                              Prs3d_DimensionTextHorizontalPosition& theAlignment,
-                                                              Standard_Real& theFlyout,
-                                                              gp_Pln& thePlane,
-                                                              Standard_Boolean& theIsPlaneOld) const;
-
-protected: //! @name Static auxilliary methods for geometry extraction
-
-  //! If it is possible extracts circle from planar face.
-  //! @param theFace        [in] the planar face
-  //! @param theCurve       [out] the circular curve
-  //! @param theFirstPoint  [out] the point of the first parameter of the circlular curve
-  //! @param theSecondPoint [out] the point of the last parameter of the circlular curve
-  //! @return TRUE in case of successful circle extraction
-  static Standard_Boolean CircleFromPlanarFace (const TopoDS_Face&  theFace,
-                                                Handle(Geom_Curve)& theCurve,
-                                                gp_Pnt&             theFirstPoint,
-                                                gp_Pnt&             theLastPoint);
-
-  //! If it is possible extracts circle from the edge.
-  //! @param theEdge        [in] input edge to extract circle from
-  //! @param theCircle      [out] circle
-  //! @param theFirstPoint  [out] the point of the first parameter of the circlular curve
-  //! @param theSecondPoint [out] the point of the last parameter of the circlular curve
-  //! @return TRUE in case of successful circle extraction.
-  static Standard_Boolean CircleFromEdge (const TopoDS_Edge& theEdge,
-                                          gp_Circ&           theCircle,
-                                          gp_Pnt&            theFirstPoint,
-                                          gp_Pnt&            theLastPoint);
-
-protected: //! @name Behavior to implement
-
-  //! Override this method to check if user-defined plane
-  //! is valid for the dimension geometry.
-  //! @param thePlane [in] the working plane for positioning every
-  //! dimension in the application.
-  //! @return true is the plane is suitable for building dimension
-  //! with computed dimension geometry.
-  virtual Standard_Boolean CheckPlane (const gp_Pln& /*thePlane*/) const { return Standard_True; }
-
-  //! Override this method to computed value of dimension.
-  //! @return value from the measured geometry.
-  virtual Standard_Real ComputeValue() const 
-  {
-    return 0.0;
-  }
-
-  //! Override this method to compute selection primitives for
-  //! flyout lines (if the dimension provides it).
-  //! This callback is a only a part of base selection
-  //! computation routine.
-  virtual void ComputeFlyoutSelection (const Handle(SelectMgr_Selection)&,
-                                       const Handle(SelectMgr_EntityOwner)&) {}
-
-
-  //! Base procedure of computing selection (based on selection geometry data).
-  //! @param theSelection [in] the selection structure to will with primitives.
-  //! @param theMode [in] the selection mode.
-  Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
-                                                 const Standard_Integer theMode) Standard_OVERRIDE;
-
-protected: //! @name Selection geometry
-
-  //! Selection geometry of dimension presentation. The structure is filled with data
-  //! during compute of presentation, then this data is used to generate selection
-  //! sensitives when computing selection.
-  struct SelectionGeometry
-  {
-    //! Arrows are represented by directed triangles.
-    struct Arrow
-    {
-      gp_Pnt Position;
-      gp_Dir Direction;
-    };
-    typedef NCollection_Sequence<gp_Pnt> Curve;
-    typedef NCollection_Handle<Curve>    HCurve;
-    typedef NCollection_Handle<Arrow>    HArrow;
-    typedef NCollection_Sequence<HCurve> SeqOfCurves;
-    typedef NCollection_Sequence<HArrow> SeqOfArrows;
-
-    gp_Pnt           TextPos;            //!< Center of text label.
-    gp_Dir           TextDir;            //!< Direction of text label.
-    Standard_Real    TextWidth;          //!< Width of text label.
-    Standard_Real    TextHeight;         //!< Height of text label.
-    SeqOfCurves      DimensionLine;      //!< Sequence of points for composing the segments of dimension line.
-    SeqOfArrows      Arrows;             //!< Sequence of arrow geometries.
-    Standard_Boolean IsComputed;         //!< Shows if the selection geometry was filled.
-
-  public:
-
-    //! Clear geometry of sensitives for the specified compute mode.
-    //! @param theMode [in] the compute mode to clear.
-    void Clear (const Standard_Integer theMode)
-    {
-      if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
-      {
-        DimensionLine.Clear();
-        Arrows.Clear();
-      }
-
-      if (theMode == ComputeMode_All || theMode == ComputeMode_Text)
-      {
-        TextPos    = gp::Origin();
-        TextDir    = gp::DX();
-        TextWidth  = 0.0;
-        TextHeight = 0.0;
-      }
-
-      IsComputed = Standard_False;
-    }
-
-    //! Add new curve entry and return the reference to populate it.
-    Curve& NewCurve()
-    {
-      DimensionLine.Append( new Curve );
-      HCurve& aLastCurve = DimensionLine.ChangeLast();
-      return *aLastCurve;
-    }
-
-    //! Add new arrow entry and return the reference to populate it.
-    Arrow& NewArrow()
-    {
-      Arrows.Append( new Arrow );
-      HArrow& aLastArrow = Arrows.ChangeLast();
-      return *aLastArrow;
-    }
-  } mySelectionGeom;
-
-  Standard_Real mySelToleranceForText2d; //!< Sensitive point tolerance for 2d text selection.
-
-protected: //! @name Value properties
-
-  ValueType        myValueType; //! type of value (computed or user-defined)
-  Standard_Real    myCustomValue;   //!< Value of the dimension (computed or user-defined).
-
-  TCollection_ExtendedString myCustomStringValue; //!< Value of the dimension (computed or user-defined).
-
-protected: //! @name Fixed text position properties
-
-  gp_Pnt                  myFixedTextPosition;   //!< Stores text position fixed by user.
-  Standard_Boolean        myIsTextPositionFixed; //!< Is the text label position fixed by user.
-
-protected: //! @name Units properties
-
-  Standard_ExtCharacter    mySpecialSymbol;        //!< Special symbol.
-  AIS_DisplaySpecialSymbol myDisplaySpecialSymbol; //!< Special symbol display options.
-
-protected: //! @name Geometrical properties
-
-  GeometryType myGeometryType;  //!< defines type of shapes on which the dimension is to be built. 
-
-  gp_Pln           myPlane;           //!< Plane where dimension will be built (computed or user defined).
-  Standard_Boolean myIsPlaneCustom;   //!< Is plane defined by user (otherwise it will be computed automatically).
-  Standard_Real    myFlyout;          //!< Flyout distance.
-  Standard_Boolean myIsGeometryValid; //!< Is dimension geometry properly defined.
-
-private:
-
-  AIS_KindOfDimension myKindOfDimension;
-};
-
-#endif // _AIS_Dimension_HeaderFile
diff --git a/src/AIS/AIS_DimensionOwner.cxx b/src/AIS/AIS_DimensionOwner.cxx
deleted file mode 100755 (executable)
index d0ae5ac..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Odile Olivier
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#include <AIS_DimensionOwner.hxx>
-
-#include <AIS_Dimension.hxx>
-#include <PrsMgr_PresentationManager.hxx>
-#include <SelectMgr_SelectableObject.hxx>
-#include <Standard_Type.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Vertex.hxx>
-
-IMPLEMENT_STANDARD_RTTIEXT(AIS_DimensionOwner,SelectMgr_EntityOwner)
-
-namespace
-{
-  //=======================================================================
-  //function : HighlightMode
-  //purpose  : Return corresponding compute mode for selection type.
-  //=======================================================================
-  static AIS_Dimension::ComputeMode HighlightMode (const Standard_Integer theSelMode)
-  {
-    switch (theSelMode)
-    {
-      case AIS_DSM_Line : return AIS_Dimension::ComputeMode_Line;
-      case AIS_DSM_Text : return AIS_Dimension::ComputeMode_Text;
-      default:
-        return AIS_Dimension::ComputeMode_All;
-    }
-  }
-}
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-AIS_DimensionOwner::AIS_DimensionOwner (const Handle(SelectMgr_SelectableObject)& theSelObject,
-                                        const AIS_DimensionSelectionMode theMode,
-                                        const Standard_Integer thePriority)
-: SelectMgr_EntityOwner(theSelObject, thePriority),
-  mySelectionMode (theMode)
-{
-}
-
-//=======================================================================
-//function : AIS_DimensionSelectionMode
-//purpose  : 
-//=======================================================================
-AIS_DimensionSelectionMode AIS_DimensionOwner::SelectionMode () const
-{
-  return mySelectionMode;
-}
-
-//=======================================================================
-//function : IsHilighted
-//purpose  : 
-//=======================================================================
-Standard_Boolean AIS_DimensionOwner::IsHilighted (const Handle(PrsMgr_PresentationManager)& thePM,
-                                                  const Standard_Integer /*theMode*/) const
-{
-  if (!HasSelectable())
-  {
-    return Standard_False;
-  }
-
-  return thePM->IsHighlighted (Selectable(), HighlightMode (mySelectionMode));
-}
-
-//=======================================================================
-//function : Unhilight
-//purpose  : 
-//=======================================================================
-void AIS_DimensionOwner::Unhilight (const Handle(PrsMgr_PresentationManager)& thePM,
-                                    const Standard_Integer /*theMode*/)
-{
-  if (!HasSelectable())
-  {
-    return;
-  }
-
-  thePM->Unhighlight (Selectable());
-}
-
-//=======================================================================
-//function : HilightWithColor
-//purpose  : 
-//=======================================================================
-void AIS_DimensionOwner::HilightWithColor (const Handle(PrsMgr_PresentationManager3d)& thePM,
-                                           const Handle(Prs3d_Drawer)& theStyle,
-                                           const Standard_Integer /*theMode*/)
-{
-  thePM->Color (Selectable(), theStyle, HighlightMode (mySelectionMode));
-}
diff --git a/src/AIS/AIS_DimensionOwner.hxx b/src/AIS/AIS_DimensionOwner.hxx
deleted file mode 100644 (file)
index 1049791..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-// Created on: 1996-12-05
-// Created by: Odile Olivier
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#ifndef _AIS_DimensionOwner_HeaderFile
-#define _AIS_DimensionOwner_HeaderFile
-
-#include <Standard.hxx>
-#include <Standard_Type.hxx>
-
-#include <AIS_DimensionSelectionMode.hxx>
-#include <SelectMgr_EntityOwner.hxx>
-#include <Standard_Integer.hxx>
-#include <PrsMgr_PresentationManager3d.hxx>
-#include <Quantity_NameOfColor.hxx>
-#include <Standard_Boolean.hxx>
-
-class SelectMgr_SelectableObject;
-class PrsMgr_PresentationManager;
-
-DEFINE_STANDARD_HANDLE(AIS_DimensionOwner, SelectMgr_EntityOwner)
-
-//! The owner is the entity which makes it possible to link
-//! the sensitive primitives and the reference shapes that
-//! you want to detect. It stocks the various pieces of
-//! information which make it possible to find objects. An
-//! owner has a priority which you can modulate, so as to
-//! make one entity more selectable than another. You
-//! might want to make edges more selectable than
-//! faces, for example. In that case, you could attribute sa
-//! higher priority to the one compared to the other. An
-//! edge, could have priority 5, for example, and a face,
-//! priority 4. The default priority is 5.
-class AIS_DimensionOwner : public SelectMgr_EntityOwner
-{
-  DEFINE_STANDARD_RTTIEXT(AIS_DimensionOwner, SelectMgr_EntityOwner)
-public:
-
-  //! Initializes the dimension owner, theSO, and attributes it
-  //! the priority, thePriority.
-  Standard_EXPORT AIS_DimensionOwner(const Handle(SelectMgr_SelectableObject)& theSelObject, const AIS_DimensionSelectionMode theSelMode, const Standard_Integer thePriority = 0);
-  
-  Standard_EXPORT AIS_DimensionSelectionMode SelectionMode() const;
-  
-  Standard_EXPORT virtual void HilightWithColor (const Handle(PrsMgr_PresentationManager3d)& thePM,
-                                                 const Handle(Prs3d_Drawer)& theStyle,
-                                                 const Standard_Integer theMode = 0) Standard_OVERRIDE;
-  
-  //! Returns true if an object with the selection mode
-  //! aMode is highlighted in the presentation manager aPM.
-  Standard_EXPORT virtual Standard_Boolean IsHilighted (const Handle(PrsMgr_PresentationManager)& thePM, const Standard_Integer theMode = 0) const Standard_OVERRIDE;
-  
-  //! Removes highlighting from the selected part of dimension.
-  Standard_EXPORT virtual void Unhilight (const Handle(PrsMgr_PresentationManager)& thePM, const Standard_Integer theMode = 0) Standard_OVERRIDE;
-
-private:
-
-  AIS_DimensionSelectionMode mySelectionMode;
-
-};
-
-#endif // _AIS_DimensionOwner_HeaderFile
diff --git a/src/AIS/AIS_DimensionSelectionMode.hxx b/src/AIS/AIS_DimensionSelectionMode.hxx
deleted file mode 100644 (file)
index e8c0884..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-// Created on: 1996-12-11
-// Created by: Robert COUBLANC
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#ifndef _AIS_DimensionSelectionMode_HeaderFile
-#define _AIS_DimensionSelectionMode_HeaderFile
-
-//! Specifies dimension selection modes.
-enum AIS_DimensionSelectionMode
-{
-AIS_DSM_All,
-AIS_DSM_Line,
-AIS_DSM_Text
-};
-
-#endif // _AIS_DimensionSelectionMode_HeaderFile
diff --git a/src/AIS/AIS_DisplaySpecialSymbol.hxx b/src/AIS/AIS_DisplaySpecialSymbol.hxx
deleted file mode 100644 (file)
index 6ba30a7..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-// Created on: 1996-12-11
-// Created by: Robert COUBLANC
-// Copyright (c) 1996-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#ifndef _AIS_DisplaySpecialSymbol_HeaderFile
-#define _AIS_DisplaySpecialSymbol_HeaderFile
-
-//! Specifies dimension special symbol display options
-enum AIS_DisplaySpecialSymbol
-{
-AIS_DSS_No,
-AIS_DSS_Before,
-AIS_DSS_After
-};
-
-#endif // _AIS_DisplaySpecialSymbol_HeaderFile
diff --git a/src/AIS/AIS_EllipseRadiusDimension.cxx b/src/AIS/AIS_EllipseRadiusDimension.cxx
deleted file mode 100644 (file)
index a5ed32f..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-// Created on: 1998-01-22
-// Created by: Sergey ZARITCHNY
-// Copyright (c) 1998-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-
-#include <AIS.hxx>
-#include <AIS_EllipseRadiusDimension.hxx>
-#include <BRepAdaptor_Curve.hxx>
-#include <BRepAdaptor_Surface.hxx>
-#include <ElCLib.hxx>
-#include <ElSLib.hxx>
-#include <Geom_CylindricalSurface.hxx>
-#include <Geom_Ellipse.hxx>
-#include <Geom_Line.hxx>
-#include <Geom_OffsetCurve.hxx>
-#include <Geom_Plane.hxx>
-#include <Geom_Surface.hxx>
-#include <Geom_SurfaceOfLinearExtrusion.hxx>
-#include <Geom_SurfaceOfRevolution.hxx>
-#include <Geom_TrimmedCurve.hxx>
-#include <GeomAPI.hxx>
-#include <GeomAPI_ExtremaCurveCurve.hxx>
-#include <gp_Ax1.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Elips.hxx>
-#include <gp_Lin.hxx>
-#include <gp_Pln.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Vec.hxx>
-#include <Precision.hxx>
-#include <Standard_Type.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Shape.hxx>
-
-IMPLEMENT_STANDARD_RTTIEXT(AIS_EllipseRadiusDimension,AIS_Relation)
-
-//=======================================================================
-//function : AIS_EllipseRadiusDimension
-//purpose  : 
-//=======================================================================
-AIS_EllipseRadiusDimension::AIS_EllipseRadiusDimension(const TopoDS_Shape& aShape, 
-                                                      const TCollection_ExtendedString& aText)
-:AIS_Relation()
-{
-  myFShape = aShape;
-  myText = aText;
-//  ComputeGeometry( );
-}
-
-//=======================================================================
-//function : ComputeGeometry
-//purpose  : 
-//=======================================================================
-
-void AIS_EllipseRadiusDimension::ComputeGeometry()
-{
-
- switch (myFShape.ShapeType()) {
-  case TopAbs_FACE :
-    {
-      // compute one face case
-      ComputeFaceGeometry ();
-      break;
-    }
-  case TopAbs_EDGE:
-    {
-      ComputeEdgeGeometry ();
-      break;
-    }
-  default:
-    break;
-  }
- while (myFirstPar > 2*M_PI) myFirstPar -= 2*M_PI;
- while (myLastPar > 2*M_PI)  myLastPar  -= 2*M_PI;
- while (myFirstPar < 0.0)  myFirstPar += 2*M_PI;
- while (myLastPar  < 0.0)  myLastPar  += 2*M_PI;
-}
-
-//=======================================================================
-//function : ComputeFaceGeometry
-//purpose  : 
-//=======================================================================
-
-void AIS_EllipseRadiusDimension::ComputeFaceGeometry()
-{
-
-  gp_Pln aPln;
-  Handle( Geom_Surface ) aBasisSurf;
-  AIS_KindOfSurface aSurfType;
-  Standard_Real Offset;
-  AIS::GetPlaneFromFace( TopoDS::Face(  myFShape),
-                                       aPln,
-                                       aBasisSurf,
-                                       aSurfType,
-                                       Offset ) ;
-
-  if ( aSurfType == AIS_KOS_Plane )
-    ComputePlanarFaceGeometry( );
-  else 
-    ComputeCylFaceGeometry( aSurfType, aBasisSurf, Offset );
-
-}
-
-//=======================================================================
-//function : ComputeCylFaceGeometry
-//purpose  : defines Ellipse and plane of dimension
-//=======================================================================
-
-void AIS_EllipseRadiusDimension::ComputeCylFaceGeometry(const AIS_KindOfSurface  aSurfType,
-                                                       const Handle( Geom_Surface )&  aBasisSurf,
-                                                       const Standard_Real Offset)
-{
-
-  BRepAdaptor_Surface surf1(TopoDS::Face(myFShape));
-  Standard_Real vFirst, vLast;
-  vFirst = surf1.FirstVParameter();
-  vLast  = surf1.LastVParameter();
-  Standard_Real vMid = (vFirst + vLast)*0.5;
-  gp_Pln aPlane;
-  gp_Ax1 Axis;
-//  Standard_Real Param;
-  if (aSurfType == AIS_KOS_Extrusion)
-    {
-      Axis.SetDirection((Handle( Geom_SurfaceOfLinearExtrusion )::DownCast( aBasisSurf ))
-                       ->Direction() );
-      Axis.SetLocation( gp_Pnt((Handle( Geom_SurfaceOfLinearExtrusion )::DownCast( aBasisSurf ))
-                              ->Direction().XYZ() ) );
-      
-      aPlane.SetAxis(Axis);
-      aPlane.SetLocation(myEllipse.Location());
-      myPlane = new Geom_Plane(aPlane);
-      
-      Handle(Geom_Curve) aCurve;
-      aCurve =   aBasisSurf->VIso(vMid);
-      if (aCurve->DynamicType() == STANDARD_TYPE(Geom_Ellipse)) 
-       {
-         myEllipse = Handle(Geom_Ellipse)::DownCast(aCurve)-> Elips();//gp_Elips
-         myIsAnArc = Standard_False;
-       }
-      else if (aCurve->DynamicType() == STANDARD_TYPE(Geom_TrimmedCurve)) {
-       Handle(Geom_TrimmedCurve) tCurve = Handle(Geom_TrimmedCurve)::DownCast(aCurve); 
-       aCurve = tCurve->BasisCurve();
-       myFirstPar = tCurve->FirstParameter();
-       myLastPar  = tCurve->LastParameter();
-       myIsAnArc = Standard_True;
-       if (aCurve->DynamicType() == STANDARD_TYPE(Geom_Ellipse)) 
-         {
-           myEllipse = Handle(Geom_Ellipse)::DownCast(aCurve)->Elips();//gp_Elips
-         }
-      }
-      else 
-       {
-         throw Standard_ConstructionError("AIS:: Not expected type of surface") ;
-           return;
-         }
-      
-// Offset  
-
-      if(surf1.GetType() ==  GeomAbs_OffsetSurface)
-       {
-         if(Offset <0.0 && Abs(Offset) > myEllipse.MinorRadius ())
-           {
-             throw Standard_ConstructionError("AIS:: Absolute value of negative offset is larger than MinorRadius");
-               return;
-             }
-         
-         myOffsetCurve = new Geom_OffsetCurve(new Geom_Ellipse(myEllipse), Offset, 
-                                              myPlane->Pln().Axis().Direction());
-         myOffset = Offset;
-         myIsOffset = Standard_True;
-         gp_Elips elips = myEllipse;
-         Standard_Real Val = Offset + elips.MajorRadius ();//simulation
-         myEllipse.SetMajorRadius (Val);
-         Val = Offset + elips.MinorRadius ();
-         myEllipse.SetMinorRadius (Val);
-       }
-      else 
-       myIsOffset = Standard_False;
-    }
-}
-
-
-//=======================================================================
-//function : ComputePlanarFaceGeometry
-//purpose  : 
-//=======================================================================
-
-void AIS_EllipseRadiusDimension::ComputePlanarFaceGeometry()
-{
-
-  Standard_Boolean find = Standard_False;
-  gp_Pnt ptfirst,ptend;
-  TopExp_Explorer ExploEd( TopoDS::Face(myFShape), TopAbs_EDGE );
-  for ( ; ExploEd.More(); ExploEd.Next())
-    {
-      TopoDS_Edge curedge =  TopoDS::Edge( ExploEd.Current() );
-      Handle(Geom_Curve) curv;
-      Handle(Geom_Ellipse) ellips;
-      if (AIS::ComputeGeometry(curedge,curv,ptfirst,ptend)) 
-       { 
-         if (curv->DynamicType() == STANDARD_TYPE(Geom_Ellipse))
-           {
-             ellips = Handle(Geom_Ellipse)::DownCast(curv);
-             if ( !ellips.IsNull() ) {
-               myEllipse = ellips->Elips();
-               find = Standard_True;
-               break;
-             }
-           }
-       }
-    }
-  if( !find )
-    {
-      throw Standard_ConstructionError("AIS:: Curve is not an ellipsee or is Null") ;
-       return;
-      }
-  
-  if ( !ptfirst.IsEqual(ptend, Precision::Confusion()) )
-    {
-      myIsAnArc = Standard_True;
-      myFirstPar = ElCLib::Parameter(myEllipse, ptfirst);
-      myLastPar  = ElCLib::Parameter(myEllipse, ptend); 
-    }
-  else
-    myIsAnArc = Standard_False;
-
-  BRepAdaptor_Surface surfAlgo (TopoDS::Face(myFShape));
-  myPlane  = new Geom_Plane( surfAlgo.Plane() );
-  
-}
-
-
-//=======================================================================
-//function : ComputeEdgeGeometry
-//purpose  : 
-//=======================================================================
-
-void AIS_EllipseRadiusDimension::ComputeEdgeGeometry()
-{
-  gp_Pnt ptfirst,ptend;
-  Handle(Geom_Curve) curv;
-  if (!AIS::ComputeGeometry(TopoDS::Edge(myFShape),curv,ptfirst,ptend)) return;
-  
-  Handle(Geom_Ellipse) elips = Handle(Geom_Ellipse)::DownCast(curv);
-  if ( elips.IsNull()) return;
-  
-  myEllipse =  elips->Elips();
-  gp_Pln aPlane;
-  aPlane.SetPosition(gp_Ax3(myEllipse.Position()));
-  myPlane  = new Geom_Plane(aPlane);
-  
-  
-  if ( ptfirst.IsEqual(ptend, Precision::Confusion()) ) {
-    myIsAnArc = Standard_False;
-  }
-  else {
-    myIsAnArc = Standard_True;
-    myFirstPar = ElCLib::Parameter(myEllipse, ptfirst);
-    myLastPar  = ElCLib::Parameter(myEllipse, ptend); 
-  }
-}
-//=======================================================================
-//function : KindOfDimension
-//purpose  : 
-//=======================================================================
- AIS_KindOfDimension AIS_EllipseRadiusDimension::KindOfDimension() const 
-{
-  return AIS_KOD_ELLIPSERADIUS;
-}
-
-//=======================================================================
-//function : IsMovable
-//purpose  : 
-//=======================================================================
- Standard_Boolean AIS_EllipseRadiusDimension::IsMovable() const 
-{
-  return Standard_True;
-}
diff --git a/src/AIS/AIS_EllipseRadiusDimension.hxx b/src/AIS/AIS_EllipseRadiusDimension.hxx
deleted file mode 100644 (file)
index cb04856..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-// Created on: 1998-01-22
-// Created by: Sergey ZARITCHNY
-// Copyright (c) 1998-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-//&