mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
Compare commits
23 Commits
V7_8_0
...
CR680-SALO
Author | SHA1 | Date | |
---|---|---|---|
|
38b8654f74 | ||
|
de6d39c92a | ||
|
49dd2f7d93 | ||
|
147dfa6daa | ||
|
e168ba53aa | ||
|
35f8794fb2 | ||
|
971feb7608 | ||
|
0435af7b21 | ||
|
b8265cb716 | ||
|
5c4a9ab709 | ||
|
80712f4646 | ||
|
79fb9ef82f | ||
|
af4b075434 | ||
|
4ece81d4a9 | ||
|
c35f2ea77d | ||
|
99c01c8ae2 | ||
|
a54ca2f54c | ||
|
cb793355eb | ||
|
aba7d78e18 | ||
|
a055a8d960 | ||
|
7c5f06ad43 | ||
|
87f9c8d218 | ||
|
1f349b3c2c |
@@ -51,7 +51,6 @@ Viewer::Viewer(QWidget* parent):QWidget(parent)
|
|||||||
|
|
||||||
myView->MustBeResized();
|
myView->MustBeResized();
|
||||||
myView->SetSurfaceDetail(V3d_TEX_NONE);
|
myView->SetSurfaceDetail(V3d_TEX_NONE);
|
||||||
myView->SetTransparency(Standard_True);
|
|
||||||
myView->SetSize(10000.0);
|
myView->SetSize(10000.0);
|
||||||
myView->SetZSize(10000.0);
|
myView->SetZSize(10000.0);
|
||||||
myView->SetViewMappingDefault();
|
myView->SetViewMappingDefault();
|
||||||
|
@@ -268,15 +268,6 @@ is
|
|||||||
-- inWhichLocal gives the local context in which anIObj
|
-- inWhichLocal gives the local context in which anIObj
|
||||||
-- is displayed. By default, the index -1 refers to the last
|
-- is displayed. By default, the index -1 refers to the last
|
||||||
-- Local Context opened.
|
-- Local Context opened.
|
||||||
|
|
||||||
Clear(me : mutable;
|
|
||||||
aniobj : InteractiveObject from AIS;
|
|
||||||
updateviewer : Boolean from Standard = Standard_True);
|
|
||||||
---Purpose: Removes the interactive object aniobj from all viewers.
|
|
||||||
-- If a local context is open and if updateviewer equals
|
|
||||||
-- Standard_False, the presentation of the Interactive
|
|
||||||
-- Object activates the selection mode; the object is
|
|
||||||
-- displayed but no viewer will be updated.
|
|
||||||
|
|
||||||
ClearPrs( me :mutable;
|
ClearPrs( me :mutable;
|
||||||
aniobj : InteractiveObject from AIS;
|
aniobj : InteractiveObject from AIS;
|
||||||
@@ -2046,6 +2037,16 @@ is
|
|||||||
PurgeViewer(me:mutable;Vwr:Viewer from V3d)
|
PurgeViewer(me:mutable;Vwr:Viewer from V3d)
|
||||||
returns Integer from Standard is static private;
|
returns Integer from Standard is static private;
|
||||||
|
|
||||||
|
redisplayPrsModes (me : mutable;
|
||||||
|
theIObj : InteractiveObject from AIS;
|
||||||
|
theToUpdateViewer : Boolean from Standard = Standard_True) is static private;
|
||||||
|
---Purpose: UNKNOWN
|
||||||
|
|
||||||
|
redisplayPrsRecModes (me : mutable;
|
||||||
|
theIObj : InteractiveObject from AIS;
|
||||||
|
theToUpdateViewer : Boolean from Standard = Standard_True) is static private;
|
||||||
|
---Purpose: UNKNOWN
|
||||||
|
|
||||||
fields
|
fields
|
||||||
|
|
||||||
myObjects : DataMapOfIOStatus from AIS;
|
myObjects : DataMapOfIOStatus from AIS;
|
||||||
|
3286
src/AIS/AIS_InteractiveContext.cxx
Normal file → Executable file
3286
src/AIS/AIS_InteractiveContext.cxx
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
@@ -445,65 +445,67 @@ void AIS_LocalContext::Deactivate(const Handle(AIS_InteractiveObject)& aSelectab
|
|||||||
|
|
||||||
Standard_Boolean AIS_LocalContext::Remove(const Handle(AIS_InteractiveObject)& aSelectable)
|
Standard_Boolean AIS_LocalContext::Remove(const Handle(AIS_InteractiveObject)& aSelectable)
|
||||||
{
|
{
|
||||||
if(!myActiveObjects.IsBound(aSelectable)) return Standard_False;
|
if(!myActiveObjects.IsBound (aSelectable))
|
||||||
|
{
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsSelected (aSelectable))
|
||||||
|
{
|
||||||
|
AddOrRemoveSelected (aSelectable, Standard_False);
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(AIS_LocalStatus)& Att = myActiveObjects (aSelectable);
|
||||||
|
|
||||||
if(IsSelected(aSelectable))
|
|
||||||
AddOrRemoveSelected(aSelectable,Standard_False);
|
|
||||||
|
|
||||||
const Handle(AIS_LocalStatus)& Att = myActiveObjects(aSelectable);
|
|
||||||
|
|
||||||
TColStd_ListIteratorOfListOfInteger It;
|
TColStd_ListIteratorOfListOfInteger It;
|
||||||
// it is checked which were the temporary attributes
|
|
||||||
// and they are set to 0
|
|
||||||
|
|
||||||
// desactivate standard modes
|
// Deactivate standard modes
|
||||||
if(Att->Decomposed()){
|
if (Att->Decomposed())
|
||||||
for(It.Initialize(myListOfStandardMode);It.More();It.Next()){
|
{
|
||||||
mySM->Deactivate(aSelectable,It.Value(),myMainVS);
|
for (It.Initialize (myListOfStandardMode); It.More(); It.Next())
|
||||||
|
{
|
||||||
|
mySM->Deactivate (aSelectable, It.Value(), myMainVS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if object or temporary presentations...
|
|
||||||
if(Att->IsTemporary())
|
|
||||||
{
|
|
||||||
if(Att->IsSubIntensityOn())
|
|
||||||
myMainPM->Unhighlight(aSelectable,Att->HilightMode());
|
|
||||||
|
|
||||||
// remove if bug on clear correct...
|
|
||||||
myMainPM->Erase(aSelectable,Att->DisplayMode());
|
|
||||||
myMainPM->Clear(aSelectable,Att->DisplayMode());
|
|
||||||
if(myMainPM->IsDisplayed(aSelectable,Att->HilightMode()))
|
|
||||||
myMainPM->Erase(aSelectable,Att->HilightMode());
|
|
||||||
// myMainPM->Clear(aSelectable,Att->HilightMode());
|
|
||||||
}
|
|
||||||
// if below intensity
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(Att->IsSubIntensityOn())
|
|
||||||
myCTX->SubIntensityOff(aSelectable);
|
|
||||||
}
|
|
||||||
// desactivate stored proper modes
|
|
||||||
for(It.Initialize(Att->SelectionModes());It.More();It.Next()){
|
|
||||||
mySM->Deactivate(aSelectable,It.Value(),myMainVS);
|
|
||||||
}
|
|
||||||
// pop : si je laisses cela plantes dans les elements de construction
|
|
||||||
// alors a toi de jouer ROB
|
|
||||||
// RemoveSelected(aSelectable);
|
|
||||||
|
|
||||||
if(IsSelected(aSelectable))
|
// If object or temporary presentations
|
||||||
AddOrRemoveSelected(aSelectable);
|
if (Att->IsTemporary())
|
||||||
myActiveObjects.UnBind(aSelectable);
|
{
|
||||||
|
if (Att->IsSubIntensityOn())
|
||||||
|
{
|
||||||
|
myMainPM->Unhighlight (aSelectable, Att->HilightMode());
|
||||||
|
}
|
||||||
|
|
||||||
|
myMainPM->Erase (aSelectable, Att->DisplayMode());
|
||||||
|
myMainPM->Clear (aSelectable, Att->DisplayMode());
|
||||||
|
if (myMainPM->IsDisplayed (aSelectable, Att->HilightMode()))
|
||||||
|
{
|
||||||
|
myMainPM->Erase (aSelectable, Att->HilightMode());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If subintensity used
|
||||||
|
else if (Att->IsSubIntensityOn())
|
||||||
|
{
|
||||||
|
myCTX->SubIntensityOff (aSelectable);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deactivate stored selection modes
|
||||||
|
for (It.Initialize (Att->SelectionModes()); It.More(); It.Next())
|
||||||
|
{
|
||||||
|
mySM->Deactivate (aSelectable, It.Value(), myMainVS);
|
||||||
|
}
|
||||||
|
|
||||||
// Remove the interactive object from selection manager
|
// Remove the interactive object from selection manager
|
||||||
if (mySM->Contains (aSelectable))
|
if (mySM->Contains (aSelectable))
|
||||||
{
|
{
|
||||||
mySM->Remove (aSelectable);
|
mySM->Remove (aSelectable);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateSort();
|
UpdateSort();
|
||||||
|
|
||||||
ClearOutdatedSelection (aSelectable, Standard_True);
|
ClearOutdatedSelection (aSelectable, Standard_True);
|
||||||
|
|
||||||
|
// This should be done at the very end because most methods use
|
||||||
|
// myActiveObjects even during clean-up
|
||||||
|
myActiveObjects.UnBind (aSelectable);
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -153,6 +153,7 @@ AIS_StatusOfDetection AIS_LocalContext::MoveTo (const Standard_Integer theXpix,
|
|||||||
{
|
{
|
||||||
if (mylastindex != 0 && mylastindex <= myMapOfOwner.Extent())
|
if (mylastindex != 0 && mylastindex <= myMapOfOwner.Extent())
|
||||||
{
|
{
|
||||||
|
myMainPM->ClearImmediateDraw();
|
||||||
Unhilight (myMapOfOwner (mylastindex), theView);
|
Unhilight (myMapOfOwner (mylastindex), theView);
|
||||||
if (theToRedrawImmediate)
|
if (theToRedrawImmediate)
|
||||||
{
|
{
|
||||||
@@ -376,6 +377,7 @@ AIS_StatusOfPick AIS_LocalContext::ShiftSelect (const Standard_Boolean toUpdateV
|
|||||||
|
|
||||||
if(myAutoHilight)
|
if(myAutoHilight)
|
||||||
{
|
{
|
||||||
|
myMainPM->ClearImmediateDraw();
|
||||||
const Handle(V3d_Viewer)& aViewer = myCTX->CurrentViewer();
|
const Handle(V3d_Viewer)& aViewer = myCTX->CurrentViewer();
|
||||||
for (aViewer->InitActiveViews(); aViewer->MoreActiveViews(); aViewer->NextActiveViews())
|
for (aViewer->InitActiveViews(); aViewer->MoreActiveViews(); aViewer->NextActiveViews())
|
||||||
{
|
{
|
||||||
@@ -545,7 +547,6 @@ void AIS_LocalContext::Unhilight (const Handle(SelectMgr_EntityOwner)& theOwner,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
myMainPM->ClearImmediateDraw();
|
|
||||||
const Standard_Integer aHilightMode = GetHiMod (Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()));
|
const Standard_Integer aHilightMode = GetHiMod (Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()));
|
||||||
if (IsSelected (theOwner))
|
if (IsSelected (theOwner))
|
||||||
{
|
{
|
||||||
@@ -1044,6 +1045,10 @@ void AIS_LocalContext::ClearOutdatedSelection (const Handle(AIS_InteractiveObjec
|
|||||||
myMapOfOwner.Clear();
|
myMapOfOwner.Clear();
|
||||||
myMapOfOwner.Assign (anOwnersToKeep);
|
myMapOfOwner.Assign (anOwnersToKeep);
|
||||||
mylastindex = myMapOfOwner.FindIndex (aLastPicked);
|
mylastindex = myMapOfOwner.FindIndex (aLastPicked);
|
||||||
|
if (!IsValidIndex (mylastindex))
|
||||||
|
{
|
||||||
|
myMainPM->ClearImmediateDraw();
|
||||||
|
}
|
||||||
|
|
||||||
if (!isAISRemainsDetected)
|
if (!isAISRemainsDetected)
|
||||||
{
|
{
|
||||||
@@ -1197,6 +1202,7 @@ void AIS_LocalContext::manageDetected (const Handle(SelectMgr_EntityOwner)& theP
|
|||||||
{
|
{
|
||||||
if (thePickOwner.IsNull())
|
if (thePickOwner.IsNull())
|
||||||
{
|
{
|
||||||
|
myMainPM->ClearImmediateDraw();
|
||||||
if (theToRedrawImmediate)
|
if (theToRedrawImmediate)
|
||||||
{
|
{
|
||||||
theView->RedrawImmediate();
|
theView->RedrawImmediate();
|
||||||
@@ -1248,6 +1254,7 @@ void AIS_LocalContext::manageDetected (const Handle(SelectMgr_EntityOwner)& theP
|
|||||||
if (aNewIndex != mylastindex
|
if (aNewIndex != mylastindex
|
||||||
|| thePickOwner->IsForcedHilight())
|
|| thePickOwner->IsForcedHilight())
|
||||||
{
|
{
|
||||||
|
myMainPM->ClearImmediateDraw();
|
||||||
if (mylastindex != 0
|
if (mylastindex != 0
|
||||||
&& mylastindex <= myMapOfOwner.Extent())
|
&& mylastindex <= myMapOfOwner.Extent())
|
||||||
{
|
{
|
||||||
@@ -1270,7 +1277,7 @@ void AIS_LocalContext::manageDetected (const Handle(SelectMgr_EntityOwner)& theP
|
|||||||
mylastindex = aNewIndex;
|
mylastindex = aNewIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mylastindex)
|
if (mylastindex != 0)
|
||||||
{
|
{
|
||||||
mylastgood = mylastindex;
|
mylastgood = mylastindex;
|
||||||
}
|
}
|
||||||
|
@@ -684,8 +684,8 @@ void BOPAlgo_BuilderSolid::PerformAreas()
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (aInOutMap.IsBound (aHole)){
|
if (aInOutMap.IsBound (aHole)){
|
||||||
const TopoDS_Shape& aHole2=aInOutMap(aHole);
|
const TopoDS_Shape& aSolidWas=aInOutMap(aHole);
|
||||||
if (IsInside(aHole, aHole2, myContext)) {
|
if (IsInside(aSolid, aSolidWas, myContext)) {
|
||||||
aInOutMap.UnBind(aHole);
|
aInOutMap.UnBind(aHole);
|
||||||
aInOutMap.Bind (aHole, aSolid);
|
aInOutMap.Bind (aHole, aSolid);
|
||||||
}
|
}
|
||||||
|
@@ -267,7 +267,6 @@ void BOPAlgo_PaveFiller::PerformEF()
|
|||||||
aPB->Indices(nV[0], nV[1]);
|
aPB->Indices(nV[0], nV[1]);
|
||||||
//
|
//
|
||||||
BOPDS_FaceInfo& aFI=myDS->ChangeFaceInfo(nF);
|
BOPDS_FaceInfo& aFI=myDS->ChangeFaceInfo(nF);
|
||||||
////const BOPDS_IndexedMapOfPaveBlock& aMPBF=aFI.PaveBlocksOn();
|
|
||||||
const BOPCol_MapOfInteger& aMIFOn=aFI.VerticesOn();
|
const BOPCol_MapOfInteger& aMIFOn=aFI.VerticesOn();
|
||||||
const BOPCol_MapOfInteger& aMIFIn=aFI.VerticesIn();
|
const BOPCol_MapOfInteger& aMIFIn=aFI.VerticesIn();
|
||||||
//~~~
|
//~~~
|
||||||
@@ -305,7 +304,9 @@ void BOPAlgo_PaveFiller::PerformEF()
|
|||||||
aEF.SetIndices(nE, nF);
|
aEF.SetIndices(nE, nF);
|
||||||
aEF.SetCommonPart(aCP);
|
aEF.SetCommonPart(aCP);
|
||||||
myDS->AddInterf(nE, nF);
|
myDS->AddInterf(nE, nF);
|
||||||
// 3
|
//
|
||||||
|
aMIEFC.Add(nF);
|
||||||
|
//
|
||||||
BOPAlgo_Tools::FillMap(aPB, nF, aMPBLI, aAllocator);
|
BOPAlgo_Tools::FillMap(aPB, nF, aMPBLI, aAllocator);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -99,7 +99,8 @@ static
|
|||||||
gp_Pnt& aPOut,
|
gp_Pnt& aPOut,
|
||||||
Handle(IntTools_Context)& theContext,
|
Handle(IntTools_Context)& theContext,
|
||||||
GeomAPI_ProjectPointOnSurf& aProjPL,
|
GeomAPI_ProjectPointOnSurf& aProjPL,
|
||||||
const Standard_Real aDt);
|
const Standard_Real aDt,
|
||||||
|
const Standard_Real aTolE);
|
||||||
static
|
static
|
||||||
Standard_Real MinStep3D(const TopoDS_Edge& theE1,
|
Standard_Real MinStep3D(const TopoDS_Edge& theE1,
|
||||||
const TopoDS_Face& theF1,
|
const TopoDS_Face& theF1,
|
||||||
@@ -1825,14 +1826,18 @@ void GetFaceDir(const TopoDS_Edge& aE,
|
|||||||
GeomAPI_ProjectPointOnSurf& aProjPL,
|
GeomAPI_ProjectPointOnSurf& aProjPL,
|
||||||
const Standard_Real aDt)
|
const Standard_Real aDt)
|
||||||
{
|
{
|
||||||
|
Standard_Real aTolE;
|
||||||
|
gp_Pnt aPx;
|
||||||
|
//
|
||||||
BOPTools_AlgoTools3D::GetNormalToFaceOnEdge(aE, aF, aT, aDN);
|
BOPTools_AlgoTools3D::GetNormalToFaceOnEdge(aE, aF, aT, aDN);
|
||||||
if (aF.Orientation()==TopAbs_REVERSED){
|
if (aF.Orientation()==TopAbs_REVERSED){
|
||||||
aDN.Reverse();
|
aDN.Reverse();
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
aTolE=BRep_Tool::Tolerance(aE);
|
||||||
aDB = aDN^aDTgt;
|
aDB = aDN^aDTgt;
|
||||||
//
|
//
|
||||||
gp_Pnt aPx;
|
if (!FindPointInFace(aF, aP, aDB, aPx, theContext, aProjPL, aDt, aTolE)) {
|
||||||
if (!FindPointInFace(aF, aP, aDB, aPx, theContext, aProjPL, aDt)) {
|
|
||||||
BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge(aE, aF, aT, aPx,
|
BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge(aE, aF, aT, aPx,
|
||||||
aDN, theContext);
|
aDN, theContext);
|
||||||
aProjPL.Perform(aPx);
|
aProjPL.Perform(aPx);
|
||||||
@@ -1841,7 +1846,6 @@ void GetFaceDir(const TopoDS_Edge& aE,
|
|||||||
aDB.SetXYZ(aVec.XYZ());
|
aDB.SetXYZ(aVec.XYZ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : FindPointInFace
|
//function : FindPointInFace
|
||||||
//purpose : Find a point in the face in direction of <aDB>
|
//purpose : Find a point in the face in direction of <aDB>
|
||||||
@@ -1852,12 +1856,13 @@ Standard_Boolean FindPointInFace(const TopoDS_Face& aF,
|
|||||||
gp_Pnt& aPOut,
|
gp_Pnt& aPOut,
|
||||||
Handle(IntTools_Context)& theContext,
|
Handle(IntTools_Context)& theContext,
|
||||||
GeomAPI_ProjectPointOnSurf& aProjPL,
|
GeomAPI_ProjectPointOnSurf& aProjPL,
|
||||||
const Standard_Real aDt)
|
const Standard_Real aDt,
|
||||||
|
const Standard_Real aTolE)
|
||||||
{
|
{
|
||||||
Standard_Integer aNbItMax;
|
Standard_Integer aNbItMax;
|
||||||
Standard_Real aDist, aDTol, aPM;
|
Standard_Real aDist, aDTol, aPM;
|
||||||
Standard_Boolean bRet;
|
Standard_Boolean bRet;
|
||||||
gp_Pnt aP1;
|
gp_Pnt aP1, aPS;
|
||||||
//
|
//
|
||||||
aDTol = Precision::Angular();
|
aDTol = Precision::Angular();
|
||||||
aPM = aP.XYZ().Modulus();
|
aPM = aP.XYZ().Modulus();
|
||||||
@@ -1869,10 +1874,27 @@ Standard_Boolean FindPointInFace(const TopoDS_Face& aF,
|
|||||||
//
|
//
|
||||||
GeomAPI_ProjectPointOnSurf& aProj=theContext->ProjPS(aF);
|
GeomAPI_ProjectPointOnSurf& aProj=theContext->ProjPS(aF);
|
||||||
//
|
//
|
||||||
|
aPS=aP;
|
||||||
|
aProj.Perform(aPS);
|
||||||
|
if (!aProj.IsDone()) {
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
aPS=aProj.NearestPoint();
|
||||||
|
aProjPL.Perform(aPS);
|
||||||
|
aPS=aProjPL.NearestPoint();
|
||||||
|
//
|
||||||
|
aPS.SetXYZ(aPS.XYZ()+2.*aTolE*aDB.XYZ());
|
||||||
|
aProj.Perform(aPS);
|
||||||
|
if (!aProj.IsDone()) {
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
aPS=aProj.NearestPoint();
|
||||||
|
aProjPL.Perform(aPS);
|
||||||
|
aPS=aProjPL.NearestPoint();
|
||||||
|
//
|
||||||
|
//
|
||||||
do {
|
do {
|
||||||
aP1.SetCoord(aP.X()+aDt*aDB.X(),
|
aP1.SetXYZ(aPS.XYZ()+aDt*aDB.XYZ());
|
||||||
aP.Y()+aDt*aDB.Y(),
|
|
||||||
aP.Z()+aDt*aDB.Z());
|
|
||||||
//
|
//
|
||||||
aProj.Perform(aP1);
|
aProj.Perform(aP1);
|
||||||
if (!aProj.IsDone()) {
|
if (!aProj.IsDone()) {
|
||||||
@@ -1884,7 +1906,7 @@ Standard_Boolean FindPointInFace(const TopoDS_Face& aF,
|
|||||||
aProjPL.Perform(aPOut);
|
aProjPL.Perform(aPOut);
|
||||||
aPOut = aProjPL.NearestPoint();
|
aPOut = aProjPL.NearestPoint();
|
||||||
//
|
//
|
||||||
gp_Vec aV(aP, aPOut);
|
gp_Vec aV(aPS, aPOut);
|
||||||
aDB.SetXYZ(aV.XYZ());
|
aDB.SetXYZ(aV.XYZ());
|
||||||
} while (aDist > aDTol && --aNbItMax);
|
} while (aDist > aDTol && --aNbItMax);
|
||||||
//
|
//
|
||||||
@@ -2006,8 +2028,8 @@ Standard_Boolean BOPTools_AlgoTools::IsOpenShell(const TopoDS_Shell& aSh)
|
|||||||
//function : IsInvertedSolid
|
//function : IsInvertedSolid
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean
|
Standard_Boolean BOPTools_AlgoTools::IsInvertedSolid
|
||||||
BOPTools_AlgoTools::IsInvertedSolid(const TopoDS_Solid& aSolid)
|
(const TopoDS_Solid& aSolid)
|
||||||
{
|
{
|
||||||
Standard_Real aTolS;
|
Standard_Real aTolS;
|
||||||
TopAbs_State aState;
|
TopAbs_State aState;
|
||||||
|
@@ -344,6 +344,8 @@ class BOPTools_CheckCurveOnSurface :
|
|||||||
Standard_Real& theFVal) {
|
Standard_Real& theFVal) {
|
||||||
try {
|
try {
|
||||||
const Standard_Real aPar = theX(1);
|
const Standard_Real aPar = theX(1);
|
||||||
|
if (!CheckParameter(aPar))
|
||||||
|
return Standard_False;
|
||||||
gp_Pnt aP1, aP2;
|
gp_Pnt aP1, aP2;
|
||||||
gp_Pnt2d aP2d;
|
gp_Pnt2d aP2d;
|
||||||
my3DCurve->D0(aPar, aP1);
|
my3DCurve->D0(aPar, aP1);
|
||||||
@@ -367,7 +369,8 @@ class BOPTools_CheckCurveOnSurface :
|
|||||||
math_Vector& theGrad) {
|
math_Vector& theGrad) {
|
||||||
try {
|
try {
|
||||||
const Standard_Real aPar = theX(1);
|
const Standard_Real aPar = theX(1);
|
||||||
|
if (!CheckParameter(aPar))
|
||||||
|
return Standard_False;
|
||||||
gp_Pnt aP1, aP2;
|
gp_Pnt aP1, aP2;
|
||||||
gp_Vec aDC3D, aDSU, aDSV;
|
gp_Vec aDC3D, aDSU, aDSV;
|
||||||
gp_Pnt2d aP2d;
|
gp_Pnt2d aP2d;
|
||||||
@@ -417,6 +420,19 @@ class BOPTools_CheckCurveOnSurface :
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
Standard_Boolean CheckParameter(const Standard_Real theParam)
|
||||||
|
{
|
||||||
|
if (theParam < my3DCurve->FirstParameter() ||
|
||||||
|
theParam > my3DCurve->LastParameter() ||
|
||||||
|
theParam < my2DCurve->FirstParameter() ||
|
||||||
|
theParam > my2DCurve->LastParameter() )
|
||||||
|
{
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
return Standard_True;
|
||||||
|
}
|
||||||
|
|
||||||
Handle(Geom_Curve) my3DCurve;
|
Handle(Geom_Curve) my3DCurve;
|
||||||
Handle(Geom2d_Curve) my2DCurve;
|
Handle(Geom2d_Curve) my2DCurve;
|
||||||
Handle(Geom_Surface) mySurf;
|
Handle(Geom_Surface) mySurf;
|
||||||
|
@@ -274,18 +274,9 @@ void BRepFill_Pipe::Perform(const TopoDS_Wire& Spine,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ShapeUpgrade_RemoveLocations RemLoc;
|
ShapeUpgrade_RemoveLocations RemLoc;
|
||||||
|
RemLoc.SetRemoveLevel(TopAbs_COMPOUND);
|
||||||
RemLoc.Remove(myFirst);
|
RemLoc.Remove(myFirst);
|
||||||
myFirst = RemLoc.GetResult();
|
myFirst = RemLoc.GetResult();
|
||||||
TopLoc_Location theLoc = myFirst.Location();
|
|
||||||
if (!theLoc.IsIdentity())
|
|
||||||
{
|
|
||||||
TopoDS_Shape NewMyFirst = BRepBuilderAPI_Copy(myFirst);
|
|
||||||
RemLoc.Remove(NewMyFirst);
|
|
||||||
NewMyFirst = RemLoc.GetResult();
|
|
||||||
TopLoc_Location theIdentity;
|
|
||||||
NewMyFirst.Location(theIdentity);
|
|
||||||
myFirst = BRepBuilderAPI_Transform(NewMyFirst, theLoc.Transformation(), Standard_True);
|
|
||||||
}
|
|
||||||
|
|
||||||
myLoc->Law(myLoc->NbLaw())->GetDomain(first, last);
|
myLoc->Law(myLoc->NbLaw())->GetDomain(first, last);
|
||||||
myLoc->Law(myLoc->NbLaw())->D0(last,M, V);
|
myLoc->Law(myLoc->NbLaw())->D0(last,M, V);
|
||||||
@@ -308,16 +299,6 @@ void BRepFill_Pipe::Perform(const TopoDS_Wire& Spine,
|
|||||||
|
|
||||||
RemLoc.Remove(myLast);
|
RemLoc.Remove(myLast);
|
||||||
myLast = RemLoc.GetResult();
|
myLast = RemLoc.GetResult();
|
||||||
theLoc = myLast.Location();
|
|
||||||
if (!theLoc.IsIdentity())
|
|
||||||
{
|
|
||||||
TopoDS_Shape NewMyLast = BRepBuilderAPI_Copy(myLast);
|
|
||||||
RemLoc.Remove(NewMyLast);
|
|
||||||
NewMyLast = RemLoc.GetResult();
|
|
||||||
TopLoc_Location theIdentity;
|
|
||||||
NewMyLast.Location(theIdentity);
|
|
||||||
myLast = BRepBuilderAPI_Transform(NewMyLast, theLoc.Transformation(), Standard_True);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if DRAW
|
#if DRAW
|
||||||
if (Affich) {
|
if (Affich) {
|
||||||
|
@@ -45,6 +45,7 @@ uses Point from Blend,
|
|||||||
Transition from IntSurf,
|
Transition from IntSurf,
|
||||||
Function from Blend,
|
Function from Blend,
|
||||||
FuncInv from Blend,
|
FuncInv from Blend,
|
||||||
|
HElSpine from ChFiDS,
|
||||||
State from TopAbs
|
State from TopAbs
|
||||||
|
|
||||||
|
|
||||||
@@ -66,6 +67,7 @@ is
|
|||||||
|
|
||||||
Perform(me: in out; F : in out Function from Blend;
|
Perform(me: in out; F : in out Function from Blend;
|
||||||
FInv : in out FuncInv from Blend;
|
FInv : in out FuncInv from Blend;
|
||||||
|
HGuide : HElSpine from ChFiDS;
|
||||||
Pdep : Real from Standard;
|
Pdep : Real from Standard;
|
||||||
Pmax : Real from Standard;
|
Pmax : Real from Standard;
|
||||||
MaxStep : Real from Standard;
|
MaxStep : Real from Standard;
|
||||||
@@ -164,6 +166,7 @@ is
|
|||||||
|
|
||||||
InternalPerform (me: in out;F : in out Function from Blend;
|
InternalPerform (me: in out;F : in out Function from Blend;
|
||||||
FInv : in out FuncInv from Blend;
|
FInv : in out FuncInv from Blend;
|
||||||
|
HGuide : HElSpine from ChFiDS;
|
||||||
Bound : Real from Standard)
|
Bound : Real from Standard)
|
||||||
|
|
||||||
is static private;
|
is static private;
|
||||||
|
@@ -56,6 +56,7 @@ void Blend_Walking::AddSingularPoint(const Blend_Point& P)
|
|||||||
|
|
||||||
void Blend_Walking::Perform(Blend_Function& Func,
|
void Blend_Walking::Perform(Blend_Function& Func,
|
||||||
Blend_FuncInv& FuncInv,
|
Blend_FuncInv& FuncInv,
|
||||||
|
const Handle(ChFiDS_HElSpine)& HGuide,
|
||||||
const Standard_Real Pdep,
|
const Standard_Real Pdep,
|
||||||
const Standard_Real Pmax,
|
const Standard_Real Pmax,
|
||||||
const Standard_Real MaxStep,
|
const Standard_Real MaxStep,
|
||||||
@@ -154,7 +155,7 @@ void Blend_Walking::Perform(Blend_Function& Func,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InternalPerform(Func,FuncInv,Pmax);
|
InternalPerform(Func,FuncInv,HGuide,Pmax);
|
||||||
|
|
||||||
done = Standard_True;
|
done = Standard_True;
|
||||||
}
|
}
|
||||||
@@ -461,7 +462,8 @@ Standard_Boolean Blend_Walking::Continu(Blend_Function& Func,
|
|||||||
previousP.ParametersOnS1(sol(1),sol(2));
|
previousP.ParametersOnS1(sol(1),sol(2));
|
||||||
previousP.ParametersOnS2(sol(3),sol(4));
|
previousP.ParametersOnS2(sol(3),sol(4));
|
||||||
|
|
||||||
InternalPerform(Func,FuncInv,P);
|
Handle(ChFiDS_HElSpine) anHGuide;
|
||||||
|
InternalPerform(Func,FuncInv,anHGuide,P);
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,7 +504,8 @@ Standard_Boolean Blend_Walking::Continu(Blend_Function& Func,
|
|||||||
if(OnS1) clasonS1 = Standard_False;
|
if(OnS1) clasonS1 = Standard_False;
|
||||||
else clasonS2 = Standard_False;
|
else clasonS2 = Standard_False;
|
||||||
|
|
||||||
InternalPerform(Func,FuncInv,P);
|
Handle(ChFiDS_HElSpine) anHGuide;
|
||||||
|
InternalPerform(Func,FuncInv,anHGuide,P);
|
||||||
|
|
||||||
clasonS1 = Standard_True;
|
clasonS1 = Standard_True;
|
||||||
clasonS2 = Standard_True;
|
clasonS2 = Standard_True;
|
||||||
@@ -548,7 +551,8 @@ Standard_Boolean Blend_Walking::Complete(Blend_Function& Func,
|
|||||||
previousP.ParametersOnS1(sol(1),sol(2));
|
previousP.ParametersOnS1(sol(1),sol(2));
|
||||||
previousP.ParametersOnS2(sol(3),sol(4));
|
previousP.ParametersOnS2(sol(3),sol(4));
|
||||||
|
|
||||||
InternalPerform(Func,FuncInv,Pmin);
|
Handle(ChFiDS_HElSpine) anHGuide;
|
||||||
|
InternalPerform(Func,FuncInv,anHGuide,Pmin);
|
||||||
|
|
||||||
iscomplete = Standard_True;
|
iscomplete = Standard_True;
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
|
@@ -12,6 +12,8 @@
|
|||||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||||
// commercial license or contractual agreement.
|
// commercial license or contractual agreement.
|
||||||
|
|
||||||
|
#include <gce_MakePln.hxx>
|
||||||
|
|
||||||
static void evalpinit(math_Vector& parinit,
|
static void evalpinit(math_Vector& parinit,
|
||||||
const Blend_Point& previousP,
|
const Blend_Point& previousP,
|
||||||
const Standard_Real parprec,
|
const Standard_Real parprec,
|
||||||
@@ -65,6 +67,7 @@ static void evalpinit(math_Vector& parinit,
|
|||||||
|
|
||||||
void Blend_Walking::InternalPerform(Blend_Function& Func,
|
void Blend_Walking::InternalPerform(Blend_Function& Func,
|
||||||
Blend_FuncInv& FuncInv,
|
Blend_FuncInv& FuncInv,
|
||||||
|
const Handle(ChFiDS_HElSpine)& HGuide,
|
||||||
const Standard_Real Bound)
|
const Standard_Real Bound)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -251,12 +254,64 @@ void Blend_Walking::InternalPerform(Blend_Function& Func,
|
|||||||
// avec les surfaces periodiques.
|
// avec les surfaces periodiques.
|
||||||
State = Blend_OnRst12;
|
State = Blend_OnRst12;
|
||||||
param = (w1+w2)/2;
|
param = (w1+w2)/2;
|
||||||
|
gp_Pnt Pnt1, Pnt2;
|
||||||
p2d = TheArcTool::Value(recdomain1->Value(),solrst1(1));
|
p2d = TheArcTool::Value(recdomain1->Value(),solrst1(1));
|
||||||
sol(1) = p2d.X();
|
sol(1) = p2d.X();
|
||||||
sol(2) = p2d.Y();
|
sol(2) = p2d.Y();
|
||||||
|
Pnt1 = TheSurfaceTool::Value(surf1,sol(1),sol(2));
|
||||||
p2d = TheArcTool::Value(recdomain2->Value(),solrst2(1));
|
p2d = TheArcTool::Value(recdomain2->Value(),solrst2(1));
|
||||||
sol(3) = p2d.X();
|
sol(3) = p2d.X();
|
||||||
sol(4) = p2d.Y();
|
sol(4) = p2d.Y();
|
||||||
|
Pnt2 = TheSurfaceTool::Value(surf2,sol(3),sol(4));
|
||||||
|
if (!HGuide.IsNull())
|
||||||
|
{
|
||||||
|
const Standard_Real TolProd = 1.e-5;
|
||||||
|
Standard_Real SavedParams [2];
|
||||||
|
Standard_Boolean SameDirs [2] = {Standard_False, Standard_False};
|
||||||
|
ChFiDS_ElSpine& theElSpine = HGuide->ChangeCurve();
|
||||||
|
SavedParams[0] = theElSpine.GetSavedFirstParameter();
|
||||||
|
SavedParams[1] = theElSpine.GetSavedLastParameter();
|
||||||
|
for (Standard_Integer ind = 0; ind < 2; ind++)
|
||||||
|
{
|
||||||
|
if (!Precision::IsInfinite(SavedParams[ind]))
|
||||||
|
{
|
||||||
|
//Check the original first and last parameters of guide curve
|
||||||
|
//for equality to found parameter <param>:
|
||||||
|
//check equality of tangent to guide curve and
|
||||||
|
//normal to plane built on 3 points:
|
||||||
|
//point on guide curve and points on restrictions of adjacent
|
||||||
|
//surfaces.
|
||||||
|
gp_Pnt Pnt0;
|
||||||
|
gp_Vec Dir0;
|
||||||
|
HGuide->D1(SavedParams[ind], Pnt0, Dir0);
|
||||||
|
Standard_Real Length = Dir0.Magnitude();
|
||||||
|
if (Length <= gp::Resolution())
|
||||||
|
continue;
|
||||||
|
Dir0 /= Length;
|
||||||
|
gce_MakePln PlaneBuilder(Pnt0, Pnt1, Pnt2);
|
||||||
|
if (!PlaneBuilder.IsDone())
|
||||||
|
continue;
|
||||||
|
gp_Pln thePlane = PlaneBuilder.Value();
|
||||||
|
gp_Dir DirPlane = thePlane.Axis().Direction();
|
||||||
|
gp_Vec theProd = Dir0 ^ DirPlane;
|
||||||
|
Standard_Real ProdMod = theProd.Magnitude();
|
||||||
|
if (ProdMod <= TolProd)
|
||||||
|
SameDirs[ind] = Standard_True;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Standard_Real theParam = Precision::Infinite();
|
||||||
|
//Choose the closest parameter
|
||||||
|
if (SameDirs[0] && SameDirs[1])
|
||||||
|
theParam = (Abs(param - SavedParams[0]) < Abs(param - SavedParams[1]))?
|
||||||
|
SavedParams[0] : SavedParams[1];
|
||||||
|
else if (SameDirs[0])
|
||||||
|
theParam = SavedParams[0];
|
||||||
|
else if (SameDirs[1])
|
||||||
|
theParam = SavedParams[1];
|
||||||
|
|
||||||
|
if (!Precision::IsInfinite(theParam))
|
||||||
|
param = theParam;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (recad1) {
|
else if (recad1) {
|
||||||
// sol sur 1
|
// sol sur 1
|
||||||
|
@@ -1862,10 +1862,13 @@ void ChFi3d_Builder::PerformSetOfSurfOnElSpine
|
|||||||
Standard_Real wl = Guide.LastParameter();
|
Standard_Real wl = Guide.LastParameter();
|
||||||
Standard_Real locfleche = (wl - wf) * fleche;
|
Standard_Real locfleche = (wl - wf) * fleche;
|
||||||
Standard_Real wfsav = wf, wlsav = wl;
|
Standard_Real wfsav = wf, wlsav = wl;
|
||||||
//Now the ElSpine is artificially extended to help rsnld.
|
if (!Guide.IsPeriodic())
|
||||||
Standard_Real prab = 0.01;
|
{
|
||||||
Guide.FirstParameter(wf-prab*(wl-wf));
|
//Now the ElSpine is artificially extended to help rsnld.
|
||||||
Guide.LastParameter (wl+prab*(wl-wf));
|
Standard_Real prab = 0.01;
|
||||||
|
Guide.FirstParameter(wf-prab*(wl-wf));
|
||||||
|
Guide.LastParameter (wl+prab*(wl-wf));
|
||||||
|
}
|
||||||
Handle(ChFiDS_Spine)& Spine = Stripe->ChangeSpine();
|
Handle(ChFiDS_Spine)& Spine = Stripe->ChangeSpine();
|
||||||
Standard_Integer ii, nbed = Spine->NbEdges();
|
Standard_Integer ii, nbed = Spine->NbEdges();
|
||||||
Standard_Real lastedlastp = Spine->LastParameter(nbed);
|
Standard_Real lastedlastp = Spine->LastParameter(nbed);
|
||||||
@@ -1920,7 +1923,9 @@ void ChFi3d_Builder::PerformSetOfSurfOnElSpine
|
|||||||
Last = wf;
|
Last = wf;
|
||||||
if(Guide.IsPeriodic()) {
|
if(Guide.IsPeriodic()) {
|
||||||
Last = First - Guide.Period();
|
Last = First - Guide.Period();
|
||||||
|
Guide.SaveFirstParameter();
|
||||||
Guide.FirstParameter(Last);
|
Guide.FirstParameter(Last);
|
||||||
|
Guide.SaveLastParameter();
|
||||||
Guide.LastParameter (First * 1.1);//Extension to help rsnld.
|
Guide.LastParameter (First * 1.1);//Extension to help rsnld.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1573,7 +1573,7 @@ Standard_Boolean ChFi3d_Builder::ComputeData
|
|||||||
if (5*TolGuide > MS) TolGuide = MS/5;
|
if (5*TolGuide > MS) TolGuide = MS/5;
|
||||||
if (5*TolEsp > MS) TolEsp = MS/5;
|
if (5*TolEsp > MS) TolEsp = MS/5;
|
||||||
}
|
}
|
||||||
TheWalk.Perform(Func,FInv,NewFirst,Target,MS,TolGuide,
|
TheWalk.Perform(Func,FInv,HGuide,NewFirst,Target,MS,TolGuide,
|
||||||
ParSol,TolEsp,Fleche,Appro);
|
ParSol,TolEsp,Fleche,Appro);
|
||||||
if (!TheWalk.IsDone()) {
|
if (!TheWalk.IsDone()) {
|
||||||
#ifdef OCCT_DEBUG
|
#ifdef OCCT_DEBUG
|
||||||
@@ -2113,7 +2113,7 @@ Standard_Boolean ChFi3d_Builder::SimulData
|
|||||||
if (5*TolEsp > MS) TolEsp = MS/5;
|
if (5*TolEsp > MS) TolEsp = MS/5;
|
||||||
}
|
}
|
||||||
|
|
||||||
TheWalk.Perform(Func,FInv,NewFirst,Target,MS,TolGuide,
|
TheWalk.Perform(Func,FInv,HGuide,NewFirst,Target,MS,TolGuide,
|
||||||
ParSol,TolEsp,Fleche,Appro);
|
ParSol,TolEsp,Fleche,Appro);
|
||||||
|
|
||||||
if (!TheWalk.IsDone()) {
|
if (!TheWalk.IsDone()) {
|
||||||
|
@@ -371,8 +371,7 @@ static Standard_Boolean Update(Handle(Adaptor3d_HSurface)& face,
|
|||||||
pared = ponc1.Parameter();
|
pared = ponc1.Parameter();
|
||||||
parltg = ponc2.Parameter();
|
parltg = ponc2.Parameter();
|
||||||
if ((parltg > f) && (parltg < l)) {
|
if ((parltg > f) && (parltg < l)) {
|
||||||
#ifdef OCC23139
|
////modified by jgv, 10.05.2012 for the bug 23139, 25657////
|
||||||
////modified by jgv, 10.05.2012 for the bug 23139////
|
|
||||||
Handle(Geom2d_Curve) PConF = fi.PCurveOnFace();
|
Handle(Geom2d_Curve) PConF = fi.PCurveOnFace();
|
||||||
if (!PConF.IsNull())
|
if (!PConF.IsNull())
|
||||||
{
|
{
|
||||||
@@ -393,7 +392,6 @@ static Standard_Boolean Update(Handle(Adaptor3d_HSurface)& face,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
#endif
|
|
||||||
fi.SetParameter(parltg,isfirst);
|
fi.SetParameter(parltg,isfirst);
|
||||||
cp.SetArc(cp.Tolerance(),cp.Arc(),pared,cp.TransitionOnArc());
|
cp.SetArc(cp.Tolerance(),cp.Arc(),pared,cp.TransitionOnArc());
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
|
@@ -50,6 +50,10 @@ is
|
|||||||
LastParameter(me) returns Real from Standard
|
LastParameter(me) returns Real from Standard
|
||||||
is redefined;
|
is redefined;
|
||||||
|
|
||||||
|
GetSavedFirstParameter(me) returns Real from Standard;
|
||||||
|
|
||||||
|
GetSavedLastParameter(me) returns Real from Standard;
|
||||||
|
|
||||||
Continuity(me) returns Shape from GeomAbs
|
Continuity(me) returns Shape from GeomAbs
|
||||||
is redefined static;
|
is redefined static;
|
||||||
|
|
||||||
@@ -102,6 +106,10 @@ is
|
|||||||
|
|
||||||
LastParameter(me : in out; P : Real from Standard);
|
LastParameter(me : in out; P : Real from Standard);
|
||||||
|
|
||||||
|
SaveFirstParameter(me : in out);
|
||||||
|
|
||||||
|
SaveLastParameter(me : in out);
|
||||||
|
|
||||||
SetOrigin(me : in out; O : Real from Standard);
|
SetOrigin(me : in out; O : Real from Standard);
|
||||||
|
|
||||||
FirstPointAndTgt(me; P : out Pnt from gp; T : out Vec from gp);
|
FirstPointAndTgt(me; P : out Pnt from gp; T : out Vec from gp);
|
||||||
@@ -188,5 +196,7 @@ plast : Real from Standard;
|
|||||||
period : Real from Standard;
|
period : Real from Standard;
|
||||||
periodic : Boolean from Standard;
|
periodic : Boolean from Standard;
|
||||||
|
|
||||||
|
pfirstsav : Real from Standard;
|
||||||
|
plastsav : Real from Standard;
|
||||||
|
|
||||||
end ElSpine;
|
end ElSpine;
|
||||||
|
@@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
ChFiDS_ElSpine::ChFiDS_ElSpine():periodic(0)
|
ChFiDS_ElSpine::ChFiDS_ElSpine():periodic(0)
|
||||||
{
|
{
|
||||||
|
pfirstsav = Precision::Infinite();
|
||||||
|
plastsav = Precision::Infinite();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -51,6 +53,26 @@ Standard_Real ChFiDS_ElSpine::LastParameter() const
|
|||||||
return plast;
|
return plast;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : GetSavedFirstParameter
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
Standard_Real ChFiDS_ElSpine::GetSavedFirstParameter() const
|
||||||
|
{
|
||||||
|
return pfirstsav;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : GetSavedLastParameter
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
Standard_Real ChFiDS_ElSpine::GetSavedLastParameter() const
|
||||||
|
{
|
||||||
|
return plastsav;
|
||||||
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Continuity
|
//function : Continuity
|
||||||
//purpose :
|
//purpose :
|
||||||
@@ -229,6 +251,26 @@ void ChFiDS_ElSpine::LastParameter(const Standard_Real P)
|
|||||||
plast = P;
|
plast = P;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : SaveFirstParameter
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
void ChFiDS_ElSpine::SaveFirstParameter()
|
||||||
|
{
|
||||||
|
pfirstsav = pfirst;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : SaveLastParameter
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
void ChFiDS_ElSpine::SaveLastParameter()
|
||||||
|
{
|
||||||
|
plastsav = plast;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : SetOrigin
|
//function : SetOrigin
|
||||||
|
@@ -110,10 +110,22 @@ void Extrema_ExtPS::TreatSolution (const Extrema_POnSurf& PS,
|
|||||||
Standard_Real U, V;
|
Standard_Real U, V;
|
||||||
PS.Parameter(U, V);
|
PS.Parameter(U, V);
|
||||||
if (myS->IsUPeriodic()) {
|
if (myS->IsUPeriodic()) {
|
||||||
U = ElCLib::InPeriod(U, myuinf, myuinf+myS->UPeriod());
|
U = ElCLib::InPeriod(U, myuinf, myuinf + myS->UPeriod());
|
||||||
|
|
||||||
|
// Handle trimmed surfaces.
|
||||||
|
if (U > myusup + mytolu)
|
||||||
|
U -= myS->UPeriod();
|
||||||
|
if (U < myuinf - mytolu)
|
||||||
|
U += myS->UPeriod();
|
||||||
}
|
}
|
||||||
if (myS->IsVPeriodic()) {
|
if (myS->IsVPeriodic()) {
|
||||||
V = ElCLib::InPeriod(V, myvinf, myvinf+myS->VPeriod());
|
V = ElCLib::InPeriod(V, myvinf, myvinf + myS->VPeriod());
|
||||||
|
|
||||||
|
// Handle trimmed surfaces.
|
||||||
|
if (V > myvsup + mytolv)
|
||||||
|
V -= myS->VPeriod();
|
||||||
|
if (V < myvinf - mytolv)
|
||||||
|
V += myS->VPeriod();
|
||||||
}
|
}
|
||||||
if ((myuinf-U) <= mytolu && (U-myusup) <= mytolu &&
|
if ((myuinf-U) <= mytolu && (U-myusup) <= mytolu &&
|
||||||
(myvinf-V) <= mytolv && (V-myvsup) <= mytolv) {
|
(myvinf-V) <= mytolv && (V-myvsup) <= mytolv) {
|
||||||
|
@@ -261,12 +261,6 @@ is
|
|||||||
is deferred;
|
is deferred;
|
||||||
---Purpose: call_togl_setvisualisation
|
---Purpose: call_togl_setvisualisation
|
||||||
|
|
||||||
Transparency ( me : mutable;
|
|
||||||
ACView : CView from Graphic3d;
|
|
||||||
AFlag : Boolean from Standard )
|
|
||||||
is deferred;
|
|
||||||
---Purpose: call_togl_transparency
|
|
||||||
|
|
||||||
View ( me : mutable;
|
View ( me : mutable;
|
||||||
ACView : in out CView from Graphic3d )
|
ACView : in out CView from Graphic3d )
|
||||||
returns Boolean from Standard
|
returns Boolean from Standard
|
||||||
|
@@ -977,6 +977,8 @@ void IntAna_QuadQuadGeo::Perform(const gp_Cylinder& Cyl1,
|
|||||||
gp_Dir DirCyl = Cyl1.Position().Direction();
|
gp_Dir DirCyl = Cyl1.Position().Direction();
|
||||||
Standard_Real ProjP2OnDirCyl1=gp_Vec(DirCyl).Dot(gp_Vec(P1,P2t));
|
Standard_Real ProjP2OnDirCyl1=gp_Vec(DirCyl).Dot(gp_Vec(P1,P2t));
|
||||||
|
|
||||||
|
//P2 is a projection the location of the 2nd cylinder on the base
|
||||||
|
//of the 1st cylinder
|
||||||
P2.SetCoord(P2t.X() - ProjP2OnDirCyl1*DirCyl.X(),
|
P2.SetCoord(P2t.X() - ProjP2OnDirCyl1*DirCyl.X(),
|
||||||
P2t.Y() - ProjP2OnDirCyl1*DirCyl.Y(),
|
P2t.Y() - ProjP2OnDirCyl1*DirCyl.Y(),
|
||||||
P2t.Z() - ProjP2OnDirCyl1*DirCyl.Z());
|
P2t.Z() - ProjP2OnDirCyl1*DirCyl.Z());
|
||||||
@@ -987,7 +989,7 @@ void IntAna_QuadQuadGeo::Perform(const gp_Cylinder& Cyl1,
|
|||||||
typeres=IntAna_Empty;
|
typeres=IntAna_Empty;
|
||||||
nbint=0;
|
nbint=0;
|
||||||
}
|
}
|
||||||
else if(DistA1A2>(R1pR2))
|
else if((R1pR2 - DistA1A2) <= RealSmall())
|
||||||
{
|
{
|
||||||
//-- 1 Tangent line -------------------------------------OK
|
//-- 1 Tangent line -------------------------------------OK
|
||||||
typeres=IntAna_Line;
|
typeres=IntAna_Line;
|
||||||
@@ -1005,32 +1007,85 @@ void IntAna_QuadQuadGeo::Perform(const gp_Cylinder& Cyl1,
|
|||||||
typeres=IntAna_Line;
|
typeres=IntAna_Line;
|
||||||
nbint=2;
|
nbint=2;
|
||||||
dir1=DirCyl;
|
dir1=DirCyl;
|
||||||
gp_Vec P1P2(P1,P2);
|
|
||||||
gp_Dir DirA1A2=gp_Dir(P1P2);
|
|
||||||
gp_Dir Ortho_dir1_P1P2 = dir1.Crossed(DirA1A2);
|
|
||||||
dir2=dir1;
|
dir2=dir1;
|
||||||
Standard_Real Alpha=0.5*(R1*R1-R2*R2+DistA1A2*DistA1A2)/(DistA1A2);
|
|
||||||
|
|
||||||
//Standard_Real Beta = Sqrt(R1*R1-Alpha*Alpha);
|
const Standard_Real aR1R1 = R1*R1;
|
||||||
Standard_Real anSqrtArg = R1*R1-Alpha*Alpha;
|
|
||||||
Standard_Real Beta = (anSqrtArg > 0.) ? Sqrt(anSqrtArg) : 0.;
|
/*
|
||||||
|
P1
|
||||||
|
o
|
||||||
|
* | *
|
||||||
|
* O1| *
|
||||||
|
A o-----o-----o B
|
||||||
|
* | *
|
||||||
|
* | *
|
||||||
|
o
|
||||||
|
P2
|
||||||
|
|
||||||
|
Two cylinders have axes collinear. Therefore, problem can be reformulated as
|
||||||
|
to find intersection point of two circles (the bases of the cylinders) on
|
||||||
|
the plane: 1st circle has center P1 and radius R1 (the radius of the
|
||||||
|
1st cylinder) and 2nd circle has center P2 and radius R2 (the radius of the
|
||||||
|
2nd cylinder). The plane is the base of the 1st cylinder. Points A and B
|
||||||
|
are intersection point of these circles. Distance P1P2 is equal to DistA1A2.
|
||||||
|
O1 is the intersection point of P1P2 and AB segments.
|
||||||
|
|
||||||
|
At that, if distance AB < Tol we consider that the circles are tangent and
|
||||||
|
has only one intersection point.
|
||||||
|
|
||||||
|
AB = 2*R1*sin(angle AP1P2).
|
||||||
|
Accordingly,
|
||||||
|
AB^2 < Tol^2 => 4*R1*R1*sin(angle AP1P2)^2 < Tol*Tol.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
if((Beta+Beta)<Tol)
|
//Cosine and Square of Sine of the A-P1-P2 angle
|
||||||
|
const Standard_Real aCos = 0.5*(aR1R1-R2*R2+DistA1A2*DistA1A2)/(R1*DistA1A2);
|
||||||
|
const Standard_Real aSin2 = 1-aCos*aCos;
|
||||||
|
|
||||||
|
const Standard_Boolean isTangent =((4.0*aR1R1*aSin2) < Tol*Tol);
|
||||||
|
|
||||||
|
//Normalized vector P1P2
|
||||||
|
const gp_Vec DirA1A2((P2.XYZ() - P1.XYZ())/DistA1A2);
|
||||||
|
|
||||||
|
if(isTangent)
|
||||||
{
|
{
|
||||||
|
//Intercept the segment from P1 point along P1P2 direction
|
||||||
|
//and having |P1O1| length
|
||||||
nbint=1;
|
nbint=1;
|
||||||
pt1.SetCoord( P1.X() + Alpha*DirA1A2.X()
|
pt1.SetXYZ(P1.XYZ() + DirA1A2.XYZ()*R1*aCos);
|
||||||
,P1.Y() + Alpha*DirA1A2.Y()
|
|
||||||
,P1.Z() + Alpha*DirA1A2.Z());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pt1.SetCoord( P1.X() + Alpha*DirA1A2.X() + Beta*Ortho_dir1_P1P2.X(),
|
//Sine of the A-P1-P2 angle (if aSin2 < 0 then isTangent == TRUE =>
|
||||||
P1.Y() + Alpha*DirA1A2.Y() + Beta*Ortho_dir1_P1P2.Y(),
|
//go to another branch)
|
||||||
P1.Z() + Alpha*DirA1A2.Z() + Beta*Ortho_dir1_P1P2.Z());
|
const Standard_Real aSin = sqrt(aSin2);
|
||||||
|
|
||||||
pt2.SetCoord( P1.X() + Alpha*DirA1A2.X() - Beta*Ortho_dir1_P1P2.X(),
|
//1. Rotate P1P2 to the angle A-P1-P2 relative to P1
|
||||||
P1.Y() + Alpha*DirA1A2.Y() - Beta*Ortho_dir1_P1P2.Y(),
|
//(clockwise and anticlockwise for getting
|
||||||
P1.Z() + Alpha*DirA1A2.Z() - Beta*Ortho_dir1_P1P2.Z());
|
//two intersection points).
|
||||||
|
//2. Intercept the segment from P1 along direction,
|
||||||
|
//determined in the preview paragraph and having R1 length
|
||||||
|
const gp_Dir &aXDir = Cyl1.Position().XDirection(),
|
||||||
|
&aYDir = Cyl1.Position().YDirection();
|
||||||
|
const gp_Vec aR1Xdir = R1*aXDir.XYZ(),
|
||||||
|
aR1Ydir = R1*aYDir.XYZ();
|
||||||
|
|
||||||
|
//Source 2D-coordinates of the P1P2 vector normalized
|
||||||
|
//in coordinate system, based on the X- and Y-directions
|
||||||
|
//of the 1st cylinder in the plane of the 1st cylinder base
|
||||||
|
//(P1 is the origin of the coordinate system).
|
||||||
|
const Standard_Real aDx = DirA1A2.Dot(aXDir),
|
||||||
|
aDy = DirA1A2.Dot(aYDir);
|
||||||
|
|
||||||
|
//New coordinate (after rotation) of the P1P2 vector normalized.
|
||||||
|
Standard_Real aNewDx = aDx*aCos - aDy*aSin,
|
||||||
|
aNewDy = aDy*aCos + aDx*aSin;
|
||||||
|
pt1.SetXYZ(P1.XYZ() + aNewDx*aR1Xdir.XYZ() + aNewDy*aR1Ydir.XYZ());
|
||||||
|
|
||||||
|
aNewDx = aDx*aCos + aDy*aSin;
|
||||||
|
aNewDy = aDy*aCos - aDx*aSin;
|
||||||
|
pt2.SetXYZ(P1.XYZ() + aNewDx*aR1Xdir.XYZ() + aNewDy*aR1Ydir.XYZ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(DistA1A2>(RmR-Tol))
|
else if(DistA1A2>(RmR-Tol))
|
||||||
|
@@ -1151,6 +1151,7 @@ static Standard_Boolean AddPointIntoWL( const IntSurf_Quadric& theQuad1,
|
|||||||
const Standard_Real theUlSurf1,
|
const Standard_Real theUlSurf1,
|
||||||
const Standard_Real thePeriodOfSurf1,
|
const Standard_Real thePeriodOfSurf1,
|
||||||
const Handle(IntSurf_LineOn2S)& theLine,
|
const Handle(IntSurf_LineOn2S)& theLine,
|
||||||
|
const Standard_Real theTol3D,
|
||||||
const Standard_Real theTol2D,
|
const Standard_Real theTol2D,
|
||||||
const Standard_Boolean theFlForce)
|
const Standard_Boolean theFlForce)
|
||||||
{
|
{
|
||||||
@@ -1177,6 +1178,32 @@ static Standard_Boolean AddPointIntoWL( const IntSurf_Quadric& theQuad1,
|
|||||||
thePntOnSurf2.X(), thePntOnSurf2.Y());
|
thePntOnSurf2.X(), thePntOnSurf2.Y());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Standard_Integer aNbPnts = theLine->NbPoints();
|
||||||
|
if(aNbPnts > 0)
|
||||||
|
{
|
||||||
|
Standard_Real aUl = 0.0, aVl = 0.0;
|
||||||
|
const IntSurf_PntOn2S aPlast = theLine->Value(aNbPnts);
|
||||||
|
if(isTheReverse)
|
||||||
|
aPlast.ParametersOnS2(aUl, aVl);
|
||||||
|
else
|
||||||
|
aPlast.ParametersOnS1(aUl, aVl);
|
||||||
|
|
||||||
|
if(anUpar <= aUl)
|
||||||
|
{//Parameter value will be always increased.
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
|
||||||
|
//theTol2D is minimal step along parameter changed.
|
||||||
|
//Therefore, if we apply this minimal step two
|
||||||
|
//neighbour points will be always "same". Consequently,
|
||||||
|
//we should reduce tolerance for IsSame checking.
|
||||||
|
const Standard_Real aDTol = 1.0-Epsilon(1.0);
|
||||||
|
if(aPnt.IsSame(aPlast, theTol3D*aDTol, theTol2D*aDTol))
|
||||||
|
{
|
||||||
|
theLine->RemovePoint(aNbPnts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
theLine->Add(aPnt);
|
theLine->Add(aPnt);
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
@@ -1191,6 +1218,7 @@ static Standard_Boolean AddBoundaryPoint( const IntSurf_Quadric& theQuad1,
|
|||||||
const stCoeffsValue& theCoeffs,
|
const stCoeffsValue& theCoeffs,
|
||||||
const Bnd_Box2d& theUVSurf1,
|
const Bnd_Box2d& theUVSurf1,
|
||||||
const Bnd_Box2d& theUVSurf2,
|
const Bnd_Box2d& theUVSurf2,
|
||||||
|
const Standard_Real theTol3D,
|
||||||
const Standard_Real theTol2D,
|
const Standard_Real theTol2D,
|
||||||
const Standard_Real thePeriod,
|
const Standard_Real thePeriod,
|
||||||
const Standard_Real theNulValue,
|
const Standard_Real theNulValue,
|
||||||
@@ -1281,7 +1309,7 @@ static Standard_Boolean AddBoundaryPoint( const IntSurf_Quadric& theQuad1,
|
|||||||
AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
||||||
gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
|
gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
|
||||||
aUSurf1f, aUSurf1l, thePeriod,
|
aUSurf1f, aUSurf1l, thePeriod,
|
||||||
theWL->Curve(), theTol2D, theFlForce);
|
theWL->Curve(), theTol3D, theTol2D, theFlForce);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1313,7 +1341,7 @@ static Standard_Boolean AddBoundaryPoint( const IntSurf_Quadric& theQuad1,
|
|||||||
AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
||||||
gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
|
gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
|
||||||
aUSurf1f, aUSurf1l, thePeriod,
|
aUSurf1f, aUSurf1l, thePeriod,
|
||||||
theWL->Curve(), theTol2D, theFlForce);
|
theWL->Curve(),theTol3D, theTol2D, theFlForce);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1346,7 +1374,7 @@ static Standard_Boolean AddBoundaryPoint( const IntSurf_Quadric& theQuad1,
|
|||||||
AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
||||||
gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
|
gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
|
||||||
aUSurf1f, aUSurf1l, thePeriod,
|
aUSurf1f, aUSurf1l, thePeriod,
|
||||||
theWL->Curve(), theTol2D, theFlForce);
|
theWL->Curve(), theTol3D, theTol2D, theFlForce);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1376,7 +1404,7 @@ static Standard_Boolean AddBoundaryPoint( const IntSurf_Quadric& theQuad1,
|
|||||||
AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
||||||
gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
|
gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
|
||||||
aUSurf1f, aUSurf1l, thePeriod,
|
aUSurf1f, aUSurf1l, thePeriod,
|
||||||
theWL->Curve(), theTol2D, theFlForce);
|
theWL->Curve(), theTol3D, theTol2D, theFlForce);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1545,7 +1573,8 @@ static void CriticalPointsComputing(const stCoeffsValue& theCoeffs,
|
|||||||
{
|
{
|
||||||
Standard_Real &a = theU1crit[i],
|
Standard_Real &a = theU1crit[i],
|
||||||
&b = theU1crit[i-1];
|
&b = theU1crit[i-1];
|
||||||
if(Abs(a - b) < theTol2D)
|
const Standard_Real aRemain = fmod(Abs(a - b), thePeriod); // >= 0, because Abs(a - b) >= 0
|
||||||
|
if((Abs(a - b) < theTol2D) || (aRemain < theTol2D) || (Abs(aRemain - thePeriod) < theTol2D))
|
||||||
{
|
{
|
||||||
a = (a + b)/2.0;
|
a = (a + b)/2.0;
|
||||||
b = Precision::Infinite();
|
b = Precision::Infinite();
|
||||||
@@ -1817,6 +1846,7 @@ Standard_Boolean IntCyCyTrim( const IntSurf_Quadric& theQuad1,
|
|||||||
Standard_Boolean isAddedIntoWL1 = Standard_False, isAddedIntoWL2 = Standard_False;
|
Standard_Boolean isAddedIntoWL1 = Standard_False, isAddedIntoWL2 = Standard_False;
|
||||||
|
|
||||||
Standard_Real anUf = aU1f[aCurInterval], anUl = aU1l[aCurInterval];
|
Standard_Real anUf = aU1f[aCurInterval], anUl = aU1l[aCurInterval];
|
||||||
|
const Standard_Boolean isDeltaPeriod = IsEqual(anUl-anUf, aPeriod);
|
||||||
|
|
||||||
//Inscribe and sort critical points
|
//Inscribe and sort critical points
|
||||||
InscribeAndSortArray(anU1crit, aNbCritPointsMax, anUf, anUl, theTol2D, aPeriod);
|
InscribeAndSortArray(anU1crit, aNbCritPointsMax, anUf, anUl, theTol2D, aPeriod);
|
||||||
@@ -1830,6 +1860,8 @@ Standard_Boolean IntCyCyTrim( const IntSurf_Quadric& theQuad1,
|
|||||||
Handle(IntPatch_WLine) aWLine2 = new IntPatch_WLine(aL2S2, Standard_False);
|
Handle(IntPatch_WLine) aWLine2 = new IntPatch_WLine(aL2S2, Standard_False);
|
||||||
|
|
||||||
Standard_Integer aWL1FindStatus = 0, aWL2FindStatus = 0;
|
Standard_Integer aWL1FindStatus = 0, aWL2FindStatus = 0;
|
||||||
|
Standard_Boolean isAddingWL1Enabled = Standard_True,
|
||||||
|
isAddingWL2Enabled = Standard_True;
|
||||||
|
|
||||||
Standard_Real anU1 = anUf;
|
Standard_Real anU1 = anUf;
|
||||||
|
|
||||||
@@ -1845,6 +1877,23 @@ Standard_Boolean IntCyCyTrim( const IntSurf_Quadric& theQuad1,
|
|||||||
|
|
||||||
while(anU1 <= anUl)
|
while(anU1 <= anUl)
|
||||||
{
|
{
|
||||||
|
if(isDeltaPeriod)
|
||||||
|
{
|
||||||
|
if(IsEqual(anU1, anUl))
|
||||||
|
{
|
||||||
|
//if isAddedIntoWL* == TRUE WLine contains only one point
|
||||||
|
//(which was end point of previous WLine). If we will
|
||||||
|
//add point found on the current step WLine will contain only
|
||||||
|
//two points. At that both these points will be equal to the
|
||||||
|
//points found earlier. Therefore, new WLine will repeat
|
||||||
|
//already existing WLine. Consequently, it is necessary
|
||||||
|
//to forbid building new line in this case.
|
||||||
|
|
||||||
|
isAddingWL1Enabled = !isAddedIntoWL1;
|
||||||
|
isAddingWL2Enabled = !isAddedIntoWL2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for(Standard_Integer i = 0; i < aNbCritPointsMax; i++)
|
for(Standard_Integer i = 0; i < aNbCritPointsMax; i++)
|
||||||
{
|
{
|
||||||
if((anU1 - anU1crit[i])*aCriticalDelta[i] < 0.0)
|
if((anU1 - anU1crit[i])*aCriticalDelta[i] < 0.0)
|
||||||
@@ -1995,123 +2044,129 @@ Standard_Boolean IntCyCyTrim( const IntSurf_Quadric& theQuad1,
|
|||||||
isFirst = Standard_False;
|
isFirst = Standard_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ((aUSurf2f-aU21) <= theTol2D) &&
|
if(isAddingWL1Enabled)
|
||||||
((aU21-aUSurf2l) <= theTol2D) &&
|
|
||||||
((aVSurf1f - aV11) <= theTol2D) &&
|
|
||||||
((aV11 - aVSurf1l) <= theTol2D) &&
|
|
||||||
((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
|
|
||||||
{
|
{
|
||||||
Standard_Boolean isForce = Standard_False;
|
if( ((aUSurf2f-aU21) <= theTol2D) &&
|
||||||
if(!aWL1FindStatus)
|
((aU21-aUSurf2l) <= theTol2D) &&
|
||||||
|
((aVSurf1f - aV11) <= theTol2D) &&
|
||||||
|
((aV11 - aVSurf1l) <= theTol2D) &&
|
||||||
|
((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
|
||||||
{
|
{
|
||||||
Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
|
Standard_Boolean isForce = Standard_False;
|
||||||
|
if(!aWL1FindStatus)
|
||||||
if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
|
|
||||||
{
|
{
|
||||||
isForce = Standard_True;
|
Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
|
||||||
}
|
|
||||||
|
|
||||||
AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
|
if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
|
||||||
theUVSurf1, theUVSurf2, theTol2D, aPeriod,
|
{
|
||||||
aNulValue, anU1, aU21, aV11, aV11Prev,
|
isForce = Standard_True;
|
||||||
aV21, aV21Prev, isTheReverse,
|
}
|
||||||
1.0, isForce, isFound1, isFound2);
|
|
||||||
|
AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
|
||||||
|
theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
|
||||||
|
aNulValue, anU1, aU21, aV11, aV11Prev,
|
||||||
|
aV21, aV21Prev, isTheReverse,
|
||||||
|
1.0, isForce, isFound1, isFound2);
|
||||||
|
|
||||||
if(isFound1 || isFound2)
|
if(isFound1 || isFound2)
|
||||||
{
|
|
||||||
aWL1FindStatus = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
|
|
||||||
{
|
|
||||||
if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
|
||||||
gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
|
|
||||||
aUSurf1f, aUSurf1l, aPeriod,
|
|
||||||
aWLine1->Curve(), theTol2D, isForce))
|
|
||||||
{
|
|
||||||
if(!aWL1FindStatus)
|
|
||||||
{
|
{
|
||||||
aWL1FindStatus = 1;
|
aWL1FindStatus = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(aWL1FindStatus == 1)
|
|
||||||
{
|
|
||||||
Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
|
|
||||||
|
|
||||||
AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
|
if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
|
||||||
theUVSurf1, theUVSurf2, theTol2D, aPeriod,
|
|
||||||
aNulValue, anU1, aU21, aV11, aV11Prev,
|
|
||||||
aV21, aV21Prev, isTheReverse,
|
|
||||||
1.0, Standard_False, isFound1, isFound2);
|
|
||||||
|
|
||||||
if(isFound1 || isFound2)
|
|
||||||
aWL1FindStatus = 2; //start a new line
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( ((aUSurf2f-aU22) <= theTol2D) &&
|
|
||||||
((aU22-aUSurf2l) <= theTol2D) &&
|
|
||||||
((aVSurf1f - aV12) <= theTol2D) &&
|
|
||||||
((aV12 - aVSurf1l) <= theTol2D) &&
|
|
||||||
((aVSurf2f - aV22) <= theTol2D) &&
|
|
||||||
((aV22 - aVSurf2l) <= theTol2D))
|
|
||||||
{
|
|
||||||
Standard_Boolean isForce = Standard_False;
|
|
||||||
|
|
||||||
if(!aWL2FindStatus)
|
|
||||||
{
|
|
||||||
Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
|
|
||||||
|
|
||||||
if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
|
|
||||||
{
|
{
|
||||||
isForce = Standard_True;
|
if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
||||||
|
gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
|
||||||
|
aUSurf1f, aUSurf1l, aPeriod,
|
||||||
|
aWLine1->Curve(), theTol3D, theTol2D, isForce))
|
||||||
|
{
|
||||||
|
if(!aWL1FindStatus)
|
||||||
|
{
|
||||||
|
aWL1FindStatus = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(aWL1FindStatus == 1)
|
||||||
|
{
|
||||||
|
Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
|
||||||
|
|
||||||
AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
|
AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
|
||||||
theUVSurf1, theUVSurf2, theTol2D, aPeriod,
|
theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
|
||||||
aNulValue, anU1, aU22, aV12, aV12Prev,
|
aNulValue, anU1, aU21, aV11, aV11Prev,
|
||||||
aV22, aV22Prev, isTheReverse,
|
aV21, aV21Prev, isTheReverse,
|
||||||
-1.0, isForce, isFound1, isFound2);
|
1.0, Standard_False, isFound1, isFound2);
|
||||||
|
|
||||||
|
if(isFound1 || isFound2)
|
||||||
|
aWL1FindStatus = 2; //start a new line
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isAddingWL2Enabled)
|
||||||
|
{
|
||||||
|
if( ((aUSurf2f-aU22) <= theTol2D) &&
|
||||||
|
((aU22-aUSurf2l) <= theTol2D) &&
|
||||||
|
((aVSurf1f - aV12) <= theTol2D) &&
|
||||||
|
((aV12 - aVSurf1l) <= theTol2D) &&
|
||||||
|
((aVSurf2f - aV22) <= theTol2D) &&
|
||||||
|
((aV22 - aVSurf2l) <= theTol2D))
|
||||||
|
{
|
||||||
|
Standard_Boolean isForce = Standard_False;
|
||||||
|
|
||||||
|
if(!aWL2FindStatus)
|
||||||
|
{
|
||||||
|
Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
|
||||||
|
|
||||||
|
if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
|
||||||
|
{
|
||||||
|
isForce = Standard_True;
|
||||||
|
}
|
||||||
|
|
||||||
|
AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
|
||||||
|
theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
|
||||||
|
aNulValue, anU1, aU22, aV12, aV12Prev,
|
||||||
|
aV22, aV22Prev, isTheReverse,
|
||||||
|
-1.0, isForce, isFound1, isFound2);
|
||||||
|
|
||||||
if(isFound1 || isFound2)
|
if(isFound1 || isFound2)
|
||||||
{
|
|
||||||
aWL2FindStatus = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
|
|
||||||
{
|
|
||||||
if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
|
||||||
gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
|
|
||||||
aUSurf1f, aUSurf1l, aPeriod,
|
|
||||||
aWLine2->Curve(), theTol2D, isForce))
|
|
||||||
{
|
|
||||||
if(!aWL2FindStatus)
|
|
||||||
{
|
{
|
||||||
aWL2FindStatus = 1;
|
aWL2FindStatus = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
|
||||||
|
{
|
||||||
|
if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
|
||||||
|
gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
|
||||||
|
aUSurf1f, aUSurf1l, aPeriod,
|
||||||
|
aWLine2->Curve(), theTol3D, theTol2D, isForce))
|
||||||
|
{
|
||||||
|
if(!aWL2FindStatus)
|
||||||
|
{
|
||||||
|
aWL2FindStatus = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
else
|
|
||||||
{
|
|
||||||
if(aWL2FindStatus == 1)
|
|
||||||
{
|
{
|
||||||
Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
|
if(aWL2FindStatus == 1)
|
||||||
|
{
|
||||||
|
Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
|
||||||
|
|
||||||
AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
|
AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
|
||||||
theUVSurf1, theUVSurf2, theTol2D, aPeriod,
|
theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
|
||||||
aNulValue, anU1, aU22, aV12, aV12Prev,
|
aNulValue, anU1, aU22, aV12, aV12Prev,
|
||||||
aV22, aV22Prev, isTheReverse,
|
aV22, aV22Prev, isTheReverse,
|
||||||
-1.0, Standard_False, isFound1, isFound2);
|
-1.0, Standard_False, isFound1, isFound2);
|
||||||
|
|
||||||
if(isFound1 || isFound2)
|
if(isFound1 || isFound2)
|
||||||
aWL2FindStatus = 2; //start a new line
|
aWL2FindStatus = 2; //start a new line
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2237,15 +2292,29 @@ Standard_Boolean IntCyCyTrim( const IntSurf_Quadric& theQuad1,
|
|||||||
}
|
}
|
||||||
else if(aWLine1->NbPnts() > 1)
|
else if(aWLine1->NbPnts() > 1)
|
||||||
{
|
{
|
||||||
isTheEmpty = Standard_False;
|
Standard_Boolean isGood = Standard_True;
|
||||||
isAddedIntoWL1 = Standard_True;
|
|
||||||
|
|
||||||
SeekAdditionalPoints(theQuad1, theQuad2, aWLine1->Curve(),
|
if(aWLine1->NbPnts() == 2)
|
||||||
anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
|
{
|
||||||
theTol2D, aPeriod, 1.0, isTheReverse);
|
const IntSurf_PntOn2S& aPf = aWLine1->Point(1);
|
||||||
|
const IntSurf_PntOn2S& aPl = aWLine1->Point(2);
|
||||||
|
|
||||||
aWLine1->ComputeVertexParameters(theTol3D);
|
if(aPf.IsSame(aPl, Precision::Confusion()))
|
||||||
theSlin.Append(aWLine1);
|
isGood = Standard_False;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isGood)
|
||||||
|
{
|
||||||
|
isTheEmpty = Standard_False;
|
||||||
|
isAddedIntoWL1 = Standard_True;
|
||||||
|
|
||||||
|
SeekAdditionalPoints( theQuad1, theQuad2, aWLine1->Curve(),
|
||||||
|
anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
|
||||||
|
theTol2D, aPeriod, 1.0, isTheReverse);
|
||||||
|
|
||||||
|
aWLine1->ComputeVertexParameters(theTol3D);
|
||||||
|
theSlin.Append(aWLine1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2267,15 +2336,28 @@ Standard_Boolean IntCyCyTrim( const IntSurf_Quadric& theQuad1,
|
|||||||
}
|
}
|
||||||
else if(aWLine2->NbPnts() > 1)
|
else if(aWLine2->NbPnts() > 1)
|
||||||
{
|
{
|
||||||
isTheEmpty = Standard_False;
|
Standard_Boolean isGood = Standard_True;
|
||||||
isAddedIntoWL2 = Standard_True;
|
if(aWLine2->NbPnts() == 2)
|
||||||
|
{
|
||||||
|
const IntSurf_PntOn2S& aPf = aWLine2->Point(1);
|
||||||
|
const IntSurf_PntOn2S& aPl = aWLine2->Point(2);
|
||||||
|
|
||||||
SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
|
if(aPf.IsSame(aPl, Precision::Confusion()))
|
||||||
anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
|
isGood = Standard_False;
|
||||||
theTol2D, aPeriod, -1.0, isTheReverse);
|
}
|
||||||
|
|
||||||
aWLine2->ComputeVertexParameters(theTol3D);
|
if(isGood)
|
||||||
theSlin.Append(aWLine2);
|
{
|
||||||
|
isTheEmpty = Standard_False;
|
||||||
|
isAddedIntoWL2 = Standard_True;
|
||||||
|
|
||||||
|
SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
|
||||||
|
anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
|
||||||
|
theTol2D, aPeriod, -1.0, isTheReverse);
|
||||||
|
|
||||||
|
aWLine2->ComputeVertexParameters(theTol3D);
|
||||||
|
theSlin.Append(aWLine2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2284,6 +2366,203 @@ Standard_Boolean IntCyCyTrim( const IntSurf_Quadric& theQuad1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(theSlin.Length() > 0)
|
||||||
|
{
|
||||||
|
for(Standard_Integer aNumOfLine = 2; aNumOfLine <= theSlin.Length(); aNumOfLine++)
|
||||||
|
{
|
||||||
|
const Handle(IntPatch_WLine)& aWLine = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine));
|
||||||
|
|
||||||
|
const IntSurf_PntOn2S& aPntFWL = aWLine->Point(1);
|
||||||
|
|
||||||
|
Standard_Real aU1 = 0.0, aU2 = 0.0, aV1 = 0.0, aV2 = 0.0;
|
||||||
|
aPntFWL.Parameters(aU1, aV1, aU2, aV2);
|
||||||
|
|
||||||
|
if( IsEqual(aU1, 0.0) || IsEqual(aU1, aPeriod))
|
||||||
|
{
|
||||||
|
theSlin.Exchange(1, aNumOfLine);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Standard_Integer aNumOfLine1 = 1; aNumOfLine1 <= theSlin.Length(); aNumOfLine1++)
|
||||||
|
{
|
||||||
|
const Handle(IntPatch_WLine)& aWLine1 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine1));
|
||||||
|
|
||||||
|
const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
|
||||||
|
const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
|
||||||
|
const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
|
||||||
|
|
||||||
|
for(Standard_Integer aNPt = 1; aNPt <= theSPnt.Length(); aNPt++)
|
||||||
|
{
|
||||||
|
const IntSurf_PntOn2S aPntCur = theSPnt.Value(aNPt).PntOn2S();
|
||||||
|
|
||||||
|
if( aPntCur.IsSame(aPntFWL1, Precision::Confusion()) ||
|
||||||
|
aPntCur.IsSame(aPntLWL1, Precision::Confusion()))
|
||||||
|
{
|
||||||
|
theSPnt.Remove(aNPt);
|
||||||
|
aNPt--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Standard_Boolean hasBeenRemoved = Standard_False;
|
||||||
|
for(Standard_Integer aNumOfLine2 = aNumOfLine1 + 1; aNumOfLine2 <= theSlin.Length(); aNumOfLine2++)
|
||||||
|
{
|
||||||
|
const Handle(IntPatch_WLine)& aWLine2 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine2));
|
||||||
|
|
||||||
|
const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
|
||||||
|
const Standard_Integer aNbPntsWL2 = aWLine2->NbPnts();
|
||||||
|
|
||||||
|
const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
|
||||||
|
const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
|
||||||
|
|
||||||
|
const IntSurf_PntOn2S& aPntFWL2 = aWLine2->Point(1);
|
||||||
|
const IntSurf_PntOn2S& aPntLWL2 = aWLine2->Point(aNbPntsWL2);
|
||||||
|
|
||||||
|
if(aPntFWL1.IsSame(aPntFWL2, Precision::Confusion()))
|
||||||
|
{
|
||||||
|
Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
|
||||||
|
Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
|
||||||
|
|
||||||
|
aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
|
||||||
|
aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
|
||||||
|
|
||||||
|
if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU12, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU21, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU22, aPeriod), 0.0) ||
|
||||||
|
IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
|
||||||
|
IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
|
||||||
|
IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
|
||||||
|
IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
|
||||||
|
{
|
||||||
|
aWLine1->ClearVertexes();
|
||||||
|
for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
|
||||||
|
{
|
||||||
|
const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
|
||||||
|
aWLine1->Curve()->InsertBefore(1, aPt);
|
||||||
|
}
|
||||||
|
|
||||||
|
aWLine1->ComputeVertexParameters(theTol3D);
|
||||||
|
|
||||||
|
theSlin.Remove(aNumOfLine2);
|
||||||
|
aNumOfLine2--;
|
||||||
|
hasBeenRemoved = Standard_True;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(aPntFWL1.IsSame(aPntLWL2, Precision::Confusion()))
|
||||||
|
{
|
||||||
|
Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
|
||||||
|
Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
|
||||||
|
|
||||||
|
aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
|
||||||
|
aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
|
||||||
|
|
||||||
|
if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU12, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU21, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU22, aPeriod), 0.0) ||
|
||||||
|
IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
|
||||||
|
IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
|
||||||
|
IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
|
||||||
|
IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
|
||||||
|
{
|
||||||
|
aWLine1->ClearVertexes();
|
||||||
|
for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
|
||||||
|
{
|
||||||
|
const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
|
||||||
|
aWLine1->Curve()->InsertBefore(1, aPt);
|
||||||
|
}
|
||||||
|
|
||||||
|
aWLine1->ComputeVertexParameters(theTol3D);
|
||||||
|
|
||||||
|
theSlin.Remove(aNumOfLine2);
|
||||||
|
aNumOfLine2--;
|
||||||
|
hasBeenRemoved = Standard_True;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(aPntLWL1.IsSame(aPntFWL2, Precision::Confusion()))
|
||||||
|
{
|
||||||
|
Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
|
||||||
|
Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
|
||||||
|
|
||||||
|
aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
|
||||||
|
aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
|
||||||
|
|
||||||
|
if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU12, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU21, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU22, aPeriod), 0.0) ||
|
||||||
|
IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
|
||||||
|
IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
|
||||||
|
IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
|
||||||
|
IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
|
||||||
|
{
|
||||||
|
aWLine1->ClearVertexes();
|
||||||
|
for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
|
||||||
|
{
|
||||||
|
const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
|
||||||
|
aWLine1->Curve()->Add(aPt);
|
||||||
|
}
|
||||||
|
|
||||||
|
aWLine1->ComputeVertexParameters(theTol3D);
|
||||||
|
|
||||||
|
theSlin.Remove(aNumOfLine2);
|
||||||
|
aNumOfLine2--;
|
||||||
|
hasBeenRemoved = Standard_True;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(aPntLWL1.IsSame(aPntLWL2, Precision::Confusion()))
|
||||||
|
{
|
||||||
|
Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
|
||||||
|
Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
|
||||||
|
|
||||||
|
aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
|
||||||
|
aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
|
||||||
|
|
||||||
|
if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU12, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU21, aPeriod), 0.0) ||
|
||||||
|
IsEqual(fmod(aU22, aPeriod), 0.0) ||
|
||||||
|
IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
|
||||||
|
IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
|
||||||
|
IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
|
||||||
|
IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
|
||||||
|
{
|
||||||
|
aWLine1->ClearVertexes();
|
||||||
|
for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
|
||||||
|
{
|
||||||
|
const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
|
||||||
|
aWLine1->Curve()->Add(aPt);
|
||||||
|
}
|
||||||
|
|
||||||
|
aWLine1->ComputeVertexParameters(theTol3D);
|
||||||
|
|
||||||
|
theSlin.Remove(aNumOfLine2);
|
||||||
|
aNumOfLine2--;
|
||||||
|
hasBeenRemoved = Standard_True;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hasBeenRemoved)
|
||||||
|
aNumOfLine1--;
|
||||||
|
|
||||||
|
//aWLine1->ComputeVertexParameters(theTol3D);
|
||||||
|
}
|
||||||
|
}//if(theSlin.Length() > 0)
|
||||||
|
|
||||||
|
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -309,9 +309,21 @@ is
|
|||||||
---C++: return const&
|
---C++: return const&
|
||||||
returns HCurve2d from Adaptor2d;
|
returns HCurve2d from Adaptor2d;
|
||||||
|
|
||||||
Dump(me)
|
ClearVertexes(me: mutable)
|
||||||
|
is static;
|
||||||
|
|
||||||
is static;
|
RemoveVertex(me: mutable;
|
||||||
|
theIndex : Integer from Standard)
|
||||||
|
is static;
|
||||||
|
|
||||||
|
InsertVertexBefore(me: mutable;
|
||||||
|
theIndex : Integer from Standard;
|
||||||
|
thePnt : Point from IntPatch)
|
||||||
|
is static;
|
||||||
|
|
||||||
|
Dump(me)
|
||||||
|
|
||||||
|
is static;
|
||||||
|
|
||||||
|
|
||||||
fields
|
fields
|
||||||
|
@@ -97,3 +97,27 @@ inline const IntPatch_Point& IntPatch_WLine::Vertex (const Standard_Integer Inde
|
|||||||
{
|
{
|
||||||
return svtx(Index);
|
return svtx(Index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void IntPatch_WLine::ClearVertexes()
|
||||||
|
{
|
||||||
|
svtx.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void IntPatch_WLine::RemoveVertex(const Standard_Integer theIndex)
|
||||||
|
{
|
||||||
|
if((theIndex < 1) || (theIndex > NbVertex()))
|
||||||
|
Standard_OutOfRange::Raise("Cannot delete not existing vertex");
|
||||||
|
svtx.Remove(theIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void IntPatch_WLine::InsertVertexBefore( const Standard_Integer theIndex,
|
||||||
|
const IntPatch_Point& thePnt)
|
||||||
|
{
|
||||||
|
const Standard_Integer aNbVertexes = NbVertex();
|
||||||
|
Standard_Integer anIndex = Max(theIndex, 1);
|
||||||
|
|
||||||
|
if(anIndex > aNbVertexes)
|
||||||
|
svtx.Append(thePnt);
|
||||||
|
else
|
||||||
|
svtx.InsertBefore(theIndex, thePnt);
|
||||||
|
}
|
||||||
|
@@ -119,6 +119,15 @@ is
|
|||||||
|
|
||||||
is static;
|
is static;
|
||||||
|
|
||||||
|
IsSame(me; theOterPoint : PntOn2S from IntSurf;
|
||||||
|
theTol3D, theTol2D: Real from Standard = 0.0)
|
||||||
|
|
||||||
|
---Purpose: Returns TRUE if 2D- and 3D-coordinates of theOterPoint are equal to
|
||||||
|
-- corresponding coordinates of me (with given tolerance).
|
||||||
|
-- If theTol2D == 0.0 we will compare 3D-points only.
|
||||||
|
|
||||||
|
returns Boolean from Standard;
|
||||||
|
|
||||||
|
|
||||||
fields
|
fields
|
||||||
|
|
||||||
|
@@ -49,4 +49,31 @@ void IntSurf_PntOn2S::SetValue (const Standard_Boolean OnFirst,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Standard_Boolean IntSurf_PntOn2S::IsSame( const IntSurf_PntOn2S& theOterPoint,
|
||||||
|
const Standard_Real theTol3D,
|
||||||
|
const Standard_Real theTol2D) const
|
||||||
|
{
|
||||||
|
if(pt.SquareDistance(theOterPoint.Value()) > theTol3D*theTol3D)
|
||||||
|
return Standard_False;
|
||||||
|
|
||||||
|
if(IsEqual(theTol2D, 0.0))
|
||||||
|
{//We need not compare 2D-coordinates of the points
|
||||||
|
return Standard_True;
|
||||||
|
}
|
||||||
|
|
||||||
|
Standard_Real aU1 = 0.0, aV1 = 0.0, aU2 = 0.0, aV2 = 0.0;
|
||||||
|
theOterPoint.Parameters(aU1, aV1, aU2, aV2);
|
||||||
|
|
||||||
|
gp_Pnt2d aP1(u1, v1), aP2(aU1, aV1);
|
||||||
|
|
||||||
|
if(!aP1.IsEqual(aP2, theTol2D))
|
||||||
|
return Standard_False;
|
||||||
|
|
||||||
|
aP1.SetCoord(u2, v2);
|
||||||
|
aP2.SetCoord(aU2, aV2);
|
||||||
|
|
||||||
|
if(!aP1.IsEqual(aP2, theTol2D))
|
||||||
|
return Standard_False;
|
||||||
|
|
||||||
|
return Standard_True;
|
||||||
|
}
|
||||||
|
@@ -1365,20 +1365,27 @@ Standard_Boolean IntTools_EdgeFace::CheckTouchVertex
|
|||||||
(const IntTools_CommonPrt& aCP,
|
(const IntTools_CommonPrt& aCP,
|
||||||
Standard_Real& aTx)
|
Standard_Real& aTx)
|
||||||
{
|
{
|
||||||
Standard_Real aTF, aTL, Tol, U1f,U1l,V1f,V1l, af, al,aDist2, aMinDist2, aTm, aDist2New;
|
Standard_Real aTF, aTL, Tol, U1f,U1l,V1f,V1l;
|
||||||
Standard_Real aEpsT;
|
Standard_Real aEpsT, af, al,aDist2, aMinDist2, aTm, aDist2New;
|
||||||
Standard_Boolean theflag=Standard_False;
|
Standard_Boolean theflag=Standard_False;
|
||||||
Standard_Integer aNbExt, i, iLower ;
|
Standard_Integer aNbExt, i, iLower ;
|
||||||
|
GeomAbs_CurveType aType;
|
||||||
|
//
|
||||||
aCP.Range1(aTF, aTL);
|
aCP.Range1(aTF, aTL);
|
||||||
|
aType=myC.GetType();
|
||||||
|
//
|
||||||
aEpsT=8.e-5;
|
aEpsT=8.e-5;
|
||||||
|
if (aType==GeomAbs_Line) {
|
||||||
|
aEpsT=9.e-5;
|
||||||
|
}
|
||||||
|
//
|
||||||
aTm=0.5*(aTF+aTL);
|
aTm=0.5*(aTF+aTL);
|
||||||
aDist2=DistanceFunction(aTm);
|
aDist2=DistanceFunction(aTm);
|
||||||
aDist2 *= aDist2;
|
aDist2 *= aDist2;
|
||||||
|
|
||||||
Tol = Precision::PConfusion();
|
Tol = Precision::PConfusion();
|
||||||
|
|
||||||
const Handle(Geom_Curve)& Curve =BRep_Tool::Curve (myC.Edge(), af, al);
|
const Handle(Geom_Curve)& Curve =BRep_Tool::Curve (myC.Edge(), af, al);
|
||||||
const Handle(Geom_Surface)& Surface=BRep_Tool::Surface(myS.Face());
|
const Handle(Geom_Surface)& Surface=BRep_Tool::Surface(myS.Face());
|
||||||
|
|
||||||
Surface->Bounds(U1f,U1l,V1f,V1l);
|
Surface->Bounds(U1f,U1l,V1f,V1l);
|
||||||
|
@@ -1243,10 +1243,9 @@ static Standard_Boolean isTreatAnalityc(const TopoDS_Face& theF1,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
// Do the Curve
|
// Do the Curve
|
||||||
|
//
|
||||||
|
|
||||||
typl=L->ArcType();
|
|
||||||
switch (typl) {
|
switch (typl) {
|
||||||
//########################################
|
//########################################
|
||||||
// Line, Parabola, Hyperbola
|
// Line, Parabola, Hyperbola
|
||||||
@@ -1276,10 +1275,14 @@ static Standard_Boolean isTreatAnalityc(const TopoDS_Face& theF1,
|
|||||||
//
|
//
|
||||||
aNbParts=myLConstruct.NbParts();
|
aNbParts=myLConstruct.NbParts();
|
||||||
for (i=1; i<=aNbParts; i++) {
|
for (i=1; i<=aNbParts; i++) {
|
||||||
|
Standard_Boolean bFNIt, bLPIt;
|
||||||
|
//
|
||||||
myLConstruct.Part(i, fprm, lprm);
|
myLConstruct.Part(i, fprm, lprm);
|
||||||
|
//
|
||||||
if (!Precision::IsNegativeInfinite(fprm) &&
|
bFNIt=Precision::IsNegativeInfinite(fprm);
|
||||||
!Precision::IsPositiveInfinite(lprm)) {
|
bLPIt=Precision::IsPositiveInfinite(lprm);
|
||||||
|
//
|
||||||
|
if (!bFNIt && !bLPIt) {
|
||||||
//
|
//
|
||||||
IntTools_Curve aCurve;
|
IntTools_Curve aCurve;
|
||||||
//
|
//
|
||||||
@@ -1309,7 +1312,7 @@ static Standard_Boolean isTreatAnalityc(const TopoDS_Face& theF1,
|
|||||||
//
|
//
|
||||||
aCurve.SetFirstCurve2d(H1);
|
aCurve.SetFirstCurve2d(H1);
|
||||||
}
|
}
|
||||||
|
//
|
||||||
if(myApprox2) {
|
if(myApprox2) {
|
||||||
Handle (Geom2d_Curve) C2d;
|
Handle (Geom2d_Curve) C2d;
|
||||||
BuildPCurves(fprm,lprm,Tolpc,myHS2->ChangeSurface().Surface(),newc,C2d);
|
BuildPCurves(fprm,lprm,Tolpc,myHS2->ChangeSurface().Surface(),newc,C2d);
|
||||||
@@ -1325,25 +1328,24 @@ static Standard_Boolean isTreatAnalityc(const TopoDS_Face& theF1,
|
|||||||
aCurve.SetSecondCurve2d(H1);
|
aCurve.SetSecondCurve2d(H1);
|
||||||
}
|
}
|
||||||
mySeqOfCurve.Append(aCurve);
|
mySeqOfCurve.Append(aCurve);
|
||||||
} // end of if (!Precision::IsNegativeInfinite(fprm) && !Precision::IsPositiveInfinite(lprm))
|
} //if (!bFNIt && !bLPIt) {
|
||||||
else {
|
else {
|
||||||
// on regarde si on garde
|
// on regarde si on garde
|
||||||
//
|
//
|
||||||
Standard_Boolean bFNIt, bLPIt;
|
|
||||||
Standard_Real aTestPrm, dT=100.;
|
Standard_Real aTestPrm, dT=100.;
|
||||||
|
//
|
||||||
bFNIt=Precision::IsNegativeInfinite(fprm);
|
|
||||||
bLPIt=Precision::IsPositiveInfinite(lprm);
|
|
||||||
|
|
||||||
aTestPrm=0.;
|
aTestPrm=0.;
|
||||||
|
|
||||||
if (bFNIt && !bLPIt) {
|
if (bFNIt && !bLPIt) {
|
||||||
aTestPrm=lprm-dT;
|
aTestPrm=lprm-dT;
|
||||||
}
|
}
|
||||||
else if (!bFNIt && bLPIt) {
|
else if (!bFNIt && bLPIt) {
|
||||||
aTestPrm=fprm+dT;
|
aTestPrm=fprm+dT;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// i.e, if (bFNIt && bLPIt)
|
||||||
|
aTestPrm=IntTools_Tools::IntermediatePoint(-dT, dT);
|
||||||
|
}
|
||||||
|
//
|
||||||
gp_Pnt ptref(newc->Value(aTestPrm));
|
gp_Pnt ptref(newc->Value(aTestPrm));
|
||||||
//
|
//
|
||||||
GeomAbs_SurfaceType typS1 = myHS1->GetType();
|
GeomAbs_SurfaceType typS1 = myHS1->GetType();
|
||||||
@@ -1353,8 +1355,7 @@ static Standard_Boolean isTreatAnalityc(const TopoDS_Face& theF1,
|
|||||||
typS1 == GeomAbs_SurfaceOfRevolution ||
|
typS1 == GeomAbs_SurfaceOfRevolution ||
|
||||||
typS2 == GeomAbs_SurfaceOfExtrusion ||
|
typS2 == GeomAbs_SurfaceOfExtrusion ||
|
||||||
typS2 == GeomAbs_OffsetSurface ||
|
typS2 == GeomAbs_OffsetSurface ||
|
||||||
typS2 == GeomAbs_SurfaceOfRevolution)
|
typS2 == GeomAbs_SurfaceOfRevolution) {
|
||||||
{
|
|
||||||
Handle(Geom2d_BSplineCurve) H1;
|
Handle(Geom2d_BSplineCurve) H1;
|
||||||
mySeqOfCurve.Append(IntTools_Curve(newc, H1, H1));
|
mySeqOfCurve.Append(IntTools_Curve(newc, H1, H1));
|
||||||
continue;
|
continue;
|
||||||
@@ -1373,7 +1374,7 @@ static Standard_Boolean isTreatAnalityc(const TopoDS_Face& theF1,
|
|||||||
mySeqOfCurve.Append(IntTools_Curve(newc, H1, H1));
|
mySeqOfCurve.Append(IntTools_Curve(newc, H1, H1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}// end of for (i=1; i<=myLConstruct.NbParts(); i++)
|
}// for (i=1; i<=aNbParts; i++) {
|
||||||
}// case IntPatch_Lin: case IntPatch_Parabola: case IntPatch_Hyperbola:
|
}// case IntPatch_Lin: case IntPatch_Parabola: case IntPatch_Hyperbola:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -167,7 +167,6 @@ public:
|
|||||||
Standard_EXPORT void SetClipPlanes (const Graphic3d_CView& theCView);
|
Standard_EXPORT void SetClipPlanes (const Graphic3d_CView& theCView);
|
||||||
Standard_EXPORT void SetCamera (const Graphic3d_CView& theCView);
|
Standard_EXPORT void SetCamera (const Graphic3d_CView& theCView);
|
||||||
Standard_EXPORT void SetVisualisation (const Graphic3d_CView& ACView);
|
Standard_EXPORT void SetVisualisation (const Graphic3d_CView& ACView);
|
||||||
Standard_EXPORT void Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag);
|
|
||||||
Standard_EXPORT Standard_Boolean View (Graphic3d_CView& ACView);
|
Standard_EXPORT Standard_Boolean View (Graphic3d_CView& ACView);
|
||||||
Standard_EXPORT void Environment (const Graphic3d_CView& ACView);
|
Standard_EXPORT void Environment (const Graphic3d_CView& ACView);
|
||||||
Standard_EXPORT void ZBufferTriedronSetup (const Quantity_NameOfColor XColor = Quantity_NOC_RED, const Quantity_NameOfColor YColor = Quantity_NOC_GREEN, const Quantity_NameOfColor ZColor = Quantity_NOC_BLUE1, const Standard_Real SizeRatio = 0.8, const Standard_Real AxisDiametr = 0.05, const Standard_Integer NbFacettes = 12);
|
Standard_EXPORT void ZBufferTriedronSetup (const Quantity_NameOfColor XColor = Quantity_NOC_RED, const Quantity_NameOfColor YColor = Quantity_NOC_GREEN, const Quantity_NameOfColor ZColor = Quantity_NOC_BLUE1, const Standard_Real SizeRatio = 0.8, const Standard_Real AxisDiametr = 0.05, const Standard_Integer NbFacettes = 12);
|
||||||
|
@@ -470,13 +470,6 @@ void OpenGl_GraphicDriver::SetVisualisation (const Graphic3d_CView& ACView)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenGl_GraphicDriver::Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag)
|
|
||||||
{
|
|
||||||
const OpenGl_CView *aCView = (const OpenGl_CView *)ACView.ptrView;
|
|
||||||
if (aCView)
|
|
||||||
aCView->WS->UseTransparency(AFlag);
|
|
||||||
}
|
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : InvalidateBVHData
|
// function : InvalidateBVHData
|
||||||
// purpose :
|
// purpose :
|
||||||
|
@@ -54,7 +54,7 @@ static const GLdouble THE_IDENTITY_MATRIX[4][4] =
|
|||||||
|
|
||||||
OpenGl_View::OpenGl_View (const CALL_DEF_VIEWCONTEXT &AContext,
|
OpenGl_View::OpenGl_View (const CALL_DEF_VIEWCONTEXT &AContext,
|
||||||
OpenGl_StateCounter* theCounter)
|
OpenGl_StateCounter* theCounter)
|
||||||
: mySurfaceDetail(Visual3d_TOD_NONE),
|
: mySurfaceDetail(Visual3d_TOD_ALL),
|
||||||
myBackfacing(0),
|
myBackfacing(0),
|
||||||
myBgTexture(myDefaultBgTexture),
|
myBgTexture(myDefaultBgTexture),
|
||||||
myBgGradient(myDefaultBgGradient),
|
myBgGradient(myDefaultBgGradient),
|
||||||
|
@@ -156,7 +156,6 @@ OpenGl_Workspace::OpenGl_Workspace (const Handle(OpenGl_GraphicDriver)& theDrive
|
|||||||
myTransientDrawToFront (Standard_True),
|
myTransientDrawToFront (Standard_True),
|
||||||
myBackBufferRestored (Standard_False),
|
myBackBufferRestored (Standard_False),
|
||||||
myIsImmediateDrawn (Standard_False),
|
myIsImmediateDrawn (Standard_False),
|
||||||
myUseTransparency (Standard_False),
|
|
||||||
myUseZBuffer (Standard_False),
|
myUseZBuffer (Standard_False),
|
||||||
myUseDepthTest (Standard_True),
|
myUseDepthTest (Standard_True),
|
||||||
myUseGLLight (Standard_True),
|
myUseGLLight (Standard_True),
|
||||||
@@ -255,15 +254,6 @@ Standard_Boolean OpenGl_Workspace::Activate()
|
|||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
|
||||||
// function : UseTransparency
|
|
||||||
// purpose : call_togl_transparency
|
|
||||||
// =======================================================================
|
|
||||||
void OpenGl_Workspace::UseTransparency (const Standard_Boolean theFlag)
|
|
||||||
{
|
|
||||||
myUseTransparency = theFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : ResetAppliedAspect
|
//function : ResetAppliedAspect
|
||||||
//purpose : Sets default values of GL parameters in accordance with default aspects
|
//purpose : Sets default values of GL parameters in accordance with default aspects
|
||||||
|
@@ -184,7 +184,6 @@ public:
|
|||||||
Image_PixMap& theImage,
|
Image_PixMap& theImage,
|
||||||
const Graphic3d_BufferType& theBufferType);
|
const Graphic3d_BufferType& theBufferType);
|
||||||
|
|
||||||
void UseTransparency (const Standard_Boolean theFlag);
|
|
||||||
Standard_Boolean& UseZBuffer() { return myUseZBuffer; }
|
Standard_Boolean& UseZBuffer() { return myUseZBuffer; }
|
||||||
Standard_Boolean& UseDepthTest() { return myUseDepthTest; }
|
Standard_Boolean& UseDepthTest() { return myUseDepthTest; }
|
||||||
Standard_Boolean& UseGLLight() { return myUseGLLight; }
|
Standard_Boolean& UseGLLight() { return myUseGLLight; }
|
||||||
@@ -671,7 +670,6 @@ protected: //! @name protected fields
|
|||||||
Standard_Boolean myTransientDrawToFront; //!< optimization flag for immediate mode (to render directly to the front buffer)
|
Standard_Boolean myTransientDrawToFront; //!< optimization flag for immediate mode (to render directly to the front buffer)
|
||||||
Standard_Boolean myBackBufferRestored;
|
Standard_Boolean myBackBufferRestored;
|
||||||
Standard_Boolean myIsImmediateDrawn; //!< flag indicates that immediate mode buffer contains some data
|
Standard_Boolean myIsImmediateDrawn; //!< flag indicates that immediate mode buffer contains some data
|
||||||
Standard_Boolean myUseTransparency;
|
|
||||||
Standard_Boolean myUseZBuffer;
|
Standard_Boolean myUseZBuffer;
|
||||||
Standard_Boolean myUseDepthTest;
|
Standard_Boolean myUseDepthTest;
|
||||||
Standard_Boolean myUseGLLight;
|
Standard_Boolean myUseGLLight;
|
||||||
|
@@ -119,7 +119,7 @@ void OpenGl_Workspace::updateMaterial (const int theFlag)
|
|||||||
NamedStatus |= OPENGL_NS_2NDPASSNEED;
|
NamedStatus |= OPENGL_NS_2NDPASSNEED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (myUseTransparency && aProps->trans != 1.0f)
|
if (aProps->trans != 1.0f)
|
||||||
{
|
{
|
||||||
// render transparent
|
// render transparent
|
||||||
myMatTmp.Diffuse.a() = aProps->trans;
|
myMatTmp.Diffuse.a() = aProps->trans;
|
||||||
@@ -349,7 +349,7 @@ const OpenGl_AspectFace* OpenGl_Workspace::AspectFace (const Standard_Boolean th
|
|||||||
? TelCullNone
|
? TelCullNone
|
||||||
: (TelCullMode )AspectFace_set->CullingMode();
|
: (TelCullMode )AspectFace_set->CullingMode();
|
||||||
if (aCullingMode != TelCullNone
|
if (aCullingMode != TelCullNone
|
||||||
&& myUseTransparency && !(NamedStatus & OPENGL_NS_2NDPASSDO))
|
&& !(NamedStatus & OPENGL_NS_2NDPASSDO))
|
||||||
{
|
{
|
||||||
// disable culling in case of translucent shading aspect
|
// disable culling in case of translucent shading aspect
|
||||||
if (AspectFace_set->IntFront().trans != 1.0f)
|
if (AspectFace_set->IntFront().trans != 1.0f)
|
||||||
|
@@ -53,6 +53,7 @@
|
|||||||
#include <Geom2d_TrimmedCurve.hxx>
|
#include <Geom2d_TrimmedCurve.hxx>
|
||||||
#include <ElCLib.hxx>
|
#include <ElCLib.hxx>
|
||||||
#include <GeomLib.hxx>
|
#include <GeomLib.hxx>
|
||||||
|
#include <Extrema_ExtPC.hxx>
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : IsoIsDeg
|
//function : IsoIsDeg
|
||||||
@@ -482,7 +483,16 @@ void ProjLib_ProjectedCurve::Load(const Handle(Adaptor3d_HCurve)& C)
|
|||||||
IsTrimmed[0] = Standard_True;
|
IsTrimmed[0] = Standard_True;
|
||||||
f = f + dt;
|
f = f + dt;
|
||||||
myCurve = myCurve->Trim(f, l, Precision::Confusion());
|
myCurve = myCurve->Trim(f, l, Precision::Confusion());
|
||||||
Vsingular[0] = ElCLib::Parameter(L, P);
|
// Searching the parameter on the basis curve for surface of revolution
|
||||||
|
Extrema_ExtPC anExtr(P, mySurface->BasisCurve()->Curve(), myTolerance);
|
||||||
|
if (anExtr.IsDone())
|
||||||
|
{
|
||||||
|
Standard_Integer anIndex = 1;
|
||||||
|
while (!anExtr.IsMin(anIndex) && anIndex < anExtr.NbExt()) anIndex++;
|
||||||
|
Vsingular[0] = anExtr.Point(anIndex).Parameter();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Vsingular[0] = ElCLib::Parameter(L, P);
|
||||||
//SingularCase[0] = 3;
|
//SingularCase[0] = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,7 +502,16 @@ void ProjLib_ProjectedCurve::Load(const Handle(Adaptor3d_HCurve)& C)
|
|||||||
IsTrimmed[1] = Standard_True;
|
IsTrimmed[1] = Standard_True;
|
||||||
l = l - dt;
|
l = l - dt;
|
||||||
myCurve = myCurve->Trim(f, l, Precision::Confusion());
|
myCurve = myCurve->Trim(f, l, Precision::Confusion());
|
||||||
Vsingular[1] = ElCLib::Parameter(L, P);
|
// Searching the parameter on the basis curve for surface of revolution
|
||||||
|
Extrema_ExtPC anExtr(P, mySurface->BasisCurve()->Curve(), myTolerance);
|
||||||
|
if (anExtr.IsDone())
|
||||||
|
{
|
||||||
|
Standard_Integer anIndex = 1;
|
||||||
|
while (!anExtr.IsMin(anIndex) && anIndex < anExtr.NbExt()) anIndex++;
|
||||||
|
Vsingular[1] = anExtr.Point(anIndex).Parameter();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Vsingular[1] = ElCLib::Parameter(L, P);
|
||||||
//SingularCase[1] = 4;
|
//SingularCase[1] = 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -236,10 +236,10 @@ static Standard_Integer OCC136 (Draw_Interpretor& di, Standard_Integer argc, con
|
|||||||
anAISCtx->AddOrRemoveCurrentObject(aSh4);
|
anAISCtx->AddOrRemoveCurrentObject(aSh4);
|
||||||
|
|
||||||
//remove all this objects from context
|
//remove all this objects from context
|
||||||
anAISCtx->Clear(aSh1, Standard_False);
|
anAISCtx->Remove (aSh1, Standard_False);
|
||||||
anAISCtx->Clear(aSh2, Standard_False);
|
anAISCtx->Remove (aSh2, Standard_False);
|
||||||
anAISCtx->Clear(aSh3, Standard_False);
|
anAISCtx->Remove (aSh3, Standard_False);
|
||||||
anAISCtx->Clear(aSh4, Standard_False);
|
anAISCtx->Remove (aSh4, Standard_False);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3126,6 +3126,57 @@ static Standard_Integer OCC25446 (Draw_Interpretor& theDI,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <IntTools_Context.hxx>
|
||||||
|
#include <GeomAPI_ProjectPointOnSurf.hxx>
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : xprojponf
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
Standard_Integer xprojponf (Draw_Interpretor& di,
|
||||||
|
Standard_Integer n,
|
||||||
|
const char** a)
|
||||||
|
{
|
||||||
|
if (n!=3) {
|
||||||
|
di<<" use xprojponf p f \n";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
gp_Pnt aP, aPS;
|
||||||
|
TopoDS_Shape aS;
|
||||||
|
TopoDS_Face aF;
|
||||||
|
Handle(IntTools_Context) aCtx;
|
||||||
|
//
|
||||||
|
DrawTrSurf::GetPoint(a[1], aP);
|
||||||
|
aS=DBRep::Get(a[2]);
|
||||||
|
//
|
||||||
|
if (aS.IsNull()) {
|
||||||
|
di<<" null shape is not allowed\n";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
if (aS.ShapeType()!=TopAbs_FACE) {
|
||||||
|
di << a[2] << " not a face\n";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
aCtx=new IntTools_Context;
|
||||||
|
//
|
||||||
|
aF=TopoDS::Face(aS);
|
||||||
|
GeomAPI_ProjectPointOnSurf& aPPS=aCtx->ProjPS(aF);
|
||||||
|
//
|
||||||
|
aPPS.Perform(aP);
|
||||||
|
if (!aPPS.IsDone()) {
|
||||||
|
di<<" projection failed\n";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
aPS=aPPS.NearestPoint();
|
||||||
|
di<< " point px " << aPS.X() << " " << aPS.Y() << " " << aPS.Z() << "\n";
|
||||||
|
//
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void QABugs::Commands_19(Draw_Interpretor& theCommands) {
|
void QABugs::Commands_19(Draw_Interpretor& theCommands) {
|
||||||
const char *group = "QABugs";
|
const char *group = "QABugs";
|
||||||
|
|
||||||
@@ -3187,5 +3238,6 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) {
|
|||||||
theCommands.Add ("OCC25348", "OCC25348", __FILE__, OCC25348, group);
|
theCommands.Add ("OCC25348", "OCC25348", __FILE__, OCC25348, group);
|
||||||
theCommands.Add ("OCC25413", "OCC25413 shape", __FILE__, OCC25413, group);
|
theCommands.Add ("OCC25413", "OCC25413 shape", __FILE__, OCC25413, group);
|
||||||
theCommands.Add ("OCC25446", "OCC25446 res b1 b2 op", __FILE__, OCC25446, group);
|
theCommands.Add ("OCC25446", "OCC25446 res b1 b2 op", __FILE__, OCC25446, group);
|
||||||
|
theCommands.Add ("xprojponf", "xprojponf p f", __FILE__, xprojponf, group);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -129,7 +129,7 @@ void SelectMgr_EntityOwner::SetLocation(const TopLoc_Location&)
|
|||||||
|
|
||||||
TopLoc_Location SelectMgr_EntityOwner::Location() const
|
TopLoc_Location SelectMgr_EntityOwner::Location() const
|
||||||
{
|
{
|
||||||
return !HasSelectable() ? TopLoc_Location() : TopLoc_Location(mySelectable->Transformation());
|
return !HasLocation() ? TopLoc_Location() : TopLoc_Location(mySelectable->Transformation());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectMgr_EntityOwner::ResetLocation()
|
void SelectMgr_EntityOwner::ResetLocation()
|
||||||
|
@@ -135,6 +135,12 @@ is
|
|||||||
---C++: inline
|
---C++: inline
|
||||||
---Purpose: Returns (modifiable) the mode for applying
|
---Purpose: Returns (modifiable) the mode for applying
|
||||||
-- ShapeFix::FixVertexPosition before all fixes, by default False.
|
-- ShapeFix::FixVertexPosition before all fixes, by default False.
|
||||||
|
|
||||||
|
FixVertexTolMode (me: mutable) returns Integer;
|
||||||
|
---C++: return &
|
||||||
|
---C++: inline
|
||||||
|
---Purpose: Returns (modifiable) the mode for fixing tolerances of vertices on whole shape
|
||||||
|
-- after performing all fixes
|
||||||
fields
|
fields
|
||||||
|
|
||||||
myResult : Shape from TopoDS is protected;
|
myResult : Shape from TopoDS is protected;
|
||||||
@@ -147,6 +153,7 @@ fields
|
|||||||
myFixWireMode : Integer is protected;
|
myFixWireMode : Integer is protected;
|
||||||
myFixSameParameterMode : Integer is protected;
|
myFixSameParameterMode : Integer is protected;
|
||||||
myFixVertexPositionMode : Integer is protected;
|
myFixVertexPositionMode : Integer is protected;
|
||||||
|
myFixVertexTolMode : Integer is protected;
|
||||||
myStatus : Integer is protected;
|
myStatus : Integer is protected;
|
||||||
|
|
||||||
end Shape;
|
end Shape;
|
||||||
|
@@ -53,6 +53,7 @@ ShapeFix_Shape::ShapeFix_Shape()
|
|||||||
myFixWireMode = -1;
|
myFixWireMode = -1;
|
||||||
myFixSameParameterMode = -1;
|
myFixSameParameterMode = -1;
|
||||||
myFixVertexPositionMode =0;
|
myFixVertexPositionMode =0;
|
||||||
|
myFixVertexTolMode = -1;
|
||||||
myFixSolid = new ShapeFix_Solid;
|
myFixSolid = new ShapeFix_Solid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,6 +72,7 @@ ShapeFix_Shape::ShapeFix_Shape(const TopoDS_Shape& shape)
|
|||||||
myFixSameParameterMode = -1;
|
myFixSameParameterMode = -1;
|
||||||
myFixSolid = new ShapeFix_Solid;
|
myFixSolid = new ShapeFix_Solid;
|
||||||
myFixVertexPositionMode =0;
|
myFixVertexPositionMode =0;
|
||||||
|
myFixVertexTolMode = -1;
|
||||||
Init(shape);
|
Init(shape);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,7 +99,7 @@ void ShapeFix_Shape::Init(const TopoDS_Shape& shape)
|
|||||||
Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)& theProgress)
|
Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)& theProgress)
|
||||||
{
|
{
|
||||||
Standard_Integer savFixSmallAreaWireMode = 0;
|
Standard_Integer savFixSmallAreaWireMode = 0;
|
||||||
|
Standard_Integer savFixVertexTolMode = myFixVertexTolMode;
|
||||||
Handle(ShapeFix_Face) fft = Handle(ShapeFix_Face)::DownCast( FixFaceTool() );
|
Handle(ShapeFix_Face) fft = Handle(ShapeFix_Face)::DownCast( FixFaceTool() );
|
||||||
if ( !fft.IsNull() ) {
|
if ( !fft.IsNull() ) {
|
||||||
savFixSmallAreaWireMode = fft->FixSmallAreaWireMode();
|
savFixSmallAreaWireMode = fft->FixSmallAreaWireMode();
|
||||||
@@ -142,7 +144,7 @@ Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)
|
|||||||
TopoDS_Shape shape = myShape;
|
TopoDS_Shape shape = myShape;
|
||||||
Standard_Boolean savFixSameParameterMode = myFixSameParameterMode;
|
Standard_Boolean savFixSameParameterMode = myFixSameParameterMode;
|
||||||
myFixSameParameterMode = Standard_False;
|
myFixSameParameterMode = Standard_False;
|
||||||
|
myFixVertexTolMode = Standard_False;
|
||||||
Standard_Integer aShapesNb = 0;
|
Standard_Integer aShapesNb = 0;
|
||||||
for ( TopoDS_Iterator anIter(S); anIter.More(); anIter.Next() )
|
for ( TopoDS_Iterator anIter(S); anIter.More(); anIter.Next() )
|
||||||
++aShapesNb;
|
++aShapesNb;
|
||||||
@@ -159,6 +161,7 @@ Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)
|
|||||||
return Standard_False; // aborted execution
|
return Standard_False; // aborted execution
|
||||||
|
|
||||||
myFixSameParameterMode = savFixSameParameterMode;
|
myFixSameParameterMode = savFixSameParameterMode;
|
||||||
|
myFixVertexTolMode = savFixVertexTolMode;
|
||||||
myShape = shape;
|
myShape = shape;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -242,6 +245,26 @@ Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)
|
|||||||
{
|
{
|
||||||
SameParameter(myResult, Standard_False, theProgress);
|
SameParameter(myResult, Standard_False, theProgress);
|
||||||
}
|
}
|
||||||
|
if( NeedFix( myFixVertexTolMode))
|
||||||
|
{
|
||||||
|
Standard_Integer nbF = 0;
|
||||||
|
TopExp_Explorer anExpF(myResult, TopAbs_FACE);
|
||||||
|
for( ; anExpF.More() && nbF <= 1; anExpF.Next())
|
||||||
|
nbF++;
|
||||||
|
if( nbF > 1)
|
||||||
|
{
|
||||||
|
//fix for bug 0025455
|
||||||
|
// for case when vertex belong to the different faces it is necessary to check vertices tolerances
|
||||||
|
//after all fixes.
|
||||||
|
//This fix it should be performed for example for case when cutting edge was performed.
|
||||||
|
|
||||||
|
Handle(ShapeFix_Edge) sfe = FixEdgeTool();
|
||||||
|
TopExp_Explorer anExpE (myResult, TopAbs_EDGE);
|
||||||
|
for ( ; anExpE.More(); anExpE.Next())
|
||||||
|
sfe->FixVertexTolerance( TopoDS::Edge (anExpE.Current()));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( !fft.IsNull() )
|
if ( !fft.IsNull() )
|
||||||
fft->FixSmallAreaWireMode() = savFixSmallAreaWireMode;
|
fft->FixSmallAreaWireMode() = savFixSmallAreaWireMode;
|
||||||
|
@@ -122,3 +122,13 @@ inline Standard_Integer& ShapeFix_Shape::FixVertexPositionMode()
|
|||||||
{
|
{
|
||||||
return myFixVertexPositionMode;
|
return myFixVertexPositionMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : FixVertexTolMode
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
inline Standard_Integer& ShapeFix_Shape::FixVertexTolMode()
|
||||||
|
{
|
||||||
|
return myFixVertexTolMode;
|
||||||
|
}
|
@@ -70,7 +70,6 @@ void V3d_Plane::Display (const Handle(V3d_View)& theView,
|
|||||||
Graphic3d_MaterialAspect aPlastic (Graphic3d_NOM_PLASTIC);
|
Graphic3d_MaterialAspect aPlastic (Graphic3d_NOM_PLASTIC);
|
||||||
aPlastic.SetColor (theColor);
|
aPlastic.SetColor (theColor);
|
||||||
aPlastic.SetTransparency (0.5);
|
aPlastic.SetTransparency (0.5);
|
||||||
theView->SetTransparency (Standard_True);
|
|
||||||
anAsp->SetFrontMaterial (aPlastic);
|
anAsp->SetFrontMaterial (aPlastic);
|
||||||
anAsp->SetInteriorStyle (Aspect_IS_HATCH);
|
anAsp->SetInteriorStyle (Aspect_IS_HATCH);
|
||||||
anAsp->SetHatchStyle (Aspect_HS_GRID_DIAGONAL_WIDE);
|
anAsp->SetHatchStyle (Aspect_HS_GRID_DIAGONAL_WIDE);
|
||||||
|
@@ -35,8 +35,6 @@
|
|||||||
-- -> Add SetProjModel() method.
|
-- -> Add SetProjModel() method.
|
||||||
-- VKH - 15/11/99 : G004
|
-- VKH - 15/11/99 : G004
|
||||||
-- -> Add method Dump()
|
-- -> Add method Dump()
|
||||||
-- GG - IMP210200
|
|
||||||
-- -> Add Transparency() method
|
|
||||||
-- THA - 17/08/00 Thomas HARTL <t-hartl@muenchen.matra-dtv.fr>
|
-- THA - 17/08/00 Thomas HARTL <t-hartl@muenchen.matra-dtv.fr>
|
||||||
-- -> Add Print method (works only under Windows).
|
-- -> Add Print method (works only under Windows).
|
||||||
-- GG - IMP231100
|
-- GG - IMP231100
|
||||||
@@ -415,10 +413,6 @@ is
|
|||||||
---Level: Public
|
---Level: Public
|
||||||
---Purpose: Returns TRUE when the light is active in this view.
|
---Purpose: Returns TRUE when the light is active in this view.
|
||||||
|
|
||||||
SetTransparency( me : mutable ; AnActivity : Boolean = Standard_False);
|
|
||||||
---Level: Public
|
|
||||||
---Purpose: Activate/Deactivate the transparency in this view.
|
|
||||||
|
|
||||||
SetImmediateUpdate(me: mutable; theImmediateUpdate: Boolean from Standard)
|
SetImmediateUpdate(me: mutable; theImmediateUpdate: Boolean from Standard)
|
||||||
returns Boolean from Standard;
|
returns Boolean from Standard;
|
||||||
---Purpose: sets the immediate update mode and returns the previous one.
|
---Purpose: sets the immediate update mode and returns the previous one.
|
||||||
@@ -1141,10 +1135,6 @@ is
|
|||||||
---Level: Public
|
---Level: Public
|
||||||
-- purpose: return the current environment texture used
|
-- purpose: return the current environment texture used
|
||||||
|
|
||||||
Transparency(me) returns Boolean from Standard;
|
|
||||||
---Level: Public
|
|
||||||
---Purpose: Returns the transparency activity.
|
|
||||||
|
|
||||||
Visualization ( me ) returns TypeOfVisualization from V3d;
|
Visualization ( me ) returns TypeOfVisualization from V3d;
|
||||||
---Level: Public
|
---Level: Public
|
||||||
---Purpose: Returns the current visualisation mode.
|
---Purpose: Returns the current visualisation mode.
|
||||||
@@ -1638,7 +1628,6 @@ fields
|
|||||||
MyGridEchoStructure : Structure from Graphic3d;
|
MyGridEchoStructure : Structure from Graphic3d;
|
||||||
MyGridEchoGroup : Group from Graphic3d;
|
MyGridEchoGroup : Group from Graphic3d;
|
||||||
|
|
||||||
MyTransparencyFlag : Boolean from Standard;
|
|
||||||
myImmediateUpdate: Boolean from Standard is protected;
|
myImmediateUpdate: Boolean from Standard is protected;
|
||||||
|
|
||||||
myXscreenAxis : Vector from Graphic3d;
|
myXscreenAxis : Vector from Graphic3d;
|
||||||
|
@@ -251,8 +251,6 @@ V3d_View::V3d_View(const Handle(V3d_Viewer)& VM, const V3d_TypeOfView Type ) :
|
|||||||
aCamera->SetProjectionType ((Type == V3d_ORTHOGRAPHIC)
|
aCamera->SetProjectionType ((Type == V3d_ORTHOGRAPHIC)
|
||||||
? Graphic3d_Camera::Projection_Orthographic
|
? Graphic3d_Camera::Projection_Orthographic
|
||||||
: Graphic3d_Camera::Projection_Perspective);
|
: Graphic3d_Camera::Projection_Perspective);
|
||||||
|
|
||||||
MyTransparencyFlag = Standard_False;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
@@ -21,7 +21,6 @@
|
|||||||
--------------------------------
|
--------------------------------
|
||||||
00-09-92 : GG ; Creation.
|
00-09-92 : GG ; Creation.
|
||||||
24-12-97 : FMN ; Suppression de GEOMLITE
|
24-12-97 : FMN ; Suppression de GEOMLITE
|
||||||
21-02-00 : GG ; Add Transparency() method
|
|
||||||
23-11-00 : GG ; Add IsActiveLight() and IsActivePlane() methods
|
23-11-00 : GG ; Add IsActiveLight() and IsActivePlane() methods
|
||||||
|
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
@@ -102,18 +101,6 @@ void V3d_View::SetLightOff( ) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void V3d_View::SetTransparency(const Standard_Boolean AnActivity) {
|
|
||||||
|
|
||||||
MyTransparencyFlag = AnActivity;
|
|
||||||
MyView->SetTransparency(AnActivity);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Standard_Boolean V3d_View::Transparency() const {
|
|
||||||
|
|
||||||
return MyTransparencyFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
void V3d_View::InitActiveLights() {
|
void V3d_View::InitActiveLights() {
|
||||||
myActiveLightsIterator.Initialize(MyActiveLights);
|
myActiveLightsIterator.Initialize(MyActiveLights);
|
||||||
}
|
}
|
||||||
|
@@ -241,7 +241,7 @@ Standard_EXPORT Standard_Boolean VDisplayAISObject (const TCollection_AsciiStrin
|
|||||||
Handle(AIS_InteractiveObject)::DownCast (aMap.Find2 (theName));
|
Handle(AIS_InteractiveObject)::DownCast (aMap.Find2 (theName));
|
||||||
|
|
||||||
if (!anOldObj.IsNull())
|
if (!anOldObj.IsNull())
|
||||||
aContextAIS->Clear (anOldObj, Standard_True);
|
aContextAIS->Remove (anOldObj, Standard_True);
|
||||||
|
|
||||||
// remove name and old object from map
|
// remove name and old object from map
|
||||||
aMap.UnBind2 (theName);
|
aMap.UnBind2 (theName);
|
||||||
@@ -2751,7 +2751,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
anAISContext->Clear (anIO, Standard_False);
|
anAISContext->Remove (anIO, Standard_False);
|
||||||
aTexturedIO = new AIS_TexturedShape (DBRep::Get (theArgv[1]));
|
aTexturedIO = new AIS_TexturedShape (DBRep::Get (theArgv[1]));
|
||||||
GetMapOfAIS().UnBind1 (anIO);
|
GetMapOfAIS().UnBind1 (anIO);
|
||||||
GetMapOfAIS().UnBind2 (aShapeName);
|
GetMapOfAIS().UnBind2 (aShapeName);
|
||||||
|
@@ -57,7 +57,7 @@ MyModel (Visual3d_TOM_NONE),
|
|||||||
MyVisual (Visual3d_TOV_WIREFRAME),
|
MyVisual (Visual3d_TOV_WIREFRAME),
|
||||||
MyLights (),
|
MyLights (),
|
||||||
MyTextureEnv(),
|
MyTextureEnv(),
|
||||||
MySurfaceDetail(Visual3d_TOD_NONE),
|
MySurfaceDetail(Visual3d_TOD_ALL),
|
||||||
myClipPlanes()
|
myClipPlanes()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@@ -1045,15 +1045,6 @@ is
|
|||||||
-- or insufficient memory.
|
-- or insufficient memory.
|
||||||
-- Warning: Works only under Windows.
|
-- Warning: Works only under Windows.
|
||||||
|
|
||||||
SetTransparency ( me : mutable;
|
|
||||||
AFlag : Boolean from Standard )
|
|
||||||
is static;
|
|
||||||
---Level: Advanced
|
|
||||||
---Purpose: if <AFlag> is Standard_True then the transparency
|
|
||||||
-- is managed in the view <me>.
|
|
||||||
-- Default Standard_False
|
|
||||||
---Category: Internal methods
|
|
||||||
|
|
||||||
ZBufferIsActivated ( me )
|
ZBufferIsActivated ( me )
|
||||||
returns Boolean from Standard
|
returns Boolean from Standard
|
||||||
is static;
|
is static;
|
||||||
|
@@ -805,7 +805,6 @@ void Visual3d_View::Activate()
|
|||||||
{
|
{
|
||||||
myGraphicDriver->ActivateView (MyCView);
|
myGraphicDriver->ActivateView (MyCView);
|
||||||
myGraphicDriver->Background (MyCView);
|
myGraphicDriver->Background (MyCView);
|
||||||
myGraphicDriver->Transparency (MyCView, myViewManager->Transparency());
|
|
||||||
|
|
||||||
MyCView.Active = 1;
|
MyCView.Active = 1;
|
||||||
|
|
||||||
@@ -1800,22 +1799,6 @@ Standard_Boolean Visual3d_View::ZBufferIsActivated() const
|
|||||||
return MyCView.Context.ZBufferActivity != 0; // 0 or 1 => forced by the programmer
|
return MyCView.Context.ZBufferActivity != 0; // 0 or 1 => forced by the programmer
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
|
||||||
// function : SetTransparency
|
|
||||||
// purpose :
|
|
||||||
// =======================================================================
|
|
||||||
void Visual3d_View::SetTransparency (const Standard_Boolean theActivity)
|
|
||||||
{
|
|
||||||
if (IsDeleted()
|
|
||||||
|| !IsDefined()
|
|
||||||
|| !IsActive())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
myGraphicDriver->Transparency (MyCView, theActivity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : SetZBufferActivity
|
// function : SetZBufferActivity
|
||||||
// purpose :
|
// purpose :
|
||||||
|
@@ -411,24 +411,6 @@ is
|
|||||||
-- if <AStructure> is displayed in <AProjector> and TOS_COMPUTED.
|
-- if <AStructure> is displayed in <AProjector> and TOS_COMPUTED.
|
||||||
---Category: Private methods
|
---Category: Private methods
|
||||||
|
|
||||||
Transparency ( me )
|
|
||||||
returns Boolean from Standard
|
|
||||||
is static;
|
|
||||||
---Level: Advanced
|
|
||||||
---Purpose: Returns Standard_True if the transparency
|
|
||||||
-- is activated in all activated views.
|
|
||||||
-- Default Standard_False
|
|
||||||
---Category: Internal methods
|
|
||||||
|
|
||||||
SetTransparency ( me : mutable;
|
|
||||||
AFlag : Boolean from Standard )
|
|
||||||
is static;
|
|
||||||
---Level: Advanced
|
|
||||||
---Purpose: if <AFlag> is Standard_True then the transparency
|
|
||||||
-- is managed.
|
|
||||||
-- Default Standard_False
|
|
||||||
---Category: Internal methods
|
|
||||||
|
|
||||||
ZBufferAuto ( me )
|
ZBufferAuto ( me )
|
||||||
returns Boolean from Standard
|
returns Boolean from Standard
|
||||||
is static;
|
is static;
|
||||||
@@ -473,7 +455,6 @@ fields
|
|||||||
|
|
||||||
-- advanced
|
-- advanced
|
||||||
MyZBufferAuto : Boolean from Standard;
|
MyZBufferAuto : Boolean from Standard;
|
||||||
MyTransparency : Boolean from Standard;
|
|
||||||
|
|
||||||
-- Z layer indexes
|
-- Z layer indexes
|
||||||
myLayerIds : MapOfInteger from TColStd;
|
myLayerIds : MapOfInteger from TColStd;
|
||||||
|
@@ -83,8 +83,7 @@ Visual3d_ViewManager::Visual3d_ViewManager (const Handle(Graphic3d_GraphicDriver
|
|||||||
Graphic3d_StructureManager (theDriver),
|
Graphic3d_StructureManager (theDriver),
|
||||||
MyDefinedView (),
|
MyDefinedView (),
|
||||||
MyViewGenId (View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*(Visual3d_ViewManager::CurrentId ()-1),View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*Visual3d_ViewManager::CurrentId ()-1),
|
MyViewGenId (View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*(Visual3d_ViewManager::CurrentId ()-1),View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*Visual3d_ViewManager::CurrentId ()-1),
|
||||||
MyZBufferAuto (Standard_False),
|
MyZBufferAuto (Standard_False)
|
||||||
MyTransparency (Standard_False)
|
|
||||||
{
|
{
|
||||||
// default layer is always presented in display layer sequence
|
// default layer is always presented in display layer sequence
|
||||||
// it can not be removed
|
// it can not be removed
|
||||||
@@ -558,24 +557,6 @@ void Visual3d_ViewManager::UnIdentification (const Standard_Integer aViewId)
|
|||||||
MyViewGenId.Free(aViewId);
|
MyViewGenId.Free(aViewId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Visual3d_ViewManager::SetTransparency (const Standard_Boolean AFlag)
|
|
||||||
{
|
|
||||||
if (MyTransparency && AFlag) return;
|
|
||||||
if (! MyTransparency && ! AFlag) return;
|
|
||||||
|
|
||||||
for(int i=1; i<=MyDefinedView.Length(); i++)
|
|
||||||
{
|
|
||||||
(MyDefinedView.Value(i))->SetTransparency(AFlag);
|
|
||||||
}
|
|
||||||
|
|
||||||
MyTransparency = AFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
Standard_Boolean Visual3d_ViewManager::Transparency () const
|
|
||||||
{
|
|
||||||
return (MyTransparency);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Visual3d_ViewManager::SetZBufferAuto (const Standard_Boolean AFlag)
|
void Visual3d_ViewManager::SetZBufferAuto (const Standard_Boolean AFlag)
|
||||||
{
|
{
|
||||||
if (MyZBufferAuto && AFlag) return;
|
if (MyZBufferAuto && AFlag) return;
|
||||||
|
@@ -177,7 +177,7 @@ Standard_Integer LU_Decompose(math_Matrix& a,
|
|||||||
math_Vector& vv,
|
math_Vector& vv,
|
||||||
Standard_Real TINY) {
|
Standard_Real TINY) {
|
||||||
|
|
||||||
Standard_Integer i, imax=0, j, k;
|
Standard_Integer i, imax=1, j, k;
|
||||||
Standard_Real big, dum, sum, temp;
|
Standard_Real big, dum, sum, temp;
|
||||||
|
|
||||||
Standard_Integer n = a.RowNumber();
|
Standard_Integer n = a.RowNumber();
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
# Original bug : pro14942
|
# Original bug : pro14942
|
||||||
# Date : 26Aout98
|
# Date : 26Aout98
|
||||||
|
|
||||||
#CR23958 puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
|
puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
|
||||||
#CR23958 puts "TODO #22911 ALL: Error : The area of the resulting shape is"
|
puts "TODO #22911 ALL: Error : The area of the resulting shape is"
|
||||||
|
|
||||||
restore [locate_data_file CTO904_pro14942a.rle] a
|
restore [locate_data_file CTO904_pro14942a.rle] a
|
||||||
restore [locate_data_file pro14942b.rle] b
|
restore [locate_data_file pro14942b.rle] b
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
puts "TODO ?OCC24157 ALL: Error : The area of the resulting shape is"
|
puts "TODO ?OCC24157 ALL: Error : The area of the resulting shape is"
|
||||||
|
puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
|
||||||
# cts17861
|
# cts17861
|
||||||
|
|
||||||
restore [locate_data_file CTO900_cts17861a.rle] a
|
restore [locate_data_file CTO900_cts17861a.rle] a
|
||||||
|
3
tests/boolean/bopcommon_complex/J1
Normal file → Executable file
3
tests/boolean/bopcommon_complex/J1
Normal file → Executable file
@@ -1,3 +1,6 @@
|
|||||||
|
puts "TODO #22911 ALL: Error : The bopcommon is not valid. The area is"
|
||||||
|
puts "TODO #22911 ALL: Error : The area of the resulting shape is"
|
||||||
|
|
||||||
restore [locate_data_file a158] a
|
restore [locate_data_file a158] a
|
||||||
restore [locate_data_file b148] b
|
restore [locate_data_file b148] b
|
||||||
|
|
||||||
|
@@ -253,7 +253,7 @@ proc CheckTriArea {shape {eps 0}} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Check if list of xdistcs-command is valid
|
# Check if list of xdistcs-command is valid
|
||||||
proc checkList {List Tolerance D_good} {
|
proc checkList {List Tolerance D_good Limit_Tol} {
|
||||||
set L1 [llength ${List}]
|
set L1 [llength ${List}]
|
||||||
set L2 10
|
set L2 10
|
||||||
set L3 5
|
set L3 5
|
||||||
@@ -266,7 +266,14 @@ proc checkList {List Tolerance D_good} {
|
|||||||
set D [lindex ${List} ${j2}]
|
set D [lindex ${List} ${j2}]
|
||||||
#puts "i=${i} j1=${j1} j2=${j2} T=${T} D=${D}"
|
#puts "i=${i} j1=${j1} j2=${j2} T=${T} D=${D}"
|
||||||
if { [expr abs(${D} - ${D_good})] > ${Tolerance} } {
|
if { [expr abs(${D} - ${D_good})] > ${Tolerance} } {
|
||||||
puts "Error: i=${i} T=${T} D=${D}"
|
puts "Error : T=${T} D=${D}"
|
||||||
|
}
|
||||||
|
|
||||||
|
if { ${Tolerance} > ${Limit_Tol} } {
|
||||||
|
if { [expr abs(${D} - ${D_good})] > ${Limit_Tol}
|
||||||
|
&& [expr abs(${D} - ${D_good})] <= ${Tolerance} } {
|
||||||
|
puts "Attention (critical value of tolerance) : T=${T} D=${D}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
21
tests/bugs/heal/bug25455
Normal file
21
tests/bugs/heal/bug25455
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "OCC25455"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
######################################################
|
||||||
|
# fixshape works at the second attempt
|
||||||
|
######################################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25455_rx.brep] rx
|
||||||
|
|
||||||
|
fixshape rx rx
|
||||||
|
|
||||||
|
set info [checkshape rx]
|
||||||
|
|
||||||
|
# Resume
|
||||||
|
puts ""
|
||||||
|
if { [regexp {This shape seems to be valid} ${info}] } {
|
||||||
|
puts "OK: fixshape works properly"
|
||||||
|
} else {
|
||||||
|
puts "Error: fixshape works bad"
|
||||||
|
}
|
@@ -22,16 +22,16 @@ if { ${Result_Numbers} != 2 } {
|
|||||||
renamevar p_1 result
|
renamevar p_1 result
|
||||||
|
|
||||||
set status 0
|
set status 0
|
||||||
set length 110.161
|
set length 110.167
|
||||||
set nb_v_good 4
|
set nb_v_good 1
|
||||||
set nb_e_good 4
|
set nb_e_good 1
|
||||||
set nb_w_good 1
|
set nb_w_good 1
|
||||||
set nb_f_good 0
|
set nb_f_good 0
|
||||||
set nb_sh_good 0
|
set nb_sh_good 0
|
||||||
set nb_sol_good 0
|
set nb_sol_good 0
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 0
|
set nb_compound_good 0
|
||||||
set nb_shape_good 9
|
set nb_shape_good 3
|
||||||
}
|
}
|
||||||
|
|
||||||
if { ${mistake} != 0 } {
|
if { ${mistake} != 0 } {
|
||||||
|
@@ -22,16 +22,16 @@ if { ${Result_Numbers} != 2 } {
|
|||||||
renamevar p_2 result
|
renamevar p_2 result
|
||||||
set status 0
|
set status 0
|
||||||
|
|
||||||
set length 110.171
|
set length 110.167
|
||||||
set nb_v_good 4
|
set nb_v_good 1
|
||||||
set nb_e_good 4
|
set nb_e_good 1
|
||||||
set nb_w_good 1
|
set nb_w_good 1
|
||||||
set nb_f_good 0
|
set nb_f_good 0
|
||||||
set nb_sh_good 0
|
set nb_sh_good 0
|
||||||
set nb_sol_good 0
|
set nb_sol_good 0
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 0
|
set nb_compound_good 0
|
||||||
set nb_shape_good 9
|
set nb_shape_good 3
|
||||||
}
|
}
|
||||||
|
|
||||||
# Resume
|
# Resume
|
||||||
|
@@ -18,15 +18,15 @@ add f2 aShape
|
|||||||
#
|
#
|
||||||
set status 0
|
set status 0
|
||||||
#
|
#
|
||||||
set nb_v_good 8
|
set nb_v_good 2
|
||||||
set nb_e_good 12
|
set nb_e_good 3
|
||||||
set nb_w_good 4
|
set nb_w_good 1
|
||||||
set nb_f_good 4
|
set nb_f_good 1
|
||||||
set nb_sh_good 0
|
set nb_sh_good 0
|
||||||
set nb_sol_good 0
|
set nb_sol_good 0
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 29
|
set nb_shape_good 8
|
||||||
#
|
#
|
||||||
set Numbers 11
|
set Numbers 11
|
||||||
#
|
#
|
||||||
@@ -95,7 +95,7 @@ if {${status} == 0} {
|
|||||||
puts "Faulty ${BugNumber}"
|
puts "Faulty ${BugNumber}"
|
||||||
}
|
}
|
||||||
|
|
||||||
set square 8444.76
|
set square 6606.88
|
||||||
set 2dviewer 0
|
set 2dviewer 0
|
||||||
|
|
||||||
|
|
||||||
|
@@ -7,7 +7,7 @@ puts ""
|
|||||||
###########################################################################################################
|
###########################################################################################################
|
||||||
|
|
||||||
set BugNumber OCC22967
|
set BugNumber OCC22967
|
||||||
set check_value 3.46945e-006
|
set check_value 8.46459e-006
|
||||||
|
|
||||||
restore [locate_data_file bug22967_Cylinder_1.brep] b1
|
restore [locate_data_file bug22967_Cylinder_1.brep] b1
|
||||||
restore [locate_data_file bug22967_Scale_1.brep] b2
|
restore [locate_data_file bug22967_Scale_1.brep] b2
|
||||||
@@ -54,6 +54,6 @@ if {${status} > 0} {
|
|||||||
puts "OK ${BugNumber}"
|
puts "OK ${BugNumber}"
|
||||||
}
|
}
|
||||||
|
|
||||||
set square 669221
|
set square 668843
|
||||||
set 2dviewer 0
|
set 2dviewer 0
|
||||||
|
|
||||||
|
@@ -19,7 +19,7 @@ set result [bopcurves b1 b2]
|
|||||||
puts $result
|
puts $result
|
||||||
puts "Finish project operation ..."
|
puts "Finish project operation ..."
|
||||||
|
|
||||||
set GoodToleranceReached 2.4950140688989345e-006
|
set GoodToleranceReached 6.3315853638232248e-007
|
||||||
regexp {Tolerance Reached=([-0-9.+eE]+)} $result full ToleranceReached
|
regexp {Tolerance Reached=([-0-9.+eE]+)} $result full ToleranceReached
|
||||||
|
|
||||||
proc GetPercent {Value GoodValue} {
|
proc GetPercent {Value GoodValue} {
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#puts "TODO OCC12345 ALL: Faulty shapes in variables faulty_1 to faulty_"
|
#puts "TODO OCC12345 ALL: Faulty shapes in variables faulty_1 to faulty_"
|
||||||
#puts "TODO OCC12345 ALL: Error : The square of result shape is"
|
#puts "TODO OCC12345 ALL: Error : The square of result shape is"
|
||||||
puts "TODO OCC12345 ALL: Error : The command is not valid"
|
#puts "TODO OCC12345 ALL: Error : The command is not valid"
|
||||||
puts "TODO OCC12345 ALL: Error : Result shape is WRONG because it must contains"
|
#puts "TODO OCC12345 ALL: Error : Result shape is WRONG because it must contains"
|
||||||
|
|
||||||
puts "========================"
|
puts "========================"
|
||||||
puts " OCC472 "
|
puts " OCC472 "
|
||||||
@@ -20,8 +20,8 @@ checkshape b2
|
|||||||
|
|
||||||
bfuse result b1 b2
|
bfuse result b1 b2
|
||||||
|
|
||||||
set nb_v_good 5
|
set nb_v_good 66
|
||||||
set nb_e_edge 7
|
set nb_e_edge 107
|
||||||
set square 0
|
set square 31657.5
|
||||||
set 2dviewer 0
|
set 2dviewer 0
|
||||||
|
|
||||||
|
@@ -15,5 +15,5 @@ checkshape a_2
|
|||||||
|
|
||||||
bcut result a_1 a_2
|
bcut result a_1 a_2
|
||||||
|
|
||||||
set square 1773.6
|
set square 2471.48
|
||||||
set 2dviewer 0
|
set 2dviewer 0
|
||||||
|
@@ -12,18 +12,19 @@ restore [locate_data_file bug24154_b.brep] b2
|
|||||||
bop b1 b2
|
bop b1 b2
|
||||||
bopcut result
|
bopcut result
|
||||||
|
|
||||||
set square 2.68434e+06
|
#set square 2.68434e+06
|
||||||
|
set square 5.21269e+06
|
||||||
set volume 7.35468e+07
|
set volume 7.35468e+07
|
||||||
|
|
||||||
# Analysis of "nbshapes res"
|
# Analysis of "nbshapes res"
|
||||||
set nb_v_good 18
|
set nb_v_good 18
|
||||||
set nb_e_good 27
|
set nb_e_good 36
|
||||||
set nb_w_good 11
|
set nb_w_good 18
|
||||||
set nb_f_good 11
|
set nb_f_good 18
|
||||||
set nb_sh_good 1
|
set nb_sh_good 1
|
||||||
set nb_sol_good 1
|
set nb_sol_good 1
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 70
|
set nb_shape_good 93
|
||||||
|
|
||||||
set 2dviewer 1
|
set 2dviewer 1
|
||||||
|
@@ -12,17 +12,17 @@ restore [locate_data_file bug24798_rectBranch.brep] b2
|
|||||||
bop b1 b2
|
bop b1 b2
|
||||||
bopcut result
|
bopcut result
|
||||||
|
|
||||||
set square 1826.15
|
set square 1826.16
|
||||||
|
|
||||||
# Analysis of "nbshapes res"
|
# Analysis of "nbshapes res"
|
||||||
set nb_v_good 49
|
set nb_v_good 44
|
||||||
set nb_e_good 72
|
set nb_e_good 67
|
||||||
set nb_w_good 29
|
set nb_w_good 29
|
||||||
set nb_f_good 22
|
set nb_f_good 22
|
||||||
set nb_sh_good 1
|
set nb_sh_good 1
|
||||||
set nb_sol_good 1
|
set nb_sol_good 1
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 175
|
set nb_shape_good 165
|
||||||
|
|
||||||
set 2dviewer 1
|
set 2dviewer 1
|
||||||
|
@@ -43,16 +43,16 @@ baddctools b7
|
|||||||
bfillds
|
bfillds
|
||||||
bbop result 0
|
bbop result 0
|
||||||
|
|
||||||
set square 10008.5
|
set square 10008.9
|
||||||
|
|
||||||
set nb_v_good 260
|
set nb_v_good 140
|
||||||
set nb_e_good 306
|
set nb_e_good 186
|
||||||
set nb_w_good 126
|
set nb_w_good 126
|
||||||
set nb_f_good 126
|
set nb_f_good 126
|
||||||
set nb_sh_good 40
|
set nb_sh_good 40
|
||||||
set nb_sol_good 40
|
set nb_sol_good 40
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 899
|
set nb_shape_good 659
|
||||||
|
|
||||||
set 2dviewer 1
|
set 2dviewer 1
|
||||||
|
@@ -45,14 +45,14 @@ bbop result 2
|
|||||||
|
|
||||||
set square 103838
|
set square 103838
|
||||||
|
|
||||||
set nb_v_good 280
|
set nb_v_good 160
|
||||||
set nb_e_good 338
|
set nb_e_good 218
|
||||||
set nb_w_good 142
|
set nb_w_good 142
|
||||||
set nb_f_good 80
|
set nb_f_good 80
|
||||||
set nb_sh_good 3
|
set nb_sh_good 3
|
||||||
set nb_sol_good 3
|
set nb_sol_good 3
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 847
|
set nb_shape_good 607
|
||||||
|
|
||||||
set 2dviewer 1
|
set 2dviewer 1
|
||||||
|
@@ -46,14 +46,14 @@ bbop result 1
|
|||||||
|
|
||||||
set square 157211
|
set square 157211
|
||||||
|
|
||||||
set nb_v_good 280
|
set nb_v_good 160
|
||||||
set nb_e_good 338
|
set nb_e_good 218
|
||||||
set nb_w_good 142
|
set nb_w_good 142
|
||||||
set nb_f_good 80
|
set nb_f_good 80
|
||||||
set nb_sh_good 1
|
set nb_sh_good 1
|
||||||
set nb_sol_good 1
|
set nb_sol_good 1
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 843
|
set nb_shape_good 603
|
||||||
|
|
||||||
set 2dviewer 1
|
set 2dviewer 1
|
||||||
|
@@ -20,14 +20,14 @@ baddtools b_1 b_2 b_3 b_4 b_5 b_6 b_7 b_8 b_9 b_10 b_11 b_12 b_13 b_14 b_15 b_16
|
|||||||
bfillds
|
bfillds
|
||||||
bbuild result
|
bbuild result
|
||||||
|
|
||||||
set nb_v_good 268
|
set nb_v_good 170
|
||||||
set nb_e_good 366
|
set nb_e_good 268
|
||||||
set nb_w_good 243
|
set nb_w_good 243
|
||||||
set nb_f_good 195
|
set nb_f_good 195
|
||||||
set nb_sh_good 75
|
set nb_sh_good 75
|
||||||
set nb_sol_good 75
|
set nb_sol_good 75
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 1223
|
set nb_shape_good 1027
|
||||||
|
|
||||||
set 2dviewer 1
|
set 2dviewer 1
|
||||||
|
@@ -6,6 +6,12 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
puts ""
|
||||||
|
|
||||||
# bopcurves command
|
# bopcurves command
|
||||||
|
|
||||||
restore [locate_data_file bug25292_Input_0.brep] b1
|
restore [locate_data_file bug25292_Input_0.brep] b1
|
||||||
@@ -21,11 +27,17 @@ set log [bopcurves f1 f2 -2d]
|
|||||||
#############################
|
#############################
|
||||||
|
|
||||||
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_11 and bug25292_12 of "bugs modalg_5" testgrid.
|
||||||
set MaxTol 1.e-7
|
set MaxTol 1.e-7
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 4
|
||||||
|
|
||||||
if {${Toler} > ${MaxTol}} {
|
if {${Toler} > ${MaxTol}} {
|
||||||
puts "Error: Tolerance is too big!"
|
puts "Error: Tolerance is too big!"
|
||||||
}
|
}
|
||||||
set GoodNbCurv 7
|
|
||||||
if {${NbCurv} != ${GoodNbCurv}} {
|
if {${NbCurv} != ${GoodNbCurv}} {
|
||||||
puts "Error: Curve Number is bad!"
|
puts "Error: Curve Number is bad!"
|
||||||
}
|
}
|
||||||
@@ -34,105 +46,54 @@ if {${NbCurv} != ${GoodNbCurv}} {
|
|||||||
|
|
||||||
# 1
|
# 1
|
||||||
puts ""
|
puts ""
|
||||||
puts "First curve"
|
|
||||||
|
|
||||||
mksurface s1 f1
|
mksurface s1 f1
|
||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
dlog reset
|
for {set i 1} {$i <= ${NbCurv}} {incr i} {
|
||||||
dlog on
|
set log [dump c_$i]
|
||||||
xdistcs c_1 s1 0 1 10
|
|
||||||
set Log1 [dlog get]
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
set List1 [split ${Log1} {TD= \t\n}]
|
set Knot 1
|
||||||
set Tolerance 1.0e-7
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
set D_good 0.
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
checkList ${List1} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 2
|
set Knot ${KnotsPoles}
|
||||||
puts ""
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
puts "Second curve"
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
|
||||||
dlog reset
|
puts "U1=${U1}"
|
||||||
dlog on
|
puts "U2=${U2}"
|
||||||
xdistcs c_2 s1 0 1 10
|
|
||||||
set Log2 [dlog get]
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
set List2 [split ${Log2} {TD= \t\n}]
|
dlog reset
|
||||||
set Tolerance 1.0e-7
|
dlog on
|
||||||
set D_good 0.
|
xdistcs c_$i s1 ${U1} ${U2} 10
|
||||||
checkList ${List2} ${Tolerance} ${D_good}
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
# 3
|
set Tolerance 1.0e-7
|
||||||
puts ""
|
set Limit_Tol 1.0e-7
|
||||||
puts "Third curve"
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_3 s1 0 1 10
|
|
||||||
set Log3 [dlog get]
|
|
||||||
|
|
||||||
set List3 [split ${Log3} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List3} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 4
|
|
||||||
puts ""
|
|
||||||
puts "Fourth curve"
|
|
||||||
|
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_4 s1 0 1 10
|
|
||||||
set Log4 [dlog get]
|
|
||||||
|
|
||||||
set List4 [split ${Log4} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List4} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 5
|
|
||||||
puts ""
|
|
||||||
puts "Fifth curve"
|
|
||||||
|
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_5 s1 0 1 10
|
|
||||||
set Log5 [dlog get]
|
|
||||||
|
|
||||||
set List5 [split ${Log5} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List5} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 6
|
|
||||||
puts ""
|
|
||||||
puts "Sixth curve"
|
|
||||||
|
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_6 s1 0 1 10
|
|
||||||
set Log6 [dlog get]
|
|
||||||
|
|
||||||
set List6 [split ${Log6} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List6} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 7
|
|
||||||
puts ""
|
|
||||||
puts "Seventh curve"
|
|
||||||
|
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_7 s1 0 1 10
|
|
||||||
set Log7 [dlog get]
|
|
||||||
|
|
||||||
set List7 [split ${Log7} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List7} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs c_$i s2 ${U1} ${U2} 10
|
||||||
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
}
|
||||||
|
|
||||||
v2d
|
v2d
|
||||||
2dfit
|
2dfit
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
|
|
||||||
|
|
||||||
puts "================"
|
puts "================"
|
||||||
puts "OCC25292"
|
puts "OCC25292"
|
||||||
puts "================"
|
puts "================"
|
||||||
@@ -8,6 +6,12 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
puts ""
|
||||||
|
|
||||||
# bopcurves command
|
# bopcurves command
|
||||||
|
|
||||||
restore [locate_data_file bug25292_Input_0.brep] b1
|
restore [locate_data_file bug25292_Input_0.brep] b1
|
||||||
@@ -23,11 +27,17 @@ set log [bopcurves f2 f1 -2d]
|
|||||||
#############################
|
#############################
|
||||||
|
|
||||||
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_11 and bug25292_12 of "bugs modalg_5" testgrid.
|
||||||
set MaxTol 1.e-7
|
set MaxTol 1.e-7
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 4
|
||||||
|
|
||||||
if {${Toler} > ${MaxTol}} {
|
if {${Toler} > ${MaxTol}} {
|
||||||
puts "Error: Tolerance is too big!"
|
puts "Error: Tolerance is too big!"
|
||||||
}
|
}
|
||||||
set GoodNbCurv 7
|
|
||||||
if {${NbCurv} != ${GoodNbCurv}} {
|
if {${NbCurv} != ${GoodNbCurv}} {
|
||||||
puts "Error: Curve Number is bad!"
|
puts "Error: Curve Number is bad!"
|
||||||
}
|
}
|
||||||
@@ -36,112 +46,55 @@ if {${NbCurv} != ${GoodNbCurv}} {
|
|||||||
|
|
||||||
# 1
|
# 1
|
||||||
puts ""
|
puts ""
|
||||||
puts "First curve"
|
|
||||||
|
|
||||||
mksurface s1 f1
|
mksurface s1 f1
|
||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
dlog reset
|
for {set i 1} {$i <= ${NbCurv}} {incr i} {
|
||||||
dlog on
|
set log [dump c_$i]
|
||||||
xdistcs c_1 s1 0 1 10
|
|
||||||
set Log1 [dlog get]
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
set List1 [split ${Log1} {TD= \t\n}]
|
set Knot 1
|
||||||
set Tolerance 1.0e-7
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
set D_good 0.
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
checkList ${List1} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 2
|
set Knot ${KnotsPoles}
|
||||||
puts ""
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
puts "Second curve"
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
|
||||||
dlog reset
|
puts "U1=${U1}"
|
||||||
dlog on
|
puts "U2=${U2}"
|
||||||
xdistcs c_2 s1 0 1 10
|
|
||||||
set Log2 [dlog get]
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
set List2 [split ${Log2} {TD= \t\n}]
|
dlog reset
|
||||||
set Tolerance 1.0e-7
|
dlog on
|
||||||
set D_good 0.
|
xdistcs c_$i s1 ${U1} ${U2} 10
|
||||||
checkList ${List2} ${Tolerance} ${D_good}
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
# 3
|
dlog reset
|
||||||
puts ""
|
dlog on
|
||||||
puts "Third curve"
|
xdistcs c_$i s2 ${U1} ${U2} 10
|
||||||
|
set Log2 [dlog get]
|
||||||
dlog reset
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
dlog on
|
set Tolerance 1.0e-7
|
||||||
xdistcs c_3 s1 0 1 10
|
set Limit_Tol 1.0e-7
|
||||||
set Log3 [dlog get]
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
set List3 [split ${Log3} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List3} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 4
|
|
||||||
puts ""
|
|
||||||
puts "Fourth curve"
|
|
||||||
|
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_4 s1 0 1 10
|
|
||||||
set Log4 [dlog get]
|
|
||||||
|
|
||||||
set List4 [split ${Log4} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List4} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 5
|
|
||||||
if { [info exist c_5] } {
|
|
||||||
puts ""
|
|
||||||
puts "Fifth curve"
|
|
||||||
|
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_5 s1 0 1 10
|
|
||||||
set Log5 [dlog get]
|
|
||||||
|
|
||||||
set List5 [split ${Log5} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List5} ${Tolerance} ${D_good}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 6
|
|
||||||
if { [info exist c_6] } {
|
|
||||||
puts ""
|
|
||||||
puts "Sixth curve"
|
|
||||||
|
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_6 s1 0 1 10
|
|
||||||
set Log6 [dlog get]
|
|
||||||
|
|
||||||
set List6 [split ${Log6} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List6} ${Tolerance} ${D_good}
|
|
||||||
}
|
|
||||||
|
|
||||||
# 7
|
|
||||||
if { [info exist c_7] } {
|
|
||||||
puts ""
|
|
||||||
puts "Seventh curve"
|
|
||||||
|
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_7 s1 0 1 10
|
|
||||||
set Log7 [dlog get]
|
|
||||||
|
|
||||||
set List7 [split ${Log7} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List7} ${Tolerance} ${D_good}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
v2d
|
v2d
|
||||||
2dfit
|
2dfit
|
||||||
set only_screen_axo 1
|
set only_screen_axo 1
|
||||||
|
@@ -23,14 +23,14 @@ bbuild result
|
|||||||
|
|
||||||
set square 289.348
|
set square 289.348
|
||||||
|
|
||||||
set nb_v_good 12
|
set nb_v_good 9
|
||||||
set nb_e_good 18
|
set nb_e_good 15
|
||||||
set nb_w_good 10
|
set nb_w_good 10
|
||||||
set nb_f_good 10
|
set nb_f_good 10
|
||||||
set nb_sh_good 3
|
set nb_sh_good 3
|
||||||
set nb_sol_good 3
|
set nb_sol_good 3
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 57
|
set nb_shape_good 51
|
||||||
|
|
||||||
set 3dviewer 1
|
set 3dviewer 1
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 12 vertices instead of 9"
|
|
||||||
puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 18 edges instead of 15"
|
|
||||||
puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 57 shapes instead of 51"
|
|
||||||
|
|
||||||
puts "================"
|
puts "================"
|
||||||
puts "OCC25292"
|
puts "OCC25292"
|
||||||
puts "================"
|
puts "================"
|
||||||
@@ -27,14 +23,14 @@ bbuild result
|
|||||||
|
|
||||||
set square 289.348
|
set square 289.348
|
||||||
|
|
||||||
set nb_v_good 12
|
set nb_v_good 9
|
||||||
set nb_e_good 18
|
set nb_e_good 15
|
||||||
set nb_w_good 10
|
set nb_w_good 10
|
||||||
set nb_f_good 10
|
set nb_f_good 10
|
||||||
set nb_sh_good 3
|
set nb_sh_good 3
|
||||||
set nb_sol_good 3
|
set nb_sol_good 3
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 57
|
set nb_shape_good 51
|
||||||
|
|
||||||
set 3dviewer 1
|
set 3dviewer 1
|
||||||
|
@@ -6,8 +6,37 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
proc GetRange { curve } {
|
||||||
|
global U1
|
||||||
|
global U2
|
||||||
|
|
||||||
|
set log [uplevel dump $curve]
|
||||||
|
|
||||||
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
set Knot 1
|
||||||
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
|
|
||||||
|
set Knot ${KnotsPoles}
|
||||||
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
}
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
|
||||||
# intersect command
|
# intersect command
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 4
|
||||||
|
|
||||||
restore [locate_data_file bug25292_Input_0.brep] b1
|
restore [locate_data_file bug25292_Input_0.brep] b1
|
||||||
restore [locate_data_file bug25292_Input_1.brep] b2
|
restore [locate_data_file bug25292_Input_1.brep] b2
|
||||||
|
|
||||||
@@ -20,11 +49,98 @@ mksurface s1 f1
|
|||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
#################
|
#################
|
||||||
intersect i s1 s2
|
intersect res s1 s2
|
||||||
#################
|
#################
|
||||||
|
set che [whatis res]
|
||||||
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} >= 0} {
|
||||||
|
#Only variable "res" exists
|
||||||
|
|
||||||
|
if { $GoodNbCurv == 1 } {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
|
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res
|
||||||
|
|
||||||
if { [info exist i_7] } {
|
puts "U1 = ${U1}"
|
||||||
puts "OK: Curve Number is good!"
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s2 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
} else {
|
} else {
|
||||||
puts "Error: Curve Number is bad!"
|
set ic 1
|
||||||
|
set AllowRepeate 1
|
||||||
|
while { $AllowRepeate != 0 } {
|
||||||
|
set che [whatis res_$ic]
|
||||||
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} < 0} {
|
||||||
|
set AllowRepeate 0
|
||||||
|
} else {
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res_$ic
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s2 0 1 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
incr ic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[expr {$ic - 1}] == $GoodNbCurv} {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
|
|
||||||
|
|
||||||
puts "================"
|
puts "================"
|
||||||
puts "OCC25292"
|
puts "OCC25292"
|
||||||
puts "================"
|
puts "================"
|
||||||
@@ -8,8 +6,37 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
proc GetRange { curve } {
|
||||||
|
global U1
|
||||||
|
global U2
|
||||||
|
|
||||||
|
set log [uplevel dump $curve]
|
||||||
|
|
||||||
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
set Knot 1
|
||||||
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
|
|
||||||
|
set Knot ${KnotsPoles}
|
||||||
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
}
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
|
||||||
# intersect command
|
# intersect command
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 4
|
||||||
|
|
||||||
restore [locate_data_file bug25292_Input_0.brep] b1
|
restore [locate_data_file bug25292_Input_0.brep] b1
|
||||||
restore [locate_data_file bug25292_Input_1.brep] b2
|
restore [locate_data_file bug25292_Input_1.brep] b2
|
||||||
|
|
||||||
@@ -22,11 +49,99 @@ mksurface s1 f1
|
|||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
#################
|
#################
|
||||||
intersect i s2 s1
|
intersect res s2 s1
|
||||||
#################
|
#################
|
||||||
|
|
||||||
if { [info exist i_7] } {
|
set che [whatis res]
|
||||||
puts "OK: Curve Number is good!"
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} >= 0} {
|
||||||
|
#Only variable "res" exists
|
||||||
|
|
||||||
|
if { $GoodNbCurv == 1 } {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
|
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s2 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
} else {
|
} else {
|
||||||
puts "Error: Curve Number is bad!"
|
set ic 1
|
||||||
|
set AllowRepeate 1
|
||||||
|
while { $AllowRepeate != 0 } {
|
||||||
|
set che [whatis res_$ic]
|
||||||
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} < 0} {
|
||||||
|
set AllowRepeate 0
|
||||||
|
} else {
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res_$ic
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s2 0 1 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
incr ic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[expr {$ic - 1}] == $GoodNbCurv} {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,6 +6,12 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
puts ""
|
||||||
|
|
||||||
# bopcurves command
|
# bopcurves command
|
||||||
|
|
||||||
restore [locate_data_file bug25292_Input_3.brep] b1
|
restore [locate_data_file bug25292_Input_3.brep] b1
|
||||||
@@ -17,66 +23,74 @@ explode b2 f
|
|||||||
copy b2_1 f2
|
copy b2_1 f2
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
set log [bopcurves f1 f2]
|
set log [bopcurves f1 f2 -2d]
|
||||||
#########################
|
#########################
|
||||||
|
|
||||||
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_21 and bug25292_22 of "bugs modalg_5" testgrid.
|
||||||
set MaxTol 1.e-7
|
set MaxTol 1.e-7
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 2
|
||||||
|
|
||||||
if {${Toler} > ${MaxTol}} {
|
if {${Toler} > ${MaxTol}} {
|
||||||
puts "Error: Tolerance is too big!"
|
puts "Error: Tolerance is too big!"
|
||||||
}
|
}
|
||||||
set GoodNbCurv 3
|
|
||||||
if {${NbCurv} != ${GoodNbCurv}} {
|
if {${NbCurv} != ${GoodNbCurv}} {
|
||||||
puts "Error: Curve Number is bad!"
|
puts "Error: Curve Number is bad!"
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------
|
#-------------
|
||||||
|
|
||||||
# 1
|
|
||||||
puts ""
|
|
||||||
puts "First curve"
|
|
||||||
|
|
||||||
mksurface s1 f1
|
mksurface s1 f1
|
||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
dlog reset
|
for {set i 1} {$i <= ${NbCurv}} {incr i} {
|
||||||
dlog on
|
set log [dump c_$i]
|
||||||
xdistcs c_1 s1 0 1 10
|
|
||||||
set Log1 [dlog get]
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
set List1 [split ${Log1} {TD= \t\n}]
|
set Knot 1
|
||||||
set Tolerance 1.0e-7
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
set D_good 0.
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
checkList ${List1} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 2
|
set Knot ${KnotsPoles}
|
||||||
puts ""
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
puts "Second curve"
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
|
||||||
dlog reset
|
puts "U1=${U1}"
|
||||||
dlog on
|
puts "U2=${U2}"
|
||||||
xdistcs c_2 s1 0 1 10
|
|
||||||
set Log2 [dlog get]
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
set List2 [split ${Log2} {TD= \t\n}]
|
dlog reset
|
||||||
set Tolerance 1.0e-7
|
dlog on
|
||||||
set D_good 0.
|
xdistcs c_$i s1 ${U1} ${U2} 10
|
||||||
checkList ${List2} ${Tolerance} ${D_good}
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
# 3
|
set Tolerance 1.0e-7
|
||||||
puts ""
|
set Limit_Tol 1.0e-7
|
||||||
puts "Third curve"
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
dlog reset
|
|
||||||
dlog on
|
|
||||||
xdistcs c_3 s1 0 1 10
|
|
||||||
set Log3 [dlog get]
|
|
||||||
|
|
||||||
set List3 [split ${Log3} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List3} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs c_$i s2 ${U1} ${U2} 10
|
||||||
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
}
|
||||||
|
|
||||||
smallview
|
smallview
|
||||||
fit
|
fit
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
|
|
||||||
|
|
||||||
puts "================"
|
puts "================"
|
||||||
puts "OCC25292"
|
puts "OCC25292"
|
||||||
puts "================"
|
puts "================"
|
||||||
@@ -8,6 +6,12 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
puts ""
|
||||||
|
|
||||||
# bopcurves command
|
# bopcurves command
|
||||||
|
|
||||||
restore [locate_data_file bug25292_Input_3.brep] b1
|
restore [locate_data_file bug25292_Input_3.brep] b1
|
||||||
@@ -19,69 +23,75 @@ explode b2 f
|
|||||||
copy b2_1 f2
|
copy b2_1 f2
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
set log [bopcurves f2 f1]
|
set log [bopcurves f2 f1 -2d]
|
||||||
#########################
|
#########################
|
||||||
|
|
||||||
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_21 and bug25292_22 of "bugs modalg_5" testgrid.
|
||||||
set MaxTol 1.e-7
|
set MaxTol 1.e-7
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 2
|
||||||
|
|
||||||
if {${Toler} > ${MaxTol}} {
|
if {${Toler} > ${MaxTol}} {
|
||||||
puts "Error: Tolerance is too big!"
|
puts "Error: Tolerance is too big!"
|
||||||
}
|
}
|
||||||
set GoodNbCurv 3
|
|
||||||
if {${NbCurv} != ${GoodNbCurv}} {
|
if {${NbCurv} != ${GoodNbCurv}} {
|
||||||
puts "Error: Curve Number is bad!"
|
puts "Error: Curve Number is bad!"
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------
|
#-------------
|
||||||
|
|
||||||
# 1
|
|
||||||
puts ""
|
|
||||||
puts "First curve"
|
|
||||||
|
|
||||||
mksurface s1 f1
|
mksurface s1 f1
|
||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
dlog reset
|
for {set i 1} {$i <= ${NbCurv}} {incr i} {
|
||||||
dlog on
|
set log [dump c_$i]
|
||||||
xdistcs c_1 s1 0 1 10
|
|
||||||
set Log1 [dlog get]
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
set List1 [split ${Log1} {TD= \t\n}]
|
set Knot 1
|
||||||
set Tolerance 1.0e-7
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
set D_good 0.
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
checkList ${List1} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 2
|
set Knot ${KnotsPoles}
|
||||||
puts ""
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
puts "Second curve"
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
|
||||||
dlog reset
|
puts "U1=${U1}"
|
||||||
dlog on
|
puts "U2=${U2}"
|
||||||
xdistcs c_2 s1 0 1 10
|
|
||||||
set Log2 [dlog get]
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
set List2 [split ${Log2} {TD= \t\n}]
|
dlog reset
|
||||||
set Tolerance 1.0e-7
|
dlog on
|
||||||
set D_good 0.
|
xdistcs c_$i s1 ${U1} ${U2} 10
|
||||||
checkList ${List2} ${Tolerance} ${D_good}
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
# 3
|
dlog reset
|
||||||
if { [info exist c_3] } {
|
dlog on
|
||||||
puts ""
|
xdistcs c_$i s2 ${U1} ${U2} 10
|
||||||
puts "Third curve"
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
dlog reset
|
set Tolerance 1.0e-7
|
||||||
dlog on
|
set Limit_Tol 1.0e-7
|
||||||
xdistcs c_3 s1 0 1 10
|
set D_good 0.
|
||||||
set Log3 [dlog get]
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
set List3 [split ${Log3} {TD= \t\n}]
|
|
||||||
set Tolerance 1.0e-7
|
|
||||||
set D_good 0.
|
|
||||||
checkList ${List3} ${Tolerance} ${D_good}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
smallview
|
smallview
|
||||||
fit
|
fit
|
||||||
set only_screen_axo 1
|
set only_screen_axo 1
|
||||||
|
@@ -21,16 +21,17 @@ baddobjects b1 b2
|
|||||||
bfillds
|
bfillds
|
||||||
bbuild result
|
bbuild result
|
||||||
|
|
||||||
|
#These values must be equal to the analogical values in bug25292_23 and bug25292_24 of "bugs modalg_5" testgrid.
|
||||||
set square 31.6797
|
set square 31.6797
|
||||||
|
|
||||||
set nb_v_good 11
|
set nb_v_good 10
|
||||||
set nb_e_good 20
|
set nb_e_good 19
|
||||||
set nb_w_good 13
|
set nb_w_good 13
|
||||||
set nb_f_good 13
|
set nb_f_good 13
|
||||||
set nb_sh_good 3
|
set nb_sh_good 3
|
||||||
set nb_sol_good 3
|
set nb_sol_good 3
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 64
|
set nb_shape_good 62
|
||||||
|
|
||||||
set 3dviewer 1
|
set 3dviewer 1
|
||||||
|
@@ -1,8 +1,3 @@
|
|||||||
puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 11 vertices instead of 10"
|
|
||||||
puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 20 edges instead of 19"
|
|
||||||
puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 64 shapes instead of 62"
|
|
||||||
|
|
||||||
|
|
||||||
puts "================"
|
puts "================"
|
||||||
puts "OCC25292"
|
puts "OCC25292"
|
||||||
puts "================"
|
puts "================"
|
||||||
@@ -26,16 +21,17 @@ baddobjects b2 b1
|
|||||||
bfillds
|
bfillds
|
||||||
bbuild result
|
bbuild result
|
||||||
|
|
||||||
|
#These values must be equal to the analogical values in bug25292_23 and bug25292_24 of "bugs modalg_5" testgrid.
|
||||||
set square 31.6797
|
set square 31.6797
|
||||||
|
|
||||||
set nb_v_good 11
|
set nb_v_good 10
|
||||||
set nb_e_good 20
|
set nb_e_good 19
|
||||||
set nb_w_good 13
|
set nb_w_good 13
|
||||||
set nb_f_good 13
|
set nb_f_good 13
|
||||||
set nb_sh_good 3
|
set nb_sh_good 3
|
||||||
set nb_sol_good 3
|
set nb_sol_good 3
|
||||||
set nb_compsol_good 0
|
set nb_compsol_good 0
|
||||||
set nb_compound_good 1
|
set nb_compound_good 1
|
||||||
set nb_shape_good 64
|
set nb_shape_good 62
|
||||||
|
|
||||||
set 3dviewer 1
|
set 3dviewer 1
|
||||||
|
@@ -6,8 +6,37 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
proc GetRange { curve } {
|
||||||
|
global U1
|
||||||
|
global U2
|
||||||
|
|
||||||
|
set log [uplevel dump $curve]
|
||||||
|
|
||||||
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
set Knot 1
|
||||||
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
|
|
||||||
|
set Knot ${KnotsPoles}
|
||||||
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
}
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
|
||||||
# intersect command
|
# intersect command
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 2
|
||||||
|
|
||||||
restore [locate_data_file bug25292_Input_3.brep] b1
|
restore [locate_data_file bug25292_Input_3.brep] b1
|
||||||
restore [locate_data_file bug25292_Input_11.brep] b2
|
restore [locate_data_file bug25292_Input_11.brep] b2
|
||||||
|
|
||||||
@@ -20,11 +49,100 @@ mksurface s1 f1
|
|||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
#################
|
#################
|
||||||
intersect i s1 s2
|
intersect res s1 s2
|
||||||
#################
|
#################
|
||||||
|
|
||||||
if { [info exist i_3] } {
|
set che [whatis res]
|
||||||
puts "OK: Curve Number is good!"
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} >= 0} {
|
||||||
|
#Only variable "res" exists
|
||||||
|
|
||||||
|
if { $GoodNbCurv == 1 } {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
|
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.1e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s2 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.1e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
} else {
|
} else {
|
||||||
puts "Error: Curve Number is bad!"
|
set ic 1
|
||||||
|
set AllowRepeate 1
|
||||||
|
while { $AllowRepeate != 0 } {
|
||||||
|
set che [whatis res_$ic]
|
||||||
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} < 0} {
|
||||||
|
set AllowRepeate 0
|
||||||
|
} else {
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res_$ic
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.1e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s2 0 1 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.1e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
incr ic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[expr {$ic - 1}] == $GoodNbCurv} {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
|
|
||||||
|
|
||||||
puts "================"
|
puts "================"
|
||||||
puts "OCC25292"
|
puts "OCC25292"
|
||||||
puts "================"
|
puts "================"
|
||||||
@@ -8,8 +6,37 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
proc GetRange { curve } {
|
||||||
|
global U1
|
||||||
|
global U2
|
||||||
|
|
||||||
|
set log [uplevel dump $curve]
|
||||||
|
|
||||||
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
set Knot 1
|
||||||
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
|
|
||||||
|
set Knot ${KnotsPoles}
|
||||||
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
}
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
|
||||||
# intersect command
|
# intersect command
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 2
|
||||||
|
|
||||||
restore [locate_data_file bug25292_Input_3.brep] b1
|
restore [locate_data_file bug25292_Input_3.brep] b1
|
||||||
restore [locate_data_file bug25292_Input_11.brep] b2
|
restore [locate_data_file bug25292_Input_11.brep] b2
|
||||||
|
|
||||||
@@ -22,12 +49,99 @@ mksurface s1 f1
|
|||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
#################
|
#################
|
||||||
intersect i s2 s1
|
intersect res s2 s1
|
||||||
#################
|
#################
|
||||||
|
|
||||||
if { [info exist i_3] } {
|
set che [whatis res]
|
||||||
puts "OK: Curve Number is good!"
|
set ind [string first "3d curve" $che]
|
||||||
} else {
|
if {${ind} >= 0} {
|
||||||
puts "Error: Curve Number is bad!"
|
#Only variable "res" exists
|
||||||
}
|
|
||||||
|
if { $GoodNbCurv == 1 } {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
|
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.1e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s2 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.1e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
} else {
|
||||||
|
set ic 1
|
||||||
|
set AllowRepeate 1
|
||||||
|
while { $AllowRepeate != 0 } {
|
||||||
|
set che [whatis res_$ic]
|
||||||
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} < 0} {
|
||||||
|
set AllowRepeate 0
|
||||||
|
} else {
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res_$ic
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.1e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s2 0 1 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.1e-7
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
incr ic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[expr {$ic - 1}] == $GoodNbCurv} {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -6,6 +6,12 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
puts ""
|
||||||
|
|
||||||
# bopcurves command
|
# bopcurves command
|
||||||
|
|
||||||
restore [locate_data_file bug25292_f1.brep] f1
|
restore [locate_data_file bug25292_f1.brep] f1
|
||||||
@@ -16,48 +22,69 @@ set log [bopcurves f1 f2 -2d]
|
|||||||
#############################
|
#############################
|
||||||
|
|
||||||
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
||||||
set MaxTol 1.e-3
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
|
||||||
|
set MaxTol 3.e-4
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 1
|
||||||
|
|
||||||
if {${Toler} > ${MaxTol}} {
|
if {${Toler} > ${MaxTol}} {
|
||||||
puts "Error: Tolerance is too big!"
|
puts "Error: Tolerance is too big!"
|
||||||
}
|
}
|
||||||
set GoodNbCurv 2
|
|
||||||
if {${NbCurv} != ${GoodNbCurv}} {
|
if {${NbCurv} != ${GoodNbCurv}} {
|
||||||
puts "Error: Curve Number is bad!!"
|
puts "Error: Curve Number is bad!!"
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------
|
#-------------
|
||||||
|
|
||||||
# 1
|
|
||||||
puts ""
|
|
||||||
puts "First curve"
|
|
||||||
|
|
||||||
mksurface s1 f1
|
mksurface s1 f1
|
||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
dlog reset
|
for {set i 1} {$i <= ${NbCurv}} {incr i} {
|
||||||
dlog on
|
set log [dump c_$i]
|
||||||
xdistcs c_1 s1 0 1 10
|
|
||||||
set Log1 [dlog get]
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
set List1 [split ${Log1} {TD= \t\n}]
|
set Knot 1
|
||||||
set Tolerance 1.0e-4
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
set D_good 0.
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
checkList ${List1} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 2
|
set Knot ${KnotsPoles}
|
||||||
puts ""
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
puts "Second curve"
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
|
||||||
dlog reset
|
puts "U1=${U1}"
|
||||||
dlog on
|
puts "U2=${U2}"
|
||||||
xdistcs c_2 s1 0 1 10
|
|
||||||
set Log2 [dlog get]
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
set List2 [split ${Log2} {TD= \t\n}]
|
dlog reset
|
||||||
set Tolerance 1.0e-4
|
dlog on
|
||||||
set D_good 0.
|
xdistcs c_$i s1 ${U1} ${U2} 10
|
||||||
checkList ${List2} ${Tolerance} ${D_good}
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
|
set Tolerance MaxTol
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs c_$i s2 ${U1} ${U2} 10
|
||||||
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
|
set Tolerance MaxTol
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
}
|
||||||
|
|
||||||
smallview
|
smallview
|
||||||
fit
|
fit
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
puts "TODO OCC25331 Debian60-64: Error: Tolerance is too big!"
|
||||||
|
|
||||||
puts "================"
|
puts "================"
|
||||||
puts "OCC25292"
|
puts "OCC25292"
|
||||||
puts "================"
|
puts "================"
|
||||||
@@ -6,6 +8,12 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
puts ""
|
||||||
|
|
||||||
# bopcurves command
|
# bopcurves command
|
||||||
|
|
||||||
restore [locate_data_file bug25292_f1.brep] f1
|
restore [locate_data_file bug25292_f1.brep] f1
|
||||||
@@ -16,48 +24,69 @@ set log [bopcurves f2 f1 -2d]
|
|||||||
#############################
|
#############################
|
||||||
|
|
||||||
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
||||||
set MaxTol 1.e-3
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
|
||||||
|
set MaxTol 3.e-4
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 1
|
||||||
|
|
||||||
if {${Toler} > ${MaxTol}} {
|
if {${Toler} > ${MaxTol}} {
|
||||||
puts "Error: Tolerance is too big!"
|
puts "Error: Tolerance is too big!"
|
||||||
}
|
}
|
||||||
set GoodNbCurv 2
|
|
||||||
if {${NbCurv} != ${GoodNbCurv}} {
|
if {${NbCurv} != ${GoodNbCurv}} {
|
||||||
puts "Error: Curve Number is bad!!"
|
puts "Error: Curve Number is bad!!"
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------
|
#-------------
|
||||||
|
|
||||||
# 1
|
|
||||||
puts ""
|
|
||||||
puts "First curve"
|
|
||||||
|
|
||||||
mksurface s1 f1
|
mksurface s1 f1
|
||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
dlog reset
|
for {set i 1} {$i <= ${NbCurv}} {incr i} {
|
||||||
dlog on
|
set log [dump c_$i]
|
||||||
xdistcs c_1 s1 0 1 10
|
|
||||||
set Log1 [dlog get]
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
set List1 [split ${Log1} {TD= \t\n}]
|
set Knot 1
|
||||||
set Tolerance 1.0e-4
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
set D_good 0.
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
checkList ${List1} ${Tolerance} ${D_good}
|
|
||||||
|
|
||||||
# 2
|
set Knot ${KnotsPoles}
|
||||||
puts ""
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
puts "Second curve"
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
|
||||||
dlog reset
|
puts "U1=${U1}"
|
||||||
dlog on
|
puts "U2=${U2}"
|
||||||
xdistcs c_2 s1 0 1 10
|
|
||||||
set Log2 [dlog get]
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
set List2 [split ${Log2} {TD= \t\n}]
|
dlog reset
|
||||||
set Tolerance 1.0e-4
|
dlog on
|
||||||
set D_good 0.
|
xdistcs c_$i s1 ${U1} ${U2} 10
|
||||||
checkList ${List2} ${Tolerance} ${D_good}
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
|
set Tolerance MaxTol
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs c_$i s2 ${U1} ${U2} 10
|
||||||
|
set Log2 [dlog get]
|
||||||
|
set List2 [split ${Log2} {TD= \t\n}]
|
||||||
|
set Tolerance MaxTol
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
}
|
||||||
|
|
||||||
smallview
|
smallview
|
||||||
fit
|
fit
|
||||||
|
@@ -6,8 +6,37 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
proc GetRange { curve } {
|
||||||
|
global U1
|
||||||
|
global U2
|
||||||
|
|
||||||
|
set log [uplevel dump $curve]
|
||||||
|
|
||||||
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
set Knot 1
|
||||||
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
|
|
||||||
|
set Knot ${KnotsPoles}
|
||||||
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
}
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
|
||||||
# intersect command
|
# intersect command
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_33 and bug25292_34 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 1
|
||||||
|
|
||||||
restore [locate_data_file bug25292_f1.brep] f1
|
restore [locate_data_file bug25292_f1.brep] f1
|
||||||
restore [locate_data_file bug25292_f2.brep] f2
|
restore [locate_data_file bug25292_f2.brep] f2
|
||||||
|
|
||||||
@@ -15,11 +44,99 @@ mksurface s1 f1
|
|||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
#################
|
#################
|
||||||
intersect i s1 s2
|
intersect res s1 s2
|
||||||
#################
|
#################
|
||||||
|
|
||||||
if { [info exist i] } {
|
set che [whatis res]
|
||||||
puts "OK: Curve Number is good!"
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} >= 0} {
|
||||||
|
#Only variable "res" exists
|
||||||
|
|
||||||
|
if { $GoodNbCurv == 1 } {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
|
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-6
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s2 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-6
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
} else {
|
} else {
|
||||||
puts "Error: Curve Number is bad!"
|
set ic 1
|
||||||
|
set AllowRepeate 1
|
||||||
|
while { $AllowRepeate != 0 } {
|
||||||
|
set che [whatis res_$ic]
|
||||||
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} < 0} {
|
||||||
|
set AllowRepeate 0
|
||||||
|
} else {
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res_$ic
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-6
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s2 0 1 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-6
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
incr ic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[expr {$ic - 1}] == $GoodNbCurv} {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,8 +6,37 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
proc GetRange { curve } {
|
||||||
|
global U1
|
||||||
|
global U2
|
||||||
|
|
||||||
|
set log [uplevel dump $curve]
|
||||||
|
|
||||||
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
set Knot 1
|
||||||
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
|
|
||||||
|
set Knot ${KnotsPoles}
|
||||||
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
}
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
|
||||||
# intersect command
|
# intersect command
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_33 and bug25292_34 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 1
|
||||||
|
|
||||||
restore [locate_data_file bug25292_f1.brep] f1
|
restore [locate_data_file bug25292_f1.brep] f1
|
||||||
restore [locate_data_file bug25292_f2.brep] f2
|
restore [locate_data_file bug25292_f2.brep] f2
|
||||||
|
|
||||||
@@ -15,11 +44,99 @@ mksurface s1 f1
|
|||||||
mksurface s2 f2
|
mksurface s2 f2
|
||||||
|
|
||||||
#################
|
#################
|
||||||
intersect i s2 s1
|
intersect res s2 s1
|
||||||
#################
|
#################
|
||||||
|
|
||||||
if { [info exist i] } {
|
set che [whatis res]
|
||||||
puts "OK: Curve Number is good!"
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} >= 0} {
|
||||||
|
#Only variable "res" exists
|
||||||
|
|
||||||
|
if { $GoodNbCurv == 1 } {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
|
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-6
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s2 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-6
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
} else {
|
} else {
|
||||||
puts "Error: Curve Number is bad!"
|
set ic 1
|
||||||
|
set AllowRepeate 1
|
||||||
|
while { $AllowRepeate != 0 } {
|
||||||
|
set che [whatis res_$ic]
|
||||||
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} < 0} {
|
||||||
|
set AllowRepeate 0
|
||||||
|
} else {
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res_$ic
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-6
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s2 0 1 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 1.0e-6
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
incr ic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[expr {$ic - 1}] == $GoodNbCurv} {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,8 +6,38 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
proc GetRange { curve } {
|
||||||
|
global U1
|
||||||
|
global U2
|
||||||
|
|
||||||
|
set log [uplevel dump $curve]
|
||||||
|
|
||||||
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
set Knot 1
|
||||||
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
|
|
||||||
|
set Knot ${KnotsPoles}
|
||||||
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
}
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
puts ""
|
||||||
|
|
||||||
# intersect command for trimmed surfaces
|
# intersect command for trimmed surfaces
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_35 and bug25292_36 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 2
|
||||||
|
|
||||||
restore [locate_data_file bug25292_f1.brep] f1
|
restore [locate_data_file bug25292_f1.brep] f1
|
||||||
restore [locate_data_file bug25292_f2.brep] f2
|
restore [locate_data_file bug25292_f2.brep] f2
|
||||||
|
|
||||||
@@ -21,11 +51,99 @@ trimv s1t s1 19.1600000005 19.6600000005
|
|||||||
trim s2t s2 0. 1.570796326795 -275 275
|
trim s2t s2 0. 1.570796326795 -275 275
|
||||||
|
|
||||||
###################
|
###################
|
||||||
intersect k s1t s2t
|
intersect res s1t s2t
|
||||||
###################
|
###################
|
||||||
|
|
||||||
if { [info exist k_2] } {
|
set che [whatis res]
|
||||||
puts "OK: Curve Number is good!"
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} >= 0} {
|
||||||
|
#Only variable "res" exists
|
||||||
|
|
||||||
|
if { $GoodNbCurv == 1 } {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
|
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-4
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s2 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-4
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
} else {
|
} else {
|
||||||
puts "Error: Curve Number is bad!"
|
set ic 1
|
||||||
|
set AllowRepeate 1
|
||||||
|
while { $AllowRepeate != 0 } {
|
||||||
|
set che [whatis res_$ic]
|
||||||
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} < 0} {
|
||||||
|
set AllowRepeate 0
|
||||||
|
} else {
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res_$ic
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-4
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s2 0 1 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-4
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
incr ic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[expr {$ic - 1}] == $GoodNbCurv} {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,8 +6,38 @@ puts ""
|
|||||||
# Face/Face intersection algorithm gives different results for different order of the arguments
|
# Face/Face intersection algorithm gives different results for different order of the arguments
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
proc GetRange { curve } {
|
||||||
|
global U1
|
||||||
|
global U2
|
||||||
|
|
||||||
|
set log [uplevel dump $curve]
|
||||||
|
|
||||||
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
||||||
|
puts "Degree=${Degree}"
|
||||||
|
puts "Poles=${Poles}"
|
||||||
|
puts "KnotsPoles=${KnotsPoles}"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
set Knot 1
|
||||||
|
set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U1 Mult1
|
||||||
|
|
||||||
|
set Knot ${KnotsPoles}
|
||||||
|
set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
|
||||||
|
regexp ${exp_string} ${log} full U2 Mult2
|
||||||
|
}
|
||||||
|
|
||||||
|
puts "##############################"
|
||||||
|
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
|
||||||
|
puts "##############################"
|
||||||
|
puts ""
|
||||||
|
puts ""
|
||||||
|
|
||||||
# intersect command for trimmed surfaces
|
# intersect command for trimmed surfaces
|
||||||
|
|
||||||
|
#This value must be equal to the analogical value in bug25292_35 and bug25292_36 of "bugs modalg_5" testgrid.
|
||||||
|
set GoodNbCurv 2
|
||||||
|
|
||||||
restore [locate_data_file bug25292_f1.brep] f1
|
restore [locate_data_file bug25292_f1.brep] f1
|
||||||
restore [locate_data_file bug25292_f2.brep] f2
|
restore [locate_data_file bug25292_f2.brep] f2
|
||||||
|
|
||||||
@@ -21,11 +51,99 @@ trimv s1t s1 19.1600000005 19.6600000005
|
|||||||
trim s2t s2 0. 1.570796326795 -275 275
|
trim s2t s2 0. 1.570796326795 -275 275
|
||||||
|
|
||||||
###################
|
###################
|
||||||
intersect k s2t s1t
|
intersect res s2t s1t
|
||||||
###################
|
###################
|
||||||
|
|
||||||
if { [info exist k_2] } {
|
set che [whatis res]
|
||||||
puts "OK: Curve Number is good!"
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} >= 0} {
|
||||||
|
#Only variable "res" exists
|
||||||
|
|
||||||
|
if { $GoodNbCurv == 1 } {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
|
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-4
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res s2 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-4
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
} else {
|
} else {
|
||||||
puts "Error: Curve Number is bad!"
|
set ic 1
|
||||||
|
set AllowRepeate 1
|
||||||
|
while { $AllowRepeate != 0 } {
|
||||||
|
set che [whatis res_$ic]
|
||||||
|
set ind [string first "3d curve" $che]
|
||||||
|
if {${ind} < 0} {
|
||||||
|
set AllowRepeate 0
|
||||||
|
} else {
|
||||||
|
set U1 0.0
|
||||||
|
set U2 0.0
|
||||||
|
|
||||||
|
GetRange res_$ic
|
||||||
|
|
||||||
|
puts "U1 = ${U1}"
|
||||||
|
puts "U2 = ${U2}"
|
||||||
|
|
||||||
|
if {[expr {$U2 - $U1}] < 1.0e-20} {
|
||||||
|
puts "Error: Wrong curve's range!"
|
||||||
|
}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s1 ${U1} ${U2} 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-4
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs res_$ic s2 0 1 10
|
||||||
|
set Log1 [dlog get]
|
||||||
|
set List1 [split ${Log1} {TD= \t\n}]
|
||||||
|
set Tolerance 3.0e-4
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
|
||||||
|
incr ic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[expr {$ic - 1}] == $GoodNbCurv} {
|
||||||
|
puts "OK: Curve Number is good!"
|
||||||
|
} else {
|
||||||
|
puts "Error: Curve Number is bad!"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
33
tests/bugs/modalg_5/bug25432
Normal file
33
tests/bugs/modalg_5/bug25432
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "OCC25432"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
#########################################################################
|
||||||
|
# Wrong result obtained by MakerVolume operator.
|
||||||
|
#########################################################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25432_qz.brep] q
|
||||||
|
|
||||||
|
explode q f
|
||||||
|
mkvolume result q_1 q_2 q_3 q_4 q_5 q_6 q_7 q_8 q_9 q_10 q_11 -ni
|
||||||
|
|
||||||
|
regexp {Mass +: +([-0-9.+eE]+)} [vprops result] full volume
|
||||||
|
|
||||||
|
set expected_volume 0.26776
|
||||||
|
set tol_abs_volume 1.0e-4
|
||||||
|
set tol_rel_volume 0.0001
|
||||||
|
checkreal "Volume" ${volume} ${expected_volume} ${tol_abs_volume} ${tol_rel_volume}
|
||||||
|
|
||||||
|
set square 3.59972
|
||||||
|
|
||||||
|
set nb_v_good 12
|
||||||
|
set nb_e_good 20
|
||||||
|
set nb_w_good 11
|
||||||
|
set nb_f_good 11
|
||||||
|
set nb_sh_good 2
|
||||||
|
set nb_sol_good 2
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 1
|
||||||
|
set nb_shape_good 59
|
||||||
|
|
||||||
|
set 2dviewer 1
|
31
tests/bugs/modalg_5/bug25449
Executable file
31
tests/bugs/modalg_5/bug25449
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
puts "================"
|
||||||
|
puts "OCC25449"
|
||||||
|
puts "================"
|
||||||
|
puts ""
|
||||||
|
#######################################################################
|
||||||
|
# Excess vertex in result of General Fuse operation.
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25449_fz351.brep] b1
|
||||||
|
restore [locate_data_file bug25449_ez679.brep] b2
|
||||||
|
|
||||||
|
bclearobjects
|
||||||
|
bcleartools
|
||||||
|
baddobjects b1 b2
|
||||||
|
|
||||||
|
bfillds -t
|
||||||
|
bbuild result
|
||||||
|
|
||||||
|
set square 21.1115
|
||||||
|
|
||||||
|
set nb_v_good 4
|
||||||
|
set nb_e_good 4
|
||||||
|
set nb_w_good 1
|
||||||
|
set nb_f_good 1
|
||||||
|
set nb_sh_good 0
|
||||||
|
set nb_sol_good 0
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 1
|
||||||
|
set nb_shape_good 11
|
||||||
|
|
||||||
|
set 3dviewer 1
|
26
tests/bugs/modalg_5/bug25450_1
Normal file
26
tests/bugs/modalg_5/bug25450_1
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
puts "================"
|
||||||
|
puts "OCC25450"
|
||||||
|
puts "================"
|
||||||
|
puts ""
|
||||||
|
####################################
|
||||||
|
# Common operation returns wrong shape
|
||||||
|
####################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25450_Shape.brep] a
|
||||||
|
|
||||||
|
explode a
|
||||||
|
bcommon result a_1 a_2
|
||||||
|
|
||||||
|
set square 142153
|
||||||
|
|
||||||
|
set nb_v_good 8
|
||||||
|
set nb_e_good 12
|
||||||
|
set nb_w_good 4
|
||||||
|
set nb_f_good 4
|
||||||
|
set nb_sh_good 1
|
||||||
|
set nb_sol_good 0
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 1
|
||||||
|
set nb_shape_good 30
|
||||||
|
|
||||||
|
set 3dviewer 1
|
27
tests/bugs/modalg_5/bug25450_2
Normal file
27
tests/bugs/modalg_5/bug25450_2
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
puts "================"
|
||||||
|
puts "OCC25450"
|
||||||
|
puts "================"
|
||||||
|
puts ""
|
||||||
|
####################################
|
||||||
|
# Common operation returns wrong shape
|
||||||
|
####################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25450_b1.brep] b1
|
||||||
|
restore [locate_data_file bug25450_b2.brep] b2
|
||||||
|
|
||||||
|
bop b1 b2
|
||||||
|
bopcommon result
|
||||||
|
|
||||||
|
set square 35538.3
|
||||||
|
|
||||||
|
set nb_v_good 4
|
||||||
|
set nb_e_good 4
|
||||||
|
set nb_w_good 1
|
||||||
|
set nb_f_good 1
|
||||||
|
set nb_sh_good 1
|
||||||
|
set nb_sol_good 0
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 1
|
||||||
|
set nb_shape_good 12
|
||||||
|
|
||||||
|
set 3dviewer 1
|
17
tests/bugs/modalg_5/bug25456
Executable file
17
tests/bugs/modalg_5/bug25456
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "OCC25456"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
###############################
|
||||||
|
## BOPAlgo_CheckerSI reports an error on the given shape
|
||||||
|
###############################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25456_shape.brep] a
|
||||||
|
|
||||||
|
set info [bopcheck a]
|
||||||
|
|
||||||
|
if {[string compare ${info} " This shape seems to be OK.\n"] == 0} {
|
||||||
|
puts "OK: BOPAlgo_CheckerSI report is good"
|
||||||
|
} else {
|
||||||
|
puts "Error : BOPAlgo_CheckerSI report is wrong"
|
||||||
|
}
|
31
tests/bugs/modalg_5/bug25465_1
Normal file
31
tests/bugs/modalg_5/bug25465_1
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
puts "========"
|
||||||
|
puts "OCC25465"
|
||||||
|
puts "========"
|
||||||
|
puts ""
|
||||||
|
################################################
|
||||||
|
# Excess vertex in the result of CUT operation
|
||||||
|
################################################
|
||||||
|
|
||||||
|
restore [locate_data_file OCC25465_Gorivo.brep] b1
|
||||||
|
restore [locate_data_file OCC25465_Translation_1.brep] b2
|
||||||
|
|
||||||
|
explode b1 f
|
||||||
|
explode b2 f
|
||||||
|
set bug_info [bopcurves b1_3 b2_4]
|
||||||
|
bop b1 b2
|
||||||
|
bopcut result
|
||||||
|
|
||||||
|
# It is strictly forbidden to change nb_v_good and nb_e_good values (see OCC25465)
|
||||||
|
set nb_v_good 11
|
||||||
|
set nb_e_good 17
|
||||||
|
set nb_w_good 8
|
||||||
|
set nb_f_good 8
|
||||||
|
set nb_sh_good 1
|
||||||
|
set nb_sol_good 1
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 1
|
||||||
|
set nb_shape_good 47
|
||||||
|
|
||||||
|
if {[lindex $bug_info 2] != 3} {
|
||||||
|
puts "ERROR: OCC25465 is reproduced."
|
||||||
|
}
|
31
tests/bugs/modalg_5/bug25465_2
Normal file
31
tests/bugs/modalg_5/bug25465_2
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
puts "========"
|
||||||
|
puts "OCC25465"
|
||||||
|
puts "========"
|
||||||
|
puts ""
|
||||||
|
################################################
|
||||||
|
# Excess vertex in the result of CUT operation
|
||||||
|
################################################
|
||||||
|
|
||||||
|
restore [locate_data_file OCC25465_t_boite1.brep] b1
|
||||||
|
restore [locate_data_file OCC25465_c_cyl.brep] b2
|
||||||
|
|
||||||
|
explode b1 f
|
||||||
|
explode b2 f
|
||||||
|
set bug_info [bopcurves b1_6 b2_1]
|
||||||
|
bop b1 b2
|
||||||
|
bopcut result
|
||||||
|
|
||||||
|
# It is strictly forbidden to change nb_v_good and nb_e_good values (see OCC25465)
|
||||||
|
set nb_v_good 13
|
||||||
|
set nb_e_good 20
|
||||||
|
set nb_w_good 11
|
||||||
|
set nb_f_good 8
|
||||||
|
set nb_sh_good 1
|
||||||
|
set nb_sol_good 1
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 1
|
||||||
|
set nb_shape_good 55
|
||||||
|
|
||||||
|
if {[lindex $bug_info 2] != 2} {
|
||||||
|
puts "ERROR: OCC25465 is reproduced."
|
||||||
|
}
|
26
tests/bugs/modalg_5/bug25480
Normal file
26
tests/bugs/modalg_5/bug25480
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "OCC25480"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
#######################################################################
|
||||||
|
# Incorrect result of BRepOffsetAPI_MakePipe
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25480_part1.brep] a
|
||||||
|
restore [locate_data_file bug25480_part2.brep] b
|
||||||
|
|
||||||
|
pipe result b a 1
|
||||||
|
|
||||||
|
set square 48441
|
||||||
|
|
||||||
|
set nb_v_good 224
|
||||||
|
set nb_e_good 392
|
||||||
|
set nb_w_good 196
|
||||||
|
set nb_f_good 196
|
||||||
|
set nb_sh_good 14
|
||||||
|
set nb_sol_good 14
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 8
|
||||||
|
set nb_shape_good 1044
|
||||||
|
|
||||||
|
set 2dviewer 1
|
34
tests/bugs/modalg_5/bug25488
Normal file
34
tests/bugs/modalg_5/bug25488
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
puts "========"
|
||||||
|
puts "OCC25488"
|
||||||
|
puts "========"
|
||||||
|
puts ""
|
||||||
|
######################################################
|
||||||
|
# Wrong result of two trimmed cylinders intersection
|
||||||
|
######################################################
|
||||||
|
|
||||||
|
set Tolerance 3.0e-7
|
||||||
|
set D_good 0.
|
||||||
|
set Limit_Tol 1.0e-7
|
||||||
|
|
||||||
|
restore [locate_data_file OCC25488_sb1_1t.draw] sb1
|
||||||
|
restore [locate_data_file OCC25488_sb2_1t.draw] sb2
|
||||||
|
|
||||||
|
set bug_info [intersect res sb1 sb2]
|
||||||
|
|
||||||
|
set i 0
|
||||||
|
while {$i != [llength $bug_info]} {
|
||||||
|
set res_i [lindex $bug_info $i]
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs ${res_i} sb1 0 1 10
|
||||||
|
set BugLog [dlog get]
|
||||||
|
set BugList [split ${BugLog} {TD= \t\n}]
|
||||||
|
checkList ${BugList} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
dlog reset
|
||||||
|
dlog on
|
||||||
|
xdistcs ${res_i} sb2 0 1 10
|
||||||
|
set BugLog [dlog get]
|
||||||
|
set BugList [split ${BugLog} {TD= \t\n}]
|
||||||
|
checkList ${BugList} ${Tolerance} ${D_good} ${Limit_Tol}
|
||||||
|
set i [expr {$i + 1}]
|
||||||
|
}
|
39
tests/bugs/modalg_5/bug25505
Executable file
39
tests/bugs/modalg_5/bug25505
Executable file
@@ -0,0 +1,39 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "OCC25505"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
###############################
|
||||||
|
## General Fuse produces self-intersection shape
|
||||||
|
###############################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25505_q.brep] q
|
||||||
|
|
||||||
|
explode q
|
||||||
|
|
||||||
|
bclearobjects
|
||||||
|
bcleartools
|
||||||
|
baddobjects q_1 q_2 q_3 q_4
|
||||||
|
bfillds
|
||||||
|
bbuild result
|
||||||
|
|
||||||
|
set info [bopcheck result]
|
||||||
|
|
||||||
|
if {[string compare ${info} " This shape seems to be OK.\n"] == 0} {
|
||||||
|
puts "OK: General Fuse produces good shape"
|
||||||
|
} else {
|
||||||
|
puts "Error : General Fuse produces self-intersection shape"
|
||||||
|
}
|
||||||
|
|
||||||
|
set square 68796.4
|
||||||
|
|
||||||
|
set nb_v_good 14
|
||||||
|
set nb_e_good 21
|
||||||
|
set nb_w_good 9
|
||||||
|
set nb_f_good 9
|
||||||
|
set nb_sh_good 7
|
||||||
|
set nb_sol_good 4
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 1
|
||||||
|
set nb_shape_good 65
|
||||||
|
|
||||||
|
set 3dviewer 1
|
50
tests/bugs/modalg_5/bug25592
Executable file
50
tests/bugs/modalg_5/bug25592
Executable file
@@ -0,0 +1,50 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "OCC25592"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
######################################################
|
||||||
|
# Bad result of Fillet operation
|
||||||
|
######################################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25592_tshape.brep] t
|
||||||
|
explode t e
|
||||||
|
shape c c
|
||||||
|
add t_4 c
|
||||||
|
add t_6 c
|
||||||
|
fillet r t 30 c
|
||||||
|
explode r f
|
||||||
|
|
||||||
|
set info1 [bopargcheck r_2 #f]
|
||||||
|
if { [regexp "to be valid for BOP" ${info1}] == 1 } {
|
||||||
|
puts "1. OK : Good result of Fillet operation\n"
|
||||||
|
} else {
|
||||||
|
puts "1. Error : Bad result of Fillet operation\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
set info2 [bopargcheck r_1 #f]
|
||||||
|
if { [regexp "to be valid for BOP" ${info2}] == 1 } {
|
||||||
|
puts "2. OK : Good result of Fillet operation\n"
|
||||||
|
} else {
|
||||||
|
puts "2. Error : Bad result of Fillet operation\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
set info3 [bopargcheck r_6 #f]
|
||||||
|
if { [regexp "to be valid for BOP" ${info3}] == 1 } {
|
||||||
|
puts "3. OK : Good result of Fillet operation\n"
|
||||||
|
} else {
|
||||||
|
puts "3. Error : Bad result of Fillet operation\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
set info4 [bopargcheck r_7 #f]
|
||||||
|
if { [regexp "to be valid for BOP" ${info4}] == 1 } {
|
||||||
|
puts "4. OK : Good result of Fillet operation\n"
|
||||||
|
} else {
|
||||||
|
puts "4. Error : Bad result of Fillet operation\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
set info5 [bopargcheck r_9 #f]
|
||||||
|
if { [regexp "to be valid for BOP" ${info5}] == 1 } {
|
||||||
|
puts "5. OK : Good result of Fillet operation\n"
|
||||||
|
} else {
|
||||||
|
puts "5. Error : Bad result of Fillet operation\n"
|
||||||
|
}
|
25
tests/bugs/modalg_5/bug25657
Normal file
25
tests/bugs/modalg_5/bug25657
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
puts "========"
|
||||||
|
puts "OCC25657"
|
||||||
|
puts "========"
|
||||||
|
puts ""
|
||||||
|
###########################################################################################
|
||||||
|
# Bad result of Fillet operation
|
||||||
|
###########################################################################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug25657_r4.brep] r4
|
||||||
|
explode r4 e
|
||||||
|
shape c c
|
||||||
|
add r4_15 c
|
||||||
|
fillet res r4 20 c
|
||||||
|
|
||||||
|
explode res f
|
||||||
|
|
||||||
|
pcurve res_2
|
||||||
|
# exception
|
||||||
|
|
||||||
|
pcurve res_5
|
||||||
|
# exception
|
||||||
|
|
||||||
|
smallview
|
||||||
|
fit
|
||||||
|
set only_screen_axo 1
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user