mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
0030532: Visualization - Manipulator for dragging within a plane
Added dragging sectors to Manipulator presentation. Test added.
This commit is contained in:
parent
5d0038626b
commit
f522ce50b2
@ -26,6 +26,7 @@
|
|||||||
#include <Prs3d_Root.hxx>
|
#include <Prs3d_Root.hxx>
|
||||||
#include <Prs3d_ShadingAspect.hxx>
|
#include <Prs3d_ShadingAspect.hxx>
|
||||||
#include <Prs3d_ToolDisk.hxx>
|
#include <Prs3d_ToolDisk.hxx>
|
||||||
|
#include <Prs3d_ToolSector.hxx>
|
||||||
#include <Prs3d_ToolSphere.hxx>
|
#include <Prs3d_ToolSphere.hxx>
|
||||||
#include <Select3D_SensitiveCircle.hxx>
|
#include <Select3D_SensitiveCircle.hxx>
|
||||||
#include <Select3D_SensitivePoint.hxx>
|
#include <Select3D_SensitivePoint.hxx>
|
||||||
@ -151,6 +152,19 @@ void AIS_Manipulator::init()
|
|||||||
myHighlightAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
myHighlightAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
||||||
myHighlightAspect->SetMaterial (aHilightMaterial);
|
myHighlightAspect->SetMaterial (aHilightMaterial);
|
||||||
|
|
||||||
|
Graphic3d_MaterialAspect aDraggerMaterial;
|
||||||
|
aDraggerMaterial.SetReflectionModeOff(Graphic3d_TOR_DIFFUSE);
|
||||||
|
aDraggerMaterial.SetReflectionModeOff(Graphic3d_TOR_SPECULAR);
|
||||||
|
aDraggerMaterial.SetReflectionModeOff(Graphic3d_TOR_EMISSION);
|
||||||
|
aDraggerMaterial.SetMaterialType(Graphic3d_MATERIAL_ASPECT);
|
||||||
|
aDraggerMaterial.SetAmbient(1.0);
|
||||||
|
|
||||||
|
myDraggerHighlight = new Prs3d_ShadingAspect();
|
||||||
|
myDraggerHighlight->Aspect()->SetInteriorStyle(Aspect_IS_SOLID);
|
||||||
|
myDraggerHighlight->SetMaterial(aDraggerMaterial);
|
||||||
|
|
||||||
|
myDraggerHighlight->SetTransparency(0.5);
|
||||||
|
|
||||||
SetSize (100);
|
SetSize (100);
|
||||||
SetZLayer (Graphic3d_ZLayerId_Topmost);
|
SetZLayer (Graphic3d_ZLayerId_Topmost);
|
||||||
}
|
}
|
||||||
@ -170,10 +184,11 @@ Handle(Prs3d_Presentation) AIS_Manipulator::getHighlightPresentation (const Hand
|
|||||||
|
|
||||||
switch (anOwner->Mode())
|
switch (anOwner->Mode())
|
||||||
{
|
{
|
||||||
case AIS_MM_Translation: return myAxes[anOwner->Index()].TranslatorHighlightPrs();
|
case AIS_MM_Translation : return myAxes[anOwner->Index()].TranslatorHighlightPrs();
|
||||||
case AIS_MM_Rotation : return myAxes[anOwner->Index()].RotatorHighlightPrs();
|
case AIS_MM_Rotation : return myAxes[anOwner->Index()].RotatorHighlightPrs();
|
||||||
case AIS_MM_Scaling : return myAxes[anOwner->Index()].ScalerHighlightPrs();
|
case AIS_MM_Scaling : return myAxes[anOwner->Index()].ScalerHighlightPrs();
|
||||||
case AIS_MM_None : break;
|
case AIS_MM_TranslationPlane: return myAxes[anOwner->Index()].DraggerHighlightPrs();
|
||||||
|
case AIS_MM_None : break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return aDummyPrs;
|
return aDummyPrs;
|
||||||
@ -194,10 +209,11 @@ Handle(Graphic3d_Group) AIS_Manipulator::getGroup (const Standard_Integer theInd
|
|||||||
|
|
||||||
switch (theMode)
|
switch (theMode)
|
||||||
{
|
{
|
||||||
case AIS_MM_Translation: return myAxes[theIndex].TranslatorGroup();
|
case AIS_MM_Translation : return myAxes[theIndex].TranslatorGroup();
|
||||||
case AIS_MM_Rotation : return myAxes[theIndex].RotatorGroup();
|
case AIS_MM_Rotation : return myAxes[theIndex].RotatorGroup();
|
||||||
case AIS_MM_Scaling : return myAxes[theIndex].ScalerGroup();
|
case AIS_MM_Scaling : return myAxes[theIndex].ScalerGroup();
|
||||||
case AIS_MM_None : break;
|
case AIS_MM_TranslationPlane: return myAxes[theIndex].DraggerGroup();
|
||||||
|
case AIS_MM_None : break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return aDummyGroup;
|
return aDummyGroup;
|
||||||
@ -266,6 +282,10 @@ void AIS_Manipulator::SetPart (const Standard_Integer theAxisIndex, const AIS_Ma
|
|||||||
myAxes[theAxisIndex].SetScaling (theIsEnabled);
|
myAxes[theAxisIndex].SetScaling (theIsEnabled);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case AIS_MM_TranslationPlane:
|
||||||
|
myAxes[theAxisIndex].SetDragging(theIsEnabled);
|
||||||
|
break;
|
||||||
|
|
||||||
case AIS_MM_None:
|
case AIS_MM_None:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -277,7 +297,7 @@ void AIS_Manipulator::SetPart (const Standard_Integer theAxisIndex, const AIS_Ma
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void AIS_Manipulator::SetPart (const AIS_ManipulatorMode theMode, const Standard_Boolean theIsEnabled)
|
void AIS_Manipulator::SetPart (const AIS_ManipulatorMode theMode, const Standard_Boolean theIsEnabled)
|
||||||
{
|
{
|
||||||
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
for (Standard_Integer anIt = 0; anIt < 4; ++anIt)
|
||||||
{
|
{
|
||||||
SetPart (anIt, theMode, theIsEnabled);
|
SetPart (anIt, theMode, theIsEnabled);
|
||||||
}
|
}
|
||||||
@ -400,6 +420,7 @@ void AIS_Manipulator::Attach (const Handle(AIS_ManipulatorObjectSequence)& theOb
|
|||||||
EnableMode (AIS_MM_Rotation);
|
EnableMode (AIS_MM_Rotation);
|
||||||
EnableMode (AIS_MM_Translation);
|
EnableMode (AIS_MM_Translation);
|
||||||
EnableMode (AIS_MM_Scaling);
|
EnableMode (AIS_MM_Scaling);
|
||||||
|
EnableMode (AIS_MM_TranslationPlane);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -586,6 +607,34 @@ Standard_Boolean AIS_Manipulator::ObjectTransformation (const Standard_Integer t
|
|||||||
myPrevState = anAngle;
|
myPrevState = anAngle;
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
|
case AIS_MM_TranslationPlane:
|
||||||
|
{
|
||||||
|
const gp_Pnt aPosLoc = myStartPosition.Location();
|
||||||
|
const gp_Ax1 aCurrAxis = getAx1FromAx2Dir(myStartPosition, myCurrentIndex);
|
||||||
|
IntAna_IntConicQuad aIntersector(anInputLine, gp_Pln(aPosLoc, aCurrAxis.Direction()), Precision::Angular(), Precision::Intersection());
|
||||||
|
if (!aIntersector.IsDone() || aIntersector.NbPoints() < 1)
|
||||||
|
{
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
|
||||||
|
const gp_Pnt aNewPosition = aIntersector.Point(1);
|
||||||
|
if (!myHasStartedTransformation)
|
||||||
|
{
|
||||||
|
myStartPick = aNewPosition;
|
||||||
|
myHasStartedTransformation = Standard_True;
|
||||||
|
return Standard_True;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aNewPosition.Distance(myStartPick) < Precision::Confusion())
|
||||||
|
{
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
|
||||||
|
gp_Trsf aNewTrsf;
|
||||||
|
aNewTrsf.SetTranslation(gp_Vec(myStartPick, aNewPosition));
|
||||||
|
theTrsf *= aNewTrsf;
|
||||||
|
return Standard_True;
|
||||||
|
}
|
||||||
case AIS_MM_None:
|
case AIS_MM_None:
|
||||||
{
|
{
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
@ -657,8 +706,9 @@ void AIS_Manipulator::Transform (const gp_Trsf& theTrsf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((myCurrentMode == AIS_MM_Translation && myBehaviorOnTransform.FollowTranslation)
|
if ((myCurrentMode == AIS_MM_Translation && myBehaviorOnTransform.FollowTranslation)
|
||||||
|| (myCurrentMode == AIS_MM_Rotation && myBehaviorOnTransform.FollowRotation))
|
|| (myCurrentMode == AIS_MM_Rotation && myBehaviorOnTransform.FollowRotation)
|
||||||
|
|| (myCurrentMode == AIS_MM_TranslationPlane && myBehaviorOnTransform.FollowDragging))
|
||||||
{
|
{
|
||||||
gp_Pnt aPos = myStartPosition.Location().Transformed (theTrsf);
|
gp_Pnt aPos = myStartPosition.Location().Transformed (theTrsf);
|
||||||
gp_Dir aVDir = myStartPosition.Direction().Transformed (theTrsf);
|
gp_Dir aVDir = myStartPosition.Direction().Transformed (theTrsf);
|
||||||
@ -786,8 +836,13 @@ void AIS_Manipulator::DeactivateCurrentMode()
|
|||||||
Handle(Prs3d_ShadingAspect) anAspect = new Prs3d_ShadingAspect();
|
Handle(Prs3d_ShadingAspect) anAspect = new Prs3d_ShadingAspect();
|
||||||
anAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
anAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
||||||
anAspect->SetMaterial (myDrawer->ShadingAspect()->Material());
|
anAspect->SetMaterial (myDrawer->ShadingAspect()->Material());
|
||||||
anAspect->SetTransparency (myDrawer->ShadingAspect()->Transparency());
|
if (myCurrentMode == AIS_MM_TranslationPlane)
|
||||||
anAspect->SetColor (myAxes[myCurrentIndex].Color());
|
anAspect->SetTransparency(1.0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
anAspect->SetTransparency(myDrawer->ShadingAspect()->Transparency());
|
||||||
|
anAspect->SetColor(myAxes[myCurrentIndex].Color());
|
||||||
|
}
|
||||||
|
|
||||||
aGroup->SetGroupPrimitivesAspect (anAspect->Aspect());
|
aGroup->SetGroupPrimitivesAspect (anAspect->Aspect());
|
||||||
}
|
}
|
||||||
@ -882,14 +937,14 @@ void AIS_Manipulator::Compute (const Handle(PrsMgr_PresentationManager3d)& thePr
|
|||||||
|
|
||||||
// Display center
|
// Display center
|
||||||
myCenter.Init (myAxes[0].AxisRadius() * 2.0f, gp::Origin());
|
myCenter.Init (myAxes[0].AxisRadius() * 2.0f, gp::Origin());
|
||||||
aGroup = Prs3d_Root::NewGroup (thePrs);
|
aGroup = thePrs->NewGroup ();
|
||||||
aGroup->SetPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
aGroup->SetPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||||
aGroup->AddPrimitiveArray (myCenter.Array());
|
aGroup->AddPrimitiveArray (myCenter.Array());
|
||||||
|
|
||||||
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
||||||
{
|
{
|
||||||
// Display axes
|
// Display axes
|
||||||
aGroup = Prs3d_Root::NewGroup (thePrs);
|
aGroup = thePrs->NewGroup ();
|
||||||
|
|
||||||
Handle(Prs3d_ShadingAspect) anAspectAx = new Prs3d_ShadingAspect (new Graphic3d_AspectFillArea3d(*anAspect->Aspect()));
|
Handle(Prs3d_ShadingAspect) anAspectAx = new Prs3d_ShadingAspect (new Graphic3d_AspectFillArea3d(*anAspect->Aspect()));
|
||||||
anAspectAx->SetColor (myAxes[anIt].Color());
|
anAspectAx->SetColor (myAxes[anIt].Color());
|
||||||
@ -932,7 +987,13 @@ void AIS_Manipulator::HilightSelected (const Handle(PrsMgr_PresentationManager3d
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myHighlightAspect->Aspect());
|
if (anOwner->Mode() == AIS_MM_TranslationPlane)
|
||||||
|
{
|
||||||
|
myDraggerHighlight->SetColor(myAxes[anOwner->Index()].Color());
|
||||||
|
aGroup->SetGroupPrimitivesAspect(myDraggerHighlight->Aspect());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
aGroup->SetGroupPrimitivesAspect(myHighlightAspect->Aspect());
|
||||||
|
|
||||||
myCurrentIndex = anOwner->Index();
|
myCurrentIndex = anOwner->Index();
|
||||||
myCurrentMode = anOwner->Mode();
|
myCurrentMode = anOwner->Mode();
|
||||||
@ -961,7 +1022,15 @@ void AIS_Manipulator::HilightOwnerWithColor (const Handle(PrsMgr_PresentationMan
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
aPresentation->Highlight (theStyle);
|
if (anOwner->Mode() == AIS_MM_TranslationPlane)
|
||||||
|
{
|
||||||
|
Handle(Prs3d_Drawer) aStyle = new Prs3d_Drawer();
|
||||||
|
aStyle->SetColor(myAxes[anOwner->Index()].Color());
|
||||||
|
aStyle->SetTransparency(0.5);
|
||||||
|
aPresentation->Highlight(aStyle);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
aPresentation->Highlight(theStyle);
|
||||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPresentation->Groups());
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPresentation->Groups());
|
||||||
aGroupIter.More(); aGroupIter.Next())
|
aGroupIter.More(); aGroupIter.Next())
|
||||||
{
|
{
|
||||||
@ -1076,6 +1145,38 @@ void AIS_Manipulator::ComputeSelection (const Handle(SelectMgr_Selection)& theSe
|
|||||||
theSelection->Add (aTri);
|
theSelection->Add (aTri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (aMode == AIS_MM_TranslationPlane || aMode == AIS_MM_None)
|
||||||
|
{
|
||||||
|
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
||||||
|
{
|
||||||
|
if (!myAxes[anIt].HasDragging())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (aMode != AIS_MM_None)
|
||||||
|
{
|
||||||
|
anOwner = new AIS_ManipulatorOwner(this, anIt, AIS_MM_TranslationPlane, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
// define sensitivity by two crossed lines
|
||||||
|
gp_Pnt aP1, aP2;
|
||||||
|
aP1 = myAxes[((anIt + 1) % 3)].TranslatorTipPosition();
|
||||||
|
aP2 = myAxes[((anIt + 2) % 3)].TranslatorTipPosition();
|
||||||
|
gp_XYZ aMidP = (aP1.XYZ() + aP2.XYZ()) / 2.0;
|
||||||
|
|
||||||
|
Handle(Select3D_SensitiveSegment) aLine1 = new Select3D_SensitiveSegment(anOwner, aP1, aP2);
|
||||||
|
aLine1->SetSensitivityFactor(10);
|
||||||
|
theSelection->Add(aLine1);
|
||||||
|
Handle(Select3D_SensitiveSegment) aLine2 = new Select3D_SensitiveSegment(anOwner, gp::Origin(), aMidP);
|
||||||
|
aLine2->SetSensitivityFactor(10);
|
||||||
|
theSelection->Add(aLine2);
|
||||||
|
|
||||||
|
// enlarge sensitivity by triangulation
|
||||||
|
Handle(Select3D_SensitiveTriangulation) aTri = new Select3D_SensitiveTriangulation(anOwner, myAxes[anIt].DraggerSector().Triangulation(), TopLoc_Location(), Standard_True);
|
||||||
|
theSelection->Add(aTri);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -1191,6 +1292,24 @@ void AIS_Manipulator::Cube::addTriangle (const Standard_Integer theIndex,
|
|||||||
myArray->AddVertex (theP3, theNormal);
|
myArray->AddVertex (theP3, theNormal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//class : Sector
|
||||||
|
//function : Init
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
void AIS_Manipulator::Sector::Init (const Standard_ShortReal theRadius,
|
||||||
|
const gp_Ax1& thePosition,
|
||||||
|
const gp_Dir& theXDirection,
|
||||||
|
const Standard_Integer theSlicesNb,
|
||||||
|
const Standard_Integer theStacksNb)
|
||||||
|
{
|
||||||
|
Prs3d_ToolSector aTool(theRadius, theSlicesNb, theStacksNb);
|
||||||
|
gp_Ax3 aSystem(thePosition.Location(), thePosition.Direction(), theXDirection);
|
||||||
|
gp_Trsf aTrsf;
|
||||||
|
aTrsf.SetTransformation(aSystem, gp_Ax3());
|
||||||
|
aTool.FillArray(myArray, myTriangulation, aTrsf);
|
||||||
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//class : Axis
|
//class : Axis
|
||||||
//function : Constructor
|
//function : Constructor
|
||||||
@ -1211,6 +1330,7 @@ AIS_Manipulator::Axis::Axis (const gp_Ax1& theAxis,
|
|||||||
myInnerRadius (myLength + myBoxSize),
|
myInnerRadius (myLength + myBoxSize),
|
||||||
myDiskThickness (myBoxSize * 0.5f),
|
myDiskThickness (myBoxSize * 0.5f),
|
||||||
myIndent (0.2f),
|
myIndent (0.2f),
|
||||||
|
myHasDragging(Standard_True),
|
||||||
myFacettesNumber (20),
|
myFacettesNumber (20),
|
||||||
myCircleRadius (myLength + myBoxSize + myBoxSize * 0.5f * 0.5f)
|
myCircleRadius (myLength + myBoxSize + myBoxSize * 0.5f * 0.5f)
|
||||||
{
|
{
|
||||||
@ -1239,7 +1359,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
|||||||
myAxisRadius * 1.5,
|
myAxisRadius * 1.5,
|
||||||
anArrowLength,
|
anArrowLength,
|
||||||
myFacettesNumber);
|
myFacettesNumber);
|
||||||
myTranslatorGroup = Prs3d_Root::NewGroup (thePrs);
|
myTranslatorGroup = thePrs->NewGroup ();
|
||||||
myTranslatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
myTranslatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||||
myTranslatorGroup->AddPrimitiveArray (myTriangleArray);
|
myTranslatorGroup->AddPrimitiveArray (myTriangleArray);
|
||||||
|
|
||||||
@ -1263,7 +1383,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
|||||||
myCubePos = myReferenceAxis.Direction().XYZ() * (myLength + myIndent);
|
myCubePos = myReferenceAxis.Direction().XYZ() * (myLength + myIndent);
|
||||||
myCube.Init (gp_Ax1 (myCubePos, myReferenceAxis.Direction()), myBoxSize);
|
myCube.Init (gp_Ax1 (myCubePos, myReferenceAxis.Direction()), myBoxSize);
|
||||||
|
|
||||||
myScalerGroup = Prs3d_Root::NewGroup (thePrs);
|
myScalerGroup = thePrs->NewGroup ();
|
||||||
myScalerGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
myScalerGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||||
myScalerGroup->AddPrimitiveArray (myCube.Array());
|
myScalerGroup->AddPrimitiveArray (myCube.Array());
|
||||||
|
|
||||||
@ -1286,7 +1406,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
|||||||
{
|
{
|
||||||
myCircleRadius = myInnerRadius + myIndent * 2 + myDiskThickness * 0.5f;
|
myCircleRadius = myInnerRadius + myIndent * 2 + myDiskThickness * 0.5f;
|
||||||
myCircle.Init (myInnerRadius + myIndent * 2, myInnerRadius + myDiskThickness + myIndent * 2, gp_Ax1(gp::Origin(), myReferenceAxis.Direction()), myFacettesNumber * 2);
|
myCircle.Init (myInnerRadius + myIndent * 2, myInnerRadius + myDiskThickness + myIndent * 2, gp_Ax1(gp::Origin(), myReferenceAxis.Direction()), myFacettesNumber * 2);
|
||||||
myRotatorGroup = Prs3d_Root::NewGroup (thePrs);
|
myRotatorGroup = thePrs->NewGroup ();
|
||||||
myRotatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
myRotatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||||
myRotatorGroup->AddPrimitiveArray (myCircle.Array());
|
myRotatorGroup->AddPrimitiveArray (myCircle.Array());
|
||||||
|
|
||||||
@ -1304,4 +1424,36 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
|||||||
aGroup->AddPrimitiveArray (myCircle.Array());
|
aGroup->AddPrimitiveArray (myCircle.Array());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (myHasDragging)
|
||||||
|
{
|
||||||
|
gp_Dir aXDirection;
|
||||||
|
if (myReferenceAxis.Direction().X() > 0)
|
||||||
|
aXDirection = gp::DY();
|
||||||
|
else if (myReferenceAxis.Direction().Y() > 0)
|
||||||
|
aXDirection = gp::DZ();
|
||||||
|
else
|
||||||
|
aXDirection = gp::DX();
|
||||||
|
|
||||||
|
mySector.Init(myInnerRadius + myIndent * 2, gp_Ax1(gp::Origin(), myReferenceAxis.Direction()), aXDirection, myFacettesNumber * 2);
|
||||||
|
myDraggerGroup = thePrs->NewGroup();
|
||||||
|
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) aFillArea = new Graphic3d_AspectFillArea3d();
|
||||||
|
myDraggerGroup->SetGroupPrimitivesAspect(aFillArea);
|
||||||
|
myDraggerGroup->AddPrimitiveArray(mySector.Array());
|
||||||
|
|
||||||
|
if (myHighlightDragger.IsNull())
|
||||||
|
{
|
||||||
|
myHighlightDragger = new Prs3d_Presentation(thePrsMgr->StructureManager());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myHighlightDragger->Clear();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup(myHighlightDragger);
|
||||||
|
aGroup->SetGroupPrimitivesAspect(aFillArea);
|
||||||
|
aGroup->AddPrimitiveArray(mySector.Array());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -280,12 +280,14 @@ public:
|
|||||||
//! - FollowRotation - whether the manipulator will be rotated together with an object.
|
//! - FollowRotation - whether the manipulator will be rotated together with an object.
|
||||||
struct BehaviorOnTransform {
|
struct BehaviorOnTransform {
|
||||||
|
|
||||||
BehaviorOnTransform() : FollowTranslation (Standard_True), FollowRotation (Standard_True) {}
|
BehaviorOnTransform() : FollowTranslation (Standard_True), FollowRotation (Standard_True), FollowDragging (Standard_True) {}
|
||||||
BehaviorOnTransform& SetFollowTranslation (const Standard_Boolean theApply) { FollowTranslation = theApply; return *this; }
|
BehaviorOnTransform& SetFollowTranslation (const Standard_Boolean theApply) { FollowTranslation = theApply; return *this; }
|
||||||
BehaviorOnTransform& SetFollowRotation (const Standard_Boolean theApply) { FollowRotation = theApply; return *this; }
|
BehaviorOnTransform& SetFollowRotation (const Standard_Boolean theApply) { FollowRotation = theApply; return *this; }
|
||||||
|
BehaviorOnTransform& SetFollowDragging (const Standard_Boolean theApply) { FollowDragging = theApply; return *this; }
|
||||||
|
|
||||||
Standard_Boolean FollowTranslation;
|
Standard_Boolean FollowTranslation;
|
||||||
Standard_Boolean FollowRotation;
|
Standard_Boolean FollowRotation;
|
||||||
|
Standard_Boolean FollowDragging;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Sets behavior settings for transformation action carried on the manipulator,
|
//! Sets behavior settings for transformation action carried on the manipulator,
|
||||||
@ -446,6 +448,29 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
Handle(Graphic3d_ArrayOfTriangles) myArray;
|
Handle(Graphic3d_ArrayOfTriangles) myArray;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Sector : public Quadric
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
Sector()
|
||||||
|
: Quadric(),
|
||||||
|
myRadius(0.0f)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
~Sector() { }
|
||||||
|
|
||||||
|
void Init(const Standard_ShortReal theRadius,
|
||||||
|
const gp_Ax1& thePosition,
|
||||||
|
const gp_Dir& theXDirection,
|
||||||
|
const Standard_Integer theSlicesNb = 5,
|
||||||
|
const Standard_Integer theStacksNb = 5);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
gp_Ax1 myPosition;
|
||||||
|
Standard_ShortReal myRadius;
|
||||||
|
};
|
||||||
|
|
||||||
//! The class describes on axis sub-object.
|
//! The class describes on axis sub-object.
|
||||||
//! It includes sub-objects itself:
|
//! It includes sub-objects itself:
|
||||||
//! -rotator
|
//! -rotator
|
||||||
@ -485,6 +510,11 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
{
|
{
|
||||||
myHighlightRotator->SetTransformPersistence (theTrsfPers);
|
myHighlightRotator->SetTransformPersistence (theTrsfPers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!myHighlightDragger.IsNull())
|
||||||
|
{
|
||||||
|
myHighlightDragger->SetTransformPersistence(theTrsfPers);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Transform (const Handle(Geom_Transformation)& theTransformation)
|
void Transform (const Handle(Geom_Transformation)& theTransformation)
|
||||||
@ -503,6 +533,11 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
{
|
{
|
||||||
myHighlightRotator->SetTransformation (theTransformation);
|
myHighlightRotator->SetTransformation (theTransformation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!myHighlightDragger.IsNull())
|
||||||
|
{
|
||||||
|
myHighlightDragger->SetTransformation(theTransformation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Standard_Boolean HasTranslation() const { return myHasTranslation; }
|
Standard_Boolean HasTranslation() const { return myHasTranslation; }
|
||||||
@ -511,12 +546,16 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
|
|
||||||
Standard_Boolean HasScaling() const { return myHasScaling; }
|
Standard_Boolean HasScaling() const { return myHasScaling; }
|
||||||
|
|
||||||
|
Standard_Boolean HasDragging() const { return myHasDragging; }
|
||||||
|
|
||||||
void SetTranslation (const Standard_Boolean theIsEnabled) { myHasTranslation = theIsEnabled; }
|
void SetTranslation (const Standard_Boolean theIsEnabled) { myHasTranslation = theIsEnabled; }
|
||||||
|
|
||||||
void SetRotation (const Standard_Boolean theIsEnabled) { myHasRotation = theIsEnabled; }
|
void SetRotation (const Standard_Boolean theIsEnabled) { myHasRotation = theIsEnabled; }
|
||||||
|
|
||||||
void SetScaling (const Standard_Boolean theIsEnabled) { myHasScaling = theIsEnabled; }
|
void SetScaling (const Standard_Boolean theIsEnabled) { myHasScaling = theIsEnabled; }
|
||||||
|
|
||||||
|
void SetDragging(const Standard_Boolean theIsEnabled) { myHasDragging = theIsEnabled; }
|
||||||
|
|
||||||
Quantity_Color Color() const { return myColor; }
|
Quantity_Color Color() const { return myColor; }
|
||||||
|
|
||||||
Standard_ShortReal AxisLength() const { return myLength; }
|
Standard_ShortReal AxisLength() const { return myLength; }
|
||||||
@ -531,12 +570,16 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
|
|
||||||
const Handle(Prs3d_Presentation)& ScalerHighlightPrs() const { return myHighlightScaler; }
|
const Handle(Prs3d_Presentation)& ScalerHighlightPrs() const { return myHighlightScaler; }
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& DraggerHighlightPrs() const { return myHighlightDragger; }
|
||||||
|
|
||||||
const Handle(Graphic3d_Group)& TranslatorGroup() const { return myTranslatorGroup; }
|
const Handle(Graphic3d_Group)& TranslatorGroup() const { return myTranslatorGroup; }
|
||||||
|
|
||||||
const Handle(Graphic3d_Group)& RotatorGroup() const { return myRotatorGroup; }
|
const Handle(Graphic3d_Group)& RotatorGroup() const { return myRotatorGroup; }
|
||||||
|
|
||||||
const Handle(Graphic3d_Group)& ScalerGroup() const { return myScalerGroup; }
|
const Handle(Graphic3d_Group)& ScalerGroup() const { return myScalerGroup; }
|
||||||
|
|
||||||
|
const Handle(Graphic3d_Group)& DraggerGroup() const { return myDraggerGroup; }
|
||||||
|
|
||||||
const Handle(Graphic3d_ArrayOfTriangles)& TriangleArray() const { return myTriangleArray; }
|
const Handle(Graphic3d_ArrayOfTriangles)& TriangleArray() const { return myTriangleArray; }
|
||||||
|
|
||||||
void SetIndent (const Standard_ShortReal theValue) { myIndent = theValue; }
|
void SetIndent (const Standard_ShortReal theValue) { myIndent = theValue; }
|
||||||
@ -570,6 +613,7 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
const gp_Pnt& TranslatorTipPosition() const { return myArrowTipPos; }
|
const gp_Pnt& TranslatorTipPosition() const { return myArrowTipPos; }
|
||||||
|
const Sector& DraggerSector() const { return mySector; }
|
||||||
const Disk& RotatorDisk() const { return myCircle; }
|
const Disk& RotatorDisk() const { return myCircle; }
|
||||||
float RotatorDiskRadius() const { return myCircleRadius; }
|
float RotatorDiskRadius() const { return myCircleRadius; }
|
||||||
const Cube& ScalerCube() const { return myCube; }
|
const Cube& ScalerCube() const { return myCube; }
|
||||||
@ -593,11 +637,14 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
Standard_ShortReal myDiskThickness;
|
Standard_ShortReal myDiskThickness;
|
||||||
Standard_ShortReal myIndent; //!< Gap between visual part of the manipulator.
|
Standard_ShortReal myIndent; //!< Gap between visual part of the manipulator.
|
||||||
|
|
||||||
|
Standard_Boolean myHasDragging;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
Standard_Integer myFacettesNumber;
|
Standard_Integer myFacettesNumber;
|
||||||
|
|
||||||
gp_Pnt myArrowTipPos;
|
gp_Pnt myArrowTipPos;
|
||||||
|
Sector mySector;
|
||||||
Disk myCircle;
|
Disk myCircle;
|
||||||
float myCircleRadius;
|
float myCircleRadius;
|
||||||
Cube myCube;
|
Cube myCube;
|
||||||
@ -606,10 +653,12 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
Handle(Graphic3d_Group) myTranslatorGroup;
|
Handle(Graphic3d_Group) myTranslatorGroup;
|
||||||
Handle(Graphic3d_Group) myScalerGroup;
|
Handle(Graphic3d_Group) myScalerGroup;
|
||||||
Handle(Graphic3d_Group) myRotatorGroup;
|
Handle(Graphic3d_Group) myRotatorGroup;
|
||||||
|
Handle(Graphic3d_Group) myDraggerGroup;
|
||||||
|
|
||||||
Handle(Prs3d_Presentation) myHighlightTranslator;
|
Handle(Prs3d_Presentation) myHighlightTranslator;
|
||||||
Handle(Prs3d_Presentation) myHighlightScaler;
|
Handle(Prs3d_Presentation) myHighlightScaler;
|
||||||
Handle(Prs3d_Presentation) myHighlightRotator;
|
Handle(Prs3d_Presentation) myHighlightRotator;
|
||||||
|
Handle(Prs3d_Presentation) myHighlightDragger;
|
||||||
|
|
||||||
Handle(Graphic3d_ArrayOfTriangles) myTriangleArray;
|
Handle(Graphic3d_ArrayOfTriangles) myTriangleArray;
|
||||||
|
|
||||||
@ -638,6 +687,9 @@ protected: //! @name Fields for interactive transformation. Fields only for inte
|
|||||||
|
|
||||||
//! Aspect used to color current detected part and current selected part.
|
//! Aspect used to color current detected part and current selected part.
|
||||||
Handle(Prs3d_ShadingAspect) myHighlightAspect;
|
Handle(Prs3d_ShadingAspect) myHighlightAspect;
|
||||||
|
|
||||||
|
//! Aspect used to color sector part when it's selected.
|
||||||
|
Handle(Prs3d_ShadingAspect) myDraggerHighlight;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
DEFINE_STANDARD_RTTIEXT(AIS_Manipulator, AIS_InteractiveObject)
|
DEFINE_STANDARD_RTTIEXT(AIS_Manipulator, AIS_InteractiveObject)
|
||||||
|
@ -22,7 +22,8 @@ enum AIS_ManipulatorMode
|
|||||||
AIS_MM_None = 0,
|
AIS_MM_None = 0,
|
||||||
AIS_MM_Translation = 1,
|
AIS_MM_Translation = 1,
|
||||||
AIS_MM_Rotation,
|
AIS_MM_Rotation,
|
||||||
AIS_MM_Scaling
|
AIS_MM_Scaling,
|
||||||
|
AIS_MM_TranslationPlane
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -53,6 +53,8 @@ Prs3d_ToolCylinder.hxx
|
|||||||
Prs3d_ToolCylinder.cxx
|
Prs3d_ToolCylinder.cxx
|
||||||
Prs3d_ToolQuadric.hxx
|
Prs3d_ToolQuadric.hxx
|
||||||
Prs3d_ToolQuadric.cxx
|
Prs3d_ToolQuadric.cxx
|
||||||
|
Prs3d_ToolSector.hxx
|
||||||
|
Prs3d_ToolSector.cxx
|
||||||
Prs3d_ToolSphere.hxx
|
Prs3d_ToolSphere.hxx
|
||||||
Prs3d_ToolSphere.cxx
|
Prs3d_ToolSphere.cxx
|
||||||
Prs3d_TypeOfHighlight.hxx
|
Prs3d_TypeOfHighlight.hxx
|
||||||
|
70
src/Prs3d/Prs3d_ToolSector.cxx
Normal file
70
src/Prs3d/Prs3d_ToolSector.cxx
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
// Created on: 2019-02-25
|
||||||
|
// Created by: Artem NOVIKOV
|
||||||
|
// Copyright (c) 2019 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 <Prs3d_ToolSector.hxx>
|
||||||
|
|
||||||
|
#include <Graphic3d_ArrayOfTriangles.hxx>
|
||||||
|
#include <Poly_Array1OfTriangle.hxx>
|
||||||
|
#include <Prs3d_ToolQuadric.hxx>
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : Constructor
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
Prs3d_ToolSector::Prs3d_ToolSector (const Standard_Real theRadius,
|
||||||
|
const Standard_Integer theNbSlices,
|
||||||
|
const Standard_Integer theNbStacks)
|
||||||
|
: myRadius (theRadius)
|
||||||
|
{
|
||||||
|
mySlicesNb = theNbSlices;
|
||||||
|
myStacksNb = theNbStacks;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : Vertex
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
gp_Pnt Prs3d_ToolSector::Vertex (const Standard_Real theU, const Standard_Real theV)
|
||||||
|
{
|
||||||
|
const Standard_Real aU = theU * M_PI / 2.0;
|
||||||
|
const Standard_Real aRadius = myRadius * theV;
|
||||||
|
return gp_Pnt (Cos (aU) * aRadius,
|
||||||
|
Sin (aU) * aRadius,
|
||||||
|
0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : Add
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
gp_Dir Prs3d_ToolSector::Normal (const Standard_Real /*theU*/, const Standard_Real /*theV*/)
|
||||||
|
{
|
||||||
|
return gp_Dir (0.0, 0.0, -1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : Perform
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
Handle(Graphic3d_ArrayOfTriangles) Prs3d_ToolSector::Create (const Standard_Real theRadius,
|
||||||
|
const Standard_Integer theNbSlices,
|
||||||
|
const Standard_Integer theNbStacks,
|
||||||
|
const gp_Trsf& theTrsf)
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_ArrayOfTriangles) anArray;
|
||||||
|
Prs3d_ToolSector aTool (theRadius, theNbSlices, theNbStacks);
|
||||||
|
aTool.FillArray (anArray, theTrsf);
|
||||||
|
return anArray;
|
||||||
|
}
|
52
src/Prs3d/Prs3d_ToolSector.hxx
Normal file
52
src/Prs3d/Prs3d_ToolSector.hxx
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// Created on: 2019-02-25
|
||||||
|
// Created by: Artem NOVIKOV
|
||||||
|
// Copyright (c) 2019 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 _Prs3d_ToolSector_HeaderFile
|
||||||
|
#define _Prs3d_ToolSector_HeaderFile
|
||||||
|
|
||||||
|
#include <Standard.hxx>
|
||||||
|
#include <Prs3d_ToolQuadric.hxx>
|
||||||
|
|
||||||
|
//! Standard presentation algorithm that outputs graphical primitives for disk surface.
|
||||||
|
class Prs3d_ToolSector : public Prs3d_ToolQuadric
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Generate primitives for 3D quadric surface and return a filled array.
|
||||||
|
Standard_EXPORT static Handle(Graphic3d_ArrayOfTriangles) Create (const Standard_Real theRadius,
|
||||||
|
const Standard_Integer theNbSlices,
|
||||||
|
const Standard_Integer theNbStacks,
|
||||||
|
const gp_Trsf& theTrsf);
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Initializes the algorithm.
|
||||||
|
Standard_EXPORT Prs3d_ToolSector (const Standard_Real theRadius,
|
||||||
|
const Standard_Integer theNbSlices,
|
||||||
|
const Standard_Integer theNbStacks);
|
||||||
|
protected:
|
||||||
|
|
||||||
|
//! Computes vertex at given parameter location of the surface.
|
||||||
|
Standard_EXPORT virtual gp_Pnt Vertex (const Standard_Real theU, const Standard_Real theV) Standard_OVERRIDE;
|
||||||
|
|
||||||
|
//! Computes normal at given parameter location of the surface.
|
||||||
|
Standard_EXPORT virtual gp_Dir Normal (const Standard_Real theU, const Standard_Real theV) Standard_OVERRIDE;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
Standard_Real myRadius;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -11662,6 +11662,7 @@ static int VManipulator (Draw_Interpretor& theDi,
|
|||||||
aCmd.AddOption ("autoActivate", "... {0|1} - set activation on detection");
|
aCmd.AddOption ("autoActivate", "... {0|1} - set activation on detection");
|
||||||
aCmd.AddOption ("followTranslation", "... {0|1} - set following translation transform");
|
aCmd.AddOption ("followTranslation", "... {0|1} - set following translation transform");
|
||||||
aCmd.AddOption ("followRotation", "... {0|1} - set following rotation transform");
|
aCmd.AddOption ("followRotation", "... {0|1} - set following rotation transform");
|
||||||
|
aCmd.AddOption ("followDragging", "... {0|1} - set following dragging transform");
|
||||||
aCmd.AddOption ("gap", "... value - set gap between sub-parts");
|
aCmd.AddOption ("gap", "... value - set gap between sub-parts");
|
||||||
aCmd.AddOption ("part", "... axis mode {0|1} - set visual part");
|
aCmd.AddOption ("part", "... axis mode {0|1} - set visual part");
|
||||||
aCmd.AddOption ("pos", "... x y z [nx ny nz [xx xy xz]] - set position of manipulator");
|
aCmd.AddOption ("pos", "... x y z [nx ny nz [xx xy xz]] - set position of manipulator");
|
||||||
@ -11750,6 +11751,10 @@ static int VManipulator (Draw_Interpretor& theDi,
|
|||||||
{
|
{
|
||||||
aManipulator->ChangeTransformBehavior().SetFollowRotation (aCmd.ArgBool ("followRotation"));
|
aManipulator->ChangeTransformBehavior().SetFollowRotation (aCmd.ArgBool ("followRotation"));
|
||||||
}
|
}
|
||||||
|
if (aCmd.HasOption("followDragging", 1, Standard_True))
|
||||||
|
{
|
||||||
|
aManipulator->ChangeTransformBehavior().SetFollowDragging(aCmd.ArgBool("followDragging"));
|
||||||
|
}
|
||||||
if (aCmd.HasOption ("gap", 1, Standard_True))
|
if (aCmd.HasOption ("gap", 1, Standard_True))
|
||||||
{
|
{
|
||||||
aManipulator->SetGap (aCmd.ArgFloat ("gap"));
|
aManipulator->SetGap (aCmd.ArgFloat ("gap"));
|
||||||
@ -11759,9 +11764,9 @@ static int VManipulator (Draw_Interpretor& theDi,
|
|||||||
Standard_Integer anAxis = aCmd.ArgInt ("part", 0);
|
Standard_Integer anAxis = aCmd.ArgInt ("part", 0);
|
||||||
Standard_Integer aMode = aCmd.ArgInt ("part", 1);
|
Standard_Integer aMode = aCmd.ArgInt ("part", 1);
|
||||||
Standard_Boolean aOnOff = aCmd.ArgBool ("part", 2);
|
Standard_Boolean aOnOff = aCmd.ArgBool ("part", 2);
|
||||||
if (aMode < 1 || aMode > 3)
|
if (aMode < 1 || aMode > 4)
|
||||||
{
|
{
|
||||||
std::cerr << theArgVec[0] << " error: mode value should be in range [1, 3].\n";
|
std::cerr << theArgVec[0] << " error: mode value should be in range [1, 4].\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13019,6 +13024,7 @@ void ViewerTest::ViewerCommands(Draw_Interpretor& theCommands)
|
|||||||
"\n '-autoActivate {0|1}' - set activation on detection"
|
"\n '-autoActivate {0|1}' - set activation on detection"
|
||||||
"\n '-followTranslation {0|1}' - set following translation transform"
|
"\n '-followTranslation {0|1}' - set following translation transform"
|
||||||
"\n '-followRotation {0|1}' - set following rotation transform"
|
"\n '-followRotation {0|1}' - set following rotation transform"
|
||||||
|
"\n '-followDragging {0|1}' - set following dragging transform"
|
||||||
"\n '-gap value' - set gap between sub-parts"
|
"\n '-gap value' - set gap between sub-parts"
|
||||||
"\n '-part axis mode {0|1}' - set visual part"
|
"\n '-part axis mode {0|1}' - set visual part"
|
||||||
"\n '-pos x y z [nx ny nz [xx xy xz]' - set position of manipulator"
|
"\n '-pos x y z [nx ny nz [xx xy xz]' - set position of manipulator"
|
||||||
|
103
tests/v3d/manipulator/dragg
Normal file
103
tests/v3d/manipulator/dragg
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
puts "====================================="
|
||||||
|
puts "AIS_Manipulator - drag an object"
|
||||||
|
puts "====================================="
|
||||||
|
|
||||||
|
set anImage1 $imagedir/${casename}_1.png
|
||||||
|
set anImage2 $imagedir/${casename}_2.png
|
||||||
|
set anImage3 $imagedir/${casename}_3.png
|
||||||
|
set anImage4 $imagedir/${casename}_4.png
|
||||||
|
set anImage5 $imagedir/${casename}_5.png
|
||||||
|
|
||||||
|
# -------------------------------------
|
||||||
|
# create manipulated and helper objects
|
||||||
|
# -------------------------------------
|
||||||
|
|
||||||
|
pcylinder c1 5 10
|
||||||
|
pcylinder c2 10 20
|
||||||
|
ttranslate c1 105 0 20
|
||||||
|
ttranslate c2 100 0 0
|
||||||
|
trotate c1 100 0 25 0 1 0 90
|
||||||
|
trotate c1 100 0 25 0 0 1 10
|
||||||
|
|
||||||
|
# -------------------------------------
|
||||||
|
# display manipulated objects
|
||||||
|
# -------------------------------------
|
||||||
|
|
||||||
|
vdisplay c1
|
||||||
|
vdisplay c2
|
||||||
|
vsetdispmode 1
|
||||||
|
vaxo
|
||||||
|
vfit
|
||||||
|
|
||||||
|
# ------------------
|
||||||
|
# attach manipulator
|
||||||
|
# ------------------
|
||||||
|
|
||||||
|
vmanipulator m -attach c1 -adjustPosition 1 -adjustSize 0 -enableModes 1 -size 40
|
||||||
|
vmanipulator m -followRotation 1
|
||||||
|
vmanipulator m -followTranslation 1
|
||||||
|
vdump $anImage1
|
||||||
|
|
||||||
|
# ----------------------------------------------------
|
||||||
|
# test xz plane dragging transform (world reference frame)
|
||||||
|
# ----------------------------------------------------
|
||||||
|
|
||||||
|
set mouse_pick {211 129}
|
||||||
|
set mouse_drag {284 248}
|
||||||
|
|
||||||
|
vmoveto {*}$mouse_pick
|
||||||
|
vselect {*}$mouse_pick
|
||||||
|
vmanipulator m -startTransform {*}$mouse_pick
|
||||||
|
vmanipulator m -transform {*}$mouse_drag
|
||||||
|
vmanipulator m -stopTransform
|
||||||
|
vselect 0 0
|
||||||
|
vmoveto {*}$mouse_drag
|
||||||
|
vdump $anImage2
|
||||||
|
|
||||||
|
# -------------------------------------------
|
||||||
|
# rotate around y axis
|
||||||
|
# -------------------------------------------
|
||||||
|
|
||||||
|
set mouse_pick {316 257}
|
||||||
|
set mouse_drag {279 286}
|
||||||
|
|
||||||
|
vmoveto {*}$mouse_pick
|
||||||
|
vselect {*}$mouse_pick
|
||||||
|
vmanipulator m -startTransform {*}$mouse_pick
|
||||||
|
vmanipulator m -transform {*}$mouse_drag
|
||||||
|
vmanipulator m -stopTransform
|
||||||
|
vselect 0 0
|
||||||
|
vmoveto {*}$mouse_drag
|
||||||
|
vdump $anImage3
|
||||||
|
|
||||||
|
# ----------------------------------------------------
|
||||||
|
# test xy plane dragging transform (world reference frame)
|
||||||
|
# ----------------------------------------------------
|
||||||
|
|
||||||
|
set mouse_pick {278 267}
|
||||||
|
set mouse_drag {156 276}
|
||||||
|
|
||||||
|
vmoveto {*}$mouse_pick
|
||||||
|
vselect {*}$mouse_pick
|
||||||
|
vmanipulator m -startTransform {*}$mouse_pick
|
||||||
|
vmanipulator m -transform {*}$mouse_drag
|
||||||
|
vmanipulator m -stopTransform
|
||||||
|
vselect 0 0
|
||||||
|
vmoveto {*}$mouse_drag
|
||||||
|
vdump $anImage4
|
||||||
|
|
||||||
|
# ----------------------------------------------------
|
||||||
|
# test yz plane dragging transform (world reference frame)
|
||||||
|
# ----------------------------------------------------
|
||||||
|
|
||||||
|
set mouse_pick {168 258}
|
||||||
|
set mouse_drag {166 182}
|
||||||
|
|
||||||
|
vmoveto {*}$mouse_pick
|
||||||
|
vselect {*}$mouse_pick
|
||||||
|
vmanipulator m -startTransform {*}$mouse_pick
|
||||||
|
vmanipulator m -transform {*}$mouse_drag
|
||||||
|
vmanipulator m -stopTransform
|
||||||
|
vselect 0 0
|
||||||
|
vmoveto {*}$mouse_drag
|
||||||
|
vdump $anImage5
|
@ -36,6 +36,9 @@ vfit
|
|||||||
vmanipulator m -attach c1 -adjustPosition 1 -adjustSize 0 -enableModes 1 -size 40
|
vmanipulator m -attach c1 -adjustPosition 1 -adjustSize 0 -enableModes 1 -size 40
|
||||||
vmanipulator m -followRotation 1
|
vmanipulator m -followRotation 1
|
||||||
vmanipulator m -followTranslation 1
|
vmanipulator m -followTranslation 1
|
||||||
|
vmanipulator m -part 0 4 0
|
||||||
|
vmanipulator m -part 1 4 0
|
||||||
|
vmanipulator m -part 2 4 0
|
||||||
|
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
# test x translation transform (world reference frame)
|
# test x translation transform (world reference frame)
|
||||||
@ -103,6 +106,9 @@ vfit
|
|||||||
vmanipulator m -attach c1 -adjustPosition 1 -adjustSize 0 -enableModes 1 -size 40
|
vmanipulator m -attach c1 -adjustPosition 1 -adjustSize 0 -enableModes 1 -size 40
|
||||||
vmanipulator m -followRotation 1
|
vmanipulator m -followRotation 1
|
||||||
vmanipulator m -followTranslation 1
|
vmanipulator m -followTranslation 1
|
||||||
|
vmanipulator m -part 0 4 0
|
||||||
|
vmanipulator m -part 1 4 0
|
||||||
|
vmanipulator m -part 2 4 0
|
||||||
|
|
||||||
set mouse_pick {223 143}
|
set mouse_pick {223 143}
|
||||||
set mouse_drag {181 141}
|
set mouse_drag {181 141}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user