mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-04-24 07:42:04 +05:00
NPAL14856: Get The Normal of a Face. And merge MakePipeShellsWithoutPath from 3.2.X.
This commit is contained in:
parent
8d6ca361a1
commit
ecab0565f5
@ -910,7 +910,15 @@ module GEOM
|
|||||||
in GEOM_Object thePath,
|
in GEOM_Object thePath,
|
||||||
in boolean theWithContact ,
|
in boolean theWithContact ,
|
||||||
in boolean theWithCorrection );
|
in boolean theWithCorrection );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Create solids between given sections
|
||||||
|
* \param theSeqBases - list of sections (shell or face).
|
||||||
|
* \param theLocations - list of corresponding vertexes
|
||||||
|
* \return New GEOM_Object, containing the created solids.
|
||||||
|
*/
|
||||||
|
GEOM_Object MakePipeShellsWithoutPath (in ListOfGO theSeqBases,
|
||||||
|
in ListOfGO theLocations);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -1792,7 +1800,7 @@ module GEOM
|
|||||||
GEOM_Object MakeCircleThreePnt (in GEOM_Object thePnt1,
|
GEOM_Object MakeCircleThreePnt (in GEOM_Object thePnt1,
|
||||||
in GEOM_Object thePnt2,
|
in GEOM_Object thePnt2,
|
||||||
in GEOM_Object thePnt3);
|
in GEOM_Object thePnt3);
|
||||||
/*!
|
/*!
|
||||||
* Create a circle with given center, with a radius equals the distance from center to Point1
|
* Create a circle with given center, with a radius equals the distance from center to Point1
|
||||||
* and on a plane defined by all of three points.
|
* and on a plane defined by all of three points.
|
||||||
* \param thePnt1,thePnt2,thePnt3 Points, defining the circle.
|
* \param thePnt1,thePnt2,thePnt3 Points, defining the circle.
|
||||||
@ -1938,6 +1946,7 @@ module GEOM
|
|||||||
in double theR1,
|
in double theR1,
|
||||||
in double theR2,
|
in double theR2,
|
||||||
in ListOfLong theEdges);
|
in ListOfLong theEdges);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Perform a fillet on all edges of the specified faces of the given shape.
|
* Perform a fillet on all edges of the specified faces of the given shape.
|
||||||
* \param theShape Shape, to perform fillet on.
|
* \param theShape Shape, to perform fillet on.
|
||||||
@ -1954,6 +1963,7 @@ module GEOM
|
|||||||
in double theR1,
|
in double theR1,
|
||||||
in double theR2,
|
in double theR2,
|
||||||
in ListOfLong theFaces);
|
in ListOfLong theFaces);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Perform a symmetric chamfer on all edges of the given shape.
|
* Perform a symmetric chamfer on all edges of the given shape.
|
||||||
* \param theShape Shape, to perform chamfer on.
|
* \param theShape Shape, to perform chamfer on.
|
||||||
@ -1984,6 +1994,7 @@ module GEOM
|
|||||||
GEOM_Object MakeChamferEdgeAD (in GEOM_Object theShape,
|
GEOM_Object MakeChamferEdgeAD (in GEOM_Object theShape,
|
||||||
in double theD, in double theAngle,
|
in double theD, in double theAngle,
|
||||||
in long theFace1, in long theFace2);
|
in long theFace1, in long theFace2);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Perform a chamfer on all edges of the specified faces.
|
* Perform a chamfer on all edges of the specified faces.
|
||||||
* with distance D1 on the first specified face (if several for one edge)
|
* with distance D1 on the first specified face (if several for one edge)
|
||||||
@ -2026,6 +2037,7 @@ module GEOM
|
|||||||
GEOM_Object MakeChamferEdgesAD (in GEOM_Object theShape,
|
GEOM_Object MakeChamferEdgesAD (in GEOM_Object theShape,
|
||||||
in double theD, in double theAngle,
|
in double theD, in double theAngle,
|
||||||
in ListOfLong theEdges);
|
in ListOfLong theEdges);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Perform an Archimde operation on the given shape with given parameters.
|
* Perform an Archimde operation on the given shape with given parameters.
|
||||||
* The object presenting the resulting face is returned
|
* The object presenting the resulting face is returned
|
||||||
@ -2331,6 +2343,17 @@ module GEOM
|
|||||||
*/
|
*/
|
||||||
GEOM_Object GetCentreOfMass (in GEOM_Object theShape);
|
GEOM_Object GetCentreOfMass (in GEOM_Object theShape);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Get a vector, representing the normal of theFace.
|
||||||
|
* If the face is not planar, theOptionalPoint is obligatory.
|
||||||
|
* \param theFace Shape (face) to define the normal of.
|
||||||
|
* \param theOptionalPoint Shape (point) to define the normal at.
|
||||||
|
* Can be NULL in case of planar face.
|
||||||
|
* \return New GEOM_Object, containing the created normal vector.
|
||||||
|
*/
|
||||||
|
GEOM_Object GetNormal (in GEOM_Object theFace,
|
||||||
|
in GEOM_Object theOptionalPoint);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Get inertia matrix and moments of inertia of theShape.
|
* Get inertia matrix and moments of inertia of theShape.
|
||||||
* \param theShape Shape to calculate inertia of.
|
* \param theShape Shape to calculate inertia of.
|
||||||
|
@ -184,6 +184,9 @@ module GEOM
|
|||||||
in boolean theWithContact ,
|
in boolean theWithContact ,
|
||||||
in boolean theWithCorrection );
|
in boolean theWithCorrection );
|
||||||
|
|
||||||
|
GEOM_Object MakePipeShellsWithoutPath (in ListOfGO theSeqBases,
|
||||||
|
in ListOfGO theLocations );
|
||||||
|
|
||||||
//-----------------------------------------------------------//
|
//-----------------------------------------------------------//
|
||||||
// BooleanOperations //
|
// BooleanOperations //
|
||||||
//-----------------------------------------------------------//
|
//-----------------------------------------------------------//
|
||||||
|
@ -98,6 +98,7 @@ multirotationsimple.png \
|
|||||||
multitranslation.png \
|
multitranslation.png \
|
||||||
multitranslationdouble.png \
|
multitranslationdouble.png \
|
||||||
multitranslationsimple.png \
|
multitranslationsimple.png \
|
||||||
|
normale.png \
|
||||||
offset.png \
|
offset.png \
|
||||||
orientation.png \
|
orientation.png \
|
||||||
partition.png \
|
partition.png \
|
||||||
|
BIN
resources/normale.png
Normal file
BIN
resources/normale.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 260 B |
@ -209,6 +209,10 @@ msgstr "partitionplane.png"
|
|||||||
msgid "ICON_DLG_CENTERMASS"
|
msgid "ICON_DLG_CENTERMASS"
|
||||||
msgstr "centergravity.png"
|
msgstr "centergravity.png"
|
||||||
|
|
||||||
|
#NormaleDlg
|
||||||
|
msgid "ICON_DLG_NORMALE"
|
||||||
|
msgstr "normale.png"
|
||||||
|
|
||||||
#BoundingBoxDlg
|
#BoundingBoxDlg
|
||||||
msgid "ICON_DLG_BOUNDING_BOX"
|
msgid "ICON_DLG_BOUNDING_BOX"
|
||||||
msgstr "bounding.png"
|
msgstr "bounding.png"
|
||||||
@ -738,8 +742,8 @@ msgstr "point_coord.png"
|
|||||||
msgid "ICO_BASIC_PROPS"
|
msgid "ICO_BASIC_PROPS"
|
||||||
msgstr "basicproperties.png"
|
msgstr "basicproperties.png"
|
||||||
|
|
||||||
msgid "ICO_MASS_CENTER"
|
msgid "ICO_NORMALE"
|
||||||
msgstr "centergravity.png"
|
msgstr "normale.png"
|
||||||
|
|
||||||
msgid "ICO_INERTIA"
|
msgid "ICO_INERTIA"
|
||||||
msgstr "axisinertia.png"
|
msgstr "axisinertia.png"
|
||||||
|
@ -588,6 +588,13 @@ msgstr "Bounding Box"
|
|||||||
msgid "GEOM_CMASS"
|
msgid "GEOM_CMASS"
|
||||||
msgstr "Center Of Mass"
|
msgstr "Center Of Mass"
|
||||||
|
|
||||||
|
#Normale
|
||||||
|
msgid "GEOM_NORMALE"
|
||||||
|
msgstr "Normale To A Face"
|
||||||
|
|
||||||
|
msgid "GEOM_VECTOR_NORMALE"
|
||||||
|
msgstr "Vector_Normale"
|
||||||
|
|
||||||
#Basic Properties
|
#Basic Properties
|
||||||
msgid "GEOM_PROPERTIES"
|
msgid "GEOM_PROPERTIES"
|
||||||
msgstr "Basic Properties"
|
msgstr "Basic Properties"
|
||||||
@ -862,6 +869,10 @@ msgstr "Circle Construction"
|
|||||||
msgid "GEOM_CMASS_TITLE"
|
msgid "GEOM_CMASS_TITLE"
|
||||||
msgstr "Center Of Mass Construction"
|
msgstr "Center Of Mass Construction"
|
||||||
|
|
||||||
|
#: GeometryGUI_NormaleDlg.cxx:57
|
||||||
|
msgid "GEOM_NORMALE_TITLE"
|
||||||
|
msgstr "Create Normale To A Face"
|
||||||
|
|
||||||
msgid "GEOM_PLANE_SIZE"
|
msgid "GEOM_PLANE_SIZE"
|
||||||
msgstr "Size of plane :"
|
msgstr "Size of plane :"
|
||||||
|
|
||||||
@ -2727,6 +2738,15 @@ msgstr "Center of mass"
|
|||||||
msgid "STB_MASS_CENTER"
|
msgid "STB_MASS_CENTER"
|
||||||
msgstr "Compute center of mass"
|
msgstr "Compute center of mass"
|
||||||
|
|
||||||
|
msgid "TOP_NORMALE"
|
||||||
|
msgstr "Compute normale to a face"
|
||||||
|
|
||||||
|
msgid "MEN_NORMALE"
|
||||||
|
msgstr "Normale to a face"
|
||||||
|
|
||||||
|
msgid "STB_NORMALE"
|
||||||
|
msgstr "Compute normale to a face in a point (optional)"
|
||||||
|
|
||||||
msgid "TOP_INERTIA"
|
msgid "TOP_INERTIA"
|
||||||
msgstr "Compute intertia"
|
msgstr "Compute intertia"
|
||||||
|
|
||||||
|
@ -524,6 +524,7 @@ void GeometryGUI::OnGUIEvent( int id )
|
|||||||
else if( id == 701 || // MENU MEASURE - PROPERTIES
|
else if( id == 701 || // MENU MEASURE - PROPERTIES
|
||||||
id == 702 || // MENU MEASURE - CDG
|
id == 702 || // MENU MEASURE - CDG
|
||||||
id == 703 || // MENU MEASURE - INERTIA
|
id == 703 || // MENU MEASURE - INERTIA
|
||||||
|
id == 704 || // MENU MEASURE - NORMALE
|
||||||
id == 7041 || // MENU MEASURE - BOUNDING BOX
|
id == 7041 || // MENU MEASURE - BOUNDING BOX
|
||||||
id == 7042 || // MENU MEASURE - MIN DISTANCE
|
id == 7042 || // MENU MEASURE - MIN DISTANCE
|
||||||
id == 7043 || // MENU MEASURE - ANGLE
|
id == 7043 || // MENU MEASURE - ANGLE
|
||||||
@ -847,6 +848,7 @@ void GeometryGUI::initialize( CAM_Application* app )
|
|||||||
createGeomAction( 701, "BASIC_PROPS" );
|
createGeomAction( 701, "BASIC_PROPS" );
|
||||||
createGeomAction( 702, "MASS_CENTER" );
|
createGeomAction( 702, "MASS_CENTER" );
|
||||||
createGeomAction( 703, "INERTIA" );
|
createGeomAction( 703, "INERTIA" );
|
||||||
|
createGeomAction( 704, "NORMALE" );
|
||||||
createGeomAction( 7041, "BND_BOX" );
|
createGeomAction( 7041, "BND_BOX" );
|
||||||
createGeomAction( 7042, "MIN_DIST" );
|
createGeomAction( 7042, "MIN_DIST" );
|
||||||
createGeomAction( 7043, "MEASURE_ANGLE" );
|
createGeomAction( 7043, "MEASURE_ANGLE" );
|
||||||
@ -1002,6 +1004,7 @@ void GeometryGUI::initialize( CAM_Application* app )
|
|||||||
createMenu( separator(), measurId, -1 );
|
createMenu( separator(), measurId, -1 );
|
||||||
createMenu( 702, measurId, -1 );
|
createMenu( 702, measurId, -1 );
|
||||||
createMenu( 703, measurId, -1 );
|
createMenu( 703, measurId, -1 );
|
||||||
|
createMenu( 704, measurId, -1 );
|
||||||
// NPAL16572: move "Check free boundaries" and "Check free faces" from "Repair" to "Measure"
|
// NPAL16572: move "Check free boundaries" and "Check free faces" from "Repair" to "Measure"
|
||||||
createMenu( separator(), measurId, -1 );
|
createMenu( separator(), measurId, -1 );
|
||||||
createMenu( 609, measurId, -1 );
|
createMenu( 609, measurId, -1 );
|
||||||
|
@ -1375,6 +1375,23 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithShellSections(
|
|||||||
|
|
||||||
pyDump<< "], [";
|
pyDump<< "], [";
|
||||||
|
|
||||||
|
for(i =1 ; i <= nbSubBases; i++) {
|
||||||
|
|
||||||
|
Handle(Standard_Transient) anItem = theSubBases->Value(i);
|
||||||
|
if(anItem.IsNull())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Handle(GEOM_Object) anObj = Handle(GEOM_Object)::DownCast(anItem);
|
||||||
|
if(!anObj.IsNull()) {
|
||||||
|
pyDump<< anObj;
|
||||||
|
if(i < nbBases)
|
||||||
|
pyDump<<", ";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pyDump<< "], [";
|
||||||
|
|
||||||
for(i =1 ; i <= nbLocs; i++) {
|
for(i =1 ; i <= nbLocs; i++) {
|
||||||
|
|
||||||
Handle(Standard_Transient) anItem = theLocations->Value(i);
|
Handle(Standard_Transient) anItem = theLocations->Value(i);
|
||||||
@ -1396,3 +1413,135 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithShellSections(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* MakePipeShellsWithoutPath
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeShellsWithoutPath(
|
||||||
|
const Handle(TColStd_HSequenceOfTransient)& theBases,
|
||||||
|
const Handle(TColStd_HSequenceOfTransient)& theLocations)
|
||||||
|
{
|
||||||
|
Handle(GEOM_Object) anObj;
|
||||||
|
SetErrorCode(KO);
|
||||||
|
if(theBases.IsNull())
|
||||||
|
return anObj;
|
||||||
|
|
||||||
|
Standard_Integer nbBases = theBases->Length();
|
||||||
|
|
||||||
|
if (!nbBases)
|
||||||
|
return anObj;
|
||||||
|
|
||||||
|
Standard_Integer nbLocs = (theLocations.IsNull() ? 0 :theLocations->Length());
|
||||||
|
|
||||||
|
//Add a new Pipe object
|
||||||
|
Handle(GEOM_Object) aPipeDS = GetEngine()->AddObject(GetDocID(), GEOM_PIPE);
|
||||||
|
|
||||||
|
//Add a new Pipe function
|
||||||
|
|
||||||
|
Handle(GEOM_Function) aFunction =
|
||||||
|
aPipeDS->AddFunction(GEOMImpl_PipeDriver::GetID(), PIPE_SHELLS_WITHOUT_PATH);
|
||||||
|
if (aFunction.IsNull()) return anObj;
|
||||||
|
|
||||||
|
//Check if the function is set correctly
|
||||||
|
if (aFunction->GetDriverGUID() != GEOMImpl_PipeDriver::GetID()) return anObj;
|
||||||
|
|
||||||
|
GEOMImpl_IPipeShellSect aCI (aFunction);
|
||||||
|
|
||||||
|
Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
|
||||||
|
Handle(TColStd_HSequenceOfTransient) aSeqLocs = new TColStd_HSequenceOfTransient;
|
||||||
|
|
||||||
|
Standard_Integer i =1;
|
||||||
|
for( ; i <= nbBases; i++) {
|
||||||
|
|
||||||
|
Handle(Standard_Transient) anItem = theBases->Value(i);
|
||||||
|
if(anItem.IsNull())
|
||||||
|
continue;
|
||||||
|
Handle(GEOM_Object) aBase = Handle(GEOM_Object)::DownCast(anItem);
|
||||||
|
if(aBase.IsNull())
|
||||||
|
continue;
|
||||||
|
Handle(GEOM_Function) aRefBase = aBase->GetLastFunction();
|
||||||
|
if(aRefBase.IsNull())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(nbLocs) {
|
||||||
|
Handle(Standard_Transient) anItemLoc = theLocations->Value(i);
|
||||||
|
if(anItemLoc.IsNull())
|
||||||
|
continue;
|
||||||
|
Handle(GEOM_Object) aLoc = Handle(GEOM_Object)::DownCast(anItemLoc);
|
||||||
|
if(aLoc.IsNull())
|
||||||
|
continue;
|
||||||
|
Handle(GEOM_Function) aRefLoc = aLoc->GetLastFunction();
|
||||||
|
if(aRefLoc.IsNull())
|
||||||
|
continue;
|
||||||
|
aSeqLocs->Append(aRefLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
aSeqBases->Append(aRefBase);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!aSeqBases->Length())
|
||||||
|
return anObj;
|
||||||
|
|
||||||
|
aCI.SetBases(aSeqBases);
|
||||||
|
aCI.SetLocations(aSeqLocs);
|
||||||
|
|
||||||
|
//Compute the Pipe value
|
||||||
|
try {
|
||||||
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
||||||
|
OCC_CATCH_SIGNALS;
|
||||||
|
#endif
|
||||||
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
||||||
|
SetErrorCode("Pipe with shell sections without path driver failed");
|
||||||
|
return anObj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
||||||
|
SetErrorCode(aFail->GetMessageString());
|
||||||
|
return anObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Make a Python command
|
||||||
|
GEOM::TPythonDump pyDump(aFunction);
|
||||||
|
pyDump << aPipeDS << " = geompy.MakePipeShellsWithoutPath([";
|
||||||
|
|
||||||
|
for(i =1 ; i <= nbBases; i++) {
|
||||||
|
|
||||||
|
Handle(Standard_Transient) anItem = theBases->Value(i);
|
||||||
|
if(anItem.IsNull())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Handle(GEOM_Object) anObj = Handle(GEOM_Object)::DownCast(anItem);
|
||||||
|
if(!anObj.IsNull()) {
|
||||||
|
pyDump<< anObj;
|
||||||
|
if(i < nbBases)
|
||||||
|
pyDump<<", ";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pyDump<< "], [";
|
||||||
|
|
||||||
|
for(i =1 ; i <= nbLocs; i++) {
|
||||||
|
|
||||||
|
Handle(Standard_Transient) anItem = theLocations->Value(i);
|
||||||
|
if(anItem.IsNull())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Handle(GEOM_Object) anObj = Handle(GEOM_Object)::DownCast(anItem);
|
||||||
|
if(!anObj.IsNull()) {
|
||||||
|
pyDump<< anObj;
|
||||||
|
if(i < nbLocs)
|
||||||
|
pyDump<<", ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pyDump<< "])";
|
||||||
|
|
||||||
|
SetErrorCode(OK);
|
||||||
|
return aPipeDS;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -94,6 +94,10 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations {
|
|||||||
bool theWithContact,
|
bool theWithContact,
|
||||||
bool theWithCorrections);
|
bool theWithCorrections);
|
||||||
|
|
||||||
|
Standard_EXPORT Handle(GEOM_Object) MakePipeShellsWithoutPath(
|
||||||
|
const Handle(TColStd_HSequenceOfTransient)& theBases,
|
||||||
|
const Handle(TColStd_HSequenceOfTransient)& theLocations);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,10 +22,15 @@
|
|||||||
|
|
||||||
#include "GEOM_Function.hxx"
|
#include "GEOM_Function.hxx"
|
||||||
|
|
||||||
#define MEASURE_ARG_BASE 1
|
//#define MEASURE_ARG_BASE 1
|
||||||
|
//#define MEASURE_ARG_POINT 2
|
||||||
|
|
||||||
class GEOMImpl_IMeasure
|
class GEOMImpl_IMeasure
|
||||||
{
|
{
|
||||||
|
enum {
|
||||||
|
MEASURE_ARG_BASE = 1,
|
||||||
|
MEASURE_ARG_POINT = 2
|
||||||
|
};
|
||||||
public:
|
public:
|
||||||
|
|
||||||
GEOMImpl_IMeasure(Handle(GEOM_Function) theFunction): _func(theFunction) {}
|
GEOMImpl_IMeasure(Handle(GEOM_Function) theFunction): _func(theFunction) {}
|
||||||
@ -35,6 +40,11 @@ class GEOMImpl_IMeasure
|
|||||||
|
|
||||||
Handle(GEOM_Function) GetBase() { return _func->GetReference(MEASURE_ARG_BASE); }
|
Handle(GEOM_Function) GetBase() { return _func->GetReference(MEASURE_ARG_BASE); }
|
||||||
|
|
||||||
|
void SetPoint(Handle(GEOM_Function) thePnt)
|
||||||
|
{ _func->SetReference(MEASURE_ARG_POINT, thePnt); }
|
||||||
|
|
||||||
|
Handle(GEOM_Function) GetPoint() { return _func->GetReference(MEASURE_ARG_POINT); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Handle(GEOM_Function) _func;
|
Handle(GEOM_Function) _func;
|
||||||
|
@ -878,6 +878,70 @@ Handle(GEOM_Object) GEOMImpl_IMeasureOperations::GetCentreOfMass
|
|||||||
return aCDG;
|
return aCDG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* GetNormal
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
Handle(GEOM_Object) GEOMImpl_IMeasureOperations::GetNormal
|
||||||
|
(Handle(GEOM_Object) theFace,
|
||||||
|
Handle(GEOM_Object) theOptionalPoint)
|
||||||
|
{
|
||||||
|
SetErrorCode(KO);
|
||||||
|
|
||||||
|
if (theFace.IsNull()) return NULL;
|
||||||
|
|
||||||
|
//Add a new Normale object
|
||||||
|
Handle(GEOM_Object) aNorm = GetEngine()->AddObject(GetDocID(), GEOM_VECTOR);
|
||||||
|
|
||||||
|
//Add a new Normale function
|
||||||
|
Handle(GEOM_Function) aFunction =
|
||||||
|
aNorm->AddFunction(GEOMImpl_MeasureDriver::GetID(), VECTOR_FACE_NORMALE);
|
||||||
|
if (aFunction.IsNull()) return NULL;
|
||||||
|
|
||||||
|
//Check if the function is set correctly
|
||||||
|
if (aFunction->GetDriverGUID() != GEOMImpl_MeasureDriver::GetID()) return NULL;
|
||||||
|
|
||||||
|
GEOMImpl_IMeasure aCI (aFunction);
|
||||||
|
|
||||||
|
Handle(GEOM_Function) aFace = theFace->GetLastFunction();
|
||||||
|
if (aFace.IsNull()) return NULL;
|
||||||
|
|
||||||
|
aCI.SetBase(aFace);
|
||||||
|
|
||||||
|
if (!theOptionalPoint.IsNull()) {
|
||||||
|
Handle(GEOM_Function) anOptPnt = theOptionalPoint->GetLastFunction();
|
||||||
|
aCI.SetPoint(anOptPnt);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Compute the Normale value
|
||||||
|
try {
|
||||||
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
||||||
|
OCC_CATCH_SIGNALS;
|
||||||
|
#endif
|
||||||
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
||||||
|
SetErrorCode("Measure driver failed to compute normake of face");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
||||||
|
SetErrorCode(aFail->GetMessageString());
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Make a Python command
|
||||||
|
GEOM::TPythonDump pd (aFunction);
|
||||||
|
pd << aNorm << " = geompy.GetNormal(" << theFace;
|
||||||
|
if (!theOptionalPoint.IsNull()) {
|
||||||
|
pd << ", " << theOptionalPoint;
|
||||||
|
}
|
||||||
|
pd << ")";
|
||||||
|
|
||||||
|
SetErrorCode(OK);
|
||||||
|
return aNorm;
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
* GetBasicProperties
|
* GetBasicProperties
|
||||||
|
@ -90,6 +90,9 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations {
|
|||||||
|
|
||||||
Standard_EXPORT Handle(GEOM_Object) GetCentreOfMass (Handle(GEOM_Object) theShape);
|
Standard_EXPORT Handle(GEOM_Object) GetCentreOfMass (Handle(GEOM_Object) theShape);
|
||||||
|
|
||||||
|
Standard_EXPORT Handle(GEOM_Object) GetNormal (Handle(GEOM_Object) theFace,
|
||||||
|
Handle(GEOM_Object) theOptionalPoint);
|
||||||
|
|
||||||
Standard_EXPORT void GetBasicProperties (Handle(GEOM_Object) theShape,
|
Standard_EXPORT void GetBasicProperties (Handle(GEOM_Object) theShape,
|
||||||
Standard_Real& theLength,
|
Standard_Real& theLength,
|
||||||
Standard_Real& theSurfArea,
|
Standard_Real& theSurfArea,
|
||||||
|
@ -29,12 +29,20 @@
|
|||||||
#include <BRep_Tool.hxx>
|
#include <BRep_Tool.hxx>
|
||||||
#include <BRepGProp.hxx>
|
#include <BRepGProp.hxx>
|
||||||
#include <BRepBuilderAPI_MakeVertex.hxx>
|
#include <BRepBuilderAPI_MakeVertex.hxx>
|
||||||
|
#include <BRepBuilderAPI_MakeEdge.hxx>
|
||||||
|
|
||||||
#include <TopAbs.hxx>
|
#include <TopAbs.hxx>
|
||||||
#include <TopoDS.hxx>
|
#include <TopoDS.hxx>
|
||||||
#include <TopoDS_Shape.hxx>
|
#include <TopoDS_Shape.hxx>
|
||||||
|
|
||||||
#include <GProp_GProps.hxx>
|
#include <GProp_GProps.hxx>
|
||||||
|
#include <GeomLProp_SLProps.hxx>
|
||||||
|
#include <Geom_Surface.hxx>
|
||||||
|
|
||||||
|
#include <Bnd_Box.hxx>
|
||||||
|
#include <BRepBndLib.hxx>
|
||||||
|
#include <BRepAdaptor_Surface.hxx>
|
||||||
|
#include <ShapeAnalysis_Surface.hxx>
|
||||||
|
|
||||||
#include <gp_Pnt.hxx>
|
#include <gp_Pnt.hxx>
|
||||||
#include <Precision.hxx>
|
#include <Precision.hxx>
|
||||||
@ -73,7 +81,8 @@ Standard_Integer GEOMImpl_MeasureDriver::Execute(TFunction_Logbook& log) const
|
|||||||
|
|
||||||
TopoDS_Shape aShape;
|
TopoDS_Shape aShape;
|
||||||
|
|
||||||
if (aType == CDG_MEASURE) {
|
if (aType == CDG_MEASURE)
|
||||||
|
{
|
||||||
Handle(GEOM_Function) aRefBase = aCI.GetBase();
|
Handle(GEOM_Function) aRefBase = aCI.GetBase();
|
||||||
TopoDS_Shape aShapeBase = aRefBase->GetValue();
|
TopoDS_Shape aShapeBase = aRefBase->GetValue();
|
||||||
if (aShapeBase.IsNull()) {
|
if (aShapeBase.IsNull()) {
|
||||||
@ -97,8 +106,99 @@ Standard_Integer GEOMImpl_MeasureDriver::Execute(TFunction_Logbook& log) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
aShape = BRepBuilderAPI_MakeVertex(aCenterMass).Shape();
|
aShape = BRepBuilderAPI_MakeVertex(aCenterMass).Shape();
|
||||||
|
}
|
||||||
|
else if (aType == VECTOR_FACE_NORMALE)
|
||||||
|
{
|
||||||
|
// Face
|
||||||
|
Handle(GEOM_Function) aRefBase = aCI.GetBase();
|
||||||
|
TopoDS_Shape aShapeBase = aRefBase->GetValue();
|
||||||
|
if (aShapeBase.IsNull()) {
|
||||||
|
Standard_NullObject::Raise("Face for normale calculation is null");
|
||||||
|
}
|
||||||
|
if (aShapeBase.ShapeType() != TopAbs_FACE) {
|
||||||
|
Standard_NullObject::Raise("Shape for normale calculation is not a face");
|
||||||
|
}
|
||||||
|
TopoDS_Face aFace = TopoDS::Face(aShapeBase);
|
||||||
|
|
||||||
} else {
|
// Point
|
||||||
|
gp_Pnt p1 (0,0,0);
|
||||||
|
|
||||||
|
Handle(GEOM_Function) aPntFunc = aCI.GetPoint();
|
||||||
|
if (!aPntFunc.IsNull())
|
||||||
|
{
|
||||||
|
TopoDS_Shape anOptPnt = aPntFunc->GetValue();
|
||||||
|
if (anOptPnt.IsNull())
|
||||||
|
Standard_NullObject::Raise("Invalid shape given for point argument");
|
||||||
|
p1 = BRep_Tool::Pnt(TopoDS::Vertex(anOptPnt));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gp_Ax3 aPos = GEOMImpl_IMeasureOperations::GetPosition(aFace);
|
||||||
|
p1 = aPos.Location();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Point parameters on surface
|
||||||
|
Handle(Geom_Surface) aSurf = BRep_Tool::Surface(aFace);
|
||||||
|
Handle(ShapeAnalysis_Surface) aSurfAna = new ShapeAnalysis_Surface (aSurf);
|
||||||
|
gp_Pnt2d pUV = aSurfAna->ValueOfUV(p1, Precision::Confusion());
|
||||||
|
|
||||||
|
// Normal direction
|
||||||
|
gp_Vec Vec1,Vec2;
|
||||||
|
BRepAdaptor_Surface SF (aFace);
|
||||||
|
SF.D1(pUV.X(), pUV.Y(), p1, Vec1, Vec2);
|
||||||
|
gp_Vec V = Vec1.Crossed(Vec2);
|
||||||
|
Standard_Real mod = V.Magnitude();
|
||||||
|
if (mod < Precision::Confusion())
|
||||||
|
Standard_NullObject::Raise("Normal vector of a face has null magnitude");
|
||||||
|
|
||||||
|
// Set length of normal vector to average radius of curvature
|
||||||
|
Standard_Real radius = 0.0;
|
||||||
|
GeomLProp_SLProps aProperties (aSurf, pUV.X(), pUV.Y(), 2, Precision::Confusion());
|
||||||
|
if (aProperties.IsCurvatureDefined()) {
|
||||||
|
Standard_Real radius1 = Abs(aProperties.MinCurvature());
|
||||||
|
Standard_Real radius2 = Abs(aProperties.MaxCurvature());
|
||||||
|
if (Abs(radius1) > Precision::Confusion()) {
|
||||||
|
radius = 1.0 / radius1;
|
||||||
|
if (Abs(radius2) > Precision::Confusion()) {
|
||||||
|
radius = (radius + 1.0 / radius2) / 2.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (Abs(radius2) > Precision::Confusion()) {
|
||||||
|
radius = 1.0 / radius2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set length of normal vector to average dimension of the face
|
||||||
|
// (only if average radius of curvature is not appropriate)
|
||||||
|
if (radius < Precision::Confusion()) {
|
||||||
|
Bnd_Box B;
|
||||||
|
Standard_Real Xmin, Xmax, Ymin, Ymax, Zmin, Zmax;
|
||||||
|
BRepBndLib::Add(aFace, B);
|
||||||
|
B.Get(Xmin, Ymin, Zmin, Xmax, Ymax, Zmax);
|
||||||
|
radius = ((Xmax - Xmin) + (Ymax - Ymin) + (Zmax - Zmin)) / 3.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (radius < Precision::Confusion())
|
||||||
|
radius = 1.0;
|
||||||
|
|
||||||
|
V *= radius / mod;
|
||||||
|
|
||||||
|
// consider the face orientation
|
||||||
|
if (aFace.Orientation() == TopAbs_REVERSED ||
|
||||||
|
aFace.Orientation() == TopAbs_INTERNAL) {
|
||||||
|
V = - V;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edge
|
||||||
|
gp_Pnt p2 = p1.Translated(V);
|
||||||
|
BRepBuilderAPI_MakeEdge aBuilder (p1, p2);
|
||||||
|
if (!aBuilder.IsDone())
|
||||||
|
Standard_NullObject::Raise("Vector construction failed");
|
||||||
|
aShape = aBuilder.Shape();
|
||||||
|
}
|
||||||
|
else {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aShape.IsNull()) return 0;
|
if (aShape.IsNull()) return 0;
|
||||||
@ -107,7 +207,7 @@ Standard_Integer GEOMImpl_MeasureDriver::Execute(TFunction_Logbook& log) const
|
|||||||
|
|
||||||
log.SetTouched(Label());
|
log.SetTouched(Label());
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -97,6 +97,7 @@
|
|||||||
#define VECTOR_TWO_PNT 1
|
#define VECTOR_TWO_PNT 1
|
||||||
#define VECTOR_DX_DY_DZ 2
|
#define VECTOR_DX_DY_DZ 2
|
||||||
#define VECTOR_TANGENT_CURVE_PAR 3
|
#define VECTOR_TANGENT_CURVE_PAR 3
|
||||||
|
#define VECTOR_FACE_NORMALE 4
|
||||||
|
|
||||||
#define PLANE_PNT_VEC 1
|
#define PLANE_PNT_VEC 1
|
||||||
#define PLANE_FACE 2
|
#define PLANE_FACE 2
|
||||||
|
@ -597,7 +597,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections
|
|||||||
CORBA::Boolean theWithContact,
|
CORBA::Boolean theWithContact,
|
||||||
CORBA::Boolean theWithCorrections)
|
CORBA::Boolean theWithCorrections)
|
||||||
{
|
{
|
||||||
GEOM::GEOM_Object_var aGEOMObject;
|
GEOM::GEOM_Object_var aGEOMObject;
|
||||||
|
|
||||||
//Set a not done flag
|
//Set a not done flag
|
||||||
GetOperations()->SetNotDone();
|
GetOperations()->SetNotDone();
|
||||||
@ -659,3 +659,57 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections
|
|||||||
|
|
||||||
return GetObject(anObject);
|
return GetObject(anObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* MakePipeShellsWithoutPath
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath
|
||||||
|
(const GEOM::ListOfGO& theBases,
|
||||||
|
const GEOM::ListOfGO& theLocations)
|
||||||
|
{
|
||||||
|
GEOM::GEOM_Object_var aGEOMObject;
|
||||||
|
|
||||||
|
//Set a not done flag
|
||||||
|
GetOperations()->SetNotDone();
|
||||||
|
Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
|
||||||
|
Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
|
||||||
|
int ind=0, aNbBases=0, aNbLocs=0;
|
||||||
|
|
||||||
|
//Get the shapes
|
||||||
|
aNbBases = theBases.length();
|
||||||
|
aNbLocs = theLocations.length();
|
||||||
|
|
||||||
|
if( aNbLocs && aNbBases != aNbLocs)
|
||||||
|
return aGEOMObject._retn();
|
||||||
|
|
||||||
|
for (ind = 0; ind < aNbBases; ind++) {
|
||||||
|
if (theBases[ind] == NULL) continue;
|
||||||
|
Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->
|
||||||
|
GetObject(theBases[ind]->GetStudyID(), theBases[ind]->GetEntry());
|
||||||
|
if(aBase.IsNull())
|
||||||
|
continue;
|
||||||
|
if(aNbLocs) {
|
||||||
|
Handle(GEOM_Object) aLoc = GetOperations()->GetEngine()->GetObject
|
||||||
|
(theLocations[ind]->GetStudyID(), theLocations[ind]->GetEntry());
|
||||||
|
if(aLoc.IsNull())
|
||||||
|
continue;
|
||||||
|
aSeqLocations->Append(aLoc);
|
||||||
|
}
|
||||||
|
aSeqBases->Append(aBase);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!aSeqBases->Length())
|
||||||
|
return aGEOMObject._retn();
|
||||||
|
|
||||||
|
// Make pipe
|
||||||
|
Handle(GEOM_Object) anObject =
|
||||||
|
GetOperations()->MakePipeShellsWithoutPath(aSeqBases,aSeqLocations);
|
||||||
|
|
||||||
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||||
|
return aGEOMObject._retn();
|
||||||
|
|
||||||
|
return GetObject(anObject);
|
||||||
|
}
|
||||||
|
@ -113,6 +113,9 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i :
|
|||||||
CORBA::Boolean theWithContact,
|
CORBA::Boolean theWithContact,
|
||||||
CORBA::Boolean theWithCorrections);
|
CORBA::Boolean theWithCorrections);
|
||||||
|
|
||||||
|
GEOM::GEOM_Object_ptr MakePipeShellsWithoutPath(const GEOM::ListOfGO& theBases,
|
||||||
|
const GEOM::ListOfGO& theLocations);
|
||||||
|
|
||||||
::GEOMImpl_I3DPrimOperations* GetOperations()
|
::GEOMImpl_I3DPrimOperations* GetOperations()
|
||||||
{ return (::GEOMImpl_I3DPrimOperations*)GetImpl(); }
|
{ return (::GEOMImpl_I3DPrimOperations*)GetImpl(); }
|
||||||
};
|
};
|
||||||
|
@ -141,7 +141,7 @@ GEOM::GEOM_Object_ptr GEOM_IMeasureOperations_i::GetCentreOfMass
|
|||||||
//Set a not done flag
|
//Set a not done flag
|
||||||
GetOperations()->SetNotDone();
|
GetOperations()->SetNotDone();
|
||||||
|
|
||||||
if (theShape == NULL) return aGEOMObject._retn();
|
if (CORBA::is_nil(theShape)) return aGEOMObject._retn();
|
||||||
|
|
||||||
//Get the reference shape
|
//Get the reference shape
|
||||||
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
||||||
@ -157,6 +157,41 @@ GEOM::GEOM_Object_ptr GEOM_IMeasureOperations_i::GetCentreOfMass
|
|||||||
return GetObject(anObject);
|
return GetObject(anObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* GetNormal
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
GEOM::GEOM_Object_ptr GEOM_IMeasureOperations_i::GetNormal
|
||||||
|
(GEOM::GEOM_Object_ptr theFace,
|
||||||
|
GEOM::GEOM_Object_ptr theOptionalPoint)
|
||||||
|
{
|
||||||
|
GEOM::GEOM_Object_var aGEOMObject;
|
||||||
|
|
||||||
|
//Set a not done flag
|
||||||
|
GetOperations()->SetNotDone();
|
||||||
|
|
||||||
|
if (CORBA::is_nil(theFace)) return aGEOMObject._retn();
|
||||||
|
|
||||||
|
//Get the reference shape
|
||||||
|
Handle(GEOM_Object) aFace = GetOperations()->GetEngine()->GetObject
|
||||||
|
(theFace->GetStudyID(), theFace->GetEntry());
|
||||||
|
|
||||||
|
if (aFace.IsNull()) return aGEOMObject._retn();
|
||||||
|
|
||||||
|
// Make Vector - normal to theFace (in point theOptionalPoint if the face is not planar)
|
||||||
|
Handle(GEOM_Object) anOptionalPoint;
|
||||||
|
if (!CORBA::is_nil(theOptionalPoint)) {
|
||||||
|
anOptionalPoint = GetOperations()->GetEngine()->GetObject
|
||||||
|
(theOptionalPoint->GetStudyID(), theOptionalPoint->GetEntry());
|
||||||
|
}
|
||||||
|
Handle(GEOM_Object) anObject = GetOperations()->GetNormal(aFace, anOptionalPoint);
|
||||||
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||||
|
return aGEOMObject._retn();
|
||||||
|
|
||||||
|
return GetObject(anObject);
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
* GetBasicProperties
|
* GetBasicProperties
|
||||||
|
@ -56,6 +56,9 @@ class GEOM_I_EXPORT GEOM_IMeasureOperations_i :
|
|||||||
|
|
||||||
GEOM::GEOM_Object_ptr GetCentreOfMass (GEOM::GEOM_Object_ptr theShape);
|
GEOM::GEOM_Object_ptr GetCentreOfMass (GEOM::GEOM_Object_ptr theShape);
|
||||||
|
|
||||||
|
GEOM::GEOM_Object_ptr GetNormal (GEOM::GEOM_Object_ptr theFace,
|
||||||
|
GEOM::GEOM_Object_ptr theOptionalPoint);
|
||||||
|
|
||||||
void GetInertia (GEOM::GEOM_Object_ptr theShape,
|
void GetInertia (GEOM::GEOM_Object_ptr theShape,
|
||||||
CORBA::Double& I11, CORBA::Double& I12, CORBA::Double& I13,
|
CORBA::Double& I11, CORBA::Double& I12, CORBA::Double& I13,
|
||||||
CORBA::Double& I21, CORBA::Double& I22, CORBA::Double& I23,
|
CORBA::Double& I21, CORBA::Double& I22, CORBA::Double& I23,
|
||||||
|
@ -993,6 +993,7 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeWithDifferentSections
|
|||||||
return anObj;
|
return anObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// MakePipe:
|
// MakePipe:
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -1015,6 +1016,24 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeWithShellSections
|
|||||||
return anObj;
|
return anObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
// MakePipe:
|
||||||
|
//=============================================================================
|
||||||
|
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeShellsWithoutPath
|
||||||
|
(const GEOM::ListOfGO& theBases,
|
||||||
|
const GEOM::ListOfGO& theLocations)
|
||||||
|
{
|
||||||
|
beginService( " GEOM_Superv_i::MakePipeShellsWithoutPath" );
|
||||||
|
MESSAGE("GEOM_Superv_i::MakePipeShellsWithoutPath");
|
||||||
|
get3DPrimOp();
|
||||||
|
GEOM::GEOM_Object_ptr anObj =
|
||||||
|
my3DPrimOp->MakePipeShellsWithoutPath(theBases,theLocations);
|
||||||
|
endService( " GEOM_Superv_i::MakePipeShellsWithoutPath" );
|
||||||
|
return anObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// MakeFuse:
|
// MakeFuse:
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
@ -244,6 +244,9 @@ public:
|
|||||||
CORBA::Boolean theWithContact,
|
CORBA::Boolean theWithContact,
|
||||||
CORBA::Boolean theWithCorrections);
|
CORBA::Boolean theWithCorrections);
|
||||||
|
|
||||||
|
GEOM::GEOM_Object_ptr MakePipeShellsWithoutPath(const GEOM::ListOfGO& theBases,
|
||||||
|
const GEOM::ListOfGO& theLocations);
|
||||||
|
|
||||||
//-----------------------------------------------------------//
|
//-----------------------------------------------------------//
|
||||||
// BooleanOperations //
|
// BooleanOperations //
|
||||||
//-----------------------------------------------------------//
|
//-----------------------------------------------------------//
|
||||||
|
@ -109,6 +109,22 @@ def TestMeasureOperations (geompy, math):
|
|||||||
if Coords[0] != 5 or Coords[1] != 15 or Coords[2] != 35:
|
if Coords[0] != 5 or Coords[1] != 15 or Coords[2] != 35:
|
||||||
print "But must be (5, 15, 35)"
|
print "But must be (5, 15, 35)"
|
||||||
|
|
||||||
|
####### GetNormal #######
|
||||||
|
|
||||||
|
faces = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])
|
||||||
|
face0 = faces[0]
|
||||||
|
vnorm = geompy.GetNormal(face0)
|
||||||
|
if vnorm is None:
|
||||||
|
raise RuntimeError, "GetNormal(face0) failed"
|
||||||
|
else:
|
||||||
|
geompy.addToStudy(face0, "Face0")
|
||||||
|
geompy.addToStudy(vnorm, "Normale to Face0")
|
||||||
|
print "\nNormale of face has been successfully obtained:"
|
||||||
|
#Coords = geompy.PointCoordinates(pcdg)
|
||||||
|
#print "(", Coords[0], ", ", Coords[1], ", ", Coords[2], ")"
|
||||||
|
#if Coords[0] != 5 or Coords[1] != 15 or Coords[2] != 35:
|
||||||
|
# print "But must be (5, 15, 35)"
|
||||||
|
|
||||||
####### MinDistance #######
|
####### MinDistance #######
|
||||||
|
|
||||||
MinDist = geompy.MinDistance(box, cube)
|
MinDist = geompy.MinDistance(box, cube)
|
||||||
|
@ -731,9 +731,12 @@ class geompyDC(GEOM._objref_GEOM_Gen):
|
|||||||
# orthogonal to the spine tangent in the correspondent point
|
# orthogonal to the spine tangent in the correspondent point
|
||||||
# @return New GEOM_Object, containing the created pipe.
|
# @return New GEOM_Object, containing the created pipe.
|
||||||
#
|
#
|
||||||
# Example: see GEOM_TestAll.py
|
def MakePipeWithDifferentSections(self, theSeqBases,
|
||||||
def MakePipeWithDifferentSections(self,theSeqBases, theLocations,thePath,theWithContact,theWithCorrection):
|
theLocations, thePath,
|
||||||
anObj = self.PrimOp.MakePipeWithDifferentSections(theSeqBases, theLocations,thePath,theWithContact,theWithCorrection)
|
theWithContact, theWithCorrection):
|
||||||
|
anObj = self.PrimOp.MakePipeWithDifferentSections(theSeqBases,
|
||||||
|
theLocations, thePath,
|
||||||
|
theWithContact, theWithCorrection)
|
||||||
if self.PrimOp.IsDone() == 0:
|
if self.PrimOp.IsDone() == 0:
|
||||||
print "MakePipeWithDifferentSections : ", self.PrimOp.GetErrorCode()
|
print "MakePipeWithDifferentSections : ", self.PrimOp.GetErrorCode()
|
||||||
return anObj
|
return anObj
|
||||||
@ -755,7 +758,6 @@ class geompyDC(GEOM._objref_GEOM_Gen):
|
|||||||
# orthogonal to the spine tangent in the correspondent point
|
# orthogonal to the spine tangent in the correspondent point
|
||||||
# @return New GEOM_Object, containing the created solids.
|
# @return New GEOM_Object, containing the created solids.
|
||||||
#
|
#
|
||||||
# Example: see GEOM_TestAll.py
|
|
||||||
def MakePipeWithShellSections(self,theSeqBases, theSeqSubBases,
|
def MakePipeWithShellSections(self,theSeqBases, theSeqSubBases,
|
||||||
theLocations, thePath,
|
theLocations, thePath,
|
||||||
theWithContact, theWithCorrection):
|
theWithContact, theWithCorrection):
|
||||||
@ -765,7 +767,50 @@ class geompyDC(GEOM._objref_GEOM_Gen):
|
|||||||
if self.PrimOp.IsDone() == 0:
|
if self.PrimOp.IsDone() == 0:
|
||||||
print "MakePipeWithShellSections : ", self.PrimOp.GetErrorCode()
|
print "MakePipeWithShellSections : ", self.PrimOp.GetErrorCode()
|
||||||
return anObj
|
return anObj
|
||||||
|
|
||||||
|
def MakePipeWithShellSectionsBySteps(self, theSeqBases, theSeqSubBases,
|
||||||
|
theLocations, thePath,
|
||||||
|
theWithContact, theWithCorrection):
|
||||||
|
res = []
|
||||||
|
nbsect = len(theSeqBases)
|
||||||
|
nbsubsect = len(theSeqSubBases)
|
||||||
|
#print "nbsect = ",nbsect
|
||||||
|
for i in range(1,nbsect):
|
||||||
|
#print " i = ",i
|
||||||
|
tmpSeqBases = [ theSeqBases[i-1], theSeqBases[i] ]
|
||||||
|
tmpLocations = [ theLocations[i-1], theLocations[i] ]
|
||||||
|
tmpSeqSubBases = []
|
||||||
|
if nbsubsect>0: tmpSeqSubBases = [ theSeqSubBases[i-1], theSeqSubBases[i] ]
|
||||||
|
anObj = self.PrimOp.MakePipeWithShellSections(tmpSeqBases, tmpSeqSubBases,
|
||||||
|
tmpLocations, thePath,
|
||||||
|
theWithContact, theWithCorrection)
|
||||||
|
if self.PrimOp.IsDone() == 0:
|
||||||
|
print "Problems with pipe creation between ",i," and ",i+1," sections"
|
||||||
|
print "MakePipeWithShellSections : ", self.PrimOp.GetErrorCode()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print "Pipe between ",i," and ",i+1," sections is OK"
|
||||||
|
res.append(anObj)
|
||||||
|
pass
|
||||||
|
pass
|
||||||
|
|
||||||
|
resc = self.MakeCompound(res)
|
||||||
|
#resc = self.MakeSewing(res, 0.001)
|
||||||
|
#print "resc: ",resc
|
||||||
|
return resc
|
||||||
|
|
||||||
|
## Create solids between given sections
|
||||||
|
# @param theSeqBases - list of sections (shell or face).
|
||||||
|
# @param theLocations - list of corresponding vertexes
|
||||||
|
# @return New GEOM_Object, containing the created solids.
|
||||||
|
#
|
||||||
|
def MakePipeShellsWithoutPath(self, theSeqBases, theLocations):
|
||||||
|
anObj = self.PrimOp.MakePipeShellsWithoutPath(theSeqBases, theLocations)
|
||||||
|
if self.PrimOp.IsDone() == 0:
|
||||||
|
print "MakePipeShellsWithoutPath : ", self.PrimOp.GetErrorCode()
|
||||||
|
return anObj
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Create base shapes
|
# Create base shapes
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
@ -2099,6 +2144,19 @@ class geompyDC(GEOM._objref_GEOM_Gen):
|
|||||||
print "GetCentreOfMass : ", self.MeasuOp.GetErrorCode()
|
print "GetCentreOfMass : ", self.MeasuOp.GetErrorCode()
|
||||||
return anObj
|
return anObj
|
||||||
|
|
||||||
|
## Get a normale to the given face. If the point is not given,
|
||||||
|
# the normale is calculated at the center of mass.
|
||||||
|
# @param theFace Face to define normale of.
|
||||||
|
# @param theOptionalPoint Point to compute the normale at.
|
||||||
|
# @return New GEOM_Object, containing the created vector.
|
||||||
|
#
|
||||||
|
# Example: see GEOM_TestMeasures.py
|
||||||
|
def GetNormal(self, theFace, theOptionalPoint = None):
|
||||||
|
anObj = self.MeasuOp.GetNormal(theFace, theOptionalPoint)
|
||||||
|
if self.MeasuOp.IsDone() == 0:
|
||||||
|
print "GetNormal : ", self.MeasuOp.GetErrorCode()
|
||||||
|
return anObj
|
||||||
|
|
||||||
## Check a topology of the given shape.
|
## Check a topology of the given shape.
|
||||||
# @param theShape Shape to check validity of.
|
# @param theShape Shape to check validity of.
|
||||||
# @param theIsCheckGeom If FALSE, only the shape's topology will be checked,
|
# @param theIsCheckGeom If FALSE, only the shape's topology will be checked,
|
||||||
|
@ -47,6 +47,7 @@ dist_libMeasureGUI_la_SOURCES = \
|
|||||||
MeasureGUI_Skeleton.cxx \
|
MeasureGUI_Skeleton.cxx \
|
||||||
MeasureGUI_PropertiesDlg.cxx \
|
MeasureGUI_PropertiesDlg.cxx \
|
||||||
MeasureGUI_CenterMassDlg.cxx \
|
MeasureGUI_CenterMassDlg.cxx \
|
||||||
|
MeasureGUI_NormaleDlg.cxx \
|
||||||
MeasureGUI_InertiaDlg.cxx \
|
MeasureGUI_InertiaDlg.cxx \
|
||||||
MeasureGUI_BndBoxDlg.cxx \
|
MeasureGUI_BndBoxDlg.cxx \
|
||||||
MeasureGUI_DistanceDlg.cxx \
|
MeasureGUI_DistanceDlg.cxx \
|
||||||
@ -68,6 +69,7 @@ MOC_FILES = \
|
|||||||
MeasureGUI_Skeleton_moc.cxx \
|
MeasureGUI_Skeleton_moc.cxx \
|
||||||
MeasureGUI_PropertiesDlg_moc.cxx \
|
MeasureGUI_PropertiesDlg_moc.cxx \
|
||||||
MeasureGUI_CenterMassDlg_moc.cxx \
|
MeasureGUI_CenterMassDlg_moc.cxx \
|
||||||
|
MeasureGUI_NormaleDlg_moc.cxx \
|
||||||
MeasureGUI_InertiaDlg_moc.cxx \
|
MeasureGUI_InertiaDlg_moc.cxx \
|
||||||
MeasureGUI_BndBoxDlg_moc.cxx \
|
MeasureGUI_BndBoxDlg_moc.cxx \
|
||||||
MeasureGUI_DistanceDlg_moc.cxx \
|
MeasureGUI_DistanceDlg_moc.cxx \
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include "MeasureGUI_PropertiesDlg.h" // Method PROPERTIES
|
#include "MeasureGUI_PropertiesDlg.h" // Method PROPERTIES
|
||||||
#include "MeasureGUI_CenterMassDlg.h" // Method CENTER MASS
|
#include "MeasureGUI_CenterMassDlg.h" // Method CENTER MASS
|
||||||
|
#include "MeasureGUI_NormaleDlg.h" // Method NORMALE
|
||||||
#include "MeasureGUI_InertiaDlg.h" // Method INERTIA
|
#include "MeasureGUI_InertiaDlg.h" // Method INERTIA
|
||||||
#include "MeasureGUI_BndBoxDlg.h" // Method BNDBOX
|
#include "MeasureGUI_BndBoxDlg.h" // Method BNDBOX
|
||||||
#include "MeasureGUI_DistanceDlg.h" // Method DISTANCE
|
#include "MeasureGUI_DistanceDlg.h" // Method DISTANCE
|
||||||
@ -78,6 +79,7 @@ bool MeasureGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent )
|
|||||||
case 701 : new MeasureGUI_PropertiesDlg (getGeometryGUI(), parent); break; // LENGTH, AREA AND VOLUME
|
case 701 : new MeasureGUI_PropertiesDlg (getGeometryGUI(), parent); break; // LENGTH, AREA AND VOLUME
|
||||||
case 702 : new MeasureGUI_CenterMassDlg (getGeometryGUI(), parent); break; // CENTER MASS
|
case 702 : new MeasureGUI_CenterMassDlg (getGeometryGUI(), parent); break; // CENTER MASS
|
||||||
case 703 : new MeasureGUI_InertiaDlg (getGeometryGUI(), parent); break; // INERTIA
|
case 703 : new MeasureGUI_InertiaDlg (getGeometryGUI(), parent); break; // INERTIA
|
||||||
|
case 704 : new MeasureGUI_NormaleDlg (getGeometryGUI(), parent); break; // NORMALE
|
||||||
case 7041: new MeasureGUI_BndBoxDlg (getGeometryGUI(), parent); break; // BOUNDING BOX
|
case 7041: new MeasureGUI_BndBoxDlg (getGeometryGUI(), parent); break; // BOUNDING BOX
|
||||||
case 7042: new MeasureGUI_DistanceDlg (getGeometryGUI(), parent); break; // MIN DISTANCE
|
case 7042: new MeasureGUI_DistanceDlg (getGeometryGUI(), parent); break; // MIN DISTANCE
|
||||||
case 7043: new MeasureGUI_AngleDlg (getGeometryGUI(), parent); break; // ANGLE
|
case 7043: new MeasureGUI_AngleDlg (getGeometryGUI(), parent); break; // ANGLE
|
||||||
|
281
src/MeasureGUI/MeasureGUI_NormaleDlg.cxx
Normal file
281
src/MeasureGUI/MeasureGUI_NormaleDlg.cxx
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
// GEOM GEOMGUI : GUI for Geometry component
|
||||||
|
//
|
||||||
|
// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
|
||||||
|
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Lesser General Public
|
||||||
|
// License as published by the Free Software Foundation; either
|
||||||
|
// version 2.1 of the License.
|
||||||
|
//
|
||||||
|
// This library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public
|
||||||
|
// License along with this library; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
//
|
||||||
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File : MeasureGUI_NormaleDlg.cxx
|
||||||
|
// Author : Julia DOROVSKIKH
|
||||||
|
// Module : GEOM
|
||||||
|
// $Header$
|
||||||
|
|
||||||
|
#include "MeasureGUI_NormaleDlg.h"
|
||||||
|
|
||||||
|
#include "SUIT_Session.h"
|
||||||
|
#include "SalomeApp_Application.h"
|
||||||
|
#include "LightApp_SelectionMgr.h"
|
||||||
|
|
||||||
|
#include <qlabel.h>
|
||||||
|
|
||||||
|
#include "GEOMImpl_Types.hxx"
|
||||||
|
|
||||||
|
#include "utilities.h"
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// class : MeasureGUI_NormaleDlg()
|
||||||
|
// purpose : Constructs a MeasureGUI_NormaleDlg which is a child of 'parent', with the
|
||||||
|
// name 'name' and widget flags set to 'f'.
|
||||||
|
// The dialog will by default be modeless, unless you set 'modal' to
|
||||||
|
// TRUE to construct a modal dialog.
|
||||||
|
//=================================================================================
|
||||||
|
MeasureGUI_NormaleDlg::MeasureGUI_NormaleDlg (GeometryGUI* theGeometryGUI, QWidget* parent,
|
||||||
|
const char* name, bool modal, WFlags fl)
|
||||||
|
:GEOMBase_Skeleton(theGeometryGUI, parent, name, modal, WStyle_Customize |
|
||||||
|
WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
|
||||||
|
{
|
||||||
|
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
|
||||||
|
QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_NORMALE")));
|
||||||
|
QPixmap image1 (aResMgr->loadPixmap("GEOM", tr("ICON_SELECT")));
|
||||||
|
|
||||||
|
setCaption(tr("GEOM_NORMALE_TITLE"));
|
||||||
|
|
||||||
|
/***************************************************************/
|
||||||
|
GroupConstructors->setTitle(tr("GEOM_NORMALE"));
|
||||||
|
RadioButton1->setPixmap(image0);
|
||||||
|
RadioButton2->close(TRUE);
|
||||||
|
RadioButton3->close(TRUE);
|
||||||
|
|
||||||
|
GroupArgs = new DlgRef_2Sel_QTD (this, "GroupArgs");
|
||||||
|
GroupArgs->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
|
||||||
|
|
||||||
|
GroupArgs->TextLabel1->setText(tr("GEOM_FACE"));
|
||||||
|
GroupArgs->TextLabel2->setText(tr("GEOM_POINT"));
|
||||||
|
|
||||||
|
GroupArgs->PushButton1->setPixmap(image1);
|
||||||
|
GroupArgs->PushButton2->setPixmap(image1);
|
||||||
|
|
||||||
|
Layout1->addWidget(GroupArgs, 2, 0);
|
||||||
|
/***************************************************************/
|
||||||
|
|
||||||
|
setHelpFileName("normale.htm");
|
||||||
|
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ~MeasureGUI_NormaleDlg()
|
||||||
|
// purpose : Destroys the object and frees any allocated resources
|
||||||
|
//=================================================================================
|
||||||
|
MeasureGUI_NormaleDlg::~MeasureGUI_NormaleDlg()
|
||||||
|
{
|
||||||
|
// no need to delete child widgets, Qt does it all for us
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : Init()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_NormaleDlg::Init()
|
||||||
|
{
|
||||||
|
/* init variables */
|
||||||
|
GroupArgs->LineEdit1->setReadOnly(true);
|
||||||
|
GroupArgs->LineEdit2->setReadOnly(true);
|
||||||
|
|
||||||
|
myFace = GEOM::GEOM_Object::_nil();
|
||||||
|
myPoint = GEOM::GEOM_Object::_nil();
|
||||||
|
|
||||||
|
myEditCurrentArgument = GroupArgs->LineEdit1;
|
||||||
|
globalSelection(GEOM_FACE);
|
||||||
|
|
||||||
|
/* signals and slots connections */
|
||||||
|
connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
|
||||||
|
connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
||||||
|
|
||||||
|
connect(GroupArgs->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||||
|
connect(GroupArgs->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||||
|
|
||||||
|
connect(GroupArgs->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
|
||||||
|
connect(GroupArgs->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
|
||||||
|
|
||||||
|
connect(myGeomGUI->getApp()->selectionMgr(),
|
||||||
|
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
|
||||||
|
|
||||||
|
initName(tr("GEOM_VECTOR_NORMALE"));
|
||||||
|
|
||||||
|
//ConstructorsClicked(0);
|
||||||
|
SelectionIntoArgument();
|
||||||
|
|
||||||
|
/* displays Dialog */
|
||||||
|
GroupArgs->show();
|
||||||
|
this->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ClickOnOk()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_NormaleDlg::ClickOnOk()
|
||||||
|
{
|
||||||
|
if (ClickOnApply())
|
||||||
|
ClickOnCancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ClickOnApply()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_NormaleDlg::ClickOnApply()
|
||||||
|
{
|
||||||
|
if (!onAccept())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
initName();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SelectionIntoArgument()
|
||||||
|
// purpose : Called when selection as changed or other case
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_NormaleDlg::SelectionIntoArgument()
|
||||||
|
{
|
||||||
|
erasePreview();
|
||||||
|
myEditCurrentArgument->setText("");
|
||||||
|
|
||||||
|
if (myEditCurrentArgument == GroupArgs->LineEdit1) {
|
||||||
|
myFace = GEOM::GEOM_Object::_nil();
|
||||||
|
}
|
||||||
|
else if (myEditCurrentArgument == GroupArgs->LineEdit2) {
|
||||||
|
myPoint = GEOM::GEOM_Object::_nil();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IObjectCount() != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// nbSel == 1
|
||||||
|
Standard_Boolean testResult = Standard_False;
|
||||||
|
GEOM::GEOM_Object_var aSelectedObject =
|
||||||
|
GEOMBase::ConvertIOinGEOMObject(firstIObject(), testResult);
|
||||||
|
|
||||||
|
if (!testResult)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (myEditCurrentArgument == GroupArgs->LineEdit1) {
|
||||||
|
myFace = aSelectedObject;
|
||||||
|
}
|
||||||
|
else if (myEditCurrentArgument == GroupArgs->LineEdit2) {
|
||||||
|
myPoint = aSelectedObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
myEditCurrentArgument->setText(GEOMBase::GetName(aSelectedObject));
|
||||||
|
|
||||||
|
displayPreview();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : LineEditReturnPressed()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_NormaleDlg::LineEditReturnPressed()
|
||||||
|
{
|
||||||
|
QLineEdit* send = (QLineEdit*)sender();
|
||||||
|
if (send == GroupArgs->LineEdit1 ||
|
||||||
|
send == GroupArgs->LineEdit2)
|
||||||
|
{
|
||||||
|
myEditCurrentArgument = send;
|
||||||
|
GEOMBase_Skeleton::LineEditReturnPressed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetEditCurrentArgument()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_NormaleDlg::SetEditCurrentArgument()
|
||||||
|
{
|
||||||
|
QPushButton* send = (QPushButton*)sender();
|
||||||
|
|
||||||
|
if (send == GroupArgs->PushButton1) {
|
||||||
|
myEditCurrentArgument = GroupArgs->LineEdit1;
|
||||||
|
globalSelection(GEOM_FACE);
|
||||||
|
}
|
||||||
|
else if (send == GroupArgs->PushButton2) {
|
||||||
|
myEditCurrentArgument = GroupArgs->LineEdit2;
|
||||||
|
globalSelection(GEOM_POINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
myEditCurrentArgument->setFocus();
|
||||||
|
SelectionIntoArgument();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ActivateThisDialog()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_NormaleDlg::ActivateThisDialog()
|
||||||
|
{
|
||||||
|
GEOMBase_Skeleton::ActivateThisDialog();
|
||||||
|
|
||||||
|
SelectionIntoArgument();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : enterEvent()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_NormaleDlg::enterEvent (QEvent* e)
|
||||||
|
{
|
||||||
|
if (!GroupConstructors->isEnabled())
|
||||||
|
ActivateThisDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : createOperation
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
GEOM::GEOM_IOperations_ptr MeasureGUI_NormaleDlg::createOperation()
|
||||||
|
{
|
||||||
|
return getGeomEngine()->GetIMeasureOperations(getStudyId());
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : isValid
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_NormaleDlg::isValid (QString&)
|
||||||
|
{
|
||||||
|
//return !CORBA::is_nil(myFace) && !CORBA::is_nil(myPoint);
|
||||||
|
return !CORBA::is_nil(myFace);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : execute
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_NormaleDlg::execute (ObjectList& objects)
|
||||||
|
{
|
||||||
|
GEOM::GEOM_Object_var anObj =
|
||||||
|
GEOM::GEOM_IMeasureOperations::_narrow(getOperation())->GetNormal(myFace, myPoint);
|
||||||
|
|
||||||
|
if (!anObj->_is_nil())
|
||||||
|
objects.push_back(anObj._retn());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
74
src/MeasureGUI/MeasureGUI_NormaleDlg.h
Normal file
74
src/MeasureGUI/MeasureGUI_NormaleDlg.h
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
// GEOM GEOMGUI : GUI for Geometry component
|
||||||
|
//
|
||||||
|
// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
|
||||||
|
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Lesser General Public
|
||||||
|
// License as published by the Free Software Foundation; either
|
||||||
|
// version 2.1 of the License.
|
||||||
|
//
|
||||||
|
// This library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public
|
||||||
|
// License along with this library; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
//
|
||||||
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File : MeasureGUI_NormaleDlg.h
|
||||||
|
// Author : Julia DOROVSKIKH
|
||||||
|
// Module : GEOM
|
||||||
|
|
||||||
|
#ifndef DIALOGBOX_NORMALE_H
|
||||||
|
#define DIALOGBOX_NORMALE_H
|
||||||
|
|
||||||
|
#include "GEOM_MeasureGUI.hxx"
|
||||||
|
|
||||||
|
#include "GEOMBase_Skeleton.h"
|
||||||
|
#include "DlgRef_2Sel_QTD.h"
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// class : MeasureGUI_NormaleDlg
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
class GEOM_MEASUREGUI_EXPORT MeasureGUI_NormaleDlg : public GEOMBase_Skeleton
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MeasureGUI_NormaleDlg (GeometryGUI* theGeometryGUI, QWidget* parent = 0,
|
||||||
|
const char* name = 0, bool modal = FALSE, WFlags fl = 0);
|
||||||
|
~MeasureGUI_NormaleDlg();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// redefined from GEOMBase_Helper
|
||||||
|
virtual GEOM::GEOM_IOperations_ptr createOperation();
|
||||||
|
virtual bool isValid (QString& msg);
|
||||||
|
virtual bool execute (ObjectList& objects);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Init();
|
||||||
|
void enterEvent (QEvent* e);
|
||||||
|
|
||||||
|
GEOM::GEOM_Object_var myFace;
|
||||||
|
GEOM::GEOM_Object_var myPoint;
|
||||||
|
|
||||||
|
DlgRef_2Sel_QTD* GroupArgs;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void ClickOnOk();
|
||||||
|
bool ClickOnApply();
|
||||||
|
|
||||||
|
void ActivateThisDialog();
|
||||||
|
void LineEditReturnPressed();
|
||||||
|
void SelectionIntoArgument();
|
||||||
|
void SetEditCurrentArgument();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DIALOGBOX_NORMALE_H
|
Loading…
x
Reference in New Issue
Block a user