mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-19 13:40:49 +03:00
Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
96d4000f3b | ||
|
4b2a0e8e49 | ||
|
abd63556da | ||
|
ca97f1702d | ||
|
81d569625e | ||
|
6072d3093c | ||
|
e1b097eb67 | ||
|
92d22d7d62 | ||
|
1b423e3287 |
@@ -389,13 +389,13 @@ static void TrimEdge (const TopoDS_Edge& CurrentEdge,
|
||||
|
||||
|
||||
static Standard_Boolean SearchRoot (const TopoDS_Vertex& V,
|
||||
const TopTools_DataMapOfShapeListOfShape& Map,
|
||||
TopoDS_Vertex& VRoot)
|
||||
const TopTools_IndexedDataMapOfShapeListOfShape Map,
|
||||
TopoDS_Vertex& VRoot)
|
||||
{
|
||||
Standard_Boolean trouve = Standard_False;
|
||||
VRoot.Nullify();
|
||||
TopTools_DataMapIteratorOfDataMapOfShapeListOfShape it;
|
||||
for (it.Initialize(Map); it.More(); it.Next()) {
|
||||
TopTools_IndexedDataMapIteratorOfDataMapOfShapeListOfShape it(Map);
|
||||
for (; it.More(); it.Next()) {
|
||||
const TopTools_ListOfShape & List = it.Value();
|
||||
TopTools_ListIteratorOfListOfShape itL;
|
||||
Standard_Boolean ilyest = Standard_False;
|
||||
@@ -445,12 +445,12 @@ static Standard_Boolean SearchVertex (const TopTools_ListOfShape& List,
|
||||
|
||||
|
||||
static Standard_Boolean EdgeIntersectOnWire (const gp_Pnt& P1,
|
||||
const gp_Pnt& P2,
|
||||
Standard_Real percent,
|
||||
const TopTools_DataMapOfShapeListOfShape& Map,
|
||||
const TopoDS_Wire& W,
|
||||
TopoDS_Vertex& Vsol,
|
||||
TopoDS_Wire& newW,
|
||||
const gp_Pnt& P2,
|
||||
Standard_Real percent,
|
||||
const TopTools_IndexedDataMapOfShapeListOfShape& Map,
|
||||
const TopoDS_Wire& W,
|
||||
TopoDS_Vertex& Vsol,
|
||||
TopoDS_Wire& newW,
|
||||
TopTools_DataMapOfShapeSequenceOfShape& theEdgeNewEdges)
|
||||
{
|
||||
|
||||
@@ -976,7 +976,7 @@ void BRepFill_CompatibleWires::
|
||||
}
|
||||
|
||||
// construction of RMap, map of reports of wire i to wire i-1
|
||||
TopTools_DataMapOfShapeListOfShape RMap;
|
||||
TopTools_IndexedDataMapOfShapeListOfShape RMap;
|
||||
RMap.Clear();
|
||||
|
||||
// loop on i
|
||||
@@ -997,7 +997,10 @@ void BRepFill_CompatibleWires::
|
||||
// init of RMap for Vi
|
||||
TopTools_ListOfShape Init;
|
||||
Init.Clear();
|
||||
RMap.Bind(Vi,Init);
|
||||
TopTools_ListOfShape* aShapeList = RMap.ChangeSeek(Vi);
|
||||
if (!aShapeList)
|
||||
aShapeList = &RMap(RMap.Add(Vi, Init));
|
||||
aShapeList->Append(Init);
|
||||
|
||||
// it is required to find intersection Vi - wire2
|
||||
gp_Pnt Pi = BRep_Tool::Pnt(Vi);
|
||||
@@ -1019,14 +1022,14 @@ void BRepFill_CompatibleWires::
|
||||
RMap,TopoDS::Wire(myWork(i-1)),
|
||||
Vsol,newwire,EdgeNewEdges);
|
||||
if (NewVertex) myWork(i-1) = newwire;
|
||||
RMap(Vi).Append(Vsol);
|
||||
RMap.ChangeFromKey(Vi).Append(Vsol);
|
||||
}
|
||||
|
||||
} // loop on ii
|
||||
} // loop on i
|
||||
|
||||
// initialisation of MapVLV, map of correspondences vertex - list of vertices
|
||||
TopTools_DataMapOfShapeListOfShape MapVLV;
|
||||
TopTools_IndexedDataMapOfShapeListOfShape MapVLV;
|
||||
SeqOfVertices(TopoDS::Wire(myWork(ideb)),SeqV);
|
||||
Standard_Integer SizeMap = SeqV.Length();
|
||||
MapVLV.Clear();
|
||||
@@ -1035,13 +1038,16 @@ void BRepFill_CompatibleWires::
|
||||
TopTools_ListOfShape Init;
|
||||
Init.Clear();
|
||||
Init.Append(Vi);
|
||||
MapVLV.Bind(Vi,Init);
|
||||
TopTools_ListOfShape* aShapeList = MapVLV.ChangeSeek(Vi);
|
||||
if (!aShapeList)
|
||||
aShapeList = &MapVLV(MapVLV.Add(Vi, Init));
|
||||
aShapeList->Append(Init);
|
||||
Standard_Integer NbV = 1;
|
||||
TopoDS_Vertex V0,V1;
|
||||
V0 = Vi;
|
||||
Standard_Boolean tantque = SearchRoot(V0,RMap,V1);
|
||||
while (tantque) {
|
||||
MapVLV(Vi).Append(V1);
|
||||
MapVLV.ChangeFromKey(Vi).Append(V1);
|
||||
NbV++;
|
||||
// test on NbV required for looping sections
|
||||
if (V1.IsSame(Vi) || NbV >= myWork.Length()) {
|
||||
@@ -1076,7 +1082,7 @@ void BRepFill_CompatibleWires::
|
||||
VRoot.Nullify();
|
||||
Standard_Boolean intersect = Standard_True;
|
||||
if (SearchRoot(Vi,MapVLV,VRoot)) {
|
||||
const TopTools_ListOfShape& LVi = MapVLV(VRoot);
|
||||
const TopTools_ListOfShape& LVi = MapVLV.FindFromKey(VRoot);
|
||||
TopoDS_Vertex VonW;
|
||||
VonW.Nullify();
|
||||
intersect = (!SearchVertex(LVi,wire2,VonW));
|
||||
@@ -1102,7 +1108,7 @@ void BRepFill_CompatibleWires::
|
||||
NewVertex = EdgeIntersectOnWire(Pos->Value(i+1),Pnew,percent,
|
||||
MapVLV,TopoDS::Wire(myWork(i+1)),
|
||||
Vsol,newwire,EdgeNewEdges);
|
||||
MapVLV(VRoot).Append(Vsol);
|
||||
MapVLV.ChangeFromKey(VRoot).Append(Vsol);
|
||||
if (NewVertex) myWork(i+1) = newwire;
|
||||
}
|
||||
|
||||
@@ -1129,7 +1135,7 @@ void BRepFill_CompatibleWires::
|
||||
Standard_Real U2 = BRep_Tool::Parameter(VL,ECur);
|
||||
BRepAdaptor_Curve Curve(ECur);
|
||||
gp_Pnt PPs = Curve.Value(0.1*(U1+9*U2));
|
||||
TopTools_ListIteratorOfListOfShape itF(MapVLV(VF)),itL(MapVLV(VL));
|
||||
TopTools_ListIteratorOfListOfShape itF(MapVLV.FindFromKey(VF)),itL(MapVLV.FindFromKey(VL));
|
||||
Standard_Integer rang = ideb;
|
||||
while (rang < i) {
|
||||
itF.Next();
|
||||
@@ -1149,7 +1155,24 @@ void BRepFill_CompatibleWires::
|
||||
|
||||
// parse candidate edges
|
||||
Standard_Real scal1,scal2;
|
||||
if ( (V1.IsSame(VVF)&&V2.IsSame(VVL)) || (V2.IsSame(VVF)&&V1.IsSame(VVL)) ) {
|
||||
|
||||
Standard_Boolean isEqual = (V1.IsSame(VVF) && V2.IsSame(VVL)) || (V2.IsSame(VVF) && V1.IsSame(VVL));
|
||||
|
||||
if (!isEqual)
|
||||
{
|
||||
itF = (MapVLV.FindFromKey(VF));
|
||||
itL = (MapVLV.FindFromKey(VL));
|
||||
rang = ideb - 1;
|
||||
while (rang < i) {
|
||||
itF.Next();
|
||||
itL.Next();
|
||||
rang++;
|
||||
}
|
||||
V1 = TopoDS::Vertex(itF.Value()), V2 = TopoDS::Vertex(itL.Value());
|
||||
isEqual = (V1.IsSame(VVF) && V2.IsSame(VVL)) || (V2.IsSame(VVF) && V1.IsSame(VVL));
|
||||
}
|
||||
|
||||
if (isEqual) {
|
||||
Standard_Real U1param = BRep_Tool::Parameter(VVF,E);
|
||||
Standard_Real U2param = BRep_Tool::Parameter(VVL,E);
|
||||
BRepAdaptor_Curve CurveE(E);
|
||||
|
@@ -1024,11 +1024,13 @@ void BRepFill_PipeShell::Generated(const TopoDS_Shape& theShape,
|
||||
// place the initial section at the final position
|
||||
Param.Append(V2);
|
||||
WSeq.Append(WSeq(ideb));
|
||||
IndSec.Append(WSeq.Length());
|
||||
}
|
||||
else if (ifin>0) {
|
||||
// place the final section at the initial position
|
||||
Param.Append(V1);
|
||||
WSeq.Append(WSeq(ifin));
|
||||
IndSec.Append(WSeq.Length());
|
||||
}
|
||||
else {
|
||||
// it is necessary to find a medium section to impose by V1 and by V2
|
||||
|
@@ -837,7 +837,9 @@ void Extrema_ExtCC::PrepareResults(const Extrema_ExtElC& AlgExt,
|
||||
if (myIsParallel) {
|
||||
PrepareParallelResult(Ut11, Ut12, Ut21, Ut22, AlgExt.SquareDistance());
|
||||
}
|
||||
else {
|
||||
|
||||
if(mypoints.IsEmpty())
|
||||
{
|
||||
NbExt = AlgExt.NbExt();
|
||||
for (i = 1; i <= NbExt; i++) {
|
||||
// Verification de la validite des parametres
|
||||
@@ -866,6 +868,8 @@ void Extrema_ExtCC::PrepareResults(const Extrema_ExtElC& AlgExt,
|
||||
(U2 >= Ut21 - RealEpsilon()) &&
|
||||
(U2 <= Ut22 + RealEpsilon())) {
|
||||
Val = AlgExt.SquareDistance(i);
|
||||
if (mypoints.IsEmpty())
|
||||
mySqDist.Clear();
|
||||
mySqDist.Append(Val);
|
||||
if (!theIsInverse)
|
||||
{
|
||||
@@ -911,7 +915,7 @@ void Extrema_ExtCC::PrepareResults(const Extrema_ECC& AlgExt,
|
||||
{
|
||||
PrepareParallelResult(Ut11, Ut12, Ut21, Ut22, AlgExt.SquareDistance());
|
||||
}
|
||||
else
|
||||
if(mypoints.IsEmpty())
|
||||
{
|
||||
NbExt = AlgExt.NbExt();
|
||||
for (i = 1; i <= NbExt; i++)
|
||||
@@ -935,6 +939,8 @@ void Extrema_ExtCC::PrepareResults(const Extrema_ECC& AlgExt,
|
||||
(U2 >= Ut21 - RealEpsilon()) &&
|
||||
(U2 <= Ut22 + RealEpsilon()))
|
||||
{
|
||||
if(mypoints.IsEmpty())
|
||||
mySqDist.Clear();
|
||||
Val = AlgExt.SquareDistance(i);
|
||||
mySqDist.Append(Val);
|
||||
P1.SetValues(U, P1.Value());
|
||||
|
@@ -60,6 +60,7 @@ Font_TextFormatter::Font_TextFormatter()
|
||||
myAlignY (Graphic3d_VTA_TOP),
|
||||
myTabSize (8),
|
||||
myWrappingWidth (0.0f),
|
||||
myIsWordWrapping (true),
|
||||
myLastSymbolWidth (0.0f),
|
||||
myMaxSymbolWidth (0.0f),
|
||||
//
|
||||
@@ -249,6 +250,7 @@ void Font_TextFormatter::Format()
|
||||
}
|
||||
}
|
||||
|
||||
Standard_Utf32Char aCharPrev = 0;
|
||||
for (Font_TextFormatter::Iterator aFormatterIt(*this);
|
||||
aFormatterIt.More(); aFormatterIt.Next())
|
||||
{
|
||||
@@ -269,12 +271,30 @@ void Font_TextFormatter::Format()
|
||||
Font_Rect aBndBox;
|
||||
GlyphBoundingBox (aRectIter, aBndBox);
|
||||
const Standard_ShortReal aNextXPos = aBndBox.Right - BottomLeft (aFirstCornerId).x();
|
||||
if (aNextXPos > aMaxLineWidth) // wrap the line and do processing of the symbol
|
||||
Standard_Boolean isCurWordFits = true;
|
||||
if(myIsWordWrapping && IsSeparatorSymbol(aCharPrev))
|
||||
{
|
||||
for (Font_TextFormatter::Iterator aWordIt = aFormatterIt; aWordIt.More(); aWordIt.Next())
|
||||
{
|
||||
if (IsSeparatorSymbol(aWordIt.Symbol()))
|
||||
{
|
||||
break;
|
||||
}
|
||||
float aWordWidthPx = myCorners[aWordIt.SymbolPosition()].x() - myCorners[aRectIter].x();
|
||||
if (aNextXPos + aWordWidthPx > aMaxLineWidth)
|
||||
{
|
||||
isCurWordFits = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (aNextXPos > aMaxLineWidth || !isCurWordFits) // wrap the line and do processing of the symbol
|
||||
{
|
||||
const Standard_Integer aLastRect = aRectIter - 1; // last rect on current line
|
||||
newLine (aLastRect, aMaxLineWidth);
|
||||
}
|
||||
}
|
||||
aCharPrev = aCharThis;
|
||||
}
|
||||
|
||||
myBndWidth = aMaxLineWidth;
|
||||
|
@@ -220,6 +220,12 @@ public:
|
||||
//! Returns text maximum width, zero means that the text is not bounded by width
|
||||
Standard_ShortReal Wrapping() const { return myWrappingWidth; }
|
||||
|
||||
//! returns TRUE when trying not to break words when wrapping text
|
||||
Standard_Boolean WordWrapping () const { return myIsWordWrapping; }
|
||||
|
||||
//! returns TRUE when trying not to break words when wrapping text
|
||||
void SetWordWrapping (const Standard_Boolean theIsWordWrapping) { myIsWordWrapping = theIsWordWrapping; }
|
||||
|
||||
//! @return width of formatted text.
|
||||
inline Standard_ShortReal ResultWidth() const
|
||||
{
|
||||
@@ -274,6 +280,14 @@ public:
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//! Returns true if the symbol separates words when wrapping is enabled
|
||||
static Standard_Boolean IsSeparatorSymbol (const Standard_Utf32Char& theSymbol)
|
||||
{
|
||||
return theSymbol == '\x0A' // new line
|
||||
|| theSymbol == ' ' // space
|
||||
|| theSymbol == '\x09'; // tab
|
||||
}
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT (Font_TextFormatter, Standard_Transient)
|
||||
|
||||
protected: //! @name class auxiliary methods
|
||||
@@ -288,6 +302,7 @@ protected: //! @name configuration
|
||||
Graphic3d_VerticalTextAlignment myAlignY; //!< vertical alignment style
|
||||
Standard_Integer myTabSize; //!< horizontal tabulation width (number of space symbols)
|
||||
Standard_ShortReal myWrappingWidth; //!< text is wrapped by the width if defined (more 0)
|
||||
Standard_Boolean myIsWordWrapping; //!< if TRUE try not to break words when wrapping text (true by default)
|
||||
Standard_ShortReal myLastSymbolWidth; //!< width of the last symbol
|
||||
Standard_ShortReal myMaxSymbolWidth; //!< maximum symbol width of the formatter string
|
||||
|
||||
|
@@ -432,10 +432,8 @@ static Standard_Integer intersect(Draw_Interpretor& di, Standard_Integer n, cons
|
||||
Standard_Integer aNbSegments = Intersector.NbSegments();
|
||||
for (Standard_Integer i = 1; i <= aNbSegments; i++)
|
||||
{
|
||||
Intersector.Segment(i,S1,S2);
|
||||
di << "Segment #" << i << " found.\n";
|
||||
di << "Curve 1 first parameter: " << S1->FirstParameter() << " last parameter: " << S1->LastParameter() <<"\n";
|
||||
di << "Curve 2 first parameter: " << S2->FirstParameter() << " last parameter: " << S2->LastParameter() <<"\n";
|
||||
Intersector.Segment(i,S1,S2);
|
||||
CD = new DrawTrSurf_Curve2d(S1, Draw_bleu, 30);
|
||||
dout << CD;
|
||||
CD = new DrawTrSurf_Curve2d(S2, Draw_violet, 30);
|
||||
|
@@ -392,7 +392,6 @@ void LineCircleGeometricIntersection(const gp_Lin2d& Line,
|
||||
Standard_Real dO1O2=Line.Distance(Circle.Location());
|
||||
Standard_Real R=Circle.Radius();
|
||||
Standard_Real RmTol=R-Tol;
|
||||
Standard_Real RpTol = R + Tol;
|
||||
Standard_Real binf1,binf2=0,bsup1,bsup2=0;
|
||||
|
||||
//----------------------------------------------------------------
|
||||
@@ -426,7 +425,7 @@ void LineCircleGeometricIntersection(const gp_Lin2d& Line,
|
||||
if(dO1O2 > RmTol && !b2Sol) {
|
||||
//if(dO1O2 > RmTol) {
|
||||
Standard_Real dx=dO1O2;
|
||||
Standard_Real dy = RpTol * RpTol - dx * dx;
|
||||
Standard_Real dy=0.0; //(RpTol*RpTol-dx*dx); //Patch !!!
|
||||
dy=(dy>=0.0)? Sqrt(dy) : 0.0;
|
||||
dAlpha1=ATan2(dy,dx);
|
||||
|
||||
@@ -440,7 +439,7 @@ void LineCircleGeometricIntersection(const gp_Lin2d& Line,
|
||||
else {
|
||||
//------------------- Intersection Line Circle+ --------------------------
|
||||
Standard_Real dx=dO1O2;
|
||||
Standard_Real dy = RpTol * RpTol - dx * dx;
|
||||
Standard_Real dy=R*R-dx*dx; //(RpTol*RpTol-dx*dx); //Patch !!!
|
||||
dy=(dy>=0.0)? Sqrt(dy) : 0.0;
|
||||
|
||||
dAlpha1=ATan2(dy,dx);
|
||||
|
@@ -141,13 +141,18 @@ static Standard_Integer tolerance
|
||||
static Standard_Integer projface
|
||||
(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
|
||||
{
|
||||
if (argc < 4) { di<<"Give FACE name and X Y [Z]\n"; return 1 /* Error */; }
|
||||
if (argc < 4)
|
||||
{
|
||||
di << "Give FACE name and X Y [Z]\n";
|
||||
return 1;
|
||||
}
|
||||
Standard_CString arg1 = argv[1];
|
||||
TopoDS_Shape Shape = DBRep::Get(arg1);
|
||||
if (Shape.IsNull()) { di<<"Shape unknown : "<<arg1<<"\n"; return 1 /* Error */; }
|
||||
if (Shape.ShapeType() != TopAbs_FACE) { di<<"Not a face\n"; return 1 /* Error */; }
|
||||
TopoDS_Face F = TopoDS::Face (Shape);
|
||||
Handle(Geom_Surface) thesurf = BRep_Tool::Surface (F); // pas locface
|
||||
BRepTopAdaptor_FClass2d aClassifier (F, Precision::Confusion());
|
||||
// On y va
|
||||
Standard_Real X,Y,Z,U,V;
|
||||
X = U = Draw::Atof (argv[2]);
|
||||
@@ -167,28 +172,52 @@ static Standard_Integer projface
|
||||
|
||||
GeomAPI_ProjectPointOnSurf proj(P3D, thesurf, uf-du, ul+du, vf-dv, vl+dv);
|
||||
Standard_Integer sol, nPSurf = proj.NbPoints();
|
||||
di<<" Found "<<nPSurf<<" Points\n";
|
||||
Standard_Integer anIndSol = 0, anIndMin = 0;
|
||||
Standard_Real aMinDist = RealLast();
|
||||
for (sol = 1; sol <= nPSurf; sol ++) {
|
||||
di<<"n0 "<<sol<<" Distance "<<proj.Distance(sol);
|
||||
|
||||
proj.Parameters(sol, U,V);
|
||||
di<<" U = "<<U<<" V = "<<V<<"\n";
|
||||
TopAbs_State aStatus = aClassifier.Perform (gp_Pnt2d (U,V));
|
||||
if (aStatus == TopAbs_OUT)
|
||||
continue;
|
||||
|
||||
anIndSol++;
|
||||
Standard_Real aDist = proj.Distance(sol);
|
||||
di << "n0 " << anIndSol << " Distance " << aDist;
|
||||
di << " U = " << U << " V = " << V << "\n";
|
||||
|
||||
if (aDist < aMinDist)
|
||||
{
|
||||
aMinDist = aDist;
|
||||
anIndMin = sol;
|
||||
}
|
||||
|
||||
// reprojection
|
||||
P3D = thesurf->Value (U,V);
|
||||
di<<" => reproj X = "<<P3D.X()<<" Y = "<<P3D.Y()<<" Z = "<<P3D.Z()<<"\n";
|
||||
}
|
||||
// Que donne ShapeTool ?
|
||||
P3D.SetCoord (X,Y,Z);
|
||||
Handle(ShapeAnalysis_Surface) su = new ShapeAnalysis_Surface(thesurf);
|
||||
gp_Pnt2d suval = su->ValueOfUV (P3D,BRep_Tool::Tolerance(F));
|
||||
suval.Coord(U,V);
|
||||
di<<"** ShapeAnalysis_Surface gives U = "<<U<<" V = "<<V<<"\n";
|
||||
P3D = thesurf->Value(U,V);
|
||||
di<<" => reproj X = "<<P3D.X()<<" Y = "<<P3D.Y()<<" Z = "<<P3D.Z()<<"\n";
|
||||
di<<" Found "<<anIndSol<<" Points\n";
|
||||
|
||||
} else {
|
||||
di<<" Point UV U = "<<U<<" V = "<<V<<"\n";
|
||||
gp_Pnt P3D = thesurf->Value(U,V);
|
||||
di<<" => proj X = "<<P3D.X()<<" Y = "<<P3D.Y()<<" Z = "<<P3D.Z()<<"\n";
|
||||
if (anIndMin != 0) //there is at least one suitable solution
|
||||
{
|
||||
di << "** Minimal distance to face = " << aMinDist << "\n";
|
||||
proj.Parameters(anIndMin, U,V);
|
||||
di << "** Solution of minimal distance: U = " << U << " V = " << V << "\n";
|
||||
P3D = thesurf->Value(U,V);
|
||||
di<<" => reproj X = "<<P3D.X()<<" Y = "<<P3D.Y()<<" Z = "<<P3D.Z()<<"\n";
|
||||
}
|
||||
}
|
||||
else //Check 2D point
|
||||
{
|
||||
di << " Point UV U = " << U << " V = " << V << "\n";
|
||||
TopAbs_State aStatus = aClassifier.Perform (gp_Pnt2d (U,V));
|
||||
if (aStatus == TopAbs_OUT)
|
||||
di << "does not belong to the face" << "\n";
|
||||
else
|
||||
{
|
||||
gp_Pnt P3D = thesurf->Value(U,V);
|
||||
di << " => proj X = " << P3D.X() << " Y = " << P3D.Y() << " Z = " << P3D.Z() << "\n";
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1199,7 +1228,7 @@ Standard_Integer getanacurve(Draw_Interpretor& di,
|
||||
Standard_CString g = SWDRAW::GroupName();
|
||||
|
||||
theCommands.Add ("tolerance","shape [tolmin tolmax:real]", __FILE__,tolerance,g);
|
||||
theCommands.Add ("projface","nom_face X Y [Z]", __FILE__,projface,g);
|
||||
theCommands.Add ("projface","nom_face X Y [Z] - returns the closest orthogonal projection if exists", __FILE__,projface,g);
|
||||
theCommands.Add ("projcurve","nom_edge | curve3d | curve3d first last + X Y Z",
|
||||
__FILE__,projcurve,g);
|
||||
theCommands.Add("projpcurve", "edge face tol x y z [start_param]",
|
||||
|
@@ -81,17 +81,14 @@ Handle(Select3D_SensitiveEntity) Select3D_SensitiveCylinder::GetConnected()
|
||||
Select3D_BndBox3d Select3D_SensitiveCylinder::BoundingBox()
|
||||
{
|
||||
Standard_Real aMaxRad = Max (myBottomRadius, myTopRadius);
|
||||
gp_Pnt aCenterBottom (0, 0, 0);
|
||||
gp_Pnt aCenterTop (0, 0, myHeight);
|
||||
aCenterBottom.Transform (myTrsf);
|
||||
aCenterTop.Transform (myTrsf);
|
||||
const SelectMgr_Vec3 aMinPnt (Min (aCenterBottom.X(), aCenterTop.X()) - aMaxRad,
|
||||
Min (aCenterBottom.Y(), aCenterTop.Y()) - aMaxRad,
|
||||
Min (aCenterBottom.Z(), aCenterTop.Z()) - aMaxRad);
|
||||
const SelectMgr_Vec3 aMaxPnt (Max (aCenterBottom.X(), aCenterTop.X()) + aMaxRad,
|
||||
Max (aCenterBottom.Y(), aCenterTop.Y()) + aMaxRad,
|
||||
Max (aCenterBottom.Z(), aCenterTop.Z()) + aMaxRad);
|
||||
return Select3D_BndBox3d (aMinPnt, aMaxPnt);
|
||||
Graphic3d_Mat4d aTrsf;
|
||||
myTrsf.GetMat4 (aTrsf);
|
||||
|
||||
Select3D_BndBox3d aBox (SelectMgr_Vec3 (-aMaxRad, -aMaxRad, 0),
|
||||
SelectMgr_Vec3 (aMaxRad, aMaxRad, myHeight));
|
||||
aBox.Transform (aTrsf);
|
||||
|
||||
return aBox;
|
||||
}
|
||||
|
||||
//==================================================
|
||||
|
@@ -54,6 +54,18 @@ public:
|
||||
//! Returns center of the cylinder with transformation applied
|
||||
Standard_EXPORT virtual gp_Pnt CenterOfGeometry() const Standard_OVERRIDE;
|
||||
|
||||
//! Returns cylinder transformation
|
||||
const gp_Trsf& Transformation() const { return myTrsf; }
|
||||
|
||||
//! Returns cylinder top radius
|
||||
Standard_Real TopRadius() const { return myTopRadius; }
|
||||
|
||||
//! Returns cylinder bottom radius
|
||||
Standard_Real BottomRadius() const { return myBottomRadius; }
|
||||
|
||||
//! Returns cylinder height
|
||||
Standard_Real Height() const { return myHeight; }
|
||||
|
||||
protected:
|
||||
gp_Trsf myTrsf; //!< cylinder transformation to apply
|
||||
Standard_Real myBottomRadius; //!< cylinder bottom radius
|
||||
|
@@ -13,6 +13,7 @@
|
||||
|
||||
#include <SelectMgr.hxx>
|
||||
|
||||
#include <Geom_Circle.hxx>
|
||||
#include <Graphic3d_ArrayOfPoints.hxx>
|
||||
#include <Graphic3d_AspectMarker3d.hxx>
|
||||
#include <Poly_Triangulation.hxx>
|
||||
@@ -22,6 +23,7 @@
|
||||
#include <TColgp_HArray1OfPnt.hxx>
|
||||
#include <TColgp_SequenceOfPnt.hxx>
|
||||
#include <Select3D_SensitiveBox.hxx>
|
||||
#include <Select3D_SensitiveCylinder.hxx>
|
||||
#include <Select3D_SensitiveEntity.hxx>
|
||||
#include <Select3D_SensitiveFace.hxx>
|
||||
#include <Select3D_SensitivePoint.hxx>
|
||||
@@ -130,6 +132,43 @@ namespace
|
||||
theSeqLines.Append (aPoints);
|
||||
}
|
||||
}
|
||||
|
||||
//! Fill in cylinder polylines.
|
||||
static void addCylinder (Prs3d_NListOfSequenceOfPnt& theSeqLines,
|
||||
const Handle(Select3D_SensitiveCylinder)& theSensCyl)
|
||||
{
|
||||
Handle(TColgp_HSequenceOfPnt) aVertLines[2];
|
||||
aVertLines[0] = new TColgp_HSequenceOfPnt();
|
||||
aVertLines[1] = new TColgp_HSequenceOfPnt();
|
||||
const gp_Trsf& aTrsf = theSensCyl->Transformation();
|
||||
const Standard_Real aHeight = theSensCyl->Height();
|
||||
const Standard_Real anUStep = 0.1;
|
||||
|
||||
for (int aCircNum = 0; aCircNum < 3; aCircNum++)
|
||||
{
|
||||
Standard_Real aRadius = 0.5 * (2 - aCircNum) * theSensCyl->BottomRadius()
|
||||
+ 0.5 * aCircNum * theSensCyl->TopRadius();
|
||||
Geom_Circle aGeom (gp_Ax2(), aRadius);
|
||||
Handle(TColgp_HSequenceOfPnt) aPoints = new TColgp_HSequenceOfPnt();
|
||||
gp_XYZ aVec (0, 0, aHeight * 0.5 * aCircNum);
|
||||
|
||||
if (aCircNum != 1)
|
||||
{
|
||||
aVertLines[0]->Append (gp_Pnt(aGeom.Value (0).Coord() + aVec).Transformed (aTrsf));
|
||||
aVertLines[1]->Append (gp_Pnt(aGeom.Value (M_PI).Coord() + aVec).Transformed (aTrsf));
|
||||
}
|
||||
|
||||
for (Standard_Real anU = 0.0f; anU < (2.0 * M_PI + anUStep); anU += anUStep)
|
||||
{
|
||||
gp_Pnt aCircPnt = aGeom.Value (anU).Coord() + aVec;
|
||||
aCircPnt.Transform (aTrsf);
|
||||
aPoints->Append (aCircPnt);
|
||||
}
|
||||
theSeqLines.Append (aPoints);
|
||||
}
|
||||
theSeqLines.Append (aVertLines[0]);
|
||||
theSeqLines.Append (aVertLines[1]);
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -152,6 +191,10 @@ void SelectMgr::ComputeSensitivePrs (const Handle(Graphic3d_Structure)& thePrs,
|
||||
{
|
||||
addBoundingBox (aSeqLines, aSensBox, theLoc);
|
||||
}
|
||||
else if (Handle(Select3D_SensitiveCylinder) aSensCyl = Handle(Select3D_SensitiveCylinder)::DownCast (anEnt))
|
||||
{
|
||||
addCylinder (aSeqLines, aSensCyl);
|
||||
}
|
||||
else if (Handle(Select3D_SensitiveFace) aFace = Handle(Select3D_SensitiveFace)::DownCast(anEnt))
|
||||
{
|
||||
Handle(TColgp_HArray1OfPnt) aSensPnts;
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -390,15 +390,23 @@ void StdSelect_BRepSelectionTool::ComputeSensitive (const TopoDS_Shape& theShape
|
||||
{
|
||||
if (!aGeomPlanes[0].IsNull()
|
||||
&& !aGeomPlanes[1].IsNull()
|
||||
&& aGeomPlanes[0]->Position().Direction().IsEqual (aGeomCyl->Position().Direction(), Precision::Angular())
|
||||
&& aGeomPlanes[1]->Position().Direction().IsEqual (aGeomCyl->Position().Direction(), Precision::Angular()))
|
||||
&& aGeomPlanes[0]->Position().Direction().IsParallel (aGeomCyl->Position().Direction(), Precision::Angular())
|
||||
&& aGeomPlanes[1]->Position().Direction().IsParallel (aGeomCyl->Position().Direction(), Precision::Angular()))
|
||||
{
|
||||
const gp_Cylinder aCyl = BRepAdaptor_Surface (*aFaces[aConIndex]).Cylinder();
|
||||
const Standard_Real aRad = aCyl.Radius();
|
||||
const Standard_Real aHeight = aGeomPlanes[0]->Location().Transformed (*aGeomPlanesLoc[0])
|
||||
.Distance (aGeomPlanes[1]->Location().Transformed (*aGeomPlanesLoc[1]));
|
||||
|
||||
gp_Trsf aTrsf;
|
||||
aTrsf.SetTransformation (aCyl.Position(), gp_Ax3());
|
||||
gp_Ax3 aPos = aCyl.Position();
|
||||
if (aGeomPlanes[0]->Position().IsCoplanar (aGeomPlanes[1]->Position(), Precision::Angular(), Precision::Angular()))
|
||||
{
|
||||
// cylinders created as a prism have an inverse vector of the cylindrical surface
|
||||
aPos.SetDirection (aPos.Direction().Reversed());
|
||||
}
|
||||
aTrsf.SetTransformation (aPos, gp_Ax3());
|
||||
|
||||
Handle(Select3D_SensitiveCylinder) aSensSCyl = new Select3D_SensitiveCylinder (theOwner, aRad, aRad, aHeight, aTrsf);
|
||||
theSelection->Add (aSensSCyl);
|
||||
break;
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include <NCollection_IndexedDataMap.hxx>
|
||||
|
||||
typedef NCollection_IndexedDataMap<TopoDS_Shape,TopTools_ListOfShape,TopTools_ShapeMapHasher> TopTools_IndexedDataMapOfShapeListOfShape;
|
||||
typedef NCollection_IndexedDataMap<TopoDS_Shape, TopTools_ListOfShape, TopTools_ShapeMapHasher>::Iterator TopTools_IndexedDataMapIteratorOfDataMapOfShapeListOfShape;
|
||||
|
||||
|
||||
#endif
|
||||
|
@@ -2500,6 +2500,11 @@ static int VDrawText (Draw_Interpretor& theDI,
|
||||
}
|
||||
aTextFormatter->SetWrapping ((Standard_ShortReal)Draw::Atof(theArgVec[++anArgIt]));
|
||||
}
|
||||
else if (aParam == "-wordwrapping")
|
||||
{
|
||||
const bool isWordWrapping = Draw::ParseOnOffNoIterator(theArgsNb, theArgVec, anArgIt);
|
||||
aTextFormatter->SetWordWrapping(isWordWrapping);
|
||||
}
|
||||
else if (aParam == "-aspect"
|
||||
&& anArgIt + 1 < theArgsNb)
|
||||
{
|
||||
@@ -6925,6 +6930,7 @@ vdrawtext name text
|
||||
[-zoom {0|1}]=0
|
||||
[-height height]=16
|
||||
[-wrapping width]=40
|
||||
[-wordwrapping {0|1}]=1
|
||||
[-aspect {regular|bold|italic|boldItalic}]=regular
|
||||
[-font font]=Times
|
||||
[-2d] [-perspos {X Y Z}]={0 0 0}
|
||||
|
@@ -19,7 +19,10 @@
|
||||
#include <DDocStd.hxx>
|
||||
#include <Draw.hxx>
|
||||
#include <gp_Trsf.hxx>
|
||||
#include <Message.hxx>
|
||||
#include <NCollection_DataMap.hxx>
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
#include <TDF_ChildIterator.hxx>
|
||||
#include <TDF_Tool.hxx>
|
||||
#include <TDocStd_Document.hxx>
|
||||
#include <TopoDS_Compound.hxx>
|
||||
@@ -934,59 +937,140 @@ static Standard_Integer updateAssemblies(Draw_Interpretor& di, Standard_Integer
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Standard_Integer XGetProperties(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
|
||||
static Standard_Integer XGetProperties(Draw_Interpretor& theDI,
|
||||
Standard_Integer theArgc,
|
||||
const char** theArgv)
|
||||
{
|
||||
if (argc != 3)
|
||||
if (theArgc < 2)
|
||||
{
|
||||
di << "Syntax error: wrong number of arguments\nUse: " << argv[0] << " Doc Label\n";
|
||||
theDI.PrintHelp(theArgv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
Handle(TDocStd_Document) aDoc;
|
||||
DDocStd::GetDocument(argv[1], aDoc);
|
||||
DDocStd::GetDocument(theArgv[1], aDoc);
|
||||
if (aDoc.IsNull())
|
||||
{
|
||||
di << "Syntax error: " << argv[1] << " is not a document\n";
|
||||
theDI << "Syntax error: " << theArgv[1] << " is not a document\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
TDF_Label aLabel;
|
||||
TDF_Tool::Label(aDoc->GetData(), argv[2], aLabel);
|
||||
|
||||
// Get XDE shape tool
|
||||
Handle(XCAFDoc_ShapeTool) aShapeTool = XCAFDoc_DocumentTool::ShapeTool(aDoc->Main());
|
||||
|
||||
Handle(TDataStd_NamedData) aNamedData = aShapeTool->GetNamedProperties(aLabel);
|
||||
|
||||
if (aNamedData.IsNull())
|
||||
NCollection_IndexedDataMap<TCollection_AsciiString, Handle(TDataStd_NamedData)> aNameDataMap;
|
||||
for (Standard_Integer anInd = 2; anInd < theArgc; anInd++)
|
||||
{
|
||||
di << argv[2] << " has no properties\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
aNamedData->LoadDeferredData();
|
||||
if (aNamedData->HasIntegers())
|
||||
{
|
||||
TColStd_DataMapOfStringInteger anIntProperties = aNamedData->GetIntegersContainer();
|
||||
for (TColStd_DataMapIteratorOfDataMapOfStringInteger anIter(anIntProperties); anIter.More(); anIter.Next())
|
||||
TDF_Label aLabel;
|
||||
const TCollection_AsciiString anEntry = theArgv[anInd];
|
||||
TDF_Tool::Label(aDoc->GetData(), anEntry, aLabel);
|
||||
if (aLabel.IsNull())
|
||||
{
|
||||
di << anIter.Key() << " : " << anIter.Value() << "\n";
|
||||
TopoDS_Shape aShape = DBRep::Get(theArgv[anInd]);
|
||||
if (!aShape.IsNull())
|
||||
{
|
||||
aLabel = aShapeTool->FindShape(aShape);
|
||||
}
|
||||
}
|
||||
if (!aLabel.IsNull())
|
||||
{
|
||||
Handle(TDataStd_NamedData) aNamedData = aShapeTool->GetNamedProperties(aLabel);
|
||||
if (!aNamedData.IsNull())
|
||||
{
|
||||
aNameDataMap.Add(anEntry, aNamedData);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Message::SendWarning() << "Warning: incorrect argument [" << theArgv[anInd] << "]" << " is not a label";
|
||||
}
|
||||
}
|
||||
if (aNamedData->HasReals())
|
||||
if (theArgc == 2)
|
||||
{
|
||||
TDataStd_DataMapOfStringReal aRealProperties = aNamedData->GetRealsContainer();
|
||||
for (TDataStd_DataMapIteratorOfDataMapOfStringReal anIter(aRealProperties); anIter.More(); anIter.Next())
|
||||
for (TDF_ChildIterator anIter(aShapeTool->Label(), Standard_True);
|
||||
anIter.More(); anIter.Next())
|
||||
{
|
||||
di << anIter.Key() << " : " << anIter.Value() << "\n";
|
||||
const TDF_Label& aLabel = anIter.Value();
|
||||
TCollection_AsciiString anEntry;
|
||||
TDF_Tool::Entry(aLabel, anEntry);
|
||||
Handle(TDataStd_NamedData) aNamedData = aShapeTool->GetNamedProperties(aLabel);
|
||||
if (!aNamedData.IsNull())
|
||||
{
|
||||
aNameDataMap.Add(anEntry, aNamedData);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (aNamedData->HasStrings())
|
||||
for (NCollection_IndexedDataMap<TCollection_AsciiString, Handle(TDataStd_NamedData)>::Iterator aNamedDataIter(aNameDataMap);
|
||||
aNamedDataIter.More(); aNamedDataIter.Next())
|
||||
{
|
||||
TDataStd_DataMapOfStringString aStringProperties = aNamedData->GetStringsContainer();
|
||||
for (TDataStd_DataMapIteratorOfDataMapOfStringString anIter(aStringProperties); anIter.More(); anIter.Next())
|
||||
if (theArgc != 3)
|
||||
{
|
||||
di << anIter.Key() << " : " << anIter.Value() << "\n";
|
||||
theDI << "Property for [" << aNamedDataIter.Key() << "]:\n";
|
||||
}
|
||||
const Handle(TDataStd_NamedData)& aNamedData = aNamedDataIter.Value();
|
||||
aNamedData->LoadDeferredData();
|
||||
if (aNamedData->HasIntegers())
|
||||
{
|
||||
const TColStd_DataMapOfStringInteger& anIntProperties = aNamedData->GetIntegersContainer();
|
||||
for (TColStd_DataMapIteratorOfDataMapOfStringInteger anIter(anIntProperties); anIter.More(); anIter.Next())
|
||||
{
|
||||
theDI << anIter.Key() << " : " << anIter.Value() << "\n";
|
||||
}
|
||||
}
|
||||
if (aNamedData->HasReals())
|
||||
{
|
||||
const TDataStd_DataMapOfStringReal& aRealProperties = aNamedData->GetRealsContainer();
|
||||
for (TDataStd_DataMapIteratorOfDataMapOfStringReal anIter(aRealProperties); anIter.More(); anIter.Next())
|
||||
{
|
||||
theDI << anIter.Key() << " : " << anIter.Value() << "\n";
|
||||
}
|
||||
}
|
||||
if (aNamedData->HasStrings())
|
||||
{
|
||||
const TDataStd_DataMapOfStringString& aStringProperties = aNamedData->GetStringsContainer();
|
||||
for (TDataStd_DataMapIteratorOfDataMapOfStringString anIter(aStringProperties); anIter.More(); anIter.Next())
|
||||
{
|
||||
theDI << anIter.Key() << " : " << anIter.Value() << "\n";
|
||||
}
|
||||
}
|
||||
if (aNamedData->HasBytes())
|
||||
{
|
||||
const TDataStd_DataMapOfStringByte& aByteProperties = aNamedData->GetBytesContainer();
|
||||
for (TDataStd_DataMapOfStringByte::Iterator anIter(aByteProperties); anIter.More(); anIter.Next())
|
||||
{
|
||||
theDI << anIter.Key() << " : " << anIter.Value() << "\n";
|
||||
}
|
||||
}
|
||||
if (aNamedData->HasArraysOfIntegers())
|
||||
{
|
||||
const TDataStd_DataMapOfStringHArray1OfInteger& anArrayIntegerProperties =
|
||||
aNamedData->GetArraysOfIntegersContainer();
|
||||
for (TDataStd_DataMapOfStringHArray1OfInteger::Iterator anIter(anArrayIntegerProperties);
|
||||
anIter.More(); anIter.Next())
|
||||
{
|
||||
TCollection_AsciiString aMessage(anIter.Key() + " : ");
|
||||
for (TColStd_HArray1OfInteger::Iterator anSubIter(anIter.Value()->Array1());
|
||||
anSubIter.More(); anSubIter.Next())
|
||||
{
|
||||
aMessage += " ";
|
||||
aMessage += anSubIter.Value();
|
||||
}
|
||||
theDI << aMessage << "\n";
|
||||
}
|
||||
}
|
||||
if (aNamedData->HasArraysOfReals())
|
||||
{
|
||||
const TDataStd_DataMapOfStringHArray1OfReal& anArrayRealsProperties =
|
||||
aNamedData->GetArraysOfRealsContainer();
|
||||
for (TDataStd_DataMapOfStringHArray1OfReal::Iterator anIter(anArrayRealsProperties);
|
||||
anIter.More(); anIter.Next())
|
||||
{
|
||||
TCollection_AsciiString aMessage(anIter.Key() + " : ");
|
||||
for (TColStd_HArray1OfReal::Iterator anSubIter(anIter.Value()->Array1());
|
||||
anSubIter.More(); anSubIter.Next())
|
||||
{
|
||||
aMessage += " ";
|
||||
aMessage += anSubIter.Value();
|
||||
}
|
||||
theDI << aMessage << "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1142,7 +1226,7 @@ void XDEDRAW_Shapes::InitCommands(Draw_Interpretor& di)
|
||||
di.Add ("XUpdateAssemblies","Doc \t: updates assembly compounds",
|
||||
__FILE__, updateAssemblies, g);
|
||||
|
||||
di.Add("XGetProperties", "Doc Label \t: prints named properties assigned to the Label",
|
||||
di.Add("XGetProperties", "Doc [label1, label2, ...] [shape1, shape2, ...]\t: prints named properties assigned to the all document's shape labels or chosen labels of shapes",
|
||||
__FILE__, XGetProperties, g);
|
||||
|
||||
di.Add ("XAutoNaming","Doc [0|1]\t: Disable/enable autonaming to Document",
|
||||
|
@@ -10,7 +10,7 @@ stepread [locate_data_file bug27894_usd_raises_Standard_NullObject.stp] a *
|
||||
renamevar a_1 a
|
||||
unifysamedom result a
|
||||
|
||||
checknbshapes result -m UnifySameDomain -face 12 -edge 29
|
||||
checknbshapes result -m UnifySameDomain -face 12 -edge 30
|
||||
|
||||
checkshape result
|
||||
|
||||
|
@@ -9,7 +9,7 @@ unifysamedom result a
|
||||
|
||||
checkshape result
|
||||
|
||||
checknbshapes result -solid 1 -shell 1 -face 21 -wire 22 -edge 58 -vertex 38
|
||||
checknbshapes result -solid 1 -shell 1 -face 21 -wire 22 -edge 57 -vertex 37
|
||||
|
||||
set tolres [checkmaxtol result]
|
||||
|
||||
|
22
tests/bugs/heal/bug33006
Normal file
22
tests/bugs/heal/bug33006
Normal file
@@ -0,0 +1,22 @@
|
||||
puts "========================================="
|
||||
puts "OCC33006: UnifySameDomain raises exceptio"
|
||||
puts "========================================="
|
||||
puts ""
|
||||
|
||||
restore [locate_data_file bug33006.brep] a
|
||||
|
||||
unifysamedom result a
|
||||
|
||||
checkshape result
|
||||
|
||||
checknbshapes result -t -solid 1 -shell 1 -face 3 -wire 4 -edge 11 -vertex 4
|
||||
|
||||
set tolres [checkmaxtol result]
|
||||
|
||||
if { ${tolres} > 0.004416} {
|
||||
puts "Error: bad tolerance of result"
|
||||
}
|
||||
|
||||
checkprops result -s 77917.5 -v 195647
|
||||
|
||||
checkview -display result -2d -path ${imagedir}/${test_image}.png
|
22
tests/bugs/modalg_7/bug24909_1
Normal file
22
tests/bugs/modalg_7/bug24909_1
Normal file
@@ -0,0 +1,22 @@
|
||||
puts "========"
|
||||
puts "0024909: Modeling Algorithms - SIGSEGV in buildsweep"
|
||||
puts "========"
|
||||
puts ""
|
||||
|
||||
pload MODELING
|
||||
circle c1 0 0 0 40
|
||||
mkedge e1 c1
|
||||
wire w1 e1
|
||||
tcopy w1 Sketch002
|
||||
tcopy w1 Sketch001
|
||||
renamevar w1 Sketch
|
||||
trotate Sketch 0 0 0 0. 1. 0. 90
|
||||
ttranslate Sketch 0. 0. 75.
|
||||
trotate Sketch001 0 0 0 0. 1. 0. 90
|
||||
ttranslate Sketch001 0. 0. -75.
|
||||
ttranslate Sketch002 50. 0. 0.
|
||||
mksweep Sketch002
|
||||
setsweep -CF
|
||||
addsweep Sketch001
|
||||
addsweep Sketch
|
||||
buildsweep Sweep
|
26
tests/bugs/modalg_7/bug24909_2
Normal file
26
tests/bugs/modalg_7/bug24909_2
Normal file
@@ -0,0 +1,26 @@
|
||||
puts "========"
|
||||
puts "0024909: Modeling Algorithms - SIGSEGV in buildsweep"
|
||||
puts "========"
|
||||
puts ""
|
||||
|
||||
pload MODELING
|
||||
restore [locate_data_file bug24909_BezCurve.brep] BezCurve
|
||||
ttranslate BezCurve 0 -8 0
|
||||
explode BezCurve E
|
||||
wire Sweep001-0-spine BezCurve_1
|
||||
mksweep Sweep001-0-spine
|
||||
setsweep -CF
|
||||
circle Circle-curve 0 0 0 18
|
||||
mkedge Circle-edge Circle-curve 0 0
|
||||
wire Circle Circle-edge
|
||||
trotate Circle 0 0 0 0.577350269189625731 0.577350269189625731 0.577350269189625731 120
|
||||
ttranslate Circle 0 -71 203.5
|
||||
addsweep Circle
|
||||
circle Circle001-curve 0 0 0 16
|
||||
mkedge Circle001-edge Circle001-curve 0 0
|
||||
wire Circle001 Circle001-edge
|
||||
trotate Circle001 0 0 0 0.577350269189625731 0.577350269189625731 0.577350269189625731 120
|
||||
ttranslate Circle001 0 -71 203.5
|
||||
addsweep Circle001
|
||||
buildsweep Sweep001 -C -S
|
||||
|
17
tests/bugs/modalg_7/bug24909_3
Normal file
17
tests/bugs/modalg_7/bug24909_3
Normal file
@@ -0,0 +1,17 @@
|
||||
puts "========"
|
||||
puts "0024909: Modeling Algorithms - SIGSEGV in buildsweep"
|
||||
puts "========"
|
||||
puts ""
|
||||
|
||||
pload MODELING
|
||||
restore [locate_data_file bug24909_spine.brep]
|
||||
renamevar bug24909_spine Sweep-0-spine
|
||||
mksweep Sweep-0-spine
|
||||
setsweep -CF
|
||||
restore [locate_data_file bug24909_Sketch.brep]
|
||||
renamevar bug24909_Sketch Sweep-0-section-00-Sketch
|
||||
addsweep Sweep-0-section-00-Sketch
|
||||
restore [locate_data_file bug24909_Sketch001.brep]
|
||||
renamevar bug24909_Sketch001 Sweep-0-section-01-Sketch001
|
||||
addsweep Sweep-0-section-01-Sketch001
|
||||
buildsweep Sweep
|
15
tests/bugs/modalg_7/bug24909_4
Normal file
15
tests/bugs/modalg_7/bug24909_4
Normal file
@@ -0,0 +1,15 @@
|
||||
puts "========"
|
||||
puts "0024909: Modeling Algorithms - SIGSEGV in buildsweep"
|
||||
puts "========"
|
||||
puts ""
|
||||
|
||||
pload ALL
|
||||
circle c1 0 0 0 40
|
||||
mkedge e1 c1
|
||||
wire w1 e1
|
||||
line l1 0 0 0 0 0 20
|
||||
mkedge e2 l1 0 10
|
||||
wire w2 e2
|
||||
mksweep w1
|
||||
addsweep w2
|
||||
buildsweep sw1
|
@@ -1,29 +0,0 @@
|
||||
puts "============"
|
||||
puts "OCC30217_1"
|
||||
puts "============"
|
||||
puts ""
|
||||
#########################################################################
|
||||
# Intersection between a circle and a line not detected (2d)
|
||||
#########################################################################
|
||||
|
||||
2ddrseg s2 -80.461134694338 53.07587187722 -31.501464018476 67.029737602069
|
||||
circle c2 -18.339655323916 20.849340929486 48.019394466707
|
||||
# Set tolerance.
|
||||
set tol_abs 1.0e-7
|
||||
set tol_rel 1.0e-2
|
||||
|
||||
# Set reference data.
|
||||
set param11 1.8484218380721342
|
||||
set param12 1.8484627151687805
|
||||
set param21 50.908401295062035
|
||||
set param22 50.909328431594709
|
||||
|
||||
set info [2dintersect c2 s2 -tol 1e-8]
|
||||
regexp {Curve 1 first parameter: +([-0-9.+eE]+) last parameter: +([-0-9.+eE]+)} ${info} full curve1p1 curve1p2
|
||||
regexp {Curve 2 first parameter: +([-0-9.+eE]+) last parameter: +([-0-9.+eE]+)} ${info} full curve2p1 curve2p2
|
||||
|
||||
checkreal "Curve 1 param 1" ${curve1p1} ${param11} ${tol_abs} ${tol_rel}
|
||||
checkreal "Curve 1 param 2" ${curve1p2} ${param12} ${tol_abs} ${tol_rel}
|
||||
|
||||
checkreal "Curve 2 param 1" ${curve2p1} ${param21} ${tol_abs} ${tol_rel}
|
||||
checkreal "Curve 2 param 2" ${curve2p2} ${param22} ${tol_abs} ${tol_rel}
|
@@ -1,26 +0,0 @@
|
||||
puts "============"
|
||||
puts "OCC30217_2"
|
||||
puts "============"
|
||||
puts ""
|
||||
#########################################################################
|
||||
# Intersection between a circle and a line not detected (3d)
|
||||
#########################################################################
|
||||
set tol_abs 2.e-7
|
||||
|
||||
drseg s -80.461134694338 53.07587187722 0.0 -31.501464018476 67.029737602069 0.0
|
||||
circle c -18.339655323916 20.849340929486 0.0 48.019394466707
|
||||
set info1 [extrema c s]
|
||||
if {[regexp "ext" ${info1}] != 1} {
|
||||
puts "Error : No intersection detected"
|
||||
} else {
|
||||
puts "OK: Intersection are detected"
|
||||
}
|
||||
|
||||
# Distance check
|
||||
set info2 [dump ext_1]
|
||||
regexp "Parameters : 0 +(\[-0-9*\.+eE\]+)" $info2 full extLength
|
||||
if { ${extLength} > $tol_abs } {
|
||||
puts "Error: bad distance poins obtained"
|
||||
} else {
|
||||
puts "OK: good distance between obtained points"
|
||||
}
|
@@ -1,28 +0,0 @@
|
||||
puts "============"
|
||||
puts "OCC30217_3"
|
||||
puts "============"
|
||||
puts ""
|
||||
#########################################################################
|
||||
# Intersection between a circle and a line not detected (3d)
|
||||
#########################################################################
|
||||
set tol_abs 2.e-7
|
||||
|
||||
drseg s -31.501464018476 67.029737602069 -10.0 -31.501464018476 67.029737602069 0.0
|
||||
circle c -18.339655323916 20.849340929486 0.0 48.019394466707
|
||||
set info1 [extrema c s]
|
||||
if {[regexp "ext" ${info1}] != 1} {
|
||||
puts "Error : No intersection detected"
|
||||
} else {
|
||||
puts "OK: Intersection are detected"
|
||||
}
|
||||
|
||||
# Distance check
|
||||
set infoext1 [dump ext_1]
|
||||
|
||||
|
||||
regexp "Parameters : 0 +(\[-0-9*\.+eE\]+)" $infoext1 full ext1Length ext2Length
|
||||
if { $ext1Length > $tol_abs || $ext2Length > $tol_abs } {
|
||||
puts "Error: bad distance poins obtained"
|
||||
} else {
|
||||
puts "OK: good distance between obtained points"
|
||||
}
|
@@ -1,20 +0,0 @@
|
||||
puts "============"
|
||||
puts "OCC30217_4"
|
||||
puts "============"
|
||||
puts ""
|
||||
#########################################################################
|
||||
# Intersection between a circle and a line not detected (3d)
|
||||
#########################################################################
|
||||
|
||||
set ExpDist 5
|
||||
|
||||
circle c1 0 0 0 0 0 1 5
|
||||
line c2 0 0 0 0 0 1
|
||||
trim c2 c2 -1 -5e-8
|
||||
|
||||
regexp {Infinite number of extremas, distance = +([-0-9.+eE]+)} [extrema c1 c2] full aDist1
|
||||
checkreal Distance $aDist1 $ExpDist 1.0e-7 0.0
|
||||
|
||||
regexp {Infinite number of extremas, distance = +([-0-9.+eE]+)} [extrema c2 c1] full aDist2
|
||||
checkreal Distance $aDist2 $ExpDist 1.0e-7 0.0
|
||||
|
30
tests/bugs/modalg_8/bug33080
Normal file
30
tests/bugs/modalg_8/bug33080
Normal file
@@ -0,0 +1,30 @@
|
||||
puts "================================"
|
||||
puts "OCC33080: Wrong projection point"
|
||||
puts "================================"
|
||||
puts ""
|
||||
|
||||
restore [locate_data_file bug33080.brep] a
|
||||
|
||||
set log [projface a -0.21115 1.17515 1.4504]
|
||||
|
||||
regexp {n0 1 Distance ([0-9+-.eE]*)} $log full dist
|
||||
|
||||
if { $dist > 0.1240364 } {
|
||||
puts "Error distance: projection is wrong"
|
||||
}
|
||||
|
||||
regexp {U = ([0-9+-.eE]*)} $log full uparam
|
||||
|
||||
if { $uparam < 869.174321 || $uparam > 869.174322 } {
|
||||
puts "Error point: projection is wrong"
|
||||
}
|
||||
|
||||
regexp {V = ([0-9+-.eE]*)} $log full vparam
|
||||
|
||||
if { $vparam < 732.602489 || $vparam > 732.602490 } {
|
||||
puts "Error point: projection is wrong"
|
||||
}
|
||||
|
||||
if {![regexp "Found 1 Points" $log]} {
|
||||
puts "Error number of points: projection is wrong"
|
||||
}
|
@@ -1,5 +1,3 @@
|
||||
puts "TODO OCC29040 ALL: Error: the history of the removed edges is incorrect"
|
||||
|
||||
puts "======="
|
||||
puts "0028913"
|
||||
puts "======="
|
||||
|
@@ -1,5 +1,3 @@
|
||||
puts "TODO OCC29040 ALL: Error: the history of the removed edges is incorrect"
|
||||
|
||||
puts "======="
|
||||
puts "0028913"
|
||||
puts "======="
|
||||
|
@@ -4,21 +4,30 @@ puts ""
|
||||
puts "==========="
|
||||
|
||||
pload MODELING VISUALIZATION
|
||||
vinit View1
|
||||
vinit View1 -width 500
|
||||
vclear
|
||||
vaxo
|
||||
|
||||
box b1 10 0 360 10 180 40
|
||||
box b1 10 0 460 10 180 40
|
||||
vdisplay b1
|
||||
vdrawtext t1 "Top text on plane yOz\n(not wrapped)" -pos 10 5 400 -color green -plane 1 0 0 0 1 0 -valign top -font SansFont -zoom 1
|
||||
vdrawtext t1 "Top text on plane yOz\n(not wrapped)" -pos 10 5 500 -color green -plane 1 0 0 0 1 0 -valign top -font SansFont -zoom 1
|
||||
|
||||
box b2 10 0 240 10 130 60
|
||||
box b2 10 0 340 10 130 60
|
||||
vdisplay b2
|
||||
vdrawtext t2 "Top text on plane yOz\n(wrapping=120)" -pos 10 5 300 -color green -wrapping 120 -plane 1 0 0 0 1 0 -valign top -font SansFont -zoom 1
|
||||
vdrawtext t2 "Top text on plane yOz\n(wrapping=120)" -pos 10 5 400 -color green -wrapping 120 -plane 1 0 0 0 1 0 -valign top -font SansFont -zoom 1
|
||||
|
||||
box b3 10 0 60 10 60 150
|
||||
box b3 10 0 160 10 60 150
|
||||
vdisplay b3
|
||||
vdrawtext t3 "Top text on plane yOz\n(wrapping=50)" -pos 10 5 200 -color green -wrapping 50 -plane 1 0 0 0 1 0 -valign top -font SansFont -zoom 1
|
||||
vdrawtext t3 "Top text on plane yOz\n(wrapping=50)" -pos 10 5 300 -color green -wrapping 50 -plane 1 0 0 0 1 0 -valign top -font SansFont -zoom 1
|
||||
|
||||
box b4 10 200 400 10 130 100
|
||||
vdisplay b4
|
||||
vdrawtext t4 "Top text on plane yOz\n(wrapping=120, word wrapping disabled)" -pos 10 205 500 -color green -wrapping 120 -plane 1 0 0 0 1 0 -valign top -font SansFont -zoom 1 -wordwrapping 0
|
||||
|
||||
box b5 10 200 160 10 60 200
|
||||
vdisplay b5
|
||||
vdrawtext t5 "Top text on plane yOz\n(wrapping=50, word wrapping disabled)" -pos 10 205 350 -color green -wrapping 50 -plane 1 0 0 0 1 0 -valign top -font SansFont -zoom 1 -wordwrapping 0
|
||||
|
||||
|
||||
vright
|
||||
vfit
|
||||
|
26
tests/vselect/bugs/bug33084
Normal file
26
tests/vselect/bugs/bug33084
Normal file
@@ -0,0 +1,26 @@
|
||||
puts "============="
|
||||
puts "0033084: Visualization - Cylindrical prism is selectable only by its base when extruded in some directions"
|
||||
puts "============="
|
||||
|
||||
pload MODELING VISUALIZATION
|
||||
profile p1 c 1 360 ww
|
||||
mkplane f p1
|
||||
prism pr1 f 0 0 2
|
||||
prism pr2 f 0 0 -2
|
||||
ttranslate pr1 1 1 1
|
||||
ttranslate pr2 -1 -1 -1
|
||||
|
||||
vinit View1
|
||||
vclear
|
||||
vaxo
|
||||
vdisplay -dispmode 1 pr1 pr2
|
||||
vfit
|
||||
vsensdis
|
||||
|
||||
vdump $imagedir/${casename}_prism_sensitive_prs.png
|
||||
|
||||
vmoveto 130 330
|
||||
if { ![string match "*Select3D_SensitiveCylinder*" [vstate -entities]] } { puts "Error: cylinder should be detected" }
|
||||
|
||||
vmoveto 270 130
|
||||
if { ![string match "*Select3D_SensitiveCylinder*" [vstate -entities]] } { puts "Error: cylinder should be detected" }
|
Reference in New Issue
Block a user