mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-19 13:40:49 +03:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
26ec6390b5 | ||
|
359edc7d8a | ||
|
f9998f03ad | ||
|
c479c4f6d8 | ||
|
c51df6bfd2 | ||
|
5e43274280 | ||
|
efe960751c | ||
|
6b9e0dc3f8 | ||
|
2ef94c994e | ||
|
1dd4b902c0 | ||
|
a846d36326 |
@@ -3228,6 +3228,30 @@ void AIS_InteractiveContext::ClearSelected (const Standard_Boolean theToUpdateVi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : isDetected
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
Standard_Boolean AIS_InteractiveContext::isDetected (const Handle(AIS_InteractiveObject)& theObject)
|
||||||
|
{
|
||||||
|
for (Standard_Integer aDetIter = myDetectedSeq.Lower(); aDetIter <= myDetectedSeq.Upper(); aDetIter++)
|
||||||
|
{
|
||||||
|
Handle(SelectMgr_EntityOwner) aPicked = MainSelector()->Picked(myDetectedSeq(aDetIter));
|
||||||
|
Handle(AIS_InteractiveObject) anObj;
|
||||||
|
if (!aPicked.IsNull())
|
||||||
|
{
|
||||||
|
anObj = Handle(AIS_InteractiveObject)::DownCast(aPicked->Selectable());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!anObj.IsNull()
|
||||||
|
&& anObj == theObject)
|
||||||
|
{
|
||||||
|
return Standard_True;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : SetSelected
|
//function : SetSelected
|
||||||
//purpose : Sets the whole object as selected and highlights it with selection color
|
//purpose : Sets the whole object as selected and highlights it with selection color
|
||||||
@@ -3288,7 +3312,8 @@ void AIS_InteractiveContext::SetSelected (const Handle(AIS_InteractiveObject)& t
|
|||||||
}
|
}
|
||||||
|
|
||||||
// added to avoid untimely viewer update...
|
// added to avoid untimely viewer update...
|
||||||
mySelection->ClearAndSelect (anOwner);
|
const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable());
|
||||||
|
mySelection->ClearAndSelect (anOwner, myFilters, isDetected (anObj));
|
||||||
|
|
||||||
if (myAutoHilight)
|
if (myAutoHilight)
|
||||||
{
|
{
|
||||||
@@ -3350,7 +3375,7 @@ void AIS_InteractiveContext::SetSelected (const Handle(SelectMgr_EntityOwner)& t
|
|||||||
unhighlightSelected();
|
unhighlightSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
mySelection->ClearAndSelect (theOwner);
|
mySelection->ClearAndSelect (theOwner, myFilters, isDetected (anObject));
|
||||||
if (myAutoHilight)
|
if (myAutoHilight)
|
||||||
{
|
{
|
||||||
Handle(Prs3d_Drawer) aCustomStyle;
|
Handle(Prs3d_Drawer) aCustomStyle;
|
||||||
@@ -3406,11 +3431,12 @@ void AIS_InteractiveContext::AddOrRemoveSelected (const Handle(SelectMgr_EntityO
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mySelection->Select (theOwner);
|
AIS_SelectionScheme aSelScheme = theOwner->IsSelected() ? AIS_SelectionScheme_Remove : AIS_SelectionScheme_Add;
|
||||||
|
const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
|
||||||
|
mySelection->Select (theOwner, myFilters, aSelScheme, isDetected (anObj));
|
||||||
|
|
||||||
if (myAutoHilight)
|
if (myAutoHilight)
|
||||||
{
|
{
|
||||||
const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
|
|
||||||
Handle(AIS_GlobalStatus)* aStatusPtr = myObjects.ChangeSeek (anObj);
|
Handle(AIS_GlobalStatus)* aStatusPtr = myObjects.ChangeSeek (anObj);
|
||||||
if (!aStatusPtr)
|
if (!aStatusPtr)
|
||||||
{
|
{
|
||||||
@@ -3469,7 +3495,8 @@ Standard_Boolean AIS_InteractiveContext::SetSelectedState (const Handle(SelectMg
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const AIS_SelectStatus aSelStatus = mySelection->Select (theEntity);
|
const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast(theEntity->Selectable());
|
||||||
|
const AIS_SelectStatus aSelStatus = mySelection->Select (theEntity, myFilters, AIS_SelectionScheme_Remove, isDetected (anObj));
|
||||||
theEntity->SetSelected (false);
|
theEntity->SetSelected (false);
|
||||||
return aSelStatus == AIS_SS_Removed;
|
return aSelStatus == AIS_SS_Removed;
|
||||||
}
|
}
|
||||||
|
@@ -1302,6 +1302,9 @@ protected: //! @name internal methods
|
|||||||
Standard_EXPORT AIS_StatusOfDetection moveTo (const Handle(V3d_View)& theView,
|
Standard_EXPORT AIS_StatusOfDetection moveTo (const Handle(V3d_View)& theView,
|
||||||
const Standard_Boolean theToRedrawOnUpdate);
|
const Standard_Boolean theToRedrawOnUpdate);
|
||||||
|
|
||||||
|
//! Returns True if the object is detected.
|
||||||
|
Standard_EXPORT Standard_Boolean isDetected (const Handle(AIS_InteractiveObject)& theObject);
|
||||||
|
|
||||||
//! Helper function to unhighlight all entity owners currently highlighted with seleciton color.
|
//! Helper function to unhighlight all entity owners currently highlighted with seleciton color.
|
||||||
Standard_EXPORT void unselectOwners (const Handle(AIS_InteractiveObject)& theObject);
|
Standard_EXPORT void unselectOwners (const Handle(AIS_InteractiveObject)& theObject);
|
||||||
|
|
||||||
|
@@ -55,24 +55,38 @@ void AIS_Selection::Clear()
|
|||||||
//function : Select
|
//function : Select
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
AIS_SelectStatus AIS_Selection::Select (const Handle(SelectMgr_EntityOwner)& theObject)
|
AIS_SelectStatus AIS_Selection::Select (const Handle(SelectMgr_EntityOwner)& theOwner,
|
||||||
|
const Handle(SelectMgr_Filter)& theFilter,
|
||||||
|
const AIS_SelectionScheme theSelScheme,
|
||||||
|
const Standard_Boolean theIsDetected)
|
||||||
{
|
{
|
||||||
if (theObject.IsNull()
|
if (theOwner.IsNull()
|
||||||
|| !theObject->HasSelectable())
|
|| !theOwner->HasSelectable())
|
||||||
{
|
{
|
||||||
return AIS_SS_NotDone;
|
return AIS_SS_NotDone;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!myResultMap.IsBound (theObject))
|
const Standard_Boolean isDetected = theIsDetected
|
||||||
|
&& (theFilter.IsNull() || theFilter->IsOk (theOwner));
|
||||||
|
|
||||||
|
const Standard_Boolean wasSelected = theOwner->IsSelected();
|
||||||
|
const Standard_Boolean toSelect = theOwner->Select (theSelScheme, isDetected);
|
||||||
|
|
||||||
|
if (toSelect && !wasSelected)
|
||||||
{
|
{
|
||||||
AIS_NListOfEntityOwner::Iterator aListIter;
|
AIS_NListOfEntityOwner::Iterator aListIter;
|
||||||
myresult.Append (theObject, aListIter);
|
myresult.Append (theOwner, aListIter);
|
||||||
myResultMap.Bind (theObject, aListIter);
|
myResultMap.Bind (theOwner, aListIter);
|
||||||
theObject->SetSelected (Standard_True);
|
theOwner->SetSelected (Standard_True);
|
||||||
return AIS_SS_Added;
|
return AIS_SS_Added;
|
||||||
}
|
}
|
||||||
|
|
||||||
AIS_NListOfEntityOwner::Iterator aListIter = myResultMap.Find (theObject);
|
if (!toSelect && !wasSelected)
|
||||||
|
{
|
||||||
|
return AIS_SS_NotDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
AIS_NListOfEntityOwner::Iterator aListIter = myResultMap.Find (theOwner);
|
||||||
if (myIterator == aListIter)
|
if (myIterator == aListIter)
|
||||||
{
|
{
|
||||||
if (myIterator.More())
|
if (myIterator.More())
|
||||||
@@ -88,14 +102,14 @@ AIS_SelectStatus AIS_Selection::Select (const Handle(SelectMgr_EntityOwner)& the
|
|||||||
// In the mode of advanced mesh selection only one owner is created for all selection modes.
|
// In the mode of advanced mesh selection only one owner is created for all selection modes.
|
||||||
// It is necessary to check the current detected entity
|
// It is necessary to check the current detected entity
|
||||||
// and remove the owner from map only if the detected entity is the same as previous selected (IsForcedHilight call)
|
// and remove the owner from map only if the detected entity is the same as previous selected (IsForcedHilight call)
|
||||||
if (theObject->IsForcedHilight())
|
if (theOwner->IsForcedHilight())
|
||||||
{
|
{
|
||||||
return AIS_SS_Added;
|
return AIS_SS_Added;
|
||||||
}
|
}
|
||||||
|
|
||||||
myresult.Remove (aListIter);
|
myresult.Remove (aListIter);
|
||||||
myResultMap.UnBind (theObject);
|
myResultMap.UnBind (theOwner);
|
||||||
theObject->SetSelected (Standard_False);
|
theOwner->SetSelected (Standard_False);
|
||||||
|
|
||||||
// update list iterator for next object in <myresult> list if any
|
// update list iterator for next object in <myresult> list if any
|
||||||
if (aListIter.More())
|
if (aListIter.More())
|
||||||
@@ -143,22 +157,15 @@ void AIS_Selection::SelectOwners (const AIS_NArray1OfEntityOwner& thePickedOwner
|
|||||||
const Handle(SelectMgr_Filter)& theFilter)
|
const Handle(SelectMgr_Filter)& theFilter)
|
||||||
{
|
{
|
||||||
(void)theToAllowSelOverlap;
|
(void)theToAllowSelOverlap;
|
||||||
switch (theSelScheme)
|
|
||||||
{
|
if (theSelScheme == AIS_SelectionScheme_ReplaceExtra
|
||||||
case AIS_SelectionScheme_UNKNOWN:
|
&& thePickedOwners.Size() == myresult.Size())
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case AIS_SelectionScheme_ReplaceExtra:
|
|
||||||
{
|
|
||||||
// If picked owners is equivalent to the selected then just clear selected
|
|
||||||
// Else go to AIS_SelectionScheme_Replace
|
|
||||||
if (thePickedOwners.Size() == myresult.Size())
|
|
||||||
{
|
{
|
||||||
|
// If picked owners is equivalent to the selected then just clear selected.
|
||||||
Standard_Boolean isTheSame = Standard_True;
|
Standard_Boolean isTheSame = Standard_True;
|
||||||
for (AIS_NArray1OfEntityOwner::Iterator aSelIter (thePickedOwners); aSelIter.More(); aSelIter.Next())
|
for (AIS_NArray1OfEntityOwner::Iterator aPickedIter (thePickedOwners); aPickedIter.More(); aPickedIter.Next())
|
||||||
{
|
{
|
||||||
if (!myResultMap.IsBound (aSelIter.Value()))
|
if (!myResultMap.IsBound (aPickedIter.Value()))
|
||||||
{
|
{
|
||||||
isTheSame = Standard_False;
|
isTheSame = Standard_False;
|
||||||
break;
|
break;
|
||||||
@@ -170,58 +177,18 @@ void AIS_Selection::SelectOwners (const AIS_NArray1OfEntityOwner& thePickedOwner
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Standard_FALLTHROUGH
|
if (theSelScheme == AIS_SelectionScheme_Replace
|
||||||
case AIS_SelectionScheme_Replace:
|
|| theSelScheme == AIS_SelectionScheme_ReplaceExtra
|
||||||
|
|| theSelScheme == AIS_SelectionScheme_Clear)
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
for (AIS_NArray1OfEntityOwner::Iterator aSelIter (thePickedOwners); aSelIter.More(); aSelIter.Next())
|
|
||||||
{
|
|
||||||
appendOwner (aSelIter.Value(), theFilter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
for (AIS_NArray1OfEntityOwner::Iterator aPickedIter (thePickedOwners); aPickedIter.More(); aPickedIter.Next())
|
||||||
}
|
|
||||||
case AIS_SelectionScheme_Add:
|
|
||||||
{
|
{
|
||||||
for (AIS_NArray1OfEntityOwner::Iterator aSelIter (thePickedOwners); aSelIter.More(); aSelIter.Next())
|
const Handle(SelectMgr_EntityOwner)& anOwner = aPickedIter.Value();
|
||||||
{
|
Select (anOwner, theFilter, theSelScheme, true);
|
||||||
appendOwner (aSelIter.Value(), theFilter);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case AIS_SelectionScheme_Remove:
|
|
||||||
{
|
|
||||||
for (AIS_NArray1OfEntityOwner::Iterator aSelIter (thePickedOwners); aSelIter.More(); aSelIter.Next())
|
|
||||||
{
|
|
||||||
if (myResultMap.IsBound (aSelIter.Value()))
|
|
||||||
{
|
|
||||||
Select (aSelIter.Value());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case AIS_SelectionScheme_XOR:
|
|
||||||
{
|
|
||||||
for (AIS_NArray1OfEntityOwner::Iterator aSelIter (thePickedOwners); aSelIter.More(); aSelIter.Next())
|
|
||||||
{
|
|
||||||
const Handle(SelectMgr_EntityOwner)& anOwner = aSelIter.Value();
|
|
||||||
if (anOwner.IsNull()
|
|
||||||
|| !anOwner->HasSelectable()
|
|
||||||
|| !theFilter->IsOk (anOwner))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Select (anOwner);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case AIS_SelectionScheme_Clear:
|
|
||||||
{
|
|
||||||
Clear();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -40,17 +40,30 @@ public:
|
|||||||
|
|
||||||
//! if the object is not yet in the selection, it will be added.
|
//! if the object is not yet in the selection, it will be added.
|
||||||
//! if the object is already in the selection, it will be removed.
|
//! if the object is already in the selection, it will be removed.
|
||||||
Standard_EXPORT virtual AIS_SelectStatus Select (const Handle(SelectMgr_EntityOwner)& theObject);
|
//! @param[in] theOwner element to change selection state
|
||||||
|
//! @param[in] theFilter context filter
|
||||||
|
//! @param[in] theSelScheme selection scheme
|
||||||
|
//! @param[in] theIsDetected flag of object detection
|
||||||
|
//! @return result of selection
|
||||||
|
Standard_EXPORT virtual AIS_SelectStatus Select (const Handle(SelectMgr_EntityOwner)& theOwner,
|
||||||
|
const Handle(SelectMgr_Filter)& theFilter,
|
||||||
|
const AIS_SelectionScheme theSelScheme,
|
||||||
|
const Standard_Boolean theIsDetected);
|
||||||
|
|
||||||
//! the object is always add int the selection.
|
//! the object is always add int the selection.
|
||||||
//! faster when the number of objects selected is great.
|
//! faster when the number of objects selected is great.
|
||||||
Standard_EXPORT virtual AIS_SelectStatus AddSelect (const Handle(SelectMgr_EntityOwner)& theObject);
|
Standard_EXPORT virtual AIS_SelectStatus AddSelect (const Handle(SelectMgr_EntityOwner)& theObject);
|
||||||
|
|
||||||
//! clears the selection and adds the object in the selection.
|
//! clears the selection and adds the object in the selection.
|
||||||
virtual void ClearAndSelect (const Handle(SelectMgr_EntityOwner)& theObject)
|
//! @param[in] theObject element to change selection state
|
||||||
|
//! @param[in] theFilter context filter
|
||||||
|
//! @param[in] theIsDetected flag of object detection
|
||||||
|
virtual void ClearAndSelect (const Handle(SelectMgr_EntityOwner)& theObject,
|
||||||
|
const Handle(SelectMgr_Filter)& theFilter,
|
||||||
|
const Standard_Boolean theIsDetected)
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
Select (theObject);
|
Select (theObject, theFilter, AIS_SelectionScheme_Add, theIsDetected);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! checks if the object is in the selection.
|
//! checks if the object is in the selection.
|
||||||
|
@@ -62,6 +62,7 @@
|
|||||||
#include <IntTools_SequenceOfCurves.hxx>
|
#include <IntTools_SequenceOfCurves.hxx>
|
||||||
#include <IntTools_SequenceOfPntOn2Faces.hxx>
|
#include <IntTools_SequenceOfPntOn2Faces.hxx>
|
||||||
#include <IntTools_Tools.hxx>
|
#include <IntTools_Tools.hxx>
|
||||||
|
#include <NCollection_IncAllocator.hxx>
|
||||||
#include <NCollection_Vector.hxx>
|
#include <NCollection_Vector.hxx>
|
||||||
#include <Precision.hxx>
|
#include <Precision.hxx>
|
||||||
#include <TColStd_ListOfInteger.hxx>
|
#include <TColStd_ListOfInteger.hxx>
|
||||||
@@ -578,14 +579,12 @@ void BOPAlgo_PaveFiller::MakeBlocks(const Message_ProgressRange& theRange)
|
|||||||
Standard_Integer i, nF1, nF2, aNbC, aNbP, j;
|
Standard_Integer i, nF1, nF2, aNbC, aNbP, j;
|
||||||
Standard_Integer nV1, nV2;
|
Standard_Integer nV1, nV2;
|
||||||
Standard_Real aT1, aT2;
|
Standard_Real aT1, aT2;
|
||||||
Handle(NCollection_BaseAllocator) aAllocator;
|
Handle(NCollection_BaseAllocator) aAllocator = new NCollection_IncAllocator;
|
||||||
BOPDS_ListIteratorOfListOfPaveBlock aItLPB;
|
BOPDS_ListIteratorOfListOfPaveBlock aItLPB;
|
||||||
TopoDS_Edge aES;
|
TopoDS_Edge aES;
|
||||||
Handle(BOPDS_PaveBlock) aPBOut;
|
Handle(BOPDS_PaveBlock) aPBOut;
|
||||||
//
|
//
|
||||||
//-----------------------------------------------------scope f
|
//-----------------------------------------------------scope f
|
||||||
aAllocator=
|
|
||||||
NCollection_BaseAllocator::CommonBaseAllocator();
|
|
||||||
//
|
//
|
||||||
TColStd_ListOfInteger aLSE(aAllocator), aLBV(aAllocator);
|
TColStd_ListOfInteger aLSE(aAllocator), aLBV(aAllocator);
|
||||||
TColStd_MapOfInteger aMVOnIn(100, aAllocator), aMVCommon(100, aAllocator),
|
TColStd_MapOfInteger aMVOnIn(100, aAllocator), aMVCommon(100, aAllocator),
|
||||||
|
@@ -34,6 +34,8 @@ public:
|
|||||||
|
|
||||||
DEFINE_STANDARD_ALLOC
|
DEFINE_STANDARD_ALLOC
|
||||||
|
|
||||||
|
//! Returns a shape built by the shape construction algorithm.
|
||||||
|
//! Does not check if the shape is built.
|
||||||
Standard_EXPORT virtual const TopoDS_Shape& Shape() Standard_OVERRIDE;
|
Standard_EXPORT virtual const TopoDS_Shape& Shape() Standard_OVERRIDE;
|
||||||
|
|
||||||
// Provide access to methods of protected base class BOPAlgo_Options
|
// Provide access to methods of protected base class BOPAlgo_Options
|
||||||
|
@@ -322,7 +322,8 @@ Standard_Boolean IGESCAFControl_Reader::Transfer (const Handle(TDocStd_Document)
|
|||||||
|
|
||||||
//Checks that current entity is a subfigure
|
//Checks that current entity is a subfigure
|
||||||
Handle(IGESBasic_SubfigureDef) aSubfigure = Handle(IGESBasic_SubfigureDef)::DownCast (ent);
|
Handle(IGESBasic_SubfigureDef) aSubfigure = Handle(IGESBasic_SubfigureDef)::DownCast (ent);
|
||||||
if (GetNameMode() && !aSubfigure.IsNull() && STool->Search (S, L, Standard_True, Standard_True))
|
if (GetNameMode() && !aSubfigure.IsNull() && !aSubfigure->Name().IsNull() &&
|
||||||
|
STool->Search(S, L, Standard_True, Standard_True))
|
||||||
{
|
{
|
||||||
//In this case we attach subfigure name to the label, instead of default "COMPOUND"
|
//In this case we attach subfigure name to the label, instead of default "COMPOUND"
|
||||||
Handle(TCollection_HAsciiString) aName = aSubfigure->Name();
|
Handle(TCollection_HAsciiString) aName = aSubfigure->Name();
|
||||||
|
@@ -23,6 +23,7 @@
|
|||||||
#include <Interface_Macros.hxx>
|
#include <Interface_Macros.hxx>
|
||||||
#include <Interface_Static.hxx>
|
#include <Interface_Static.hxx>
|
||||||
#include <Message_Msg.hxx>
|
#include <Message_Msg.hxx>
|
||||||
|
#include <ShapeBuild_ReShape.hxx>
|
||||||
#include <Standard_Transient.hxx>
|
#include <Standard_Transient.hxx>
|
||||||
#include <Standard_Type.hxx>
|
#include <Standard_Type.hxx>
|
||||||
#include <TCollection_HAsciiString.hxx>
|
#include <TCollection_HAsciiString.hxx>
|
||||||
@@ -47,6 +48,7 @@ void IGESData_VerifyDate
|
|||||||
IGESData_IGESModel::IGESData_IGESModel ()
|
IGESData_IGESModel::IGESData_IGESModel ()
|
||||||
{
|
{
|
||||||
thestart = new TColStd_HSequenceOfHAsciiString();
|
thestart = new TColStd_HSequenceOfHAsciiString();
|
||||||
|
myReShape = new ShapeBuild_ReShape();
|
||||||
// thecheckstx = new Interface_Check;
|
// thecheckstx = new Interface_Check;
|
||||||
// thechecksem = new Interface_Check;
|
// thechecksem = new Interface_Check;
|
||||||
}
|
}
|
||||||
@@ -62,6 +64,7 @@ void IGESData_IGESModel::ClearHeader ()
|
|||||||
IGESData_GlobalSection newheader; // Un peu brutal, certes
|
IGESData_GlobalSection newheader; // Un peu brutal, certes
|
||||||
theheader = newheader;
|
theheader = newheader;
|
||||||
thestart = new TColStd_HSequenceOfHAsciiString();
|
thestart = new TColStd_HSequenceOfHAsciiString();
|
||||||
|
myReShape = new ShapeBuild_ReShape();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -22,10 +22,10 @@
|
|||||||
|
|
||||||
class IGESData_IGESEntity;
|
class IGESData_IGESEntity;
|
||||||
class Interface_Check;
|
class Interface_Check;
|
||||||
|
class ShapeBuild_ReShape;
|
||||||
class Standard_Transient;
|
class Standard_Transient;
|
||||||
class TCollection_HAsciiString;
|
class TCollection_HAsciiString;
|
||||||
|
|
||||||
|
|
||||||
class IGESData_IGESModel;
|
class IGESData_IGESModel;
|
||||||
DEFINE_STANDARD_HANDLE(IGESData_IGESModel, Interface_InterfaceModel)
|
DEFINE_STANDARD_HANDLE(IGESData_IGESModel, Interface_InterfaceModel)
|
||||||
|
|
||||||
@@ -151,8 +151,11 @@ public:
|
|||||||
//! i.e. a string "Dnn" with nn = directory entry number (2*N-1)
|
//! i.e. a string "Dnn" with nn = directory entry number (2*N-1)
|
||||||
Standard_EXPORT Handle(TCollection_HAsciiString) StringLabel (const Handle(Standard_Transient)& ent) const Standard_OVERRIDE;
|
Standard_EXPORT Handle(TCollection_HAsciiString) StringLabel (const Handle(Standard_Transient)& ent) const Standard_OVERRIDE;
|
||||||
|
|
||||||
|
//! Gets ReShape used to store a model's shapes changes
|
||||||
|
const Handle(ShapeBuild_ReShape)& ReShape() const { return myReShape; }
|
||||||
|
|
||||||
|
//! Sets ReShape used to store a history of changes of the model's shapes
|
||||||
|
void SetReShape(const Handle(ShapeBuild_ReShape)& theReShape) { myReShape = theReShape; }
|
||||||
|
|
||||||
DEFINE_STANDARD_RTTIEXT(IGESData_IGESModel,Interface_InterfaceModel)
|
DEFINE_STANDARD_RTTIEXT(IGESData_IGESModel,Interface_InterfaceModel)
|
||||||
|
|
||||||
@@ -166,7 +169,7 @@ private:
|
|||||||
|
|
||||||
Handle(TColStd_HSequenceOfHAsciiString) thestart;
|
Handle(TColStd_HSequenceOfHAsciiString) thestart;
|
||||||
IGESData_GlobalSection theheader;
|
IGESData_GlobalSection theheader;
|
||||||
|
Handle(ShapeBuild_ReShape) myReShape;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -635,32 +635,53 @@ Standard_Boolean IGESData_ParamReader::ReadXYZ
|
|||||||
//function : ReadText
|
//function : ReadText
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
Standard_Boolean IGESData_ParamReader::ReadText(const IGESData_ParamCursor& thePC,
|
||||||
Standard_Boolean IGESData_ParamReader::ReadText
|
const Message_Msg& theMsg,
|
||||||
(const IGESData_ParamCursor& PC, const Message_Msg& amsg,
|
Handle(TCollection_HAsciiString)& theVal)
|
||||||
Handle(TCollection_HAsciiString)& val)
|
{
|
||||||
|
if (!PrepareRead(thePC, Standard_False))
|
||||||
|
{
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
const Interface_FileParameter& aFP = theparams->Value(theindex + thebase);
|
||||||
|
if (aFP.ParamType() != Interface_ParamText)
|
||||||
|
{
|
||||||
|
theVal = new TCollection_HAsciiString("");
|
||||||
|
if (aFP.ParamType() == Interface_ParamVoid)
|
||||||
{
|
{
|
||||||
if (!PrepareRead(PC,Standard_False)) return Standard_False;
|
|
||||||
const Interface_FileParameter& FP = theparams->Value(theindex+thebase);
|
|
||||||
if (FP.ParamType() != Interface_ParamText) {
|
|
||||||
if (FP.ParamType() == Interface_ParamVoid) {
|
|
||||||
val = new TCollection_HAsciiString("");
|
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
SendFail (amsg);
|
SendFail(theMsg);
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
Handle(TCollection_HAsciiString) tval = new TCollection_HAsciiString (FP.CValue());
|
const Handle(TCollection_HAsciiString) aBaseValue = new TCollection_HAsciiString(aFP.CValue());
|
||||||
Standard_Integer lnt = tval->Length();
|
const Standard_Integer aBaseLength = aBaseValue->Length();
|
||||||
Standard_Integer lnh = tval->Location(1,'H',1,lnt);
|
const Standard_Integer aSymbolLocation = aBaseValue->Location(1, 'H', 1, aBaseLength);
|
||||||
if (lnh <= 1 || lnh >= lnt) {
|
if (aSymbolLocation <= 1 || aSymbolLocation > aBaseLength)
|
||||||
SendFail (amsg);
|
{
|
||||||
|
theVal = new TCollection_HAsciiString("");
|
||||||
|
SendFail(theMsg);
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
} else {
|
|
||||||
Standard_Integer hol = atoi (tval->SubString(1,lnh-1)->ToCString());
|
|
||||||
if (hol != (lnt-lnh)) SendWarning (amsg);
|
|
||||||
}
|
}
|
||||||
val = new TCollection_HAsciiString(tval->SubString(lnh+1,lnt)->ToCString());
|
const TCollection_AsciiString aSpecialSubString = aBaseValue->String().SubString(1, aSymbolLocation - 1);
|
||||||
|
if (!aSpecialSubString.IsIntegerValue())
|
||||||
|
{
|
||||||
|
theVal = new TCollection_HAsciiString("");
|
||||||
|
SendFail(theMsg);
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
Standard_Integer aResLength = aSpecialSubString.IntegerValue();
|
||||||
|
if (aResLength != (aBaseLength - aSymbolLocation))
|
||||||
|
{
|
||||||
|
SendWarning(theMsg);
|
||||||
|
aResLength = aBaseLength - aSymbolLocation;
|
||||||
|
}
|
||||||
|
TCollection_AsciiString aResString;
|
||||||
|
if (aResLength > 0)
|
||||||
|
{
|
||||||
|
aResString = aBaseValue->String().SubString(aSymbolLocation + 1, aBaseLength);
|
||||||
|
}
|
||||||
|
theVal = new TCollection_HAsciiString(aResString);
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -200,7 +200,7 @@ public:
|
|||||||
//! For Message
|
//! For Message
|
||||||
Standard_EXPORT Standard_Boolean ReadXYZ (const IGESData_ParamCursor& PC, const Standard_CString mess, gp_XYZ& val);
|
Standard_EXPORT Standard_Boolean ReadXYZ (const IGESData_ParamCursor& PC, const Standard_CString mess, gp_XYZ& val);
|
||||||
|
|
||||||
Standard_EXPORT Standard_Boolean ReadText (const IGESData_ParamCursor& PC, const Message_Msg& amsg, Handle(TCollection_HAsciiString)& val);
|
Standard_EXPORT Standard_Boolean ReadText (const IGESData_ParamCursor& thePC, const Message_Msg& theMsg, Handle(TCollection_HAsciiString)& theVal);
|
||||||
|
|
||||||
//! Reads a Text value from parameter "num", as a String from
|
//! Reads a Text value from parameter "num", as a String from
|
||||||
//! Collection, that is, Hollerith text without leading "nnnH"
|
//! Collection, that is, Hollerith text without leading "nnnH"
|
||||||
|
@@ -131,8 +131,6 @@ static void TrimTolerances (const TopoDS_Shape& shape,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Transfer
|
//function : Transfer
|
||||||
//purpose :
|
//purpose :
|
||||||
@@ -198,7 +196,8 @@ Handle(Transfer_Binder) IGESToBRep_Actor::Transfer
|
|||||||
Handle(Standard_Transient) info;
|
Handle(Standard_Transient) info;
|
||||||
shape = XSAlgo::AlgoContainer()->ProcessShape(shape, theeps, CAS.GetMaxTol(),
|
shape = XSAlgo::AlgoContainer()->ProcessShape(shape, theeps, CAS.GetMaxTol(),
|
||||||
"read.iges.resource.name",
|
"read.iges.resource.name",
|
||||||
"read.iges.sequence", info,
|
"read.iges.sequence",
|
||||||
|
info, mymodel->ReShape(),
|
||||||
aPS.Next());
|
aPS.Next());
|
||||||
XSAlgo::AlgoContainer()->MergeTransferInfo(TP, info, nbTPitems);
|
XSAlgo::AlgoContainer()->MergeTransferInfo(TP, info, nbTPitems);
|
||||||
}
|
}
|
||||||
|
@@ -648,8 +648,8 @@ void IntTools_EdgeEdge::MergeSolutions(const IntTools_SequenceOfRanges& theRange
|
|||||||
//
|
//
|
||||||
myRange1.Range(aT11, aT12);
|
myRange1.Range(aT11, aT12);
|
||||||
myRange2.Range(aT21, aT22);
|
myRange2.Range(aT21, aT22);
|
||||||
dTR1 = 20*aRes1;
|
dTR1 = 5*aRes1;
|
||||||
dTR2 = 20*aRes2;
|
dTR2 = 5*aRes2;
|
||||||
aType = TopAbs_VERTEX;
|
aType = TopAbs_VERTEX;
|
||||||
//
|
//
|
||||||
for (i = 1; i <= aNbCP;) {
|
for (i = 1; i <= aNbCP;) {
|
||||||
|
@@ -225,6 +225,14 @@ static Resource_KindOfLine WhatKindOfLine(OSD_File& aFile,
|
|||||||
aToken2.Clear();
|
aToken2.Clear();
|
||||||
else {
|
else {
|
||||||
Line.Remove(1,Pos-1);
|
Line.Remove(1,Pos-1);
|
||||||
|
const Standard_Integer aLineLength = Line.Length();
|
||||||
|
if (aLineLength >= 2)
|
||||||
|
{
|
||||||
|
if (Line.Value(aLineLength - 1) == '\r')
|
||||||
|
{
|
||||||
|
Line.Remove(aLineLength - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
Line.Remove(Line.Length());
|
Line.Remove(Line.Length());
|
||||||
aToken2 = Line;
|
aToken2 = Line;
|
||||||
}
|
}
|
||||||
|
@@ -4692,9 +4692,16 @@ void collectRepresentationItems(const Interface_Graph& theGraph,
|
|||||||
const Handle(StepShape_ShapeRepresentation)& theRepresentation,
|
const Handle(StepShape_ShapeRepresentation)& theRepresentation,
|
||||||
NCollection_Sequence<Handle(StepRepr_RepresentationItem)>& theItems)
|
NCollection_Sequence<Handle(StepRepr_RepresentationItem)>& theItems)
|
||||||
{
|
{
|
||||||
Handle(StepRepr_HArray1OfRepresentationItem) aReprItems = theRepresentation->Items();
|
for (StepRepr_HArray1OfRepresentationItem::Iterator anIter(theRepresentation->Items()->Array1());
|
||||||
for (Standard_Integer itemIt = aReprItems->Lower(); itemIt <= aReprItems->Upper(); itemIt++)
|
anIter.More(); anIter.Next())
|
||||||
theItems.Append(aReprItems->Value(itemIt));
|
{
|
||||||
|
const Handle(StepRepr_RepresentationItem)& anReprItem = anIter.Value();
|
||||||
|
if (anReprItem.IsNull())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
theItems.Append(anReprItem);
|
||||||
|
}
|
||||||
|
|
||||||
Interface_EntityIterator entIt = theGraph.TypedSharings(theRepresentation, STANDARD_TYPE(StepRepr_RepresentationRelationship));
|
Interface_EntityIterator entIt = theGraph.TypedSharings(theRepresentation, STANDARD_TYPE(StepRepr_RepresentationRelationship));
|
||||||
for (entIt.Start(); entIt.More(); entIt.Next())
|
for (entIt.Start(); entIt.More(); entIt.Next())
|
||||||
|
@@ -47,7 +47,9 @@ class TopoDS_Shape;
|
|||||||
//! Also supports multifile writing
|
//! Also supports multifile writing
|
||||||
class STEPCAFControl_Writer
|
class STEPCAFControl_Writer
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
DEFINE_STANDARD_ALLOC
|
DEFINE_STANDARD_ALLOC
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Creates a writer with an empty
|
//! Creates a writer with an empty
|
||||||
|
@@ -83,6 +83,51 @@ void SelectMgr_EntityOwner::HilightWithColor (const Handle(PrsMgr_PresentationMa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =======================================================================
|
||||||
|
// function : Select
|
||||||
|
// purpose :
|
||||||
|
// =======================================================================
|
||||||
|
Standard_Boolean SelectMgr_EntityOwner::Select (const AIS_SelectionScheme theSelScheme,
|
||||||
|
const Standard_Boolean theIsDetected) const
|
||||||
|
{
|
||||||
|
switch (theSelScheme)
|
||||||
|
{
|
||||||
|
case AIS_SelectionScheme_UNKNOWN:
|
||||||
|
{
|
||||||
|
return myIsSelected;
|
||||||
|
}
|
||||||
|
case AIS_SelectionScheme_Replace:
|
||||||
|
{
|
||||||
|
return theIsDetected;
|
||||||
|
}
|
||||||
|
case AIS_SelectionScheme_Add:
|
||||||
|
{
|
||||||
|
return !myIsSelected || theIsDetected || IsForcedHilight();
|
||||||
|
}
|
||||||
|
case AIS_SelectionScheme_Remove:
|
||||||
|
{
|
||||||
|
return myIsSelected && !theIsDetected;
|
||||||
|
}
|
||||||
|
case AIS_SelectionScheme_XOR:
|
||||||
|
{
|
||||||
|
if (theIsDetected)
|
||||||
|
{
|
||||||
|
return !myIsSelected && !IsForcedHilight();
|
||||||
|
}
|
||||||
|
return myIsSelected;
|
||||||
|
}
|
||||||
|
case AIS_SelectionScheme_Clear:
|
||||||
|
{
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
case AIS_SelectionScheme_ReplaceExtra:
|
||||||
|
{
|
||||||
|
return theIsDetected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : DumpJson
|
// function : DumpJson
|
||||||
// purpose :
|
// purpose :
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#ifndef _SelectMgr_EntityOwner_HeaderFile
|
#ifndef _SelectMgr_EntityOwner_HeaderFile
|
||||||
#define _SelectMgr_EntityOwner_HeaderFile
|
#define _SelectMgr_EntityOwner_HeaderFile
|
||||||
|
|
||||||
|
#include <AIS_SelectionScheme.hxx>
|
||||||
#include <Aspect_VKey.hxx>
|
#include <Aspect_VKey.hxx>
|
||||||
#include <PrsMgr_PresentationManager.hxx>
|
#include <PrsMgr_PresentationManager.hxx>
|
||||||
#include <SelectMgr_SelectableObject.hxx>
|
#include <SelectMgr_SelectableObject.hxx>
|
||||||
@@ -139,6 +140,12 @@ public:
|
|||||||
//! @param theIsSelected [in] shows if owner is selected.
|
//! @param theIsSelected [in] shows if owner is selected.
|
||||||
void SetSelected (const Standard_Boolean theIsSelected) { myIsSelected = theIsSelected; }
|
void SetSelected (const Standard_Boolean theIsSelected) { myIsSelected = theIsSelected; }
|
||||||
|
|
||||||
|
//! If the object needs to be selected, it returns true.
|
||||||
|
//! @param[in] theSelScheme selection scheme
|
||||||
|
//! @param[in] theIsDetected flag of object detection
|
||||||
|
Standard_EXPORT Standard_Boolean Select (const AIS_SelectionScheme theSelScheme,
|
||||||
|
const Standard_Boolean theIsDetected) const;
|
||||||
|
|
||||||
//! Returns selection state.
|
//! Returns selection state.
|
||||||
Standard_DEPRECATED ("Deprecated method - IsSelected() should be used instead")
|
Standard_DEPRECATED ("Deprecated method - IsSelected() should be used instead")
|
||||||
Standard_Integer State() const { return myIsSelected ? 1 : 0; }
|
Standard_Integer State() const { return myIsSelected ? 1 : 0; }
|
||||||
|
@@ -112,14 +112,16 @@ Standard_Boolean ShapeFix_Shape::Perform(const Message_ProgressRange& theProgres
|
|||||||
TopLoc_Location nullLoc,L;
|
TopLoc_Location nullLoc,L;
|
||||||
L = myShape.Location();
|
L = myShape.Location();
|
||||||
TopoDS_Shape aShapeNullLoc = myShape;
|
TopoDS_Shape aShapeNullLoc = myShape;
|
||||||
|
const Standard_Boolean aIsRecorded = Context()->IsNewShape(myShape);
|
||||||
aShapeNullLoc.Location(nullLoc);
|
aShapeNullLoc.Location(nullLoc);
|
||||||
if(myMapFixingShape.Contains(aShapeNullLoc)) {
|
if(aIsRecorded || myMapFixingShape.Contains(aShapeNullLoc))
|
||||||
|
{
|
||||||
myShape.Location(L, Standard_False);
|
myShape.Location(L, Standard_False);
|
||||||
myResult = Context()->Apply(myShape);
|
myResult = Context()->Apply(myShape);
|
||||||
status = Standard_True;
|
status = Standard_True;
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
else myMapFixingShape.Add(aShapeNullLoc);
|
myMapFixingShape.Add(aShapeNullLoc);
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
myShape.Location(L, Standard_False);
|
myShape.Location(L, Standard_False);
|
||||||
TopoDS_Shape S = Context()->Apply(myShape);
|
TopoDS_Shape S = Context()->Apply(myShape);
|
||||||
|
@@ -84,99 +84,127 @@ void XSAlgo_AlgoContainer::PrepareForTransfer() const
|
|||||||
//function : ProcessShape
|
//function : ProcessShape
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
TopoDS_Shape XSAlgo_AlgoContainer::ProcessShape(const TopoDS_Shape& theShape,
|
||||||
TopoDS_Shape XSAlgo_AlgoContainer::ProcessShape (const TopoDS_Shape& shape,
|
const Standard_Real thePrec,
|
||||||
const Standard_Real Prec,
|
const Standard_Real theMaxTol,
|
||||||
const Standard_Real maxTol,
|
const Standard_CString thePrscfile,
|
||||||
const Standard_CString prscfile,
|
const Standard_CString thePseq,
|
||||||
const Standard_CString pseq,
|
Handle(Standard_Transient)& theInfo,
|
||||||
Handle(Standard_Transient)& info,
|
const Handle(ShapeBuild_ReShape)& theReShape,
|
||||||
const Message_ProgressRange& theProgress,
|
const Message_ProgressRange& theProgress,
|
||||||
const Standard_Boolean NonManifold) const
|
const Standard_Boolean theNonManifold) const
|
||||||
{
|
{
|
||||||
if ( shape.IsNull() ) return shape;
|
if (theShape.IsNull())
|
||||||
|
{
|
||||||
|
return theShape;
|
||||||
|
}
|
||||||
|
|
||||||
Handle(ShapeProcess_ShapeContext) context = Handle(ShapeProcess_ShapeContext)::DownCast(info);
|
Handle(ShapeProcess_ShapeContext) aContext = Handle(ShapeProcess_ShapeContext)::DownCast(theInfo);
|
||||||
if ( context.IsNull() )
|
if (aContext.IsNull())
|
||||||
{
|
{
|
||||||
Standard_CString rscfile = Interface_Static::CVal(prscfile);
|
Standard_CString aRscfile = Interface_Static::CVal(thePrscfile);
|
||||||
if (rscfile != nullptr && strlen (rscfile) == 0)
|
if (aRscfile != nullptr && strlen(aRscfile) == 0)
|
||||||
{
|
{
|
||||||
context = new ShapeProcess_ShapeContext(shape, nullptr);
|
aContext = new ShapeProcess_ShapeContext(theShape, nullptr);
|
||||||
Interface_Static::FillMap(context->ResourceManager()->GetMap());
|
Interface_Static::FillMap(aContext->ResourceManager()->GetMap());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!rscfile)
|
if (!aRscfile)
|
||||||
rscfile = prscfile;
|
aRscfile = thePrscfile;
|
||||||
context = new ShapeProcess_ShapeContext(shape, rscfile);
|
aContext = new ShapeProcess_ShapeContext(theShape, aRscfile);
|
||||||
}
|
}
|
||||||
context->SetDetalisation(TopAbs_EDGE);
|
aContext->SetDetalisation(TopAbs_EDGE);
|
||||||
}
|
}
|
||||||
context->SetNonManifold(NonManifold);
|
aContext->SetNonManifold(theNonManifold);
|
||||||
info = context;
|
theInfo = aContext;
|
||||||
|
|
||||||
Standard_CString seq = Interface_Static::CVal ( pseq );
|
Standard_CString aSeq = Interface_Static::CVal(thePseq);
|
||||||
if ( ! seq ) seq = pseq;
|
if (!aSeq) aSeq = thePseq;
|
||||||
|
|
||||||
// if resource file is not loaded or does not define <seq>.exec.op,
|
// if resource file is not loaded or does not define <seq>.exec.op,
|
||||||
// do default fixes
|
// do default fixes
|
||||||
Handle(Resource_Manager) rsc = context->ResourceManager();
|
Handle(Resource_Manager) aRsc = aContext->ResourceManager();
|
||||||
TCollection_AsciiString str ( seq );
|
TCollection_AsciiString aStr(aSeq);
|
||||||
str += ".exec.op";
|
aStr += ".exec.op";
|
||||||
if ( ! rsc->Find ( str.ToCString() ) ) {
|
if (!aRsc->Find(aStr.ToCString()))
|
||||||
|
{
|
||||||
#ifdef OCCT_DEBUG
|
#ifdef OCCT_DEBUG
|
||||||
{
|
{
|
||||||
static Standard_Integer time = 0;
|
static Standard_Integer aTime = 0;
|
||||||
if ( ! time )
|
if (!aTime)
|
||||||
std::cout << "Warning: XSAlgo_AlgoContainer::ProcessShape(): Sequence " << str.ToCString() <<
|
std::cout << "Warning: XSAlgo_AlgoContainer::ProcessShape(): Sequence " << aStr.ToCString() <<
|
||||||
" is not defined in " << prscfile << " resource; do default processing" << std::endl;
|
" is not defined in " << thePrscfile << " resource; do default processing" << std::endl;
|
||||||
time++;
|
aTime++;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// if reading, do default ShapeFix
|
// if reading, do default ShapeFix
|
||||||
if ( ! strncmp ( pseq, "read.", 5 ) ) {
|
if (!strncmp(thePseq, "read.", 5))
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
OCC_CATCH_SIGNALS
|
OCC_CATCH_SIGNALS
|
||||||
Handle(ShapeExtend_MsgRegistrator) msg = new ShapeExtend_MsgRegistrator;
|
Handle(ShapeExtend_MsgRegistrator) aMsg = new ShapeExtend_MsgRegistrator;
|
||||||
Handle(ShapeFix_Shape) sfs = ShapeAlgo::AlgoContainer()->ToolContainer()->FixShape();
|
Handle(ShapeFix_Shape) aSfs = ShapeAlgo::AlgoContainer()->ToolContainer()->FixShape();
|
||||||
sfs->Init ( shape );
|
aSfs->Init(theShape);
|
||||||
sfs->SetMsgRegistrator ( msg );
|
aSfs->SetMsgRegistrator(aMsg);
|
||||||
sfs->SetPrecision ( Prec );
|
aSfs->SetPrecision(thePrec);
|
||||||
sfs->SetMaxTolerance ( maxTol );
|
aSfs->SetMaxTolerance(theMaxTol);
|
||||||
sfs->FixFaceTool()->FixWireTool()->FixSameParameterMode() = Standard_False;
|
aSfs->FixFaceTool()->FixWireTool()->FixSameParameterMode() = Standard_False;
|
||||||
sfs->FixSolidTool()->CreateOpenSolidMode() = Standard_False;
|
aSfs->FixSolidTool()->CreateOpenSolidMode() = Standard_False;
|
||||||
sfs->Perform(theProgress);
|
aSfs->SetContext(theReShape);
|
||||||
|
aSfs->Perform(theProgress);
|
||||||
|
|
||||||
TopoDS_Shape S = sfs->Shape();
|
TopoDS_Shape aShape = aSfs->Shape();
|
||||||
if ( ! S.IsNull() && S != shape ) {
|
if (!aShape.IsNull() && aShape != theShape)
|
||||||
context->RecordModification ( sfs->Context(), msg );
|
{
|
||||||
context->SetResult ( S );
|
aContext->RecordModification(aSfs->Context(), aMsg);
|
||||||
|
aContext->SetResult(aShape);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Standard_Failure const& anException) {
|
catch (Standard_Failure const& anException)
|
||||||
|
{
|
||||||
#ifdef OCCT_DEBUG
|
#ifdef OCCT_DEBUG
|
||||||
std::cout << "Error: XSAlgo_AlgoContainer::ProcessShape(): Exception in ShapeFix::Shape" << std::endl;
|
std::cout << "Error: XSAlgo_AlgoContainer::ProcessShape(): Exception in ShapeFix::Shape" << std::endl;
|
||||||
anException.Print(std::cout); std::cout << std::endl;
|
anException.Print(std::cout); std::cout << std::endl;
|
||||||
#endif
|
#endif
|
||||||
(void)anException;
|
(void)anException;
|
||||||
}
|
}
|
||||||
return context->Result();
|
return aContext->Result();
|
||||||
}
|
}
|
||||||
// for writing, define default sequence of DirectFaces
|
// for writing, define default sequence of DirectFaces
|
||||||
else if ( ! strncmp ( pseq, "write.", 6 ) ) {
|
else if (!strncmp(thePseq, "write.", 6))
|
||||||
rsc->SetResource ( str.ToCString(), "DirectFaces" );
|
{
|
||||||
|
aRsc->SetResource(aStr.ToCString(), "DirectFaces");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define runtime tolerances and do Shape Processing
|
// Define runtime tolerances and do Shape Processing
|
||||||
rsc->SetResource ( "Runtime.Tolerance", Prec );
|
aRsc->SetResource("Runtime.Tolerance", thePrec);
|
||||||
rsc->SetResource ( "Runtime.MaxTolerance", maxTol );
|
aRsc->SetResource("Runtime.MaxTolerance", theMaxTol);
|
||||||
|
|
||||||
if ( !ShapeProcess::Perform(context, seq, theProgress) )
|
if (!ShapeProcess::Perform(aContext, aSeq, theProgress))
|
||||||
return shape; // return original shape
|
return theShape; // return original shape
|
||||||
|
|
||||||
return context->Result();
|
return aContext->Result();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : ProcessShape
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
TopoDS_Shape XSAlgo_AlgoContainer::ProcessShape(const TopoDS_Shape& theShape,
|
||||||
|
const Standard_Real thePrec,
|
||||||
|
const Standard_Real theMaxTol,
|
||||||
|
const Standard_CString thePrscfile,
|
||||||
|
const Standard_CString thePseq,
|
||||||
|
Handle(Standard_Transient)& theInfo,
|
||||||
|
const Message_ProgressRange& theProgress,
|
||||||
|
const Standard_Boolean theNonManifold) const
|
||||||
|
{
|
||||||
|
Handle(ShapeBuild_ReShape) aReShape = new ShapeBuild_ReShape();
|
||||||
|
return ProcessShape(theShape, thePrec, theMaxTol, thePrscfile,
|
||||||
|
thePseq, theInfo, aReShape, theProgress,
|
||||||
|
theNonManifold);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
@@ -23,6 +23,7 @@
|
|||||||
#include <Standard_Integer.hxx>
|
#include <Standard_Integer.hxx>
|
||||||
#include <Message_ProgressRange.hxx>
|
#include <Message_ProgressRange.hxx>
|
||||||
|
|
||||||
|
class ShapeBuild_ReShape;
|
||||||
class XSAlgo_ToolContainer;
|
class XSAlgo_ToolContainer;
|
||||||
class TopoDS_Shape;
|
class TopoDS_Shape;
|
||||||
class TopoDS_Edge;
|
class TopoDS_Edge;
|
||||||
@@ -30,7 +31,6 @@ class TopoDS_Face;
|
|||||||
class Transfer_TransientProcess;
|
class Transfer_TransientProcess;
|
||||||
class Transfer_FinderProcess;
|
class Transfer_FinderProcess;
|
||||||
|
|
||||||
|
|
||||||
class XSAlgo_AlgoContainer;
|
class XSAlgo_AlgoContainer;
|
||||||
DEFINE_STANDARD_HANDLE(XSAlgo_AlgoContainer, Standard_Transient)
|
DEFINE_STANDARD_HANDLE(XSAlgo_AlgoContainer, Standard_Transient)
|
||||||
|
|
||||||
@@ -55,16 +55,44 @@ public:
|
|||||||
Standard_EXPORT virtual void PrepareForTransfer() const;
|
Standard_EXPORT virtual void PrepareForTransfer() const;
|
||||||
|
|
||||||
//! Does shape processing with specified tolerances
|
//! Does shape processing with specified tolerances
|
||||||
//! and returns resulting shape and associated information
|
//! @param[in] theShape shape to process
|
||||||
//! in the form of Transient.
|
//! @param[in] thePrec basic precision and tolerance
|
||||||
//! This information should be later transmitted to
|
//! @param[in] theMaxTol maximum allowed tolerance
|
||||||
//! MergeTransferInfo in order to be recorded in the
|
//! @param[in] thePrscfile name of the resource file
|
||||||
//! translation map
|
//! @param[in] thePseq name of the sequence of operators defined in the resource file for Shape Processing
|
||||||
Standard_EXPORT virtual TopoDS_Shape ProcessShape (
|
//! @param[out] theInfo information to be recorded in the translation map
|
||||||
const TopoDS_Shape& shape, const Standard_Real Prec, const Standard_Real MaxTol,
|
//! @param[in] theProgress progress indicator
|
||||||
const Standard_CString rscfile, const Standard_CString seq, Handle(Standard_Transient)& info,
|
//! @param[in] theNonManifold flag to proceed with non-manifold topology
|
||||||
|
//! @return the processed shape
|
||||||
|
Standard_EXPORT virtual TopoDS_Shape ProcessShape (const TopoDS_Shape& theShape,
|
||||||
|
const Standard_Real thePrec,
|
||||||
|
const Standard_Real theMaxTol,
|
||||||
|
const Standard_CString thePrscfile,
|
||||||
|
const Standard_CString thePseq,
|
||||||
|
Handle(Standard_Transient)& theInfo,
|
||||||
const Message_ProgressRange& theProgress = Message_ProgressRange(),
|
const Message_ProgressRange& theProgress = Message_ProgressRange(),
|
||||||
const Standard_Boolean NonManifold = Standard_False) const;
|
const Standard_Boolean theNonManifold = Standard_False) const;
|
||||||
|
|
||||||
|
//! Does shape processing with specified tolerances
|
||||||
|
//! @param[in] theShape shape to process
|
||||||
|
//! @param[in] thePrec basic precision and tolerance
|
||||||
|
//! @param[in] theMaxTol maximum allowed tolerance
|
||||||
|
//! @param[in] thePrscfile name of the resource file
|
||||||
|
//! @param[in] thePseq name of the sequence of operators defined in the resource file for Shape Processing
|
||||||
|
//! @param[out] theInfo information to be recorded in the translation map
|
||||||
|
//! @param[in] theReShape tool to record the modifications of input shape
|
||||||
|
//! @param[in] theProgress progress indicator
|
||||||
|
//! @param[in] theNonManifold flag to proceed with non-manifold topology
|
||||||
|
//! @return the processed shape
|
||||||
|
Standard_EXPORT virtual TopoDS_Shape ProcessShape(const TopoDS_Shape& theShape,
|
||||||
|
const Standard_Real thePrec,
|
||||||
|
const Standard_Real theMaxTol,
|
||||||
|
const Standard_CString thePrscfile,
|
||||||
|
const Standard_CString thePseq,
|
||||||
|
Handle(Standard_Transient)& theInfo,
|
||||||
|
const Handle(ShapeBuild_ReShape)& theReShape,
|
||||||
|
const Message_ProgressRange& theProgress = Message_ProgressRange(),
|
||||||
|
const Standard_Boolean theNonManifold = Standard_False) const;
|
||||||
|
|
||||||
//! Checks quality of pcurve of the edge on the given face,
|
//! Checks quality of pcurve of the edge on the given face,
|
||||||
//! and corrects it if necessary.
|
//! and corrects it if necessary.
|
||||||
|
@@ -1,6 +1,3 @@
|
|||||||
puts "TODO CR23671 Linux: Error"
|
|
||||||
puts "TODO CR23671 Linux: Draw_Failure: Could not open"
|
|
||||||
|
|
||||||
puts "============"
|
puts "============"
|
||||||
puts "CR23671"
|
puts "CR23671"
|
||||||
puts "============"
|
puts "============"
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
puts "TODO OCC23638 ALL: Faulty shapes in variables faulty_1 to faulty_"
|
puts "TODO OCC23638 ALL: Faulty shapes in variables faulty_1 to faulty_1"
|
||||||
|
|
||||||
puts "============"
|
puts "============"
|
||||||
puts "CR23638"
|
puts "CR23638"
|
||||||
@@ -8,8 +8,6 @@ puts ""
|
|||||||
# Reading IGES file produced invalid shape
|
# Reading IGES file produced invalid shape
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
param read.surfacecurve.mode -3
|
|
||||||
|
|
||||||
igesread [locate_data_file bug23638_cadbad.igs] result *
|
igesread [locate_data_file bug23638_cadbad.igs] result *
|
||||||
|
|
||||||
checkshape result
|
checkshape result
|
||||||
|
16
tests/bugs/iges/bug33327
Normal file
16
tests/bugs/iges/bug33327
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "0033327: Data Exchange, IGES Import - SubfigureDef can't read string"
|
||||||
|
puts "============"
|
||||||
|
|
||||||
|
pload DCAF
|
||||||
|
|
||||||
|
Close D -silent
|
||||||
|
|
||||||
|
ReadIges D [locate_data_file "bug33327.igs"]
|
||||||
|
vclear
|
||||||
|
vinit View1
|
||||||
|
XDisplay -dispMode 1 D
|
||||||
|
vfit
|
||||||
|
vdump "$imagedir/${casename}_src.png"
|
||||||
|
|
||||||
|
Close D
|
15
tests/bugs/modalg_7/bug33264
Normal file
15
tests/bugs/modalg_7/bug33264
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "0033264: Modeling Algorithms - Result of section operation is incomplete"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
restore [locate_data_file bug33264_1.brep] srf1
|
||||||
|
restore [locate_data_file bug33264_2.brep] srf2
|
||||||
|
|
||||||
|
bsection res srf1 srf2
|
||||||
|
|
||||||
|
checknbshapes res -vertex 44 -edge 43
|
||||||
|
checkprops res -l 51.3377
|
||||||
|
checksection res
|
||||||
|
|
||||||
|
checkview -display res -2d -path ${imagedir}/${test_image}.png
|
14
tests/bugs/step/bug33331
Normal file
14
tests/bugs/step/bug33331
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
puts "===================================="
|
||||||
|
puts "0033331: Data Exchange, Step Import - Unsupported Representation Items"
|
||||||
|
puts "===================================="
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
pload DCAF
|
||||||
|
catch {Close D}
|
||||||
|
|
||||||
|
param "read.stepcaf.subshapes.name" 1
|
||||||
|
|
||||||
|
ReadStep D [locate_data_file bug33331.stp]
|
||||||
|
|
||||||
|
param "read.stepcaf.subshapes.name" 0
|
||||||
|
Close D
|
Reference in New Issue
Block a user