mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
Compare commits
39 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
0652ae3717 | ||
|
31894e9a1b | ||
|
060fc60338 | ||
|
bf5f0ca20a | ||
|
e08a9b0302 | ||
|
55c8f0f7a4 | ||
|
799318357c | ||
|
f522ce50b2 | ||
|
5d0038626b | ||
|
88b12b7c05 | ||
|
7b93ae3c5e | ||
|
6ef0d6f156 | ||
|
967d2f4f30 | ||
|
4ec8ee66a0 | ||
|
0493ffd083 | ||
|
0be7dbe183 | ||
|
1c8fc6bee2 | ||
|
d95f5ce102 | ||
|
1e756cb979 | ||
|
3bb61eb0fe | ||
|
2a33274558 | ||
|
4efe27fc4e | ||
|
ea298f59e4 | ||
|
78d5ea7a71 | ||
|
e084dbbc20 | ||
|
66d1cdc65d | ||
|
e607bd3e6b | ||
|
1ccc1371b9 | ||
|
5ac0f98974 | ||
|
2bda8346dc | ||
|
92435cd0ff | ||
|
597fde688e | ||
|
458ff6a680 | ||
|
a7ced2a456 | ||
|
ab9f6cabdc | ||
|
95c882e9d4 | ||
|
976627e601 | ||
|
d918208af6 | ||
|
98ae54f728 |
@@ -89,6 +89,14 @@ file (APPEND ${OCCT_CONFIG_FOR_DOXYGEN} "\nEXTERNAL_SEARCH = NO")
|
||||
# Formula options
|
||||
file (APPEND ${OCCT_CONFIG_FOR_DOXYGEN} "\nMATHJAX_RELPATH = ${3RDPARTY_MATHJAX_RELATIVE_PATH}")
|
||||
|
||||
# If MSVC is used as build system, change warning format to the one recognized by MSVC
|
||||
if (MSVC)
|
||||
file (APPEND ${OCCT_CONFIG_FOR_DOXYGEN} "\nWARN_FORMAT = \"$file($line): $text\"")
|
||||
endif()
|
||||
|
||||
# Avoid Doxygen parsing messages in the build log
|
||||
file (APPEND ${OCCT_CONFIG_FOR_DOXYGEN} "\nQUIET = YES")
|
||||
|
||||
# Copy index file to provide fast access to HTML documentation
|
||||
file(COPY "${OCCT_OVERVIEW_RESOURCE_DIR}/index.html" DESTINATION "${OCCT_GENERATED_OVERVIEW_DIR}")
|
||||
|
||||
|
@@ -1091,7 +1091,7 @@ The following environment variables have become redundant:
|
||||
|
||||
* *CSF_UnitsLexicon* and *CSF_UnitsDefinition* are no more used. Units definition (*UnitsAPI/Lexi_Expr.dat* and *UnitsAPI/Units.dat*) is now embedded into source code.
|
||||
* *CSF_XSMessage* and *CSF_XHMessage* are now optional.
|
||||
English messages (XSMessage/*XSTEP.us* and SHMessage/*SHAPE.us*) are now embedded into source code
|
||||
English messages (XSMessage/\*XSTEP.us* and SHMessage/\*SHAPE.us*) are now embedded into source code
|
||||
and automatically loaded when environment variables are not set.
|
||||
* *CSF_ShadersDirectory* is not required any more, though it still can be used to load custom shaders.
|
||||
Mandatory GLSL resources are now embedded into source code.
|
||||
@@ -1678,3 +1678,47 @@ Standard_Boolean meshing_new()
|
||||
Some public methods of the class BRepFilletAPI_MakeChamfer are released from excess arguments:
|
||||
- method Add for symmetric chamfer now takes only 2 arguments: distance and edge;
|
||||
- method GetDistAngle now takes only 3 arguments: index of contour, distance and angle.
|
||||
|
||||
@subsection upgrade_740_aspects Aspects unification
|
||||
|
||||
Fill Area, Line and Marker aspects (classes *Graphic3d_AspectFillArea3d*, *Graphic3d_AspectLine3d*, *Graphic3d_AspectMarker3d* and *Graphic3d_AspectText3d*)
|
||||
have been merged into new class *Graphic3d_Aspects* providing a single state for rendering primitives of any type.
|
||||
The old per-primitive type aspect classes have been preserved as sub-classes of *Graphic3d_Aspects* with default values close to the previous behavior.
|
||||
All aspects except Graphic3d_AspectFillArea3d define Graphic3d_TOSM_UNLIT shading model.
|
||||
|
||||
The previous approach with dedicated aspects per primitive type was handy in simplified case, but lead to confusion otherwise.
|
||||
In fact, drawing points or lines with lighting applied is a valid use case, but only *Graphic3d_AspectFillArea3d* previously defined necessary material properties.
|
||||
|
||||
As aspects for different primitive types have been merged, Graphic3d_Group does no more provide per-type aspect properties.
|
||||
Existing code relying on old behavior and putting interleaved per-type aspects into single Graphic3d_Group should be updated.
|
||||
For example, the following pseudo-code will not work anymore, because all *SetGroupPrimitivesAspect* calls will setup the same property:
|
||||
~~~~
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect()); //!< overrides previous aspect
|
||||
|
||||
Handle(Graphic3d_ArrayOfSegments) aLines = new Graphic3d_ArrayOfSegments (2);
|
||||
Handle(Graphic3d_ArrayOfTriangles) aTris = new Graphic3d_ArrayOfTriangles (3);
|
||||
aGroup->AddPrimitiveArray (aLines); //!< both arrays will use the same aspect
|
||||
aGroup->AddPrimitiveArray (aTris);
|
||||
~~~~
|
||||
|
||||
To solve the problem, the code should be modified to either put primitives into dedicated groups (preferred approach), or using *SetPrimitivesAspect* in proper order:
|
||||
~~~~
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
Handle(Graphic3d_ArrayOfTriangles) aTris = new Graphic3d_ArrayOfTriangles (3);
|
||||
aGroup->AddPrimitiveArray (aTris);
|
||||
|
||||
Handle(Graphic3d_ArrayOfSegments) aLines = new Graphic3d_ArrayOfSegments (2);
|
||||
aGroup->SetPrimitivesAspect (myDrawer->LineAspect()->Aspect()); //!< next array will use the new aspect
|
||||
aGroup->AddPrimitiveArray (aLines);
|
||||
~~~~
|
||||
|
||||
@subsection upgrade_740_interiorstyles Interior styles
|
||||
|
||||
* *Aspect_IS_HOLLOW* is now an alias to *Aspect_IS_EMPTY* and does not implicitly enables drawing mesh edges anymore.
|
||||
Specify Graphic3d_AspectFillArea3d::SetDrawEdges(true) with Graphic3d_AspectFillArea3d::SetInteriorStyle(Aspect_IS_EMPTY) to get previous behavior of Aspect_IS_HOLLOW style.
|
||||
* *Aspect_IS_HIDDENLINE* does not implicitly enables drawing mesh edges anymore.
|
||||
Specify Graphic3d_AspectFillArea3d::SetDrawEdges(true) with Graphic3d_AspectFillArea3d::SetInteriorStyle(Aspect_IS_HIDDENLINE) to get previous behavior of Aspect_IS_HIDDENLINE style.
|
||||
|
@@ -23,7 +23,7 @@ WARNINGS = NO
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = YES
|
||||
EXPAND_ONLY_PREDEF = YES
|
||||
PREDEFINED = Standard_EXPORT Standard_OVERRIDE:=override __Standard_API __Draw_API Handle(a):=Handle<a> DEFINE_STANDARD_ALLOC DEFINE_NCOLLECTION_ALLOC
|
||||
PREDEFINED = Standard_EXPORT Standard_NODISCARD Standard_OVERRIDE:=override __Standard_API __Draw_API Handle(a):=Handle<a> DEFINE_STANDARD_ALLOC DEFINE_NCOLLECTION_ALLOC
|
||||
GENERATE_HTML = YES
|
||||
GENERATE_LATEX = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
|
@@ -16,7 +16,6 @@ WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_FORMAT = \\$file:\$line: \$text\
|
||||
INPUT_ENCODING = UTF-8
|
||||
FILE_PATTERNS = *.md *.dox
|
||||
RECURSIVE = YES
|
||||
@@ -56,6 +55,6 @@ USE_MATHJAX = YES
|
||||
MATHJAX_FORMAT = HTML-CSS
|
||||
|
||||
# Define alias for inserting images in uniform way (both HTML and PDF)
|
||||
ALIASES += figure{1}="\image html \1 \n"
|
||||
ALIASES += figure{2}="\image html \1 \2 \n"
|
||||
ALIASES += figure{3}="\image html \1 \2 \n"
|
||||
ALIASES += figure{1}="\image html \1"
|
||||
ALIASES += figure{2}="\image html \1 \2"
|
||||
ALIASES += figure{3}="\image html \1 \2"
|
||||
|
@@ -16,7 +16,6 @@ WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_FORMAT = \\$file:\$line: \$text\
|
||||
INPUT_ENCODING = UTF-8
|
||||
FILE_PATTERNS = *.md *.dox
|
||||
RECURSIVE = YES
|
||||
@@ -49,6 +48,6 @@ LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
|
||||
# Define alias for inserting images in uniform way (both HTML and PDF)
|
||||
ALIASES += figure{1}="\image latex \1 \n"
|
||||
ALIASES += figure{2}="\image latex \1 \2 \n"
|
||||
ALIASES += figure{3}="\image latex \1 \2 width=\3 \n"
|
||||
ALIASES += figure{1}="\image latex \1"
|
||||
ALIASES += figure{2}="\image latex \1 \2"
|
||||
ALIASES += figure{3}="\image latex \1 \2 width=\3"
|
||||
|
@@ -178,10 +178,10 @@ if (!Interface_Static::SetRVal ("read.maxprecision.val",0.1))
|
||||
Default value is 1.
|
||||
|
||||
<h4>read.stdsameparameter.mode</h4>
|
||||
defines the using of *BRepLib::SameParameter*. Its possible values are:
|
||||
* 0 (Off) -- *BRepLib::SameParameter* is not called,
|
||||
* 1 (On) -- *BRepLib::SameParameter* is called.
|
||||
*BRepLib::SameParameter* is used through *ShapeFix_Edge::SameParameter*. It ensures that the resulting edge will have the lowest tolerance taking pcurves either unmodified from the IGES file or modified by *BRepLib::SameParameter*.
|
||||
defines the using of *BRepLib\::SameParameter*. Its possible values are:
|
||||
* 0 (Off) -- *BRepLib\::SameParameter* is not called,
|
||||
* 1 (On) -- *BRepLib\::SameParameter* is called.
|
||||
*BRepLib\::SameParameter* is used through *ShapeFix_Edge\::SameParameter*. It ensures that the resulting edge will have the lowest tolerance taking pcurves either unmodified from the IGES file or modified by *BRepLib\::SameParameter*.
|
||||
Read this parameter with:
|
||||
~~~~~
|
||||
Standard_Integer mv = Interface_Static::IVal("read.stdsameparameter.mode");
|
||||
@@ -202,7 +202,7 @@ The processor also decides to re-compute either the 3D or the 2D curve even if
|
||||
* the number of sub-curves in the 2D curve is different from the number of sub-curves in the 3D curve. This can be either due to different numbers of sub-curves given in the IGES file or because of splitting of curves during translation.
|
||||
* 3D or 2D curve is a Circular Arc (entity type 100) starting and ending in the same point (note that this case is incorrect according to the IGES standard).
|
||||
|
||||
The parameter *read.surfacecurve.mode* defines which curve (3D or 2D) is used for re-computing the other one:
|
||||
The parameter *read.surfacecurve.mode* defines which curve (3D or 2D) is used for re-computing the other one:
|
||||
* *Default(0)* use the preference flag value in the entity's Parameter Data section. The flag values are:
|
||||
* 0: no preference given,
|
||||
* 1: use 2D for 142 entities and 3D for 141 entities,
|
||||
@@ -400,12 +400,12 @@ reader.PrintTransferInfo (failsonly, mode);
|
||||
~~~~~
|
||||
displays the messages that appeared during the last invocation of *Transfer* or *TransferRoots*.
|
||||
|
||||
If *failsonly* is *IFSelect_FailOnly*, only fail messages will be output, if it is *IFSelect_FailAndWarn*, all messages will be output. Parameter “mode” can have *IFSelect_xxx* values where *xxx* can be:
|
||||
* *GeneralCount* -- gives general statistics on the transfer (number of translated IGES entities, number of fails and warnings, etc)
|
||||
* *CountByItem* -- gives the number of IGES entities with their types per message.
|
||||
* *ListByItem* -- gives the number of IGES entities with their type and DE numbers per message.
|
||||
* *ResultCount* -- gives the number of resulting OCCT shapes per type.
|
||||
* *Mapping* -- gives mapping between roots of the IGES file and the resulting OCCT shape per IGES and OCCT type.
|
||||
If *failsonly* is *IFSelect_FailOnly*, only fail messages will be output, if it is *IFSelect_FailAndWarn*, all messages will be output. Parameter “mode” can have *IFSelect_xxx* values where *xxx* can be:
|
||||
* *GeneralCount* -- gives general statistics on the transfer (number of translated IGES entities, number of fails and warnings, etc)
|
||||
* *CountByItem* -- gives the number of IGES entities with their types per message.
|
||||
* *ListByItem* -- gives the number of IGES entities with their type and DE numbers per message.
|
||||
* *ResultCount* -- gives the number of resulting OCCT shapes per type.
|
||||
* *Mapping* -- gives mapping between roots of the IGES file and the resulting OCCT shape per IGES and OCCT type.
|
||||
|
||||
@subsection occt_iges_2_4 Mapping of IGES entities to Open CASCADE Technology shapes
|
||||
|
||||
|
@@ -1793,12 +1793,11 @@ Create facet attributes.
|
||||
Handle(Graphic3d_AspectFillArea3d) aFaceAspect = new Graphic3d_AspectFillArea3d();
|
||||
Graphic3d_MaterialAspect aBrassMaterial (Graphic3d_NOM_BRASS);
|
||||
Graphic3d_MaterialAspect aGoldMaterial (Graphic3d_NOM_GOLD);
|
||||
aFaceAspect->SetInteriorStyle (Aspect_IS_SOLID);
|
||||
aFaceAspect->SetInteriorStyle (Aspect_IS_SOLID_WIREFRAME);
|
||||
aFaceAspect->SetInteriorColor (aMyColor);
|
||||
aFaceAspect->SetDistinguishOn ();
|
||||
aFaceAspect->SetFrontMaterial (aGoldMaterial);
|
||||
aFaceAspect->SetBackMaterial (aBrassMaterial);
|
||||
aFaceAspect->SetEdgeOn();
|
||||
~~~~~
|
||||
|
||||
Create text attributes.
|
||||
|
@@ -14,9 +14,9 @@ Requirements for building sample:
|
||||
* Android NDK r9d or newer
|
||||
* Apache Ant 1.9.4 or higher
|
||||
* OCCT compiled under Android platform and placed in directories:
|
||||
* occt/libs/armeabi-v7a/*.so and occt/inc/*.hxx (libraries and include files of OCCT install)
|
||||
* android/assets/opencascade/shared/Shaders/* (Shaders folder of OCCT install: /share/opencascade/resources/Shaders)
|
||||
* 3rdparty/include/freetype2/*, 3rdparty/include/FreeImage.h and 3rdparty/libs/armeabi-v7a/libFreeImage.so and 3rdparty/libs/armeabi-v7a/libfreetype.so
|
||||
* occt/libs/armeabi-v7a/\*.so and occt/inc/\*.hxx (libraries and include files of OCCT install)
|
||||
* android/assets/opencascade/shared/Shaders/\* (Shaders folder of OCCT install: /share/opencascade/resources/Shaders)
|
||||
* 3rdparty/include/freetype2/\*, 3rdparty/include/FreeImage.h and 3rdparty/libs/armeabi-v7a/libFreeImage.so and 3rdparty/libs/armeabi-v7a/libfreetype.so
|
||||
|
||||
It is also possible to to correct OCCT.pri file an get resources from another tree of directories.
|
||||
|
||||
|
@@ -277,7 +277,6 @@ blend result _model 2 _model_161
|
||||
pload VISUALIZATION
|
||||
vinit Driver1/Viewer1/View1
|
||||
vsetcolorbg 200 200 255
|
||||
vdisplay result
|
||||
vdisplay -dispMode 1 result
|
||||
vfit
|
||||
vsetdispmode 1
|
||||
vshowfaceboundary result 1
|
||||
vaspects result -setFaceBoundaryDraw 1 -mostContinuity c2
|
||||
|
@@ -263,7 +263,6 @@ unifysamedom result p_1
|
||||
pload VISUALIZATION
|
||||
vinit Driver1/Viewer1/View1
|
||||
vsetcolorbg 200 200 255
|
||||
vdisplay result
|
||||
vdisplay -dispMode 1 result
|
||||
vfit
|
||||
vsetdispmode 1
|
||||
vshowfaceboundary result 1
|
||||
vaspects result -setFaceBoundaryDraw 1
|
||||
|
@@ -57,9 +57,7 @@ bcommon res b9 c2
|
||||
# show result
|
||||
donly res
|
||||
trotate res 0 0 0 0 0 1 90
|
||||
vinit
|
||||
vdisplay res
|
||||
vsetdispmode 1
|
||||
vshowfaceboundary res 1 255 255 255
|
||||
vaspects -isoontriangulation 1
|
||||
vinit View1
|
||||
vdisplay -dispMode 1 res
|
||||
vaspects res -setFaceBoundaryDraw 1 -setFaceBoundaryColor WHITE -isoontriangulation 1
|
||||
vfit
|
||||
|
@@ -236,17 +236,18 @@ void AIS_CameraFrustum::Compute (const Handle(PrsMgr_PresentationManager3d)& ,
|
||||
return;
|
||||
}
|
||||
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
switch (theMode)
|
||||
{
|
||||
case AIS_Shaded:
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (myTriangles);
|
||||
}
|
||||
Standard_FALLTHROUGH
|
||||
case AIS_WireFrame:
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (myBorders);
|
||||
break;
|
||||
|
@@ -107,6 +107,10 @@ AIS_ColorScale::AIS_ColorScale()
|
||||
myTextHeight (20)
|
||||
{
|
||||
SetDisplayMode (0);
|
||||
myDrawer->SetupOwnShadingAspect();
|
||||
myDrawer->ShadingAspect()->Aspect()->SetShadingModel (Graphic3d_TOSM_UNLIT);
|
||||
myDrawer->ShadingAspect()->Aspect()->SetAlphaMode (Graphic3d_AlphaMode_Opaque);
|
||||
myDrawer->ShadingAspect()->Aspect()->SetInteriorColor (Quantity_NOC_WHITE);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -458,15 +462,6 @@ void AIS_ColorScale::Compute (const Handle(PrsMgr_PresentationManager3d)& ,
|
||||
const Standard_Integer aBarTop = myYPos + myHeight - aTitleOffset - aBarYOffset;
|
||||
const Standard_Integer aBarHeight = aBarTop - aBarBottom;
|
||||
|
||||
// draw title
|
||||
if (!myTitle.IsEmpty())
|
||||
{
|
||||
drawText (Prs3d_Root::CurrentGroup (thePrs), myTitle,
|
||||
myXPos + mySpacing,
|
||||
aBarTop + aBarYOffset,
|
||||
Graphic3d_VTA_BOTTOM);
|
||||
}
|
||||
|
||||
TColStd_SequenceOfExtendedString aLabels;
|
||||
if (myLabelType == Aspect_TOCSD_USER)
|
||||
{
|
||||
@@ -496,11 +491,27 @@ void AIS_ColorScale::Compute (const Handle(PrsMgr_PresentationManager3d)& ,
|
||||
aColorBreadth += aTextWidth;
|
||||
}
|
||||
|
||||
// draw title
|
||||
Handle(Graphic3d_Group) aLabelsGroup;
|
||||
if (!myTitle.IsEmpty()
|
||||
|| !aLabels.IsEmpty())
|
||||
{
|
||||
aLabelsGroup = thePrs->NewGroup();
|
||||
aLabelsGroup->SetGroupPrimitivesAspect (myDrawer->TextAspect()->Aspect());
|
||||
}
|
||||
if (!myTitle.IsEmpty())
|
||||
{
|
||||
drawText (aLabelsGroup, myTitle,
|
||||
myXPos + mySpacing,
|
||||
aBarTop + aBarYOffset,
|
||||
Graphic3d_VTA_BOTTOM);
|
||||
}
|
||||
|
||||
// draw colors
|
||||
drawColorBar (thePrs, aBarBottom, aBarHeight, aTextWidth, aColorBreadth);
|
||||
|
||||
// draw Labels
|
||||
drawLabels (thePrs, aLabels, aBarBottom, aBarHeight, aTextWidth, aColorBreadth);
|
||||
drawLabels (aLabelsGroup, aLabels, aBarBottom, aBarHeight, aTextWidth, aColorBreadth);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -627,7 +638,8 @@ void AIS_ColorScale::drawColorBar (const Handle(Prs3d_Presentation)& thePrs,
|
||||
}
|
||||
}
|
||||
|
||||
Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePrs);
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aTriangles);
|
||||
|
||||
const Quantity_Color aFgColor (hasOwnColor ? myDrawer->Color() : Quantity_NOC_WHITE);
|
||||
@@ -642,7 +654,7 @@ void AIS_ColorScale::drawColorBar (const Handle(Prs3d_Presentation)& thePrs,
|
||||
//function : drawLabels
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_ColorScale::drawLabels (const Handle(Prs3d_Presentation)& thePrs,
|
||||
void AIS_ColorScale::drawLabels (const Handle(Graphic3d_Group)& theGroup,
|
||||
const TColStd_SequenceOfExtendedString& theLabels,
|
||||
const Standard_Integer theBarBottom,
|
||||
const Standard_Integer theBarHeight,
|
||||
@@ -716,14 +728,14 @@ void AIS_ColorScale::drawLabels (const Handle(Prs3d_Presentation)& thePrs,
|
||||
Standard_Integer aPos2 = aNbLabels - 1 - i2;
|
||||
if (aFilter && !(aPos1 % aFilter))
|
||||
{
|
||||
drawText (Prs3d_Root::CurrentGroup (thePrs), theLabels.Value (i1 + 1),
|
||||
drawText (theGroup, theLabels.Value (i1 + 1),
|
||||
anXLeft, anYBottom + Standard_Integer(i1 * aStepY + anAscent),
|
||||
Graphic3d_VTA_CENTER);
|
||||
aLast1 = i1;
|
||||
}
|
||||
if (aFilter && !(aPos2 % aFilter))
|
||||
{
|
||||
drawText (Prs3d_Root::CurrentGroup (thePrs), theLabels.Value (i2 + 1),
|
||||
drawText (theGroup, theLabels.Value (i2 + 1),
|
||||
anXLeft, anYBottom + Standard_Integer(i2 * aStepY + anAscent),
|
||||
Graphic3d_VTA_CENTER);
|
||||
aLast2 = i2;
|
||||
@@ -746,7 +758,7 @@ void AIS_ColorScale::drawLabels (const Handle(Prs3d_Presentation)& thePrs,
|
||||
|
||||
if (i0 != -1)
|
||||
{
|
||||
drawText (Prs3d_Root::CurrentGroup (thePrs), theLabels.Value (i0 + 1),
|
||||
drawText (theGroup, theLabels.Value (i0 + 1),
|
||||
anXLeft, anYBottom + Standard_Integer(i0 * aStepY + anAscent),
|
||||
Graphic3d_VTA_CENTER);
|
||||
}
|
||||
@@ -769,8 +781,8 @@ void AIS_ColorScale::drawFrame (const Handle(Prs3d_Presentation)& thePrs,
|
||||
aPrim->AddVertex (theX, theY, 0.0);
|
||||
|
||||
Handle(Graphic3d_AspectLine3d) anAspect = new Graphic3d_AspectLine3d (theColor, Aspect_TOL_SOLID, 1.0);
|
||||
Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePrs);
|
||||
aGroup->SetPrimitivesAspect (anAspect);
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (anAspect);
|
||||
aGroup->AddPrimitiveArray (aPrim);
|
||||
}
|
||||
|
||||
@@ -784,7 +796,6 @@ void AIS_ColorScale::drawText (const Handle(Graphic3d_Group)& theGroup,
|
||||
const Graphic3d_VerticalTextAlignment theVertAlignment)
|
||||
{
|
||||
const Handle(Prs3d_TextAspect)& anAspect = myDrawer->TextAspect();
|
||||
theGroup->SetPrimitivesAspect (anAspect->Aspect());
|
||||
theGroup->Text (theText,
|
||||
gp_Ax2 (gp_Pnt (theX, theY, 0.0), gp::DZ()),
|
||||
anAspect->Height(),
|
||||
|
@@ -406,7 +406,7 @@ private:
|
||||
Standard_Integer computeMaxLabelWidth (const TColStd_SequenceOfExtendedString& theLabels) const;
|
||||
|
||||
//! Draw labels.
|
||||
void drawLabels (const Handle(Prs3d_Presentation)& thePrs,
|
||||
void drawLabels (const Handle(Graphic3d_Group)& theGroup,
|
||||
const TColStd_SequenceOfExtendedString& theLabels,
|
||||
const Standard_Integer theBarBottom,
|
||||
const Standard_Integer theBarHeight,
|
||||
|
@@ -232,11 +232,6 @@ void AIS_ColoredShape::SetCustomWidth (const TopoDS_Shape& theShape,
|
||||
|
||||
void AIS_ColoredShape::SetColor (const Quantity_Color& theColor)
|
||||
{
|
||||
setColor (myDrawer, theColor);
|
||||
myDrawer->SetColor (theColor);
|
||||
hasOwnColor = Standard_True;
|
||||
LoadRecomputable (AIS_WireFrame);
|
||||
LoadRecomputable (AIS_Shaded);
|
||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||
{
|
||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||
@@ -262,6 +257,7 @@ void AIS_ColoredShape::SetColor (const Quantity_Color& theColor)
|
||||
aDrawer->FaceBoundaryAspect()->SetColor (theColor);
|
||||
}
|
||||
}
|
||||
AIS_Shape::SetColor (theColor);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -271,10 +267,6 @@ void AIS_ColoredShape::SetColor (const Quantity_Color& theColor)
|
||||
|
||||
void AIS_ColoredShape::SetWidth (const Standard_Real theLineWidth)
|
||||
{
|
||||
setWidth (myDrawer, theLineWidth);
|
||||
myOwnWidth = theLineWidth;
|
||||
LoadRecomputable (AIS_WireFrame);
|
||||
LoadRecomputable (AIS_Shaded);
|
||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||
{
|
||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||
@@ -296,6 +288,16 @@ void AIS_ColoredShape::SetWidth (const Standard_Real theLineWidth)
|
||||
aDrawer->FaceBoundaryAspect()->SetWidth (theLineWidth);
|
||||
}
|
||||
}
|
||||
AIS_Shape::SetWidth (theLineWidth);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : UnsetWidth
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_ColoredShape::UnsetWidth()
|
||||
{
|
||||
SetWidth (1.0f);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -305,10 +307,6 @@ void AIS_ColoredShape::SetWidth (const Standard_Real theLineWidth)
|
||||
|
||||
void AIS_ColoredShape::SetTransparency (const Standard_Real theValue)
|
||||
{
|
||||
setTransparency (myDrawer, theValue);
|
||||
myDrawer->SetTransparency ((Standard_ShortReal )theValue);
|
||||
LoadRecomputable (AIS_WireFrame);
|
||||
LoadRecomputable (AIS_Shaded);
|
||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||
{
|
||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||
@@ -322,6 +320,7 @@ void AIS_ColoredShape::SetTransparency (const Standard_Real theValue)
|
||||
aDrawer->ShadingAspect()->SetTransparency (theValue, myCurrentFacingModel);
|
||||
}
|
||||
}
|
||||
AIS_Shape::SetTransparency (theValue);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -330,27 +329,7 @@ void AIS_ColoredShape::SetTransparency (const Standard_Real theValue)
|
||||
//=======================================================================
|
||||
void AIS_ColoredShape::UnsetTransparency()
|
||||
{
|
||||
myDrawer->SetTransparency (0.0f);
|
||||
if (myDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
myDrawer->ShadingAspect()->SetTransparency (0.0, myCurrentFacingModel);
|
||||
if (!HasColor()
|
||||
&& !HasMaterial()
|
||||
&& !myDrawer->ShadingAspect()->Aspect()->ToMapTexture())
|
||||
{
|
||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||
}
|
||||
}
|
||||
|
||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||
{
|
||||
const Handle(Prs3d_Drawer)& aDrawer = anIter.Value();
|
||||
if (aDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
aDrawer->ShadingAspect()->SetTransparency (0.0, myCurrentFacingModel);
|
||||
}
|
||||
}
|
||||
SynchronizeAspects();
|
||||
SetTransparency (0.0f);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -360,10 +339,6 @@ void AIS_ColoredShape::UnsetTransparency()
|
||||
|
||||
void AIS_ColoredShape::SetMaterial (const Graphic3d_MaterialAspect& theMaterial)
|
||||
{
|
||||
setMaterial (myDrawer, theMaterial, HasColor(), IsTransparent());
|
||||
//myOwnMaterial = theMaterial;
|
||||
hasOwnMaterial = Standard_True;
|
||||
LoadRecomputable (AIS_Shaded);
|
||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||
{
|
||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||
@@ -373,6 +348,7 @@ void AIS_ColoredShape::SetMaterial (const Graphic3d_MaterialAspect& theMaterial)
|
||||
setMaterial (aDrawer, theMaterial, aDrawer->HasOwnColor(), aDrawer->HasOwnTransparency());
|
||||
}
|
||||
}
|
||||
AIS_Shape::SetMaterial (theMaterial);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -610,7 +586,7 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
||||
const DataMapOfDrawerCompd& theDrawerClosedFaces,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
Handle(Graphic3d_Group) anOpenGroup, aClosedGroup;
|
||||
Handle(Graphic3d_Group) anOpenGroup, aClosedGroup, anEdgesGroup;
|
||||
for (size_t aShType = 0; aShType <= (size_t )TopAbs_SHAPE; ++aShType)
|
||||
{
|
||||
const Standard_Boolean isClosed = aShType == TopAbs_SHAPE;
|
||||
@@ -664,7 +640,7 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
||||
{
|
||||
if (aShadedGroup.IsNull())
|
||||
{
|
||||
aShadedGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
aShadedGroup = thePrs->NewGroup();
|
||||
aShadedGroup->SetClosed (isClosed);
|
||||
}
|
||||
aShadedGroup->SetPrimitivesAspect (aDrawer->ShadingAspect()->Aspect());
|
||||
@@ -673,18 +649,15 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
||||
|
||||
if (aDrawer->FaceBoundaryDraw())
|
||||
{
|
||||
Handle(Graphic3d_ArrayOfSegments) aBndSegments = StdPrs_ShadedShape::FillFaceBoundaries (aShapeDraw);
|
||||
if (!aBndSegments.IsNull())
|
||||
if (Handle(Graphic3d_ArrayOfSegments) aBndSegments = StdPrs_ShadedShape::FillFaceBoundaries (aShapeDraw, aDrawer->FaceBoundaryUpperContinuity()))
|
||||
{
|
||||
if (aShadedGroup.IsNull())
|
||||
if (anEdgesGroup.IsNull())
|
||||
{
|
||||
aShadedGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
aShadedGroup->SetClosed (isClosed);
|
||||
anEdgesGroup = thePrs->NewGroup();
|
||||
}
|
||||
|
||||
Handle(Graphic3d_AspectLine3d) aBoundaryAspect = aDrawer->FaceBoundaryAspect()->Aspect();
|
||||
aShadedGroup->SetPrimitivesAspect (aBoundaryAspect);
|
||||
aShadedGroup->AddPrimitiveArray (aBndSegments);
|
||||
anEdgesGroup->SetPrimitivesAspect (aDrawer->FaceBoundaryAspect()->Aspect());
|
||||
anEdgesGroup->AddPrimitiveArray (aBndSegments);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -81,11 +81,16 @@ public: //! @name global aspects
|
||||
//! Sets transparency value.
|
||||
Standard_EXPORT virtual void SetTransparency (const Standard_Real theValue) Standard_OVERRIDE;
|
||||
|
||||
//! Sets the material aspect.
|
||||
Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& theAspect) Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Removes the setting for transparency in the reconstructed compound shape.
|
||||
Standard_EXPORT virtual void UnsetTransparency() Standard_OVERRIDE;
|
||||
|
||||
//! Sets the material aspect.
|
||||
Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& theAspect) Standard_OVERRIDE;
|
||||
//! Setup line width of entire shape.
|
||||
Standard_EXPORT virtual void UnsetWidth() Standard_OVERRIDE;
|
||||
|
||||
protected: //! @name override presentation computation
|
||||
|
||||
|
@@ -431,6 +431,7 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
||||
const TCollection_ExtendedString& theText,
|
||||
const Standard_Integer theLabelPosition)
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
if (myDrawer->DimensionAspect()->IsText3d())
|
||||
{
|
||||
// getting font parameters
|
||||
@@ -517,7 +518,7 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
||||
aCenterOfLabel.Transform (aTextPlaneTrsf);
|
||||
|
||||
gp_Ax2 aFlippingAxes (aCenterOfLabel, GetPlane().Axis().Direction(), aTextDir);
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetFlippingOptions (Standard_True, aFlippingAxes);
|
||||
aGroup->SetFlippingOptions (Standard_True, aFlippingAxes);
|
||||
|
||||
// draw text
|
||||
if (myDrawer->DimensionAspect()->IsTextShaded())
|
||||
@@ -546,11 +547,14 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
||||
{
|
||||
myDrawer->SetFreeBoundaryAspect (new Prs3d_LineAspect (aColor, Aspect_TOL_SOLID, 1.0));
|
||||
}
|
||||
|
||||
myDrawer->FreeBoundaryAspect()->Aspect()->SetColor (aColor);
|
||||
|
||||
// drawing text
|
||||
StdPrs_WFShape::Add (thePresentation, aTextShape, myDrawer);
|
||||
if (Handle(Graphic3d_ArrayOfPrimitives) anEdges = StdPrs_WFShape::AddAllEdges (aTextShape, myDrawer))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->FreeBoundaryAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (anEdges);
|
||||
}
|
||||
}
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetFlippingOptions (Standard_False, gp_Ax2());
|
||||
|
||||
@@ -565,7 +569,7 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
||||
// generate primitives for 2D text
|
||||
myDrawer->DimensionAspect()->TextAspect()->Aspect()->SetDisplayType (Aspect_TODT_DIMENSION);
|
||||
|
||||
Prs3d_Text::Draw (Prs3d_Root::CurrentGroup (thePresentation),
|
||||
Prs3d_Text::Draw (aGroup,
|
||||
myDrawer->DimensionAspect()->TextAspect(),
|
||||
theText,
|
||||
theTextPos);
|
||||
@@ -599,6 +603,7 @@ void AIS_Dimension::DrawExtension (const Handle(Prs3d_Presentation)& thePresenta
|
||||
gp_Pnt aTextPos = ElCLib::Value (theExtensionSize, anExtensionLine);
|
||||
gp_Dir aTextDir = theExtensionDir;
|
||||
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
drawText (thePresentation,
|
||||
aTextPos,
|
||||
aTextDir,
|
||||
@@ -630,16 +635,17 @@ void AIS_Dimension::DrawExtension (const Handle(Prs3d_Presentation)& thePresenta
|
||||
aSensitiveCurve.Append (anExtStart);
|
||||
aSensitiveCurve.Append (anExtEnd);
|
||||
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_True);
|
||||
aGroup->SetStencilTestOptions (Standard_True);
|
||||
}
|
||||
Handle(Graphic3d_AspectLine3d) aDimensionLineStyle = myDrawer->DimensionAspect()->LineAspect()->Aspect();
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionLineStyle);
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (anExtPrimitive);
|
||||
aGroup->SetPrimitivesAspect (aDimensionLineStyle);
|
||||
aGroup->AddPrimitiveArray (anExtPrimitive);
|
||||
if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_False);
|
||||
aGroup->SetStencilTestOptions (Standard_False);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -733,8 +739,6 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
case LabelPosition_HCenter:
|
||||
{
|
||||
// add label on dimension or extension line to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
gp_Pnt aTextPos = IsTextPositionCustom() ? myFixedTextPosition
|
||||
: (aCenterLineBegin.XYZ() + aCenterLineEnd.XYZ()) * 0.5;
|
||||
gp_Dir aTextDir = aDimensionLine.Direction();
|
||||
@@ -742,6 +746,7 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
// add text primitives
|
||||
if (theMode == ComputeMode_All || theMode == ComputeMode_Text)
|
||||
{
|
||||
thePresentation->NewGroup();
|
||||
drawText (thePresentation,
|
||||
aTextPos,
|
||||
aTextDir,
|
||||
@@ -799,24 +804,28 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
aDimensionAspect->TextAspect()->SetVerticalJustification (aTextJustificaton);
|
||||
|
||||
// main dimension line, short extension
|
||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_True);
|
||||
}
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_False);
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
aGroup->SetStencilTestOptions (Standard_True);
|
||||
}
|
||||
aGroup->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
aGroup->SetStencilTestOptions (Standard_False);
|
||||
}
|
||||
}
|
||||
|
||||
// add arrows to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isArrowsExternal)
|
||||
@@ -825,19 +834,18 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
}
|
||||
|
||||
// add arrow extension lines to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aFirstArrowEnd, aFirstExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aSecondArrowEnd, aSecondExtensionDir,
|
||||
aFirstArrowEnd, aFirstExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aSecondArrowEnd, aSecondExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
// ------------------------------------------------------------------------ //
|
||||
@@ -847,45 +855,48 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
case LabelPosition_Left:
|
||||
{
|
||||
// add label on dimension or extension line to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
// Left extension with the text
|
||||
DrawExtension (thePresentation, anExtensionSize,
|
||||
isArrowsExternal
|
||||
? aFirstArrowEnd
|
||||
: aFirstArrowBegin,
|
||||
aFirstExtensionDir,
|
||||
aLabelString,
|
||||
aLabelWidth,
|
||||
theMode,
|
||||
aLabelPosition);
|
||||
{
|
||||
// Left extension with the text
|
||||
DrawExtension (thePresentation, anExtensionSize,
|
||||
isArrowsExternal
|
||||
? aFirstArrowEnd
|
||||
: aFirstArrowBegin,
|
||||
aFirstExtensionDir,
|
||||
aLabelString,
|
||||
aLabelWidth,
|
||||
theMode,
|
||||
aLabelPosition);
|
||||
}
|
||||
|
||||
// add dimension line primitives
|
||||
if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
|
||||
{
|
||||
// add central dimension line
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
|
||||
// add graphical primitives
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||
// add graphical primitives
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||
aGroup->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
||||
|
||||
// add selection primitives
|
||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||
aSensitiveCurve.Append (aCenterLineBegin);
|
||||
aSensitiveCurve.Append (aCenterLineEnd);
|
||||
// add selection primitives
|
||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||
aSensitiveCurve.Append (aCenterLineBegin);
|
||||
aSensitiveCurve.Append (aCenterLineEnd);
|
||||
}
|
||||
|
||||
// add arrows to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isArrowsExternal || theIsOneSide)
|
||||
@@ -894,11 +905,11 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
}
|
||||
|
||||
// add extension lines for external arrows
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aSecondArrowEnd, aSecondExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
{
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aSecondArrowEnd, aSecondExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -910,7 +921,6 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
case LabelPosition_Right:
|
||||
{
|
||||
// add label on dimension or extension line to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
// Right extension with text
|
||||
DrawExtension (thePresentation, anExtensionSize,
|
||||
@@ -925,27 +935,30 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
|
||||
{
|
||||
// add central dimension line
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
|
||||
// add graphical primitives
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||
// add graphical primitives
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||
aGroup->SetGroupPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
||||
|
||||
// add selection primitives
|
||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||
aSensitiveCurve.Append (aCenterLineBegin);
|
||||
aSensitiveCurve.Append (aCenterLineEnd);
|
||||
// add selection primitives
|
||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||
aSensitiveCurve.Append (aCenterLineBegin);
|
||||
aSensitiveCurve.Append (aCenterLineEnd);
|
||||
}
|
||||
|
||||
// add arrows to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
thePresentation->NewGroup();
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isArrowsExternal || theIsOneSide)
|
||||
@@ -954,11 +967,11 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
}
|
||||
|
||||
// add extension lines for external arrows
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aFirstArrowEnd, aFirstExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
{
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aFirstArrowEnd, aFirstExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -968,7 +981,7 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
// add flyout lines to presentation
|
||||
if (theMode == ComputeMode_All)
|
||||
{
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments(4);
|
||||
aPrimSegments->AddVertex (theFirstPoint);
|
||||
@@ -977,8 +990,8 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
aPrimSegments->AddVertex (theSecondPoint);
|
||||
aPrimSegments->AddVertex (aLineEndPoint);
|
||||
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||
aGroup->SetGroupPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
||||
}
|
||||
|
||||
mySelectionGeom.IsComputed = Standard_True;
|
||||
|
@@ -198,6 +198,21 @@ public: //! @name highlighting management
|
||||
const Handle(Prs3d_Drawer)& HighlightStyle (const Prs3d_TypeOfHighlight theStyleType) const { return myStyles[theStyleType]; }
|
||||
|
||||
//! Setup highlight style settings.
|
||||
//! It is preferred modifying existing style returned by method HighlightStyle()
|
||||
//! instead of creating a new drawer.
|
||||
//!
|
||||
//! If a new highlight style is created, its presentation Zlayer should be checked,
|
||||
//! otherwise highlighting might not work as expected.
|
||||
//! Default values are:
|
||||
//! - Prs3d_TypeOfHighlight_Dynamic: Graphic3d_ZLayerId_Top,
|
||||
//! object highlighting is drawn on top of main scene within Immediate Layers,
|
||||
//! so that V3d_View::RedrawImmediate() will be enough to see update;
|
||||
//! - Prs3d_TypeOfHighlight_LocalDynamic: Graphic3d_ZLayerId_Topmost,
|
||||
//! object parts highlighting is drawn on top of main scene within Immediate Layers
|
||||
//! with depth cleared (even overlapped geometry will be revealed);
|
||||
//! - Prs3d_TypeOfHighlight_Selected: Graphic3d_ZLayerId_UNKNOWN,
|
||||
//! object highlighting is drawn on top of main scene within the same layer
|
||||
//! as object itself (e.g. Graphic3d_ZLayerId_Default by default) and increased priority.
|
||||
void SetHighlightStyle (const Prs3d_TypeOfHighlight theStyleType,
|
||||
const Handle(Prs3d_Drawer)& theStyle) { myStyles[theStyleType] = theStyle; }
|
||||
|
||||
@@ -212,6 +227,14 @@ public: //! @name highlighting management
|
||||
}
|
||||
|
||||
//! Setup the style of dynamic highlighting.
|
||||
//! It is preferred modifying existing style returned by method HighlightStyle()
|
||||
//! instead of creating a new drawer.
|
||||
//!
|
||||
//! If a new highlight style is created, its presentation Zlayer should be checked,
|
||||
//! otherwise highlighting might not work as expected.
|
||||
//! Default value is Graphic3d_ZLayerId_Top,
|
||||
//! object highlighting is drawn on top of main scene within Immediate Layers,
|
||||
//! so that V3d_View::RedrawImmediate() will be enough to see update;
|
||||
void SetHighlightStyle (const Handle(Prs3d_Drawer)& theStyle) { myStyles[Prs3d_TypeOfHighlight_Dynamic] = theStyle; }
|
||||
|
||||
//! Returns current selection style settings.
|
||||
@@ -1262,6 +1285,10 @@ protected: //! @name internal methods
|
||||
return myStyles[!theOwner.IsNull() && theOwner->ComesFromDecomposition() ? Prs3d_TypeOfHighlight_LocalDynamic : Prs3d_TypeOfHighlight_Dynamic];
|
||||
}
|
||||
|
||||
//! Return TRUE if highlight style of owner requires full viewer redraw.
|
||||
Standard_EXPORT Standard_Boolean isSlowHiStyle (const Handle(SelectMgr_EntityOwner)& theOwner,
|
||||
const Handle(V3d_Viewer)& theViewer) const;
|
||||
|
||||
//! Helper function that returns correct selection style for the object:
|
||||
//! if custom style is defined via object's highlight drawer, it will be used. Otherwise,
|
||||
//! selection style of interactive context will be returned.
|
||||
|
@@ -293,6 +293,22 @@ void AIS_InteractiveContext::highlightWithSubintensity (const Handle(SelectMgr_E
|
||||
theOwner->HilightWithColor (myMainPM, myStyles[Prs3d_TypeOfHighlight_SubIntensity], theMode);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : isSlowHiStyle
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean AIS_InteractiveContext::isSlowHiStyle (const Handle(SelectMgr_EntityOwner)& theOwner,
|
||||
const Handle(V3d_Viewer)& theViewer) const
|
||||
{
|
||||
if (const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()))
|
||||
{
|
||||
const Handle(Prs3d_Drawer)& aHiStyle = getHiStyle (anObj, myLastPicked);
|
||||
return aHiStyle->ZLayer() == Graphic3d_ZLayerId_UNKNOWN
|
||||
|| !theViewer->ZLayerSettings (aHiStyle->ZLayer()).IsImmediate();
|
||||
}
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : MoveTo
|
||||
//purpose :
|
||||
@@ -372,6 +388,11 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
// method call. As result it is necessary to rehighligt it with mySelectionColor.
|
||||
if (!myLastPicked.IsNull() && myLastPicked->HasSelectable())
|
||||
{
|
||||
if (isSlowHiStyle (myLastPicked, theView->Viewer()))
|
||||
{
|
||||
theView->Viewer()->Invalidate();
|
||||
}
|
||||
|
||||
clearDynamicHighlight();
|
||||
toUpdateViewer = Standard_True;
|
||||
}
|
||||
@@ -387,6 +408,11 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
&& (!myLastPicked->IsSelected()
|
||||
|| myToHilightSelected))
|
||||
{
|
||||
if (isSlowHiStyle (myLastPicked, theView->Viewer()))
|
||||
{
|
||||
theView->Viewer()->Invalidate();
|
||||
}
|
||||
|
||||
highlightWithColor (myLastPicked, theView->Viewer());
|
||||
toUpdateViewer = Standard_True;
|
||||
}
|
||||
@@ -405,6 +431,11 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
&& !myLastPicked.IsNull()
|
||||
&& myLastPicked->HasSelectable())
|
||||
{
|
||||
if (isSlowHiStyle (myLastPicked, theView->Viewer()))
|
||||
{
|
||||
theView->Viewer()->Invalidate();
|
||||
}
|
||||
|
||||
clearDynamicHighlight();
|
||||
toUpdateViewer = Standard_True;
|
||||
}
|
||||
@@ -422,7 +453,14 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
}
|
||||
else
|
||||
{
|
||||
theView->Viewer()->RedrawImmediate();
|
||||
if (theView->IsInvalidated())
|
||||
{
|
||||
theView->Viewer()->Redraw();
|
||||
}
|
||||
else
|
||||
{
|
||||
theView->Viewer()->RedrawImmediate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -472,33 +472,7 @@ void AIS_InteractiveObject::SetPolygonOffsets(const Standard_Integer aMode,
|
||||
myDrawer->SetShadingAspect(new Prs3d_ShadingAspect());
|
||||
|
||||
myDrawer->ShadingAspect()->Aspect()->SetPolygonOffsets( aMode, aFactor, aUnits );
|
||||
|
||||
// Modify existing presentations
|
||||
for (Standard_Integer aPrsIter = 1, n = myPresentations.Length(); aPrsIter <= n; ++aPrsIter)
|
||||
{
|
||||
const Handle(PrsMgr_Presentation)& aPrs3d = myPresentations (aPrsIter).Presentation();
|
||||
if ( !aPrs3d.IsNull() ) {
|
||||
const Handle(Graphic3d_Structure)& aStruct = aPrs3d->Presentation();
|
||||
if( !aStruct.IsNull() ) {
|
||||
// Workaround for issue 23115: Need to update also groups, because their
|
||||
// face aspect ALWAYS overrides the structure's.
|
||||
const Graphic3d_SequenceOfGroup& aGroups = aStruct->Groups();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aGroups); aGroupIter.More(); aGroupIter.Next())
|
||||
{
|
||||
Handle(Graphic3d_Group)& aGrp = aGroupIter.ChangeValue();
|
||||
if (aGrp.IsNull()
|
||||
|| !aGrp->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Handle(Graphic3d_AspectFillArea3d) aFaceAsp = aGrp->FillAreaAspect();
|
||||
aFaceAsp->SetPolygonOffsets(aMode, aFactor, aUnits);
|
||||
aGrp->SetGroupPrimitivesAspect(aFaceAsp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
SynchronizeAspects();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -622,3 +596,33 @@ void AIS_InteractiveObject::SynchronizeAspects()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : replaceAspects
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::replaceAspects (const Graphic3d_MapOfAspectsToAspects& theMap)
|
||||
{
|
||||
if (theMap.IsEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (PrsMgr_Presentations::Iterator aPrsIter (myPresentations); aPrsIter.More(); aPrsIter.Next())
|
||||
{
|
||||
const Handle(PrsMgr_Presentation)& aPrs3d = aPrsIter.ChangeValue().Presentation();
|
||||
if (aPrs3d.IsNull()
|
||||
|| aPrs3d->Presentation().IsNull())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPrs3d->Presentation()->Groups()); aGroupIter.More(); aGroupIter.Next())
|
||||
{
|
||||
if (!aGroupIter.Value().IsNull())
|
||||
{
|
||||
aGroupIter.ChangeValue()->ReplaceAspects (theMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -386,6 +386,15 @@ public:
|
||||
//! so that modifications will take effect on already computed presentation groups (thus avoiding re-displaying the object).
|
||||
Standard_EXPORT void SynchronizeAspects();
|
||||
|
||||
protected:
|
||||
|
||||
//! Replace aspects of existing (computed) presentation groups,
|
||||
//! so that the new aspects can be applied without recomputing presentation.
|
||||
//! It is NOT recommended approach, because user has to fill such map and then search for each occurrence in computed groups.
|
||||
//! The recommended approach is computing presentation with necessary customized aspects,
|
||||
//! and then modify them directly followed by SynchronizeAspects() call.
|
||||
Standard_EXPORT void replaceAspects (const Graphic3d_MapOfAspectsToAspects& theMap);
|
||||
|
||||
private:
|
||||
|
||||
Standard_EXPORT virtual Standard_Boolean RecomputeEveryPrs() const;
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include <Prs3d_Root.hxx>
|
||||
#include <Prs3d_ShadingAspect.hxx>
|
||||
#include <Prs3d_ToolDisk.hxx>
|
||||
#include <Prs3d_ToolSector.hxx>
|
||||
#include <Prs3d_ToolSphere.hxx>
|
||||
#include <Select3D_SensitiveCircle.hxx>
|
||||
#include <Select3D_SensitivePoint.hxx>
|
||||
@@ -151,6 +152,19 @@ void AIS_Manipulator::init()
|
||||
myHighlightAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
||||
myHighlightAspect->SetMaterial (aHilightMaterial);
|
||||
|
||||
Graphic3d_MaterialAspect aDraggerMaterial;
|
||||
aDraggerMaterial.SetReflectionModeOff(Graphic3d_TOR_DIFFUSE);
|
||||
aDraggerMaterial.SetReflectionModeOff(Graphic3d_TOR_SPECULAR);
|
||||
aDraggerMaterial.SetReflectionModeOff(Graphic3d_TOR_EMISSION);
|
||||
aDraggerMaterial.SetMaterialType(Graphic3d_MATERIAL_ASPECT);
|
||||
aDraggerMaterial.SetAmbient(1.0);
|
||||
|
||||
myDraggerHighlight = new Prs3d_ShadingAspect();
|
||||
myDraggerHighlight->Aspect()->SetInteriorStyle(Aspect_IS_SOLID);
|
||||
myDraggerHighlight->SetMaterial(aDraggerMaterial);
|
||||
|
||||
myDraggerHighlight->SetTransparency(0.5);
|
||||
|
||||
SetSize (100);
|
||||
SetZLayer (Graphic3d_ZLayerId_Topmost);
|
||||
}
|
||||
@@ -170,10 +184,11 @@ Handle(Prs3d_Presentation) AIS_Manipulator::getHighlightPresentation (const Hand
|
||||
|
||||
switch (anOwner->Mode())
|
||||
{
|
||||
case AIS_MM_Translation: return myAxes[anOwner->Index()].TranslatorHighlightPrs();
|
||||
case AIS_MM_Rotation : return myAxes[anOwner->Index()].RotatorHighlightPrs();
|
||||
case AIS_MM_Scaling : return myAxes[anOwner->Index()].ScalerHighlightPrs();
|
||||
case AIS_MM_None : break;
|
||||
case AIS_MM_Translation : return myAxes[anOwner->Index()].TranslatorHighlightPrs();
|
||||
case AIS_MM_Rotation : return myAxes[anOwner->Index()].RotatorHighlightPrs();
|
||||
case AIS_MM_Scaling : return myAxes[anOwner->Index()].ScalerHighlightPrs();
|
||||
case AIS_MM_TranslationPlane: return myAxes[anOwner->Index()].DraggerHighlightPrs();
|
||||
case AIS_MM_None : break;
|
||||
}
|
||||
|
||||
return aDummyPrs;
|
||||
@@ -194,10 +209,11 @@ Handle(Graphic3d_Group) AIS_Manipulator::getGroup (const Standard_Integer theInd
|
||||
|
||||
switch (theMode)
|
||||
{
|
||||
case AIS_MM_Translation: return myAxes[theIndex].TranslatorGroup();
|
||||
case AIS_MM_Rotation : return myAxes[theIndex].RotatorGroup();
|
||||
case AIS_MM_Scaling : return myAxes[theIndex].ScalerGroup();
|
||||
case AIS_MM_None : break;
|
||||
case AIS_MM_Translation : return myAxes[theIndex].TranslatorGroup();
|
||||
case AIS_MM_Rotation : return myAxes[theIndex].RotatorGroup();
|
||||
case AIS_MM_Scaling : return myAxes[theIndex].ScalerGroup();
|
||||
case AIS_MM_TranslationPlane: return myAxes[theIndex].DraggerGroup();
|
||||
case AIS_MM_None : break;
|
||||
}
|
||||
|
||||
return aDummyGroup;
|
||||
@@ -266,6 +282,10 @@ void AIS_Manipulator::SetPart (const Standard_Integer theAxisIndex, const AIS_Ma
|
||||
myAxes[theAxisIndex].SetScaling (theIsEnabled);
|
||||
break;
|
||||
|
||||
case AIS_MM_TranslationPlane:
|
||||
myAxes[theAxisIndex].SetDragging(theIsEnabled);
|
||||
break;
|
||||
|
||||
case AIS_MM_None:
|
||||
break;
|
||||
}
|
||||
@@ -277,7 +297,7 @@ void AIS_Manipulator::SetPart (const Standard_Integer theAxisIndex, const AIS_Ma
|
||||
//=======================================================================
|
||||
void AIS_Manipulator::SetPart (const AIS_ManipulatorMode theMode, const Standard_Boolean theIsEnabled)
|
||||
{
|
||||
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
||||
for (Standard_Integer anIt = 0; anIt < 4; ++anIt)
|
||||
{
|
||||
SetPart (anIt, theMode, theIsEnabled);
|
||||
}
|
||||
@@ -400,6 +420,7 @@ void AIS_Manipulator::Attach (const Handle(AIS_ManipulatorObjectSequence)& theOb
|
||||
EnableMode (AIS_MM_Rotation);
|
||||
EnableMode (AIS_MM_Translation);
|
||||
EnableMode (AIS_MM_Scaling);
|
||||
EnableMode (AIS_MM_TranslationPlane);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -493,6 +514,7 @@ Standard_Boolean AIS_Manipulator::ObjectTransformation (const Standard_Integer t
|
||||
const gp_Lin aLine (myStartPosition.Location(), myAxes[myCurrentIndex].Position().Direction());
|
||||
Extrema_ExtElC anExtrema (anInputLine, aLine, Precision::Angular());
|
||||
if (!anExtrema.IsDone()
|
||||
|| anExtrema.IsParallel()
|
||||
|| anExtrema.NbExt() != 1)
|
||||
{
|
||||
// translation cannot be done co-directed with camera
|
||||
@@ -538,7 +560,9 @@ Standard_Boolean AIS_Manipulator::ObjectTransformation (const Standard_Integer t
|
||||
const gp_Pnt aPosLoc = myStartPosition.Location();
|
||||
const gp_Ax1 aCurrAxis = getAx1FromAx2Dir (myStartPosition, myCurrentIndex);
|
||||
IntAna_IntConicQuad aIntersector (anInputLine, gp_Pln (aPosLoc, aCurrAxis.Direction()), Precision::Angular(), Precision::Intersection());
|
||||
if (!aIntersector.IsDone() || aIntersector.NbPoints() < 1)
|
||||
if (!aIntersector.IsDone()
|
||||
|| aIntersector.IsParallel()
|
||||
|| aIntersector.NbPoints() < 1)
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
@@ -583,6 +607,34 @@ Standard_Boolean AIS_Manipulator::ObjectTransformation (const Standard_Integer t
|
||||
myPrevState = anAngle;
|
||||
return Standard_True;
|
||||
}
|
||||
case AIS_MM_TranslationPlane:
|
||||
{
|
||||
const gp_Pnt aPosLoc = myStartPosition.Location();
|
||||
const gp_Ax1 aCurrAxis = getAx1FromAx2Dir(myStartPosition, myCurrentIndex);
|
||||
IntAna_IntConicQuad aIntersector(anInputLine, gp_Pln(aPosLoc, aCurrAxis.Direction()), Precision::Angular(), Precision::Intersection());
|
||||
if (!aIntersector.IsDone() || aIntersector.NbPoints() < 1)
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
const gp_Pnt aNewPosition = aIntersector.Point(1);
|
||||
if (!myHasStartedTransformation)
|
||||
{
|
||||
myStartPick = aNewPosition;
|
||||
myHasStartedTransformation = Standard_True;
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
if (aNewPosition.Distance(myStartPick) < Precision::Confusion())
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
gp_Trsf aNewTrsf;
|
||||
aNewTrsf.SetTranslation(gp_Vec(myStartPick, aNewPosition));
|
||||
theTrsf *= aNewTrsf;
|
||||
return Standard_True;
|
||||
}
|
||||
case AIS_MM_None:
|
||||
{
|
||||
return Standard_False;
|
||||
@@ -654,8 +706,9 @@ void AIS_Manipulator::Transform (const gp_Trsf& theTrsf)
|
||||
}
|
||||
}
|
||||
|
||||
if ((myCurrentMode == AIS_MM_Translation && myBehaviorOnTransform.FollowTranslation)
|
||||
|| (myCurrentMode == AIS_MM_Rotation && myBehaviorOnTransform.FollowRotation))
|
||||
if ((myCurrentMode == AIS_MM_Translation && myBehaviorOnTransform.FollowTranslation)
|
||||
|| (myCurrentMode == AIS_MM_Rotation && myBehaviorOnTransform.FollowRotation)
|
||||
|| (myCurrentMode == AIS_MM_TranslationPlane && myBehaviorOnTransform.FollowDragging))
|
||||
{
|
||||
gp_Pnt aPos = myStartPosition.Location().Transformed (theTrsf);
|
||||
gp_Dir aVDir = myStartPosition.Direction().Transformed (theTrsf);
|
||||
@@ -783,8 +836,13 @@ void AIS_Manipulator::DeactivateCurrentMode()
|
||||
Handle(Prs3d_ShadingAspect) anAspect = new Prs3d_ShadingAspect();
|
||||
anAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
||||
anAspect->SetMaterial (myDrawer->ShadingAspect()->Material());
|
||||
anAspect->SetTransparency (myDrawer->ShadingAspect()->Transparency());
|
||||
anAspect->SetColor (myAxes[myCurrentIndex].Color());
|
||||
if (myCurrentMode == AIS_MM_TranslationPlane)
|
||||
anAspect->SetTransparency(1.0);
|
||||
else
|
||||
{
|
||||
anAspect->SetTransparency(myDrawer->ShadingAspect()->Transparency());
|
||||
anAspect->SetColor(myAxes[myCurrentIndex].Color());
|
||||
}
|
||||
|
||||
aGroup->SetGroupPrimitivesAspect (anAspect->Aspect());
|
||||
}
|
||||
@@ -879,14 +937,14 @@ void AIS_Manipulator::Compute (const Handle(PrsMgr_PresentationManager3d)& thePr
|
||||
|
||||
// Display center
|
||||
myCenter.Init (myAxes[0].AxisRadius() * 2.0f, gp::Origin());
|
||||
aGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
aGroup = thePrs->NewGroup ();
|
||||
aGroup->SetPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (myCenter.Array());
|
||||
|
||||
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
||||
{
|
||||
// Display axes
|
||||
aGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
aGroup = thePrs->NewGroup ();
|
||||
|
||||
Handle(Prs3d_ShadingAspect) anAspectAx = new Prs3d_ShadingAspect (new Graphic3d_AspectFillArea3d(*anAspect->Aspect()));
|
||||
anAspectAx->SetColor (myAxes[anIt].Color());
|
||||
@@ -929,7 +987,13 @@ void AIS_Manipulator::HilightSelected (const Handle(PrsMgr_PresentationManager3d
|
||||
return;
|
||||
}
|
||||
|
||||
aGroup->SetGroupPrimitivesAspect (myHighlightAspect->Aspect());
|
||||
if (anOwner->Mode() == AIS_MM_TranslationPlane)
|
||||
{
|
||||
myDraggerHighlight->SetColor(myAxes[anOwner->Index()].Color());
|
||||
aGroup->SetGroupPrimitivesAspect(myDraggerHighlight->Aspect());
|
||||
}
|
||||
else
|
||||
aGroup->SetGroupPrimitivesAspect(myHighlightAspect->Aspect());
|
||||
|
||||
myCurrentIndex = anOwner->Index();
|
||||
myCurrentMode = anOwner->Mode();
|
||||
@@ -958,13 +1022,20 @@ void AIS_Manipulator::HilightOwnerWithColor (const Handle(PrsMgr_PresentationMan
|
||||
{
|
||||
return;
|
||||
}
|
||||
aPresentation->Highlight (theStyle);
|
||||
if (anOwner->Mode() == AIS_MM_TranslationPlane)
|
||||
{
|
||||
Handle(Prs3d_Drawer) aStyle = new Prs3d_Drawer();
|
||||
aStyle->SetColor(myAxes[anOwner->Index()].Color());
|
||||
aStyle->SetTransparency(0.5);
|
||||
aPresentation->Highlight(aStyle);
|
||||
}
|
||||
else
|
||||
aPresentation->Highlight(theStyle);
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPresentation->Groups());
|
||||
aGroupIter.More(); aGroupIter.Next())
|
||||
{
|
||||
Handle(Graphic3d_Group)& aGrp = aGroupIter.ChangeValue();
|
||||
if (!aGrp.IsNull()
|
||||
&& aGrp->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
if (!aGrp.IsNull())
|
||||
{
|
||||
aGrp->SetGroupPrimitivesAspect (myHighlightAspect->Aspect());
|
||||
}
|
||||
@@ -1073,6 +1144,38 @@ void AIS_Manipulator::ComputeSelection (const Handle(SelectMgr_Selection)& theSe
|
||||
theSelection->Add (aTri);
|
||||
}
|
||||
}
|
||||
|
||||
if (aMode == AIS_MM_TranslationPlane || aMode == AIS_MM_None)
|
||||
{
|
||||
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
||||
{
|
||||
if (!myAxes[anIt].HasDragging())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (aMode != AIS_MM_None)
|
||||
{
|
||||
anOwner = new AIS_ManipulatorOwner(this, anIt, AIS_MM_TranslationPlane, 9);
|
||||
}
|
||||
|
||||
// define sensitivity by two crossed lines
|
||||
gp_Pnt aP1, aP2;
|
||||
aP1 = myAxes[((anIt + 1) % 3)].TranslatorTipPosition();
|
||||
aP2 = myAxes[((anIt + 2) % 3)].TranslatorTipPosition();
|
||||
gp_XYZ aMidP = (aP1.XYZ() + aP2.XYZ()) / 2.0;
|
||||
|
||||
Handle(Select3D_SensitiveSegment) aLine1 = new Select3D_SensitiveSegment(anOwner, aP1, aP2);
|
||||
aLine1->SetSensitivityFactor(10);
|
||||
theSelection->Add(aLine1);
|
||||
Handle(Select3D_SensitiveSegment) aLine2 = new Select3D_SensitiveSegment(anOwner, gp::Origin(), aMidP);
|
||||
aLine2->SetSensitivityFactor(10);
|
||||
theSelection->Add(aLine2);
|
||||
|
||||
// enlarge sensitivity by triangulation
|
||||
Handle(Select3D_SensitiveTriangulation) aTri = new Select3D_SensitiveTriangulation(anOwner, myAxes[anIt].DraggerSector().Triangulation(), TopLoc_Location(), Standard_True);
|
||||
theSelection->Add(aTri);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -1188,6 +1291,24 @@ void AIS_Manipulator::Cube::addTriangle (const Standard_Integer theIndex,
|
||||
myArray->AddVertex (theP3, theNormal);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//class : Sector
|
||||
//function : Init
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_Manipulator::Sector::Init (const Standard_ShortReal theRadius,
|
||||
const gp_Ax1& thePosition,
|
||||
const gp_Dir& theXDirection,
|
||||
const Standard_Integer theSlicesNb,
|
||||
const Standard_Integer theStacksNb)
|
||||
{
|
||||
Prs3d_ToolSector aTool(theRadius, theSlicesNb, theStacksNb);
|
||||
gp_Ax3 aSystem(thePosition.Location(), thePosition.Direction(), theXDirection);
|
||||
gp_Trsf aTrsf;
|
||||
aTrsf.SetTransformation(aSystem, gp_Ax3());
|
||||
aTool.FillArray(myArray, myTriangulation, aTrsf);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//class : Axis
|
||||
//function : Constructor
|
||||
@@ -1208,6 +1329,7 @@ AIS_Manipulator::Axis::Axis (const gp_Ax1& theAxis,
|
||||
myInnerRadius (myLength + myBoxSize),
|
||||
myDiskThickness (myBoxSize * 0.5f),
|
||||
myIndent (0.2f),
|
||||
myHasDragging(Standard_True),
|
||||
myFacettesNumber (20),
|
||||
myCircleRadius (myLength + myBoxSize + myBoxSize * 0.5f * 0.5f)
|
||||
{
|
||||
@@ -1236,7 +1358,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
||||
myAxisRadius * 1.5,
|
||||
anArrowLength,
|
||||
myFacettesNumber);
|
||||
myTranslatorGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
myTranslatorGroup = thePrs->NewGroup ();
|
||||
myTranslatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||
myTranslatorGroup->AddPrimitiveArray (myTriangleArray);
|
||||
|
||||
@@ -1260,7 +1382,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
||||
myCubePos = myReferenceAxis.Direction().XYZ() * (myLength + myIndent);
|
||||
myCube.Init (gp_Ax1 (myCubePos, myReferenceAxis.Direction()), myBoxSize);
|
||||
|
||||
myScalerGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
myScalerGroup = thePrs->NewGroup ();
|
||||
myScalerGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||
myScalerGroup->AddPrimitiveArray (myCube.Array());
|
||||
|
||||
@@ -1283,7 +1405,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
||||
{
|
||||
myCircleRadius = myInnerRadius + myIndent * 2 + myDiskThickness * 0.5f;
|
||||
myCircle.Init (myInnerRadius + myIndent * 2, myInnerRadius + myDiskThickness + myIndent * 2, gp_Ax1(gp::Origin(), myReferenceAxis.Direction()), myFacettesNumber * 2);
|
||||
myRotatorGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
myRotatorGroup = thePrs->NewGroup ();
|
||||
myRotatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||
myRotatorGroup->AddPrimitiveArray (myCircle.Array());
|
||||
|
||||
@@ -1301,4 +1423,36 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
||||
aGroup->AddPrimitiveArray (myCircle.Array());
|
||||
}
|
||||
}
|
||||
|
||||
if (myHasDragging)
|
||||
{
|
||||
gp_Dir aXDirection;
|
||||
if (myReferenceAxis.Direction().X() > 0)
|
||||
aXDirection = gp::DY();
|
||||
else if (myReferenceAxis.Direction().Y() > 0)
|
||||
aXDirection = gp::DZ();
|
||||
else
|
||||
aXDirection = gp::DX();
|
||||
|
||||
mySector.Init(myInnerRadius + myIndent * 2, gp_Ax1(gp::Origin(), myReferenceAxis.Direction()), aXDirection, myFacettesNumber * 2);
|
||||
myDraggerGroup = thePrs->NewGroup();
|
||||
|
||||
Handle(Graphic3d_AspectFillArea3d) aFillArea = new Graphic3d_AspectFillArea3d();
|
||||
myDraggerGroup->SetGroupPrimitivesAspect(aFillArea);
|
||||
myDraggerGroup->AddPrimitiveArray(mySector.Array());
|
||||
|
||||
if (myHighlightDragger.IsNull())
|
||||
{
|
||||
myHighlightDragger = new Prs3d_Presentation(thePrsMgr->StructureManager());
|
||||
}
|
||||
else
|
||||
{
|
||||
myHighlightDragger->Clear();
|
||||
}
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup(myHighlightDragger);
|
||||
aGroup->SetGroupPrimitivesAspect(aFillArea);
|
||||
aGroup->AddPrimitiveArray(mySector.Array());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -280,12 +280,14 @@ public:
|
||||
//! - FollowRotation - whether the manipulator will be rotated together with an object.
|
||||
struct BehaviorOnTransform {
|
||||
|
||||
BehaviorOnTransform() : FollowTranslation (Standard_True), FollowRotation (Standard_True) {}
|
||||
BehaviorOnTransform() : FollowTranslation (Standard_True), FollowRotation (Standard_True), FollowDragging (Standard_True) {}
|
||||
BehaviorOnTransform& SetFollowTranslation (const Standard_Boolean theApply) { FollowTranslation = theApply; return *this; }
|
||||
BehaviorOnTransform& SetFollowRotation (const Standard_Boolean theApply) { FollowRotation = theApply; return *this; }
|
||||
BehaviorOnTransform& SetFollowDragging (const Standard_Boolean theApply) { FollowDragging = theApply; return *this; }
|
||||
|
||||
Standard_Boolean FollowTranslation;
|
||||
Standard_Boolean FollowRotation;
|
||||
Standard_Boolean FollowDragging;
|
||||
};
|
||||
|
||||
//! Sets behavior settings for transformation action carried on the manipulator,
|
||||
@@ -446,6 +448,29 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
Handle(Graphic3d_ArrayOfTriangles) myArray;
|
||||
};
|
||||
|
||||
class Sector : public Quadric
|
||||
{
|
||||
public:
|
||||
|
||||
Sector()
|
||||
: Quadric(),
|
||||
myRadius(0.0f)
|
||||
{ }
|
||||
|
||||
~Sector() { }
|
||||
|
||||
void Init(const Standard_ShortReal theRadius,
|
||||
const gp_Ax1& thePosition,
|
||||
const gp_Dir& theXDirection,
|
||||
const Standard_Integer theSlicesNb = 5,
|
||||
const Standard_Integer theStacksNb = 5);
|
||||
|
||||
protected:
|
||||
|
||||
gp_Ax1 myPosition;
|
||||
Standard_ShortReal myRadius;
|
||||
};
|
||||
|
||||
//! The class describes on axis sub-object.
|
||||
//! It includes sub-objects itself:
|
||||
//! -rotator
|
||||
@@ -485,6 +510,11 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
{
|
||||
myHighlightRotator->SetTransformPersistence (theTrsfPers);
|
||||
}
|
||||
|
||||
if (!myHighlightDragger.IsNull())
|
||||
{
|
||||
myHighlightDragger->SetTransformPersistence(theTrsfPers);
|
||||
}
|
||||
}
|
||||
|
||||
void Transform (const Handle(Geom_Transformation)& theTransformation)
|
||||
@@ -503,6 +533,11 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
{
|
||||
myHighlightRotator->SetTransformation (theTransformation);
|
||||
}
|
||||
|
||||
if (!myHighlightDragger.IsNull())
|
||||
{
|
||||
myHighlightDragger->SetTransformation(theTransformation);
|
||||
}
|
||||
}
|
||||
|
||||
Standard_Boolean HasTranslation() const { return myHasTranslation; }
|
||||
@@ -511,12 +546,16 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
|
||||
Standard_Boolean HasScaling() const { return myHasScaling; }
|
||||
|
||||
Standard_Boolean HasDragging() const { return myHasDragging; }
|
||||
|
||||
void SetTranslation (const Standard_Boolean theIsEnabled) { myHasTranslation = theIsEnabled; }
|
||||
|
||||
void SetRotation (const Standard_Boolean theIsEnabled) { myHasRotation = theIsEnabled; }
|
||||
|
||||
void SetScaling (const Standard_Boolean theIsEnabled) { myHasScaling = theIsEnabled; }
|
||||
|
||||
void SetDragging(const Standard_Boolean theIsEnabled) { myHasDragging = theIsEnabled; }
|
||||
|
||||
Quantity_Color Color() const { return myColor; }
|
||||
|
||||
Standard_ShortReal AxisLength() const { return myLength; }
|
||||
@@ -531,12 +570,16 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
|
||||
const Handle(Prs3d_Presentation)& ScalerHighlightPrs() const { return myHighlightScaler; }
|
||||
|
||||
const Handle(Prs3d_Presentation)& DraggerHighlightPrs() const { return myHighlightDragger; }
|
||||
|
||||
const Handle(Graphic3d_Group)& TranslatorGroup() const { return myTranslatorGroup; }
|
||||
|
||||
const Handle(Graphic3d_Group)& RotatorGroup() const { return myRotatorGroup; }
|
||||
|
||||
const Handle(Graphic3d_Group)& ScalerGroup() const { return myScalerGroup; }
|
||||
|
||||
const Handle(Graphic3d_Group)& DraggerGroup() const { return myDraggerGroup; }
|
||||
|
||||
const Handle(Graphic3d_ArrayOfTriangles)& TriangleArray() const { return myTriangleArray; }
|
||||
|
||||
void SetIndent (const Standard_ShortReal theValue) { myIndent = theValue; }
|
||||
@@ -570,6 +613,7 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
public:
|
||||
|
||||
const gp_Pnt& TranslatorTipPosition() const { return myArrowTipPos; }
|
||||
const Sector& DraggerSector() const { return mySector; }
|
||||
const Disk& RotatorDisk() const { return myCircle; }
|
||||
float RotatorDiskRadius() const { return myCircleRadius; }
|
||||
const Cube& ScalerCube() const { return myCube; }
|
||||
@@ -593,11 +637,14 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
Standard_ShortReal myDiskThickness;
|
||||
Standard_ShortReal myIndent; //!< Gap between visual part of the manipulator.
|
||||
|
||||
Standard_Boolean myHasDragging;
|
||||
|
||||
protected:
|
||||
|
||||
Standard_Integer myFacettesNumber;
|
||||
|
||||
gp_Pnt myArrowTipPos;
|
||||
Sector mySector;
|
||||
Disk myCircle;
|
||||
float myCircleRadius;
|
||||
Cube myCube;
|
||||
@@ -606,10 +653,12 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
Handle(Graphic3d_Group) myTranslatorGroup;
|
||||
Handle(Graphic3d_Group) myScalerGroup;
|
||||
Handle(Graphic3d_Group) myRotatorGroup;
|
||||
Handle(Graphic3d_Group) myDraggerGroup;
|
||||
|
||||
Handle(Prs3d_Presentation) myHighlightTranslator;
|
||||
Handle(Prs3d_Presentation) myHighlightScaler;
|
||||
Handle(Prs3d_Presentation) myHighlightRotator;
|
||||
Handle(Prs3d_Presentation) myHighlightDragger;
|
||||
|
||||
Handle(Graphic3d_ArrayOfTriangles) myTriangleArray;
|
||||
|
||||
@@ -638,6 +687,9 @@ protected: //! @name Fields for interactive transformation. Fields only for inte
|
||||
|
||||
//! Aspect used to color current detected part and current selected part.
|
||||
Handle(Prs3d_ShadingAspect) myHighlightAspect;
|
||||
|
||||
//! Aspect used to color sector part when it's selected.
|
||||
Handle(Prs3d_ShadingAspect) myDraggerHighlight;
|
||||
public:
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_Manipulator, AIS_InteractiveObject)
|
||||
|
@@ -22,7 +22,8 @@ enum AIS_ManipulatorMode
|
||||
AIS_MM_None = 0,
|
||||
AIS_MM_Translation = 1,
|
||||
AIS_MM_Rotation,
|
||||
AIS_MM_Scaling
|
||||
AIS_MM_Scaling,
|
||||
AIS_MM_TranslationPlane
|
||||
};
|
||||
|
||||
#endif
|
@@ -173,8 +173,8 @@ void AIS_PointCloudOwner::Clear (const Handle(PrsMgr_PresentationManager)& thePr
|
||||
//==================================================
|
||||
AIS_PointCloud::AIS_PointCloud()
|
||||
{
|
||||
// override default point style to Aspect_TOM_POINT
|
||||
myDrawer->SetPointAspect (new Prs3d_PointAspect (Aspect_TOM_POINT, Quantity_NOC_YELLOW, 1.0));
|
||||
myDrawer->SetupOwnShadingAspect();
|
||||
myDrawer->ShadingAspect()->Aspect()->SetMarkerType (Aspect_TOM_POINT);
|
||||
|
||||
SetDisplayMode (AIS_PointCloud::DM_Points);
|
||||
SetHilightMode (AIS_PointCloud::DM_BndBox);
|
||||
@@ -282,52 +282,8 @@ void AIS_PointCloud::SetColor (const Quantity_Color& theColor)
|
||||
{
|
||||
AIS_InteractiveObject::SetColor(theColor);
|
||||
|
||||
if (!myDrawer->HasOwnPointAspect())
|
||||
{
|
||||
myDrawer->SetPointAspect (new Prs3d_PointAspect (Aspect_TOM_POINT, theColor, 1.0));
|
||||
if (myDrawer->HasLink())
|
||||
{
|
||||
*myDrawer->PointAspect()->Aspect() = *myDrawer->Link()->PointAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!myDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
myDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||
if (myDrawer->HasLink())
|
||||
{
|
||||
*myDrawer->ShadingAspect()->Aspect() = *myDrawer->Link()->ShadingAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
|
||||
// Override color
|
||||
myDrawer->ShadingAspect()->SetColor (theColor);
|
||||
myDrawer->PointAspect() ->SetColor (theColor);
|
||||
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectMarker3d) aPointAspect = myDrawer->PointAspect()->Aspect();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAspect = myDrawer->ShadingAspect()->Aspect();
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_PointCloud::DM_Points)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_MARKER))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (aPointAspect);
|
||||
}
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAspect);
|
||||
}
|
||||
}
|
||||
}
|
||||
SynchronizeAspects();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -342,34 +298,20 @@ void AIS_PointCloud::UnsetColor()
|
||||
}
|
||||
|
||||
AIS_InteractiveObject::UnsetColor();
|
||||
|
||||
if (!HasWidth())
|
||||
{
|
||||
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
||||
}
|
||||
else
|
||||
{
|
||||
myDrawer->PointAspect()->SetColor (myDrawer->HasLink()
|
||||
? myDrawer->Link()->PointAspect()->Aspect()->Color()
|
||||
: Quantity_Color (Quantity_NOC_YELLOW));
|
||||
}
|
||||
|
||||
if (HasMaterial()
|
||||
|| IsTransparent())
|
||||
{
|
||||
Graphic3d_MaterialAspect aDefaultMat (Graphic3d_NOM_BRASS);
|
||||
Graphic3d_MaterialAspect aMat = aDefaultMat;
|
||||
Quantity_Color aColor = aDefaultMat.Color();
|
||||
if (myDrawer->HasLink())
|
||||
{
|
||||
aColor = myDrawer->Link()->ShadingAspect()->Color (myCurrentFacingModel);
|
||||
}
|
||||
if (HasMaterial() || myDrawer->HasLink())
|
||||
{
|
||||
aMat = AIS_GraphicTool::GetMaterial (HasMaterial() ? myDrawer : myDrawer->Link());
|
||||
}
|
||||
if (HasMaterial())
|
||||
{
|
||||
Quantity_Color aColor = aDefaultMat.AmbientColor();
|
||||
if (myDrawer->HasLink())
|
||||
{
|
||||
aColor = myDrawer->Link()->ShadingAspect()->Color (myCurrentFacingModel);
|
||||
}
|
||||
aMat.SetColor (aColor);
|
||||
}
|
||||
if (IsTransparent())
|
||||
@@ -378,43 +320,10 @@ void AIS_PointCloud::UnsetColor()
|
||||
aMat.SetTransparency (Standard_ShortReal(aTransp));
|
||||
}
|
||||
myDrawer->ShadingAspect()->SetMaterial (aMat, myCurrentFacingModel);
|
||||
myDrawer->ShadingAspect()->Aspect()->SetInteriorColor (aColor);
|
||||
}
|
||||
else
|
||||
{
|
||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||
}
|
||||
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
||||
|
||||
// modify shading presentation without re-computation
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->Link()->ShadingAspect()->Aspect();
|
||||
Handle(Graphic3d_AspectMarker3d) aMarkerAsp = myDrawer->Link()->PointAspect()->Aspect();
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_PointCloud::DM_Points)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
|
||||
// Check if aspect of given type is set for the group,
|
||||
// because setting aspect for group with no already set aspect
|
||||
// can lead to loss of presentation data
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_MARKER))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (aMarkerAsp);
|
||||
}
|
||||
}
|
||||
}
|
||||
SynchronizeAspects();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -423,14 +332,6 @@ void AIS_PointCloud::UnsetColor()
|
||||
//=======================================================================
|
||||
void AIS_PointCloud::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
||||
{
|
||||
if (!myDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
myDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||
if (myDrawer->HasLink())
|
||||
{
|
||||
*myDrawer->ShadingAspect()->Aspect() = *myDrawer->Link()->ShadingAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
hasOwnMaterial = Standard_True;
|
||||
|
||||
myDrawer->ShadingAspect()->SetMaterial (theMat, myCurrentFacingModel);
|
||||
@@ -439,28 +340,7 @@ void AIS_PointCloud::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
||||
myDrawer->ShadingAspect()->SetColor (myDrawer->Color(), myCurrentFacingModel);
|
||||
}
|
||||
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
||||
|
||||
// modify shading presentation without re-computation
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_PointCloud::DM_Points)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
}
|
||||
}
|
||||
SynchronizeAspects();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -474,8 +354,6 @@ void AIS_PointCloud::UnsetMaterial()
|
||||
return;
|
||||
}
|
||||
|
||||
if (HasColor()
|
||||
|| IsTransparent())
|
||||
{
|
||||
Graphic3d_MaterialAspect aDefaultMat (Graphic3d_NOM_BRASS);
|
||||
myDrawer->ShadingAspect()->SetMaterial (myDrawer->HasLink() ?
|
||||
@@ -488,33 +366,8 @@ void AIS_PointCloud::UnsetMaterial()
|
||||
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||
}
|
||||
hasOwnMaterial = Standard_False;
|
||||
|
||||
// modify shading presentation without re-computation
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_PointCloud::DM_Points)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
}
|
||||
}
|
||||
SynchronizeAspects();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -535,8 +388,7 @@ void AIS_PointCloud::Compute (const Handle(PrsMgr_PresentationManager3d)& /*theP
|
||||
return;
|
||||
}
|
||||
|
||||
Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePrs);
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->PointAspect()->Aspect());
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aPoints);
|
||||
break;
|
||||
|
@@ -28,6 +28,7 @@
|
||||
#include <Geom_Line.hxx>
|
||||
#include <Geom_Plane.hxx>
|
||||
#include <Geom_Surface.hxx>
|
||||
#include <Graphic3d_ArrayOfSegments.hxx>
|
||||
#include <gp_Circ.hxx>
|
||||
#include <gp_Lin.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
@@ -184,8 +185,13 @@ void AIS_Relation::ComputeProjVertexPresentation(const Handle(Prs3d_Presentation
|
||||
pa->SetTypeOfMarker(aProjTOM);
|
||||
}
|
||||
|
||||
// calcul du projete
|
||||
StdPrs_Point::Add(aPrs, new Geom_CartesianPoint(ProjPoint), myDrawer);
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = aPrs->NewGroup();
|
||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
||||
anArrayOfPoints->AddVertex (ProjPoint);
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->PointAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (anArrayOfPoints);
|
||||
}
|
||||
|
||||
if (!myDrawer->HasOwnWireAspect()){
|
||||
myDrawer->SetWireAspect(new Prs3d_LineAspect(aColor,aCallTOL,2.));}
|
||||
@@ -197,10 +203,14 @@ void AIS_Relation::ComputeProjVertexPresentation(const Handle(Prs3d_Presentation
|
||||
}
|
||||
|
||||
// Si les points ne sont pas confondus...
|
||||
if (!ProjPoint.IsEqual (BRep_Tool::Pnt(aVertex),Precision::Confusion())) {
|
||||
// calcul des lignes de rappel
|
||||
BRepBuilderAPI_MakeEdge MakEd (ProjPoint,BRep_Tool::Pnt(aVertex));
|
||||
StdPrs_WFShape::Add (aPrs, MakEd.Edge(), myDrawer);
|
||||
if (!ProjPoint.IsEqual (BRep_Tool::Pnt(aVertex),Precision::Confusion()))
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = aPrs->NewGroup();
|
||||
Handle(Graphic3d_ArrayOfSegments) anArrayOfLines = new Graphic3d_ArrayOfSegments (2);
|
||||
anArrayOfLines->AddVertex (ProjPoint);
|
||||
anArrayOfLines->AddVertex (BRep_Tool::Pnt(aVertex));
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->WireAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (anArrayOfLines);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -392,13 +392,12 @@ void AIS_RubberBand::Compute (const Handle(PrsMgr_PresentationManager3d)& /*theP
|
||||
const Handle(Prs3d_Presentation)& thePresentation,
|
||||
const Standard_Integer /*theMode*/)
|
||||
{
|
||||
Handle (Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePresentation);
|
||||
|
||||
// Draw filling
|
||||
if (IsFilling() && fillTriangles())
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (myTriangles);
|
||||
Handle(Graphic3d_Group) aGroup1 = thePresentation->NewGroup();
|
||||
aGroup1->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup1->AddPrimitiveArray (myTriangles);
|
||||
}
|
||||
|
||||
// Draw frame
|
||||
@@ -433,6 +432,7 @@ void AIS_RubberBand::Compute (const Handle(PrsMgr_PresentationManager3d)& /*theP
|
||||
}
|
||||
}
|
||||
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (myBorders);
|
||||
}
|
||||
|
@@ -77,6 +77,40 @@ static Standard_Boolean IsInList(const TColStd_ListOfInteger& LL, const Standard
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
// Auxiliary macros
|
||||
#define replaceAspectWithDef(theMap, theAspect) \
|
||||
if (myDrawer->Link()->theAspect()->Aspect() != myDrawer->theAspect()->Aspect()) \
|
||||
{ \
|
||||
theMap.Bind (myDrawer->theAspect()->Aspect(), myDrawer->Link()->theAspect()->Aspect()); \
|
||||
}
|
||||
|
||||
// Auxiliary macros for replaceWithNewOwnAspects()
|
||||
#define replaceAspectWithOwn(theMap, theAspect) \
|
||||
if (myDrawer->Link()->theAspect()->Aspect() != myDrawer->theAspect()->Aspect()) \
|
||||
{ \
|
||||
theMap.Bind (myDrawer->Link()->theAspect()->Aspect(), myDrawer->theAspect()->Aspect()); \
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : replaceWithNewOwnAspects
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_Shape::replaceWithNewOwnAspects()
|
||||
{
|
||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
||||
|
||||
replaceAspectWithOwn (aReplaceMap, ShadingAspect);
|
||||
replaceAspectWithOwn (aReplaceMap, LineAspect);
|
||||
replaceAspectWithOwn (aReplaceMap, WireAspect);
|
||||
replaceAspectWithOwn (aReplaceMap, FreeBoundaryAspect);
|
||||
replaceAspectWithOwn (aReplaceMap, UnFreeBoundaryAspect);
|
||||
replaceAspectWithOwn (aReplaceMap, SeenLineAspect);
|
||||
replaceAspectWithOwn (aReplaceMap, FaceBoundaryAspect);
|
||||
replaceAspectWithOwn (aReplaceMap, PointAspect);
|
||||
|
||||
replaceAspects (aReplaceMap);
|
||||
}
|
||||
|
||||
//==================================================
|
||||
// Function: AIS_Shape
|
||||
// Purpose :
|
||||
@@ -350,78 +384,9 @@ bool AIS_Shape::setColor (const Handle(Prs3d_Drawer)& theDrawer,
|
||||
const Quantity_Color& theColor) const
|
||||
{
|
||||
bool toRecompute = false;
|
||||
if (!theDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->ShadingAspect()->Aspect() = *theDrawer->Link()->ShadingAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnLineAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetLineAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->LineAspect()->Aspect() = *theDrawer->Link()->LineAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnWireAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetWireAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->WireAspect()->Aspect() = *theDrawer->Link()->WireAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnPointAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetPointAspect (new Prs3d_PointAspect (Aspect_TOM_PLUS, Quantity_NOC_BLACK, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->PointAspect()->Aspect() = *theDrawer->Link()->PointAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnFreeBoundaryAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetFreeBoundaryAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->FreeBoundaryAspect()->Aspect() = *theDrawer->Link()->FreeBoundaryAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnUnFreeBoundaryAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetUnFreeBoundaryAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->UnFreeBoundaryAspect()->Aspect() = *theDrawer->Link()->UnFreeBoundaryAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnSeenLineAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetSeenLineAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->SeenLineAspect()->Aspect() = *theDrawer->Link()->SeenLineAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnFaceBoundaryAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetFaceBoundaryAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->FaceBoundaryAspect()->Aspect() = *theDrawer->Link()->FaceBoundaryAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
toRecompute = theDrawer->SetupOwnShadingAspect() || toRecompute;
|
||||
toRecompute = theDrawer->SetOwnLineAspects() || toRecompute;
|
||||
toRecompute = theDrawer->SetupOwnPointAspect() || toRecompute;
|
||||
|
||||
// override color
|
||||
theDrawer->ShadingAspect()->SetColor (theColor, myCurrentFacingModel);
|
||||
@@ -445,52 +410,19 @@ void AIS_Shape::SetColor (const Quantity_Color& theColor)
|
||||
const bool toRecompute = setColor (myDrawer, theColor);
|
||||
myDrawer->SetColor (theColor);
|
||||
hasOwnColor = Standard_True;
|
||||
if (!toRecompute)
|
||||
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!toRecompute
|
||||
|| !myDrawer->HasLink())
|
||||
{
|
||||
myToRecomputeModes.Clear();
|
||||
myRecomputeEveryPrs = false;
|
||||
SynchronizeAspects();
|
||||
return;
|
||||
}
|
||||
|
||||
// modify shading presentation without re-computation
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAspect = myDrawer->ShadingAspect()->Aspect();
|
||||
Handle(Graphic3d_AspectLine3d) aLineAspect = myDrawer->LineAspect()->Aspect();
|
||||
Handle(Graphic3d_AspectMarker3d) aPointAspect = myDrawer->PointAspect()->Aspect();
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
else
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_Shaded)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
|
||||
// Check if aspect of given type is set for the group,
|
||||
// because setting aspect for group with no already set aspect
|
||||
// can lead to loss of presentation data
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAspect);
|
||||
}
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_LINE))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (aLineAspect);
|
||||
}
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_MARKER))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (aPointAspect);
|
||||
}
|
||||
}
|
||||
replaceWithNewOwnAspects();
|
||||
}
|
||||
|
||||
LoadRecomputable (AIS_WireFrame);
|
||||
LoadRecomputable (2);
|
||||
recomputeComputed();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -500,25 +432,31 @@ void AIS_Shape::SetColor (const Quantity_Color& theColor)
|
||||
|
||||
void AIS_Shape::UnsetColor()
|
||||
{
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!HasColor())
|
||||
{
|
||||
myToRecomputeModes.Clear();
|
||||
myRecomputeEveryPrs = false;
|
||||
return;
|
||||
}
|
||||
|
||||
hasOwnColor = Standard_False;
|
||||
myDrawer->SetColor (myDrawer->HasLink() ? myDrawer->Link()->Color() : Quantity_Color (Quantity_NOC_WHITE));
|
||||
|
||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
||||
if (!HasWidth())
|
||||
{
|
||||
Handle(Prs3d_LineAspect) anEmptyAsp;
|
||||
myDrawer->SetLineAspect (anEmptyAsp);
|
||||
myDrawer->SetWireAspect (anEmptyAsp);
|
||||
myDrawer->SetFreeBoundaryAspect (anEmptyAsp);
|
||||
myDrawer->SetUnFreeBoundaryAspect(anEmptyAsp);
|
||||
myDrawer->SetSeenLineAspect (anEmptyAsp);
|
||||
myDrawer->SetFaceBoundaryAspect (anEmptyAsp);
|
||||
replaceAspectWithDef (aReplaceMap, LineAspect);
|
||||
replaceAspectWithDef (aReplaceMap, WireAspect);
|
||||
replaceAspectWithDef (aReplaceMap, FreeBoundaryAspect);
|
||||
replaceAspectWithDef (aReplaceMap, UnFreeBoundaryAspect);
|
||||
replaceAspectWithDef (aReplaceMap, SeenLineAspect);
|
||||
replaceAspectWithDef (aReplaceMap, FaceBoundaryAspect);
|
||||
myDrawer->SetLineAspect (Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetWireAspect (Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetFreeBoundaryAspect (Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetUnFreeBoundaryAspect(Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetSeenLineAspect (Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetFaceBoundaryAspect (Handle(Prs3d_LineAspect)());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -600,10 +538,17 @@ void AIS_Shape::UnsetColor()
|
||||
}
|
||||
else
|
||||
{
|
||||
replaceAspectWithDef (aReplaceMap, ShadingAspect);
|
||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||
}
|
||||
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
||||
myRecomputeEveryPrs = true;
|
||||
if (myDrawer->HasOwnPointAspect())
|
||||
{
|
||||
replaceAspectWithDef (aReplaceMap, PointAspect);
|
||||
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
||||
}
|
||||
replaceAspects (aReplaceMap);
|
||||
SynchronizeAspects();
|
||||
recomputeComputed();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -614,61 +559,7 @@ void AIS_Shape::UnsetColor()
|
||||
bool AIS_Shape::setWidth (const Handle(Prs3d_Drawer)& theDrawer,
|
||||
const Standard_Real theLineWidth) const
|
||||
{
|
||||
bool toRecompute = false;
|
||||
if (!theDrawer->HasOwnLineAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetLineAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->LineAspect()->Aspect() = *theDrawer->Link()->LineAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnWireAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetWireAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->WireAspect()->Aspect() = *theDrawer->Link()->WireAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnFreeBoundaryAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetFreeBoundaryAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->FreeBoundaryAspect()->Aspect() = *theDrawer->Link()->FreeBoundaryAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnUnFreeBoundaryAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetUnFreeBoundaryAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->UnFreeBoundaryAspect()->Aspect() = *theDrawer->Link()->UnFreeBoundaryAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnSeenLineAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetSeenLineAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->SeenLineAspect()->Aspect() = *theDrawer->Link()->SeenLineAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
if (!theDrawer->HasOwnFaceBoundaryAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
theDrawer->SetFaceBoundaryAspect (new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0));
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->FaceBoundaryAspect()->Aspect() = *theDrawer->Link()->FaceBoundaryAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
bool toRecompute = theDrawer->SetOwnLineAspects();
|
||||
|
||||
// override width
|
||||
theDrawer->LineAspect()->SetWidth (theLineWidth);
|
||||
@@ -688,16 +579,19 @@ bool AIS_Shape::setWidth (const Handle(Prs3d_Drawer)& theDrawer,
|
||||
void AIS_Shape::SetWidth (const Standard_Real theLineWidth)
|
||||
{
|
||||
myOwnWidth = theLineWidth;
|
||||
if (setWidth (myDrawer, theLineWidth))
|
||||
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!setWidth (myDrawer, theLineWidth)
|
||||
|| !myDrawer->HasLink())
|
||||
{
|
||||
myRecomputeEveryPrs = true;
|
||||
SynchronizeAspects();
|
||||
}
|
||||
else
|
||||
{
|
||||
myRecomputeEveryPrs = false;
|
||||
myToRecomputeModes.Clear();
|
||||
SynchronizeAspects();
|
||||
replaceWithNewOwnAspects();
|
||||
}
|
||||
recomputeComputed();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -707,24 +601,30 @@ void AIS_Shape::SetWidth (const Standard_Real theLineWidth)
|
||||
|
||||
void AIS_Shape::UnsetWidth()
|
||||
{
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (myOwnWidth == 0.0)
|
||||
{
|
||||
myToRecomputeModes.Clear();
|
||||
myRecomputeEveryPrs = false;
|
||||
return;
|
||||
}
|
||||
|
||||
myOwnWidth = 0.0;
|
||||
if (!HasColor())
|
||||
{
|
||||
const Handle(Prs3d_LineAspect) anEmptyAsp;
|
||||
myDrawer->SetLineAspect (anEmptyAsp);
|
||||
myDrawer->SetWireAspect (anEmptyAsp);
|
||||
myDrawer->SetFreeBoundaryAspect (anEmptyAsp);
|
||||
myDrawer->SetUnFreeBoundaryAspect(anEmptyAsp);
|
||||
myDrawer->SetSeenLineAspect (anEmptyAsp);
|
||||
myDrawer->SetFaceBoundaryAspect (anEmptyAsp);
|
||||
myRecomputeEveryPrs = true;
|
||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
||||
replaceAspectWithDef (aReplaceMap, LineAspect);
|
||||
replaceAspectWithDef (aReplaceMap, WireAspect);
|
||||
replaceAspectWithDef (aReplaceMap, FreeBoundaryAspect);
|
||||
replaceAspectWithDef (aReplaceMap, UnFreeBoundaryAspect);
|
||||
replaceAspectWithDef (aReplaceMap, SeenLineAspect);
|
||||
replaceAspectWithDef (aReplaceMap, FaceBoundaryAspect);
|
||||
myDrawer->SetLineAspect (Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetWireAspect (Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetFreeBoundaryAspect (Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetUnFreeBoundaryAspect(Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetSeenLineAspect (Handle(Prs3d_LineAspect)());
|
||||
myDrawer->SetFaceBoundaryAspect (Handle(Prs3d_LineAspect)());
|
||||
replaceAspects (aReplaceMap);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -741,9 +641,8 @@ void AIS_Shape::UnsetWidth()
|
||||
myDrawer->FaceBoundaryAspect() ->SetWidth (myDrawer->HasLink() ?
|
||||
AIS_GraphicTool::GetLineWidth (myDrawer->Link(), AIS_TOA_FaceBoundary) : 1.);
|
||||
SynchronizeAspects();
|
||||
myToRecomputeModes.Clear();
|
||||
myRecomputeEveryPrs = false;
|
||||
}
|
||||
recomputeComputed();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -758,14 +657,7 @@ void AIS_Shape::setMaterial (const Handle(Prs3d_Drawer)& theDrawer,
|
||||
{
|
||||
const Quantity_Color aColor = theDrawer->ShadingAspect()->Material (myCurrentFacingModel).Color();
|
||||
const Standard_Real aTransp = theDrawer->ShadingAspect()->Transparency (myCurrentFacingModel);
|
||||
if (!theDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
theDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->ShadingAspect()->Aspect() = *theDrawer->Link()->ShadingAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
theDrawer->SetupOwnShadingAspect();
|
||||
theDrawer->ShadingAspect()->SetMaterial (theMaterial, myCurrentFacingModel);
|
||||
|
||||
if (theToKeepColor)
|
||||
@@ -785,37 +677,21 @@ void AIS_Shape::setMaterial (const Handle(Prs3d_Drawer)& theDrawer,
|
||||
|
||||
void AIS_Shape::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
||||
{
|
||||
const bool toRecompute = !myDrawer->HasOwnShadingAspect();
|
||||
setMaterial (myDrawer, theMat, HasColor(), IsTransparent());
|
||||
hasOwnMaterial = Standard_True;
|
||||
|
||||
// modify shading presentation without re-computation
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_Shaded)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
|
||||
// Check if aspect of given type is set for the group,
|
||||
// because setting aspect for group with no already set aspect
|
||||
// can lead to loss of presentation data
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
myRecomputeEveryPrs = Standard_False; // no mode to recalculate :only viewer update
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!toRecompute
|
||||
|| !myDrawer->HasLink())
|
||||
{
|
||||
SynchronizeAspects();
|
||||
}
|
||||
else
|
||||
{
|
||||
replaceWithNewOwnAspects();
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -825,6 +701,8 @@ void AIS_Shape::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
||||
|
||||
void AIS_Shape::UnsetMaterial()
|
||||
{
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!HasMaterial())
|
||||
{
|
||||
return;
|
||||
@@ -848,37 +726,15 @@ void AIS_Shape::UnsetMaterial()
|
||||
myDrawer->ShadingAspect()->SetColor (myDrawer->Color(), myCurrentFacingModel);
|
||||
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
||||
}
|
||||
SynchronizeAspects();
|
||||
}
|
||||
else
|
||||
{
|
||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
||||
replaceAspectWithDef (aReplaceMap, ShadingAspect);
|
||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||
replaceAspects (aReplaceMap);
|
||||
}
|
||||
hasOwnMaterial = Standard_False;
|
||||
|
||||
// modify shading presentation without re-computation
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_Shaded)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
myRecomputeEveryPrs = Standard_False; // no mode to recalculate :only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -889,15 +745,7 @@ void AIS_Shape::UnsetMaterial()
|
||||
void AIS_Shape::setTransparency (const Handle(Prs3d_Drawer)& theDrawer,
|
||||
const Standard_Real theValue) const
|
||||
{
|
||||
if (!theDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
theDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||
if (theDrawer->HasLink())
|
||||
{
|
||||
*theDrawer->ShadingAspect()->Aspect() = *theDrawer->Link()->ShadingAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
|
||||
theDrawer->SetupOwnShadingAspect();
|
||||
// override transparency
|
||||
theDrawer->ShadingAspect()->SetTransparency (theValue, myCurrentFacingModel);
|
||||
}
|
||||
@@ -909,33 +757,21 @@ void AIS_Shape::setTransparency (const Handle(Prs3d_Drawer)& theDrawer,
|
||||
|
||||
void AIS_Shape::SetTransparency (const Standard_Real theValue)
|
||||
{
|
||||
const bool toRecompute = !myDrawer->HasOwnShadingAspect();
|
||||
setTransparency (myDrawer, theValue);
|
||||
myDrawer->SetTransparency ((Standard_ShortReal )theValue);
|
||||
|
||||
// modify shading presentation without re-computation
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_Shaded)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
myRecomputeEveryPrs = Standard_False; // no mode to recalculate - only viewer update
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!toRecompute
|
||||
|| !myDrawer->HasLink())
|
||||
{
|
||||
SynchronizeAspects();
|
||||
}
|
||||
else
|
||||
{
|
||||
replaceWithNewOwnAspects();
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -945,6 +781,9 @@ void AIS_Shape::SetTransparency (const Standard_Real theValue)
|
||||
|
||||
void AIS_Shape::UnsetTransparency()
|
||||
{
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
|
||||
myDrawer->SetTransparency (0.0f);
|
||||
if (!myDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
@@ -955,36 +794,15 @@ void AIS_Shape::UnsetTransparency()
|
||||
|| myDrawer->ShadingAspect()->Aspect()->ToMapTexture())
|
||||
{
|
||||
myDrawer->ShadingAspect()->SetTransparency (0.0, myCurrentFacingModel);
|
||||
SynchronizeAspects();
|
||||
}
|
||||
else
|
||||
{
|
||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
||||
replaceAspectWithDef (aReplaceMap, ShadingAspect);
|
||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||
replaceAspects (aReplaceMap);
|
||||
}
|
||||
|
||||
// modify shading presentation without re-computation
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_Shaded)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
myRecomputeEveryPrs = Standard_False; // no mode to recalculate :only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -51,7 +51,7 @@
|
||||
//! To generate texture coordinates, appropriate shading attribute should be set before computing presentation in AIS_Shaded display mode:
|
||||
//! @code
|
||||
//! Handle(AIS_Shape) aPrs = new AIS_Shape();
|
||||
//! aPrs->Attributes()->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||
//! aPrs->Attributes()->SetupOwnShadingAspect();
|
||||
//! aPrs->Attributes()->ShadingAspect()->Aspect()->SetTextureMapOn();
|
||||
//! aPrs->Attributes()->ShadingAspect()->Aspect()->SetTextureMap (new Graphic3d_Texture2Dmanual (Graphic3d_NOT_2D_ALUMINUM));
|
||||
//! @endcode
|
||||
@@ -316,6 +316,9 @@ protected:
|
||||
|
||||
Standard_EXPORT void setMaterial (const Handle(Prs3d_Drawer)& theDrawer, const Graphic3d_MaterialAspect& theMaterial, const Standard_Boolean theToKeepColor, const Standard_Boolean theToKeepTransp) const;
|
||||
|
||||
//! Replace aspects of already computed groups from drawer link by the new own value.
|
||||
Standard_EXPORT void replaceWithNewOwnAspects();
|
||||
|
||||
public:
|
||||
|
||||
//! Compute HLR presentation for specified shape.
|
||||
|
@@ -218,36 +218,6 @@ void AIS_TexturedShape::SetColor (const Quantity_Color& theColor)
|
||||
void AIS_TexturedShape::UnsetColor()
|
||||
{
|
||||
AIS_Shape::UnsetColor();
|
||||
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= Presentations().Length(); ++aPrsIt)
|
||||
{
|
||||
const PrsMgr_ModedPresentation& aPrsModed = Presentations().Value (aPrsIt);
|
||||
|
||||
if (aPrsModed.Mode() != 3)
|
||||
continue;
|
||||
|
||||
Handle(Prs3d_Presentation) aPrs = aPrsModed.Presentation()->Presentation();
|
||||
Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (aPrs);
|
||||
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->Link()->ShadingAspect()->Aspect();
|
||||
Handle(Graphic3d_AspectLine3d) aLineAsp = myDrawer->Link()->LineAspect()->Aspect();
|
||||
Quantity_Color aColor;
|
||||
AIS_GraphicTool::GetInteriorColor (myDrawer->Link(), aColor);
|
||||
anAreaAsp->SetInteriorColor (aColor);
|
||||
// Check if aspect of given type is set for the group,
|
||||
// because setting aspect for group with no already set aspect
|
||||
// can lead to loss of presentation data
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_LINE))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (aLineAsp);
|
||||
}
|
||||
|
||||
updateAttributes (aPrs);
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -377,10 +347,6 @@ void AIS_TexturedShape::updateAttributes (const Handle(Prs3d_Presentation)& theP
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (thePrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
if (!aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
aGroup->SetGroupPrimitivesAspect (myAspect);
|
||||
}
|
||||
}
|
||||
|
@@ -108,10 +108,7 @@ void AIS_Triangulation::updatePresentation()
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -16,23 +16,17 @@
|
||||
#ifndef _Aspect_InteriorStyle_HeaderFile
|
||||
#define _Aspect_InteriorStyle_HeaderFile
|
||||
|
||||
//! Definition of interior types for primitive
|
||||
//! faces.
|
||||
//!
|
||||
//! IS_EMPTY no interior.
|
||||
//! IS_HOLLOW display the boundaries of the surface.
|
||||
//! IS_HATCH display hatched with a hatch style.
|
||||
//! IS_SOLID display the interior entirely filled.
|
||||
//! IS_HIDDENLINE display in hidden lines removed.
|
||||
//! IS_POINT display only vertices.
|
||||
//! Interior types for primitive faces.
|
||||
enum Aspect_InteriorStyle
|
||||
{
|
||||
Aspect_IS_EMPTY,
|
||||
Aspect_IS_HOLLOW,
|
||||
Aspect_IS_HATCH,
|
||||
Aspect_IS_SOLID,
|
||||
Aspect_IS_HIDDENLINE,
|
||||
Aspect_IS_POINT
|
||||
Aspect_IS_EMPTY = -1, //!< no interior
|
||||
Aspect_IS_SOLID = 0, //!< normally filled surface interior
|
||||
Aspect_IS_HATCH, //!< hatched surface interior
|
||||
Aspect_IS_HIDDENLINE, //!< interior is filled with viewer background color
|
||||
Aspect_IS_POINT, //!< display only vertices of surface (obsolete)
|
||||
|
||||
// obsolete aliases
|
||||
Aspect_IS_HOLLOW = Aspect_IS_EMPTY, //!< transparent surface interior
|
||||
};
|
||||
|
||||
#endif // _Aspect_InteriorStyle_HeaderFile
|
||||
|
@@ -1182,6 +1182,29 @@ Standard_Boolean BRep_Tool::HasContinuity(const TopoDS_Edge& E)
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : MaxContinuity
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
GeomAbs_Shape BRep_Tool::MaxContinuity (const TopoDS_Edge& theEdge)
|
||||
{
|
||||
GeomAbs_Shape aMaxCont = GeomAbs_C0;
|
||||
for (BRep_ListIteratorOfListOfCurveRepresentation aReprIter ((*((Handle(BRep_TEdge)*)&theEdge.TShape()))->ChangeCurves());
|
||||
aReprIter.More(); aReprIter.Next())
|
||||
{
|
||||
const Handle(BRep_CurveRepresentation)& aRepr = aReprIter.Value();
|
||||
if (aRepr->IsRegularity())
|
||||
{
|
||||
const GeomAbs_Shape aCont = aRepr->Continuity();
|
||||
if ((Standard_Integer )aCont > (Standard_Integer )aMaxCont)
|
||||
{
|
||||
aMaxCont = aCont;
|
||||
}
|
||||
}
|
||||
}
|
||||
return aMaxCont;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Pnt
|
||||
//purpose : Returns the 3d point.
|
||||
|
@@ -242,6 +242,9 @@ public:
|
||||
//! Returns True if the edge has regularity on some
|
||||
//! two surfaces
|
||||
Standard_EXPORT static Standard_Boolean HasContinuity (const TopoDS_Edge& E);
|
||||
|
||||
//! Returns the max continuity of edge between some surfaces or GeomAbs_C0 if there no such surfaces.
|
||||
Standard_EXPORT static GeomAbs_Shape MaxContinuity (const TopoDS_Edge& theEdge);
|
||||
|
||||
//! Returns the 3d point.
|
||||
Standard_EXPORT static gp_Pnt Pnt (const TopoDS_Vertex& V);
|
||||
|
@@ -682,7 +682,7 @@ void BRepMesh_Delaun::cleanupMesh()
|
||||
if ( anEdges[aCurEdgeIdx] != aFreeEdgeId )
|
||||
continue;
|
||||
|
||||
for ( Standard_Integer anOtherEdgeIt = 1; anOtherEdgeIt <= 2; ++anOtherEdgeIt )
|
||||
for ( Standard_Integer anOtherEdgeIt = 1; anOtherEdgeIt <= 2 && isCanNotBeRemoved; ++anOtherEdgeIt )
|
||||
{
|
||||
Standard_Integer anOtherEdgeId = ( aCurEdgeIdx + anOtherEdgeIt ) % 3;
|
||||
const BRepMesh_PairOfIndex& anOtherEdgePair =
|
||||
@@ -691,7 +691,27 @@ void BRepMesh_Delaun::cleanupMesh()
|
||||
if ( anOtherEdgePair.Extent() < 2 )
|
||||
{
|
||||
isCanNotBeRemoved = Standard_False;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int aTriIdx = 1; aTriIdx <= anOtherEdgePair.Extent () && isCanNotBeRemoved; ++aTriIdx)
|
||||
{
|
||||
if (anOtherEdgePair.Index (aTriIdx) == aTriId)
|
||||
continue;
|
||||
|
||||
Standard_Integer v[3];
|
||||
const BRepMesh_Triangle& aCurTriangle = GetTriangle (anOtherEdgePair.Index (aTriIdx));
|
||||
myMeshData->ElementNodes (aCurTriangle, v);
|
||||
for (int aNodeIdx = 0; aNodeIdx < 3 && isCanNotBeRemoved; ++aNodeIdx)
|
||||
{
|
||||
if (v[aNodeIdx] == mySupVert[0] ||
|
||||
v[aNodeIdx] == mySupVert[1] ||
|
||||
v[aNodeIdx] == mySupVert[2])
|
||||
{
|
||||
isCanNotBeRemoved = Standard_False;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -18,7 +18,6 @@
|
||||
#include <IMeshData_Edge.hxx>
|
||||
#include <OSD_Parallel.hxx>
|
||||
#include <BRepMesh_GeomTool.hxx>
|
||||
#include <BRepMesh_IncAllocator.hxx>
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@@ -1,50 +0,0 @@
|
||||
// Created on: 2016-06-20
|
||||
// Created by: Oleg AGASHIN
|
||||
// Copyright (c) 2016 OPEN CASCADE SAS
|
||||
//
|
||||
// This file is part of Open CASCADE Technology software library.
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or modify it under
|
||||
// the terms of the GNU Lesser General Public License version 2.1 as published
|
||||
// by the Free Software Foundation, with special exception defined in the file
|
||||
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
|
||||
// distribution for complete text of the license and disclaimer of any warranty.
|
||||
//
|
||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||
// commercial license or contractual agreement.
|
||||
|
||||
#ifndef _BRepMesh_IncAllocator_HeaderFile
|
||||
#define _BRepMesh_IncAllocator_HeaderFile
|
||||
|
||||
#include <NCollection_IncAllocator.hxx>
|
||||
#include <Standard_Mutex.hxx>
|
||||
|
||||
//! Extension for NCollection_IncAllocator implementing simple thread safety
|
||||
//! by introduction of Mutex. Intended for use in couple with BRepMeshData
|
||||
//! entities in order to prevent data races while building data model in
|
||||
//! parallel mode. Note that this allocator is supposed for use by collections
|
||||
//! which allocate memory by huge blocks at arbitrary moment, thus it should
|
||||
//! not introduce significant performance slow down.
|
||||
class BRepMesh_IncAllocator : public NCollection_IncAllocator
|
||||
{
|
||||
public:
|
||||
//! Constructor
|
||||
BRepMesh_IncAllocator(const size_t theBlockSize = DefaultBlockSize)
|
||||
: NCollection_IncAllocator(theBlockSize)
|
||||
{
|
||||
}
|
||||
|
||||
//! Allocate memory with given size. Returns NULL on failure
|
||||
virtual void* Allocate(const size_t size) Standard_OVERRIDE
|
||||
{
|
||||
Standard_Mutex::Sentry aSentry(myMutex);
|
||||
return NCollection_IncAllocator::Allocate(size);
|
||||
}
|
||||
|
||||
DEFINE_STANDARD_RTTI_INLINE(BRepMesh_IncAllocator, NCollection_IncAllocator)
|
||||
|
||||
private:
|
||||
Standard_Mutex myMutex;
|
||||
};
|
||||
|
||||
#endif
|
@@ -57,8 +57,11 @@ BRepMesh_ShapeVisitor::~BRepMesh_ShapeVisitor ()
|
||||
//=======================================================================
|
||||
void BRepMesh_ShapeVisitor::Visit(const TopoDS_Edge& theEdge)
|
||||
{
|
||||
myModel->AddEdge(theEdge);
|
||||
myDEdgeMap.Bind(theEdge, myModel->EdgesNb() - 1);
|
||||
if (!myDEdgeMap.IsBound (theEdge))
|
||||
{
|
||||
myModel->AddEdge (theEdge);
|
||||
myDEdgeMap.Bind (theEdge, myModel->EdgesNb () - 1);
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -46,7 +46,6 @@ BRepMesh_FactoryError.hxx
|
||||
BRepMesh_FastDiscret.hxx
|
||||
BRepMesh_GeomTool.cxx
|
||||
BRepMesh_GeomTool.hxx
|
||||
BRepMesh_IncAllocator.hxx
|
||||
BRepMesh_IncrementalMesh.cxx
|
||||
BRepMesh_IncrementalMesh.hxx
|
||||
BRepMesh_MeshAlgoFactory.cxx
|
||||
|
@@ -14,11 +14,12 @@
|
||||
// commercial license or contractual agreement.
|
||||
|
||||
#include <BRepMeshData_Model.hxx>
|
||||
|
||||
#include <BRepMeshData_Face.hxx>
|
||||
#include <BRepMeshData_Edge.hxx>
|
||||
#include <BRepMesh_IncAllocator.hxx>
|
||||
#include <BRepMesh_OrientedEdge.hxx>
|
||||
#include <BRepMesh_Vertex.hxx>
|
||||
#include <NCollection_IncAllocator.hxx>
|
||||
|
||||
//=======================================================================
|
||||
// Function: Constructor
|
||||
@@ -27,10 +28,11 @@
|
||||
BRepMeshData_Model::BRepMeshData_Model (const TopoDS_Shape& theShape)
|
||||
: IMeshData_Model (theShape),
|
||||
myMaxSize (0.),
|
||||
myAllocator (new BRepMesh_IncAllocator(IMeshData::MEMORY_BLOCK_SIZE_HUGE)),
|
||||
myAllocator (new NCollection_IncAllocator (IMeshData::MEMORY_BLOCK_SIZE_HUGE)),
|
||||
myDFaces (256, myAllocator),
|
||||
myDEdges (256, myAllocator)
|
||||
{
|
||||
myAllocator->SetThreadSafe();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -179,7 +179,8 @@ static
|
||||
const TopTools_MapOfShape& theEdgesInvalidByVertex,
|
||||
const TopTools_MapOfShape& theMFHoles,
|
||||
TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||
TopTools_ListOfShape& theInvFaces);
|
||||
TopTools_ListOfShape& theInvFaces,
|
||||
TopTools_ListOfShape& theInvertedFaces);
|
||||
|
||||
static
|
||||
void FindFacesInsideHoleWires(const TopoDS_Face& theFOrigin,
|
||||
@@ -238,6 +239,8 @@ static
|
||||
TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
|
||||
const TopTools_DataMapOfShapeShape& theArtInvFaces,
|
||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||
const TopTools_MapOfShape& theInvertedEdges,
|
||||
const TopTools_ListOfShape& theInvertedFaces,
|
||||
const TopTools_IndexedMapOfShape& theMFToCheckInt,
|
||||
const TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||
const TopoDS_Shape& theFHoles,
|
||||
@@ -258,6 +261,7 @@ static
|
||||
const TopTools_DataMapOfShapeShape& theDMFImF,
|
||||
const TopTools_IndexedMapOfShape& theMFInv,
|
||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||
const TopTools_MapOfShape& theInvertedEdges,
|
||||
TopTools_MapOfShape& theMFToRem);
|
||||
|
||||
static
|
||||
@@ -596,6 +600,21 @@ static
|
||||
void AppendToList(TopTools_ListOfShape& theL,
|
||||
const TopoDS_Shape& theS);
|
||||
|
||||
template <class ContainerType, class FenceMapType>
|
||||
static Standard_Boolean TakeModified(const TopoDS_Shape& theS,
|
||||
const TopTools_DataMapOfShapeListOfShape& theImages,
|
||||
ContainerType& theMapOut,
|
||||
FenceMapType* theMFence);
|
||||
|
||||
template <class ContainerType>
|
||||
static Standard_Boolean TakeModified(const TopoDS_Shape& theS,
|
||||
const TopTools_DataMapOfShapeListOfShape& theImages,
|
||||
ContainerType& theMapOut)
|
||||
{
|
||||
TopTools_MapOfShape* aDummy = NULL;
|
||||
return TakeModified (theS, theImages, theMapOut, aDummy);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : BuildSplitsOfTrimmedFaces
|
||||
//purpose : Building splits of already trimmed faces
|
||||
@@ -988,6 +1007,12 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef OFFSET_DEBUG
|
||||
// Show all obtained splits of faces
|
||||
TopoDS_Compound aCFIm1;
|
||||
BRep_Builder().MakeCompound(aCFIm1);
|
||||
#endif
|
||||
|
||||
// Build Edge-Face connectivity map to find faces which removal
|
||||
// may potentially lead to creation of the holes in the faces
|
||||
// preventing from obtaining closed volume in the result
|
||||
@@ -997,7 +1022,12 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape itLFIm(theFImages(i));
|
||||
for (; itLFIm.More(); itLFIm.Next())
|
||||
{
|
||||
TopExp::MapShapesAndAncestors(itLFIm.Value(), TopAbs_EDGE, TopAbs_FACE, anEFMap);
|
||||
#ifdef OFFSET_DEBUG
|
||||
BRep_Builder().Add(aCFIm1, itLFIm.Value());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
TopTools_ListOfShape anEmptyList;
|
||||
@@ -1006,6 +1036,8 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
// all hole faces
|
||||
TopoDS_Compound aFHoles;
|
||||
aBB.MakeCompound(aFHoles);
|
||||
// Find the faces containing only the inverted edges and the invalid ones
|
||||
TopTools_ListOfShape anInvertedFaces;
|
||||
// find invalid faces
|
||||
// considering faces containing only invalid edges as invalid
|
||||
aItLF.Initialize(aLFDone);
|
||||
@@ -1044,7 +1076,7 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
// find invalid faces
|
||||
FindInvalidFaces(aLFImages, theInvEdges, theValidEdges, aDMFLVE, aDMFLIE,
|
||||
*pLNE, *pLIVE, theInvertedEdges, aMEdgeInvalidByVertex,
|
||||
aMFHoles, aMFInvInHole, aLFInv);
|
||||
aMFHoles, aMFInvInHole, aLFInv, anInvertedFaces);
|
||||
}
|
||||
//
|
||||
if (aLFInv.Extent()) {
|
||||
@@ -1095,8 +1127,8 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
//
|
||||
// remove inside faces
|
||||
TopTools_IndexedMapOfShape aMEInside;
|
||||
RemoveInsideFaces(theFImages, theInvFaces, theArtInvFaces, theInvEdges,
|
||||
aMFToCheckInt, aMFInvInHole, aFHoles, theSSInterfs,
|
||||
RemoveInsideFaces(theFImages, theInvFaces, theArtInvFaces, theInvEdges, theInvertedEdges,
|
||||
anInvertedFaces, aMFToCheckInt, aMFInvInHole, aFHoles, theSSInterfs,
|
||||
aMERemoved, aMEInside, theSolids);
|
||||
//
|
||||
// make compound of valid splits
|
||||
@@ -1819,7 +1851,8 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
const TopTools_MapOfShape& theEdgesInvalidByVertex,
|
||||
const TopTools_MapOfShape& theMFHoles,
|
||||
TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||
TopTools_ListOfShape& theInvFaces)
|
||||
TopTools_ListOfShape& theInvFaces,
|
||||
TopTools_ListOfShape& theInvertedFaces)
|
||||
{
|
||||
// The face should be considered as invalid in the following cases:
|
||||
// 1. It has been reverted, i.e. at least two not connected edges
|
||||
@@ -1832,7 +1865,8 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
// The face will be kept in the following cases:
|
||||
// 1. Some of the edges are valid for this face.
|
||||
Standard_Boolean bHasValid, bAllValid, bAllInvalid, bHasReallyInvalid, bAllInvNeutral;
|
||||
Standard_Boolean bValid, bValidLoc, bInvalid, bInvalidLoc, bNeutral;
|
||||
Standard_Boolean bValid, bValidLoc, bInvalid, bInvalidLoc, bNeutral, bInverted;
|
||||
Standard_Boolean bIsInvalidByInverted;
|
||||
Standard_Integer i, aNbChecked;
|
||||
//
|
||||
// neutral edges
|
||||
@@ -1849,7 +1883,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
aMEValInverted.Add(aItLE.Value());
|
||||
}
|
||||
//
|
||||
Standard_Boolean bCheckInverted = (theLFImages.Extent() == 1);
|
||||
Standard_Boolean bTreatInvertedAsInvalid = (theLFImages.Extent() == 1);
|
||||
//
|
||||
// neutral edges to remove
|
||||
TopTools_IndexedMapOfShape aMENRem;
|
||||
@@ -1883,6 +1917,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
bAllInvalid = Standard_True;
|
||||
bHasReallyInvalid = Standard_False;
|
||||
bAllInvNeutral = Standard_True;
|
||||
bIsInvalidByInverted = Standard_True;
|
||||
aNbChecked = 0;
|
||||
//
|
||||
const TopoDS_Wire& aWIm = BRepTools::OuterWire(aFIm);
|
||||
@@ -1909,17 +1944,19 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
bNeutral = aMEN.Contains(aEIm);
|
||||
bValidLoc = aMVE.Contains(aEIm);
|
||||
//
|
||||
if (!bInvalid && bCheckInverted) {
|
||||
bInvalid = theMEInverted.Contains(aEIm);
|
||||
bInverted = theMEInverted.Contains(aEIm);
|
||||
if (!bInvalid && bTreatInvertedAsInvalid) {
|
||||
bInvalid = bInverted;
|
||||
}
|
||||
//
|
||||
if (bValidLoc && (bNeutral || aMEValInverted.Contains(aEIm))) {
|
||||
bHasValid = Standard_True;
|
||||
}
|
||||
//
|
||||
bAllValid = bAllValid && bValidLoc;
|
||||
bAllInvalid = bAllInvalid && bInvalid;
|
||||
bAllInvNeutral = bAllInvNeutral && bAllInvalid && bNeutral;
|
||||
bAllValid &= bValidLoc;
|
||||
bAllInvalid &= bInvalid;
|
||||
bAllInvNeutral &= (bAllInvalid && bNeutral);
|
||||
bIsInvalidByInverted &= (bInvalidLoc || bInverted);
|
||||
}
|
||||
//
|
||||
if (!aNbChecked) {
|
||||
@@ -1954,6 +1991,12 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
continue;
|
||||
}
|
||||
//
|
||||
if (bIsInvalidByInverted && !(bHasValid || bAllValid))
|
||||
{
|
||||
// The face contains only the inverted and locally invalid edges
|
||||
theInvertedFaces.Append(aFIm);
|
||||
}
|
||||
|
||||
if (!bAllInvNeutral) {
|
||||
aLFPT.Append(aFIm);
|
||||
}
|
||||
@@ -2003,7 +2046,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
bNeutral = aMEN.Contains(aEIm);
|
||||
bValidLoc = aMVE.Contains(aEIm);
|
||||
//
|
||||
if (!bInvalid && bCheckInverted) {
|
||||
if (!bInvalid && bTreatInvertedAsInvalid) {
|
||||
bInvalid = theMEInverted.Contains(aEIm);
|
||||
}
|
||||
//
|
||||
@@ -2873,6 +2916,8 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
||||
TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
|
||||
const TopTools_DataMapOfShapeShape& theArtInvFaces,
|
||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||
const TopTools_MapOfShape& theInvertedEdges,
|
||||
const TopTools_ListOfShape& theInvertedFaces,
|
||||
const TopTools_IndexedMapOfShape& theMFToCheckInt,
|
||||
const TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||
const TopoDS_Shape& theFHoles,
|
||||
@@ -2932,6 +2977,9 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
||||
aMV.SetArguments(aLS);
|
||||
aMV.SetIntersect(Standard_True);
|
||||
aMV.Perform();
|
||||
if (aMV.HasErrors())
|
||||
return;
|
||||
|
||||
//
|
||||
// get shapes connection for using in the rebuilding process
|
||||
// for the cases in which some of the intersection left undetected
|
||||
@@ -3016,19 +3064,21 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
||||
TopExp::MapShapes(aFIm, TopAbs_EDGE, aMEBoundary);
|
||||
}
|
||||
}
|
||||
//
|
||||
|
||||
// Tool for getting the splits of faces
|
||||
const TopTools_DataMapOfShapeListOfShape& aMVIms = aMV.Images();
|
||||
|
||||
// update invalid faces with images
|
||||
aNb = aMFInv.Extent();
|
||||
for (i = 1; i <= aNb; ++i) {
|
||||
const TopoDS_Shape& aFInv = aMFInv(i);
|
||||
const TopTools_ListOfShape& aLFInvIm = aMV.Modified(aFInv);
|
||||
TopTools_ListIteratorOfListOfShape aItLFInvIm(aLFInvIm);
|
||||
for (; aItLFInvIm.More(); aItLFInvIm.Next()) {
|
||||
const TopoDS_Shape& aFInvIm = aItLFInvIm.Value();
|
||||
aMFInv.Add(aFInvIm);
|
||||
}
|
||||
TakeModified(aFInv, aMVIms, aMFInv);
|
||||
}
|
||||
//
|
||||
|
||||
// Take into account the faces invalid by inverted edges
|
||||
for (TopTools_ListOfShape::Iterator itLF(theInvertedFaces); itLF.More(); itLF.Next())
|
||||
TakeModified(itLF.Value(), aMVIms, aMFInv);
|
||||
|
||||
// check if the invalid faces inside the holes are really invalid:
|
||||
// check its normal direction - if it has changed relatively the
|
||||
// original face the offset face is invalid and should be kept for rebuilding
|
||||
@@ -3082,10 +3132,14 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
||||
//
|
||||
if (aFS.Orientation() == TopAbs_INTERNAL) {
|
||||
aMFToRem.Add(aFS);
|
||||
continue;
|
||||
}
|
||||
//
|
||||
bAllRemoved = bAllRemoved && aMFToRem.Contains(aFS);
|
||||
bAllInv = bAllInv && (aMFToRem.Contains(aFS) || aMFInv.Contains(aFS));
|
||||
|
||||
if (aMFToRem.Contains(aFS))
|
||||
continue;
|
||||
|
||||
bAllRemoved = false;
|
||||
bAllInv &= aMFInv.Contains(aFS);
|
||||
}
|
||||
//
|
||||
if (bAllInv && !bAllRemoved) {
|
||||
@@ -3116,7 +3170,7 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
||||
}
|
||||
|
||||
// Remove the invalid hanging parts external to the solids
|
||||
RemoveHangingParts(aMV, aDMFImF, aMFInv, theInvEdges, aMFToRem);
|
||||
RemoveHangingParts(aMV, aDMFImF, aMFInv, theInvEdges, theInvertedEdges, aMFToRem);
|
||||
|
||||
// Remove newly found internal and hanging faces
|
||||
RemoveValidSplits(aMFToRem, theFImages, aMV, theMERemoved);
|
||||
@@ -3302,6 +3356,7 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
||||
const TopTools_DataMapOfShapeShape& theDMFImF,
|
||||
const TopTools_IndexedMapOfShape& theMFInv,
|
||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||
const TopTools_MapOfShape& theInvertedEdges,
|
||||
TopTools_MapOfShape& theMFToRem)
|
||||
{
|
||||
// Map the faces of the result solids to filter them from avoided faces
|
||||
@@ -3323,22 +3378,7 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
||||
for (; anExpF.More(); anExpF.Next())
|
||||
{
|
||||
const TopoDS_Shape& aF = anExpF.Current();
|
||||
const TopTools_ListOfShape* pLFIm = aMVIms.Seek(aF);
|
||||
if (pLFIm)
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape aItLFIm(*pLFIm);
|
||||
for (; aItLFIm.More(); aItLFIm.Next())
|
||||
{
|
||||
const TopoDS_Shape& aFIm = aItLFIm.Value();
|
||||
if (!aMFS.Contains(aFIm))
|
||||
aBB.Add(aCFHangs, aFIm);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!aMFS.Contains(aF))
|
||||
aBB.Add(aCFHangs, aF);
|
||||
}
|
||||
TakeModified(aF, aMVIms, aCFHangs, &aMFS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3364,27 +3404,41 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
||||
// Update invalid edges with intersection results
|
||||
TopTools_MapOfShape aMEInv;
|
||||
Standard_Integer i, aNbE = theInvEdges.Extent();
|
||||
for (i = 1; i <= aNbE; ++i) {
|
||||
const TopoDS_Shape& aEInv = theInvEdges(i);
|
||||
const TopTools_ListOfShape *pLEIm = aMVIms.Seek(aEInv);
|
||||
if (pLEIm)
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape aItLEIm(*pLEIm);
|
||||
for (; aItLEIm.More(); aItLEIm.Next())
|
||||
aMEInv.Add(aItLEIm.Value());
|
||||
}
|
||||
else
|
||||
aMEInv.Add(aEInv);
|
||||
}
|
||||
for (i = 1; i <= aNbE; ++i)
|
||||
TakeModified(theInvEdges(i), aMVIms, aMEInv);
|
||||
|
||||
// Update inverted edges with intersection results
|
||||
TopTools_MapOfShape aMEInverted;
|
||||
for (TopTools_MapIteratorOfMapOfShape itM(theInvertedEdges); itM.More(); itM.Next())
|
||||
TakeModified(itM.Value(), aMVIms, aMEInverted);
|
||||
|
||||
// Tool for getting the origins of the splits
|
||||
const TopTools_DataMapOfShapeListOfShape& aMVOrs = theMV.Origins();
|
||||
|
||||
// Find hanging blocks to remove
|
||||
TopTools_ListOfShape aBlocksToRemove;
|
||||
|
||||
TopTools_ListIteratorOfListOfShape aItLCBH(aLCBHangs);
|
||||
for (; aItLCBH.More(); aItLCBH.Next())
|
||||
{
|
||||
const TopoDS_Shape& aCBH = aItLCBH.Value();
|
||||
|
||||
// Remove the block containing the inverted edges
|
||||
Standard_Boolean bHasInverted = Standard_False;
|
||||
TopExp_Explorer anExpE(aCBH, TopAbs_EDGE);
|
||||
for (; anExpE.More() && !bHasInverted; anExpE.Next())
|
||||
{
|
||||
const TopoDS_Shape& aE = anExpE.Current();
|
||||
bHasInverted = !aDMEF .Contains(aE) &&
|
||||
aMEInverted.Contains(aE);
|
||||
}
|
||||
|
||||
if (bHasInverted)
|
||||
{
|
||||
aBlocksToRemove.Append(aCBH);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check the block to contain invalid split
|
||||
Standard_Boolean bHasInvalidFace = Standard_False;
|
||||
// Check connectivity to invalid parts
|
||||
@@ -3406,7 +3460,7 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
||||
if (!bIsConnected)
|
||||
{
|
||||
// check edges
|
||||
TopExp_Explorer anExpE(aF, TopAbs_EDGE);
|
||||
anExpE.Init(aF, TopAbs_EDGE);
|
||||
for (; anExpE.More() && !bIsConnected; anExpE.Next())
|
||||
{
|
||||
const TopoDS_Shape& aE = anExpE.Current();
|
||||
@@ -3419,17 +3473,20 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
||||
}
|
||||
}
|
||||
// check vertices
|
||||
TopExp_Explorer anExpV(aF, TopAbs_VERTEX);
|
||||
for (; anExpV.More() && !bIsConnected; anExpV.Next())
|
||||
if (!bIsConnected)
|
||||
{
|
||||
const TopoDS_Shape& aV = anExpV.Current();
|
||||
const TopTools_ListOfShape *pLE = aDMVE.Seek(aV);
|
||||
if (pLE)
|
||||
TopExp_Explorer anExpV(aF, TopAbs_VERTEX);
|
||||
for (; anExpV.More() && !bIsConnected; anExpV.Next())
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape aItLE(*pLE);
|
||||
for (; aItLE.More() && !bIsConnected; aItLE.Next())
|
||||
bIsConnected = !aBlockME.Contains(aItLE.Value()) &&
|
||||
aMEInv .Contains(aItLE.Value());
|
||||
const TopoDS_Shape& aV = anExpV.Current();
|
||||
const TopTools_ListOfShape *pLE = aDMVE.Seek(aV);
|
||||
if (pLE)
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape aItLE(*pLE);
|
||||
for (; aItLE.More() && !bIsConnected; aItLE.Next())
|
||||
bIsConnected = !aBlockME.Contains(aItLE.Value()) &&
|
||||
aMEInv .Contains(aItLE.Value());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3458,12 +3515,17 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
||||
(!bIsConnected || aMOffsetF.Extent() == 1);
|
||||
|
||||
if (bRemove)
|
||||
{
|
||||
// remove the block
|
||||
anExpF.Init(aCBH, TopAbs_FACE);
|
||||
for (; anExpF.More(); anExpF.Next())
|
||||
theMFToRem.Add(anExpF.Current());
|
||||
}
|
||||
aBlocksToRemove.Append(aCBH);
|
||||
}
|
||||
|
||||
// remove the invalidated blocks
|
||||
aItLCBH.Initialize(aBlocksToRemove);
|
||||
for (; aItLCBH.More(); aItLCBH.Next())
|
||||
{
|
||||
const TopoDS_Shape& aCBH = aItLCBH.Value();
|
||||
TopExp_Explorer anExpF(aCBH, TopAbs_FACE);
|
||||
for (; anExpF.More(); anExpF.Next())
|
||||
theMFToRem.Add(anExpF.Current());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6924,13 +6986,16 @@ void UpdateImages(const TopTools_ListOfShape& theLA,
|
||||
TopTools_MapOfShape& theModified)
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape aIt(theLA);
|
||||
for (; aIt.More(); aIt.Next()) {
|
||||
for (; aIt.More(); aIt.Next())
|
||||
{
|
||||
const TopoDS_Shape& aS = aIt.Value();
|
||||
//
|
||||
TopTools_ListOfShape* pLSIm = theImages.ChangeSeek(aS);
|
||||
if (!pLSIm) {
|
||||
if (!pLSIm)
|
||||
{
|
||||
const TopTools_ListOfShape& aLSIm = theGF.Modified(aS);
|
||||
if (aLSIm.Extent()) {
|
||||
if (aLSIm.Extent())
|
||||
{
|
||||
theImages.Bind(aS, aLSIm);
|
||||
theModified.Add(aS);
|
||||
}
|
||||
@@ -6944,27 +7009,14 @@ void UpdateImages(const TopTools_ListOfShape& theLA,
|
||||
//
|
||||
// check modifications of the images
|
||||
TopTools_ListIteratorOfListOfShape aIt1(*pLSIm);
|
||||
for (; aIt1.More(); aIt1.Next()) {
|
||||
for (; aIt1.More(); aIt1.Next())
|
||||
{
|
||||
const TopoDS_Shape& aSIm = aIt1.Value();
|
||||
const TopTools_ListOfShape& aLSIm1 = theGF.Modified(aSIm);
|
||||
if (aLSIm1.IsEmpty()) {
|
||||
if (aMFence.Add(aSIm)) {
|
||||
aLSImNew.Append(aSIm);
|
||||
}
|
||||
}
|
||||
else {
|
||||
TopTools_ListIteratorOfListOfShape aIt2(aLSIm1);
|
||||
for (; aIt2.More(); aIt2.Next()) {
|
||||
const TopoDS_Shape& aSImIm = aIt2.Value();
|
||||
if (aMFence.Add(aSImIm)) {
|
||||
aLSImNew.Append(aSImIm);
|
||||
}
|
||||
}
|
||||
bModified = Standard_True;
|
||||
}
|
||||
bModified |= TakeModified(aSIm, theGF.Images(), aLSImNew, &aMFence);
|
||||
}
|
||||
//
|
||||
if (bModified) {
|
||||
if (bModified)
|
||||
{
|
||||
*pLSIm = aLSImNew;
|
||||
theModified.Add(aS);
|
||||
}
|
||||
@@ -7099,3 +7151,61 @@ void AppendToList(TopTools_ListOfShape& theList,
|
||||
}
|
||||
theList.Append(theShape);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : AddToContainer
|
||||
//purpose : Set of methods to add a shape into container
|
||||
//=======================================================================
|
||||
static void AddToContainer(const TopoDS_Shape& theS,
|
||||
TopTools_ListOfShape& theList)
|
||||
{
|
||||
theList.Append(theS);
|
||||
}
|
||||
static Standard_Boolean AddToContainer(const TopoDS_Shape& theS,
|
||||
TopTools_MapOfShape& theMap)
|
||||
{
|
||||
return theMap.Add(theS);
|
||||
}
|
||||
static Standard_Boolean AddToContainer(const TopoDS_Shape& theS,
|
||||
TopTools_IndexedMapOfShape& theMap)
|
||||
{
|
||||
const Standard_Integer aNb = theMap.Extent();
|
||||
const Standard_Integer anInd = theMap.Add(theS);
|
||||
return anInd > aNb;
|
||||
}
|
||||
static void AddToContainer(const TopoDS_Shape& theS,
|
||||
TopoDS_Shape& theSOut)
|
||||
{
|
||||
BRep_Builder().Add(theSOut, theS);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : TakeModified
|
||||
//purpose : Check if the shape has images in the given images map.
|
||||
// Puts in the output map either the images or the shape itself.
|
||||
//=======================================================================
|
||||
template <class ContainerType, class FenceMapType>
|
||||
Standard_Boolean TakeModified(const TopoDS_Shape& theS,
|
||||
const TopTools_DataMapOfShapeListOfShape& theImages,
|
||||
ContainerType& theContainer,
|
||||
FenceMapType* theMFence)
|
||||
{
|
||||
const TopTools_ListOfShape *pLSIm = theImages.Seek(theS);
|
||||
if (pLSIm)
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape itLSIm(*pLSIm);
|
||||
for (; itLSIm.More(); itLSIm.Next())
|
||||
{
|
||||
const TopoDS_Shape& aSIm = itLSIm.Value();
|
||||
if (!theMFence || AddToContainer(aSIm, *theMFence))
|
||||
AddToContainer(aSIm, theContainer);
|
||||
}
|
||||
return Standard_True;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!theMFence || AddToContainer(theS, *theMFence))
|
||||
AddToContainer(theS, theContainer);
|
||||
return Standard_False;
|
||||
}
|
||||
}
|
||||
|
@@ -83,7 +83,7 @@ public:
|
||||
|
||||
//! Transform the bounding box with the given transformation.
|
||||
//! The resulting box will be larger if theTrsf contains rotation.
|
||||
Standard_EXPORT Bnd_B2d Transformed (const gp_Trsf2d& theTrsf) const;
|
||||
Standard_EXPORT Standard_NODISCARD Bnd_B2d Transformed (const gp_Trsf2d& theTrsf) const;
|
||||
|
||||
//! Check the given point for the inclusion in the Box.
|
||||
//! Returns True if the point is outside.
|
||||
|
@@ -84,7 +84,7 @@ public:
|
||||
|
||||
//! Transform the bounding box with the given transformation.
|
||||
//! The resulting box will be larger if theTrsf contains rotation.
|
||||
Standard_EXPORT Bnd_B2f Transformed (const gp_Trsf2d& theTrsf) const;
|
||||
Standard_EXPORT Standard_NODISCARD Bnd_B2f Transformed (const gp_Trsf2d& theTrsf) const;
|
||||
|
||||
//! Check the given point for the inclusion in the Box.
|
||||
//! Returns True if the point is outside.
|
||||
|
@@ -84,7 +84,7 @@ public:
|
||||
|
||||
//! Transform the bounding box with the given transformation.
|
||||
//! The resulting box will be larger if theTrsf contains rotation.
|
||||
Standard_EXPORT Bnd_B3d Transformed (const gp_Trsf& theTrsf) const;
|
||||
Standard_EXPORT Standard_NODISCARD Bnd_B3d Transformed (const gp_Trsf& theTrsf) const;
|
||||
|
||||
//! Check the given point for the inclusion in the Box.
|
||||
//! Returns True if the point is outside.
|
||||
|
@@ -85,7 +85,7 @@ public:
|
||||
|
||||
//! Transform the bounding box with the given transformation.
|
||||
//! The resulting box will be larger if theTrsf contains rotation.
|
||||
Standard_EXPORT Bnd_B3f Transformed (const gp_Trsf& theTrsf) const;
|
||||
Standard_EXPORT Standard_NODISCARD Bnd_B3f Transformed (const gp_Trsf& theTrsf) const;
|
||||
|
||||
//! Check the given point for the inclusion in the Box.
|
||||
//! Returns True if the point is outside.
|
||||
|
@@ -213,7 +213,7 @@ public:
|
||||
//! Applying a geometric transformation (for example, a
|
||||
//! rotation) to a bounding box generally increases its
|
||||
//! dimensions. This is not optimal for algorithms which use it.
|
||||
Standard_EXPORT Bnd_Box Transformed (const gp_Trsf& T) const;
|
||||
Standard_EXPORT Standard_NODISCARD Bnd_Box Transformed (const gp_Trsf& T) const;
|
||||
|
||||
//! Adds the box <Other> to <me>.
|
||||
Standard_EXPORT void Add (const Bnd_Box& Other);
|
||||
|
@@ -160,7 +160,7 @@ public:
|
||||
//! Applying a geometric transformation (for example, a
|
||||
//! rotation) to a bounding box generally increases its
|
||||
//! dimensions. This is not optimal for algorithms which use it.
|
||||
Standard_EXPORT Bnd_Box2d Transformed (const gp_Trsf2d& T) const;
|
||||
Standard_EXPORT Standard_NODISCARD Bnd_Box2d Transformed (const gp_Trsf2d& T) const;
|
||||
|
||||
//! Adds the 2d box <Other> to <me>.
|
||||
Standard_EXPORT void Add (const Bnd_Box2d& Other);
|
||||
|
@@ -851,7 +851,7 @@ void ChFi3d_Builder::StartSol(const Handle(ChFiDS_Stripe)& Stripe,
|
||||
PC->D1(woned, P1, derive);
|
||||
// There are ponts on the border, and internal points are found
|
||||
if (derive.Magnitude() > Precision::PConfusion()) {
|
||||
derive.Normalized();
|
||||
derive.Normalize();
|
||||
derive.Rotate(M_PI/2);
|
||||
AS.Initialize(f1);
|
||||
ResU = AS.UResolution(TolE);
|
||||
|
@@ -128,7 +128,7 @@ Standard_Boolean Contap_ArcFunction::Derivative (const Standard_Real U,
|
||||
dnorm = d2uv.Crossed(d1v) + d1u.Crossed(d2v);
|
||||
dfv = (dnorm.Dot(myDir)-myCosAng*dnorm.Dot(norm))/myMean;
|
||||
*/
|
||||
norm.Normalized();
|
||||
norm.Normalize();
|
||||
dfu = (dnu.Dot(myDir)-myCosAng*dnu.Dot(norm))/myMean;
|
||||
dfv = (dnv.Dot(myDir)-myCosAng*dnv.Dot(norm))/myMean;
|
||||
}
|
||||
|
@@ -1291,42 +1291,43 @@ void DBRep::Set(const Standard_CString Name, const TopoDS_Shape& S)
|
||||
Draw::Set(Name,D);
|
||||
}
|
||||
//=======================================================================
|
||||
//function : Get
|
||||
//purpose :
|
||||
//function : getShape
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
TopoDS_Shape DBRep::Get(Standard_CString& name,
|
||||
const TopAbs_ShapeEnum typ,
|
||||
const Standard_Boolean complain)
|
||||
TopoDS_Shape DBRep::getShape (Standard_CString& theName,
|
||||
TopAbs_ShapeEnum theType,
|
||||
Standard_Boolean theToComplain)
|
||||
{
|
||||
Standard_Boolean pick = name[0] == '.';
|
||||
TopoDS_Shape S;
|
||||
Handle(DBRep_DrawableShape) D;
|
||||
Handle(Draw_Drawable3D) DD = Draw::Get(name,complain);
|
||||
if (!DD.IsNull())
|
||||
D = Handle(DBRep_DrawableShape)::DownCast(DD);
|
||||
if (!D.IsNull()) {
|
||||
S = D->Shape();
|
||||
if (typ != TopAbs_SHAPE) {
|
||||
if (typ != S.ShapeType()) {
|
||||
// try to find prom pick
|
||||
if (pick) {
|
||||
Standard_Real u,v;
|
||||
DBRep_DrawableShape::LastPick(S,u,v);
|
||||
}
|
||||
}
|
||||
if (typ != S.ShapeType()) {
|
||||
if (complain) {
|
||||
cout << name << " is not a ";
|
||||
TopAbs::Print(typ,cout);
|
||||
cout << " but a ";
|
||||
TopAbs::Print(S.ShapeType(),cout);
|
||||
cout << endl;
|
||||
}
|
||||
S = TopoDS_Shape();
|
||||
}
|
||||
}
|
||||
const Standard_Boolean toPick = theName[0] == '.';
|
||||
Handle(DBRep_DrawableShape) aDrawable = Handle(DBRep_DrawableShape)::DownCast (Draw::Get (theName));
|
||||
if (aDrawable.IsNull())
|
||||
{
|
||||
return TopoDS_Shape();
|
||||
}
|
||||
return S;
|
||||
|
||||
TopoDS_Shape aShape = aDrawable->Shape();
|
||||
if (theType != TopAbs_SHAPE
|
||||
&& theType != aShape.ShapeType()
|
||||
&& toPick)
|
||||
{
|
||||
// try to find prom pick
|
||||
Standard_Real u, v;
|
||||
DBRep_DrawableShape::LastPick (aShape, u, v);
|
||||
}
|
||||
if (theType != TopAbs_SHAPE
|
||||
&& theType != aShape.ShapeType())
|
||||
{
|
||||
if (theToComplain)
|
||||
{
|
||||
std::cout << theName << " is not a ";
|
||||
TopAbs::Print (theType, std::cout);
|
||||
std::cout << " but a ";
|
||||
TopAbs::Print (aShape.ShapeType(), std::cout);
|
||||
std::cout << std::endl;
|
||||
}
|
||||
return TopoDS_Shape();
|
||||
}
|
||||
return aShape;
|
||||
}
|
||||
|
||||
static Standard_Integer XProgress (Draw_Interpretor& di, Standard_Integer argc, const char **argv)
|
||||
|
@@ -17,23 +17,10 @@
|
||||
#ifndef _DBRep_HeaderFile
|
||||
#define _DBRep_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_DefineAlloc.hxx>
|
||||
#include <Standard_Handle.hxx>
|
||||
|
||||
#include <Standard_CString.hxx>
|
||||
#include <TopAbs_ShapeEnum.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <Draw_Interpretor.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
class TopoDS_Shape;
|
||||
class DBRep_Edge;
|
||||
class DBRep_Face;
|
||||
class DBRep_HideData;
|
||||
class DBRep_DrawableShape;
|
||||
class DBRep_IsoBuilder;
|
||||
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
#include <TopAbs_ShapeEnum.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
|
||||
//! Used to display BRep objects using the DrawTrSurf
|
||||
//! package.
|
||||
@@ -54,12 +41,46 @@ public:
|
||||
//! variable if already set.
|
||||
Standard_EXPORT static void Set (const Standard_CString Name, const TopoDS_Shape& S);
|
||||
|
||||
//! Returns the shape in the variable <Name>. Returns
|
||||
//! a null shape if the variable is not set or not of
|
||||
//! the given <Typ>. If <Complain> is True a message
|
||||
//! is printed on cout if the variable is not set.
|
||||
Standard_EXPORT static TopoDS_Shape Get (Standard_CString& Name, const TopAbs_ShapeEnum Typ = TopAbs_SHAPE, const Standard_Boolean Complain = Standard_False);
|
||||
|
||||
//! Returns the shape in the variable.
|
||||
//! @param theName [in] [out] variable name, or "." to pick up shape interactively (the picked name will be returned then)
|
||||
//! @param theType [in] shape type filter; function will return NULL if shape has different type
|
||||
//! @param theToComplain [in] when TRUE, prints a message on cout if the variable is not set
|
||||
static TopoDS_Shape Get (Standard_CString& theName, TopAbs_ShapeEnum theType = TopAbs_SHAPE, Standard_Boolean theToComplain = Standard_False)
|
||||
{
|
||||
return getShape (theName, theType, theToComplain);
|
||||
}
|
||||
|
||||
//! Returns the shape in the variable.
|
||||
//! @param theName [in] [out] variable name, or "." to pick up shape interactively (the picked name will be returned then)
|
||||
//! @param theType [in] shape type filter; function will return NULL if shape has different type
|
||||
//! @param theToComplain [in] when TRUE, prints a message on cout if the variable is not set
|
||||
static TopoDS_Shape Get (TCollection_AsciiString& theName, TopAbs_ShapeEnum theType = TopAbs_SHAPE, Standard_Boolean theToComplain = Standard_False)
|
||||
{
|
||||
Standard_CString aNamePtr = theName.ToCString();
|
||||
TopoDS_Shape aShape = getShape (aNamePtr, theType, theToComplain);
|
||||
if (aNamePtr != theName.ToCString())
|
||||
{
|
||||
theName = aNamePtr;
|
||||
}
|
||||
return aShape;
|
||||
}
|
||||
|
||||
//! Returns the shape in the variable.
|
||||
//! @param theName [in] variable name
|
||||
//! @param theType [in] shape type filter; function will return NULL if shape has different type
|
||||
//! @param theToComplain [in] when TRUE, prints a message on cout if the variable is not set
|
||||
static TopoDS_Shape GetExisting (const TCollection_AsciiString& theName, TopAbs_ShapeEnum theType = TopAbs_SHAPE, Standard_Boolean theToComplain = Standard_False)
|
||||
{
|
||||
if (theName.Length() == 1
|
||||
&& theName.Value (1) == '.')
|
||||
{
|
||||
return TopoDS_Shape();
|
||||
}
|
||||
|
||||
Standard_CString aNamePtr = theName.ToCString();
|
||||
return getShape (aNamePtr, theType, theToComplain);
|
||||
}
|
||||
|
||||
//! Defines the basic commands.
|
||||
Standard_EXPORT static void BasicCommands (Draw_Interpretor& theCommands);
|
||||
|
||||
@@ -86,32 +107,16 @@ public:
|
||||
//! get progress indicator
|
||||
Standard_EXPORT static Standard_Integer Discretisation();
|
||||
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
|
||||
friend class DBRep_Edge;
|
||||
friend class DBRep_Face;
|
||||
friend class DBRep_HideData;
|
||||
friend class DBRep_DrawableShape;
|
||||
friend class DBRep_IsoBuilder;
|
||||
//! Returns the shape in the variable.
|
||||
//! @param theName [in] [out] variable name, or "." to pick up shape interactively (the picked name will be returned then)
|
||||
//! @param theType [in] shape type filter; function will return NULL if shape has different type
|
||||
//! @param theToComplain [in] when TRUE, prints a message on cout if the variable is not set
|
||||
Standard_EXPORT static TopoDS_Shape getShape (Standard_CString& theName,
|
||||
TopAbs_ShapeEnum theType,
|
||||
Standard_Boolean theToComplain);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _DBRep_HeaderFile
|
||||
|
@@ -75,7 +75,7 @@ Standard_Boolean DDF::GetDF (Standard_CString& Name,
|
||||
Handle(TDF_Data)& DF,
|
||||
const Standard_Boolean Complain)
|
||||
{
|
||||
Handle(Standard_Transient) t = Draw::Get(Name, Complain);
|
||||
Handle(Standard_Transient) t = Draw::Get (Name);
|
||||
Handle(DDF_Data) DDF = Handle(DDF_Data)::DownCast (t);
|
||||
//Handle(DDF_Data) DDF = Handle(DDF_Data)::DownCast (Draw::Get(Name, Complain));
|
||||
if (!DDF.IsNull()) {
|
||||
|
@@ -103,8 +103,12 @@ static Standard_Integer DFOpenLabel (Draw_Interpretor& di,
|
||||
{
|
||||
if (n < 2) return 1;
|
||||
|
||||
Handle(DDF_Browser) browser =
|
||||
Handle(DDF_Browser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (a[1]));
|
||||
if (browser.IsNull())
|
||||
{
|
||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
TDF_Label lab;
|
||||
if (n == 3) TDF_Tool::Label(browser->Data(),a[2],lab);
|
||||
@@ -128,8 +132,12 @@ static Standard_Integer DFOpenAttributeList(Draw_Interpretor& di,
|
||||
{
|
||||
if (n < 3) return 1;
|
||||
|
||||
Handle(DDF_Browser) browser =
|
||||
Handle(DDF_Browser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (a[1]));
|
||||
if (browser.IsNull())
|
||||
{
|
||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
TDF_Label lab;
|
||||
TDF_Tool::Label(browser->Data(),a[2],lab);
|
||||
@@ -157,8 +165,12 @@ static Standard_Integer DFOpenAttribute (Draw_Interpretor& di,
|
||||
{
|
||||
if (n < 3) return 1;
|
||||
|
||||
Handle(DDF_Browser) browser =
|
||||
Handle(DDF_Browser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (a[1]));
|
||||
if (browser.IsNull())
|
||||
{
|
||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
const Standard_Integer index = Draw::Atoi(a[2]);
|
||||
TCollection_AsciiString list = browser->OpenAttribute(index);
|
||||
|
@@ -86,18 +86,26 @@ static Standard_Integer DDataStd_PNT (Draw_Interpretor& di,
|
||||
//purpose : Rmdraw (name)
|
||||
//=======================================================================
|
||||
|
||||
static Standard_Integer DDataStd_Rmdraw (Draw_Interpretor& di,
|
||||
static Standard_Integer DDataStd_Rmdraw (Draw_Interpretor& ,
|
||||
Standard_Integer nb,
|
||||
const char** arg)
|
||||
{
|
||||
if (nb == 2) {
|
||||
Handle(Draw_Drawable3D) D3D;
|
||||
D3D = Draw::Get(arg[1],Standard_True);
|
||||
if (!D3D.IsNull()) dout.RemoveDrawable(D3D);
|
||||
if (nb != 2)
|
||||
{
|
||||
std::cout << "Syntax error: wrong number of arguments\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (Handle(Draw_Drawable3D) D3D = Draw::Get (arg[1]))
|
||||
{
|
||||
dout.RemoveDrawable (D3D);
|
||||
return 0;
|
||||
}
|
||||
di << "DDataStd_Rmdraw : Error : not done\n";
|
||||
return 1;
|
||||
else
|
||||
{
|
||||
std::cout << "Syntax error: variable '" << arg[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -347,8 +347,12 @@ static Standard_Integer DDataStd_OpenNode (Draw_Interpretor& di,
|
||||
{
|
||||
if (n < 2) return 1;
|
||||
|
||||
Handle(DDataStd_TreeBrowser) browser =
|
||||
Handle(DDataStd_TreeBrowser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||
Handle(DDataStd_TreeBrowser) browser = Handle(DDataStd_TreeBrowser)::DownCast (Draw::GetExisting (a[1]));
|
||||
if (browser.IsNull())
|
||||
{
|
||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
TDF_Label lab;
|
||||
if (n == 3) TDF_Tool::Label(browser->Label().Data(),a[2],lab);
|
||||
|
@@ -71,10 +71,7 @@ Standard_Boolean DDocStd::GetDocument (Standard_CString& Name,
|
||||
Handle(TDocStd_Document)& DOC,
|
||||
const Standard_Boolean Complain)
|
||||
{
|
||||
|
||||
Handle(Draw_Drawable3D) D = Draw::Get(Name,Standard_False);
|
||||
|
||||
Handle(DDocStd_DrawDocument) DD = Handle(DDocStd_DrawDocument)::DownCast (D);
|
||||
Handle(DDocStd_DrawDocument) DD = Handle(DDocStd_DrawDocument)::DownCast (Draw::GetExisting (Name));
|
||||
if (DD.IsNull()) {
|
||||
if (Complain) cout << Name << " is not a Document" << endl;
|
||||
return Standard_False;
|
||||
|
@@ -348,8 +348,10 @@ static Standard_Integer DDocStd_Close (Draw_Interpretor& /*theDI*/,
|
||||
|
||||
aDocApp->Close (aDoc);
|
||||
|
||||
Handle(Draw_Drawable3D) aDrawable = Draw::Get (aDocName, Standard_False);
|
||||
dout.RemoveDrawable (aDrawable);
|
||||
if (Handle(Draw_Drawable3D) aDrawable = Draw::GetExisting (aDocName))
|
||||
{
|
||||
dout.RemoveDrawable (aDrawable);
|
||||
}
|
||||
Draw::Set (theArgVec[1], Handle(Draw_Drawable3D)());
|
||||
return 0;
|
||||
}
|
||||
|
@@ -206,20 +206,19 @@ static int mtmNestedMode (Draw_Interpretor& di, int n, const char** a)
|
||||
|
||||
static Standard_Integer XAttributeValue (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
|
||||
{
|
||||
if ( argc <4 ) { di << "ERROR: Too few args\n"; return 0; }
|
||||
Handle(DDF_Browser) browser =
|
||||
Handle(DDF_Browser)::DownCast (Draw::Get(argv[1], Standard_True));
|
||||
if ( browser.IsNull() ) { di << "ERROR: Not a browser: " << argv[1] << "\n"; return 0; }
|
||||
if ( argc < 4 ) { di << "ERROR: Too few args\n"; return 1; }
|
||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (argv[1]));
|
||||
if ( browser.IsNull() ) { std::cout << "Syntax error: Not a browser: " << argv[1] << "\n"; return 1; }
|
||||
|
||||
TDF_Label lab;
|
||||
TDF_Tool::Label(browser->Data(),argv[2],lab);
|
||||
if ( lab.IsNull() ) { di << "ERROR: label is Null: " << argv[2] << "\n"; return 0; }
|
||||
if ( lab.IsNull() ) { di << "Syntax error: label is Null: " << argv[2] << "\n"; return 1; }
|
||||
|
||||
Standard_Integer num = Draw::Atoi ( argv[3] );
|
||||
TDF_AttributeIterator itr(lab,Standard_False);
|
||||
for (Standard_Integer i=1; itr.More() && i < num; i++) itr.Next();
|
||||
|
||||
if ( ! itr.More() ) { di << "ERROR: Attribute #" << num << " not found\n"; return 0; }
|
||||
if ( ! itr.More() ) { di << "Syntax error: Attribute #" << num << " not found\n"; return 1; }
|
||||
|
||||
const Handle(TDF_Attribute)& att = itr.Value();
|
||||
if ( att->IsKind(STANDARD_TYPE(TDataStd_TreeNode)) )
|
||||
|
@@ -132,7 +132,7 @@ static Standard_Integer DNaming_TCopyShape (Draw_Interpretor& di,
|
||||
DNaming_DataMapIteratorOfDataMapOfShapeOfName itrn(aDMapOfShapeOfName);
|
||||
for(;itrn.More();itrn.Next()) {
|
||||
TCollection_AsciiString name = itrn.Value();
|
||||
const TopoDS_Shape& Result = TR.Copied(itrn.Key());
|
||||
const TopoDS_Shape Result = TR.Copied(itrn.Key());
|
||||
DBRep::Set(name.ToCString(), Result);
|
||||
di.AppendElement(name.ToCString());
|
||||
}
|
||||
|
@@ -73,16 +73,18 @@ public:
|
||||
|
||||
//! Returns main DRAW interpretor.
|
||||
Standard_EXPORT static Draw_Interpretor& GetInterpretor();
|
||||
|
||||
//! Returns a variable value. Null if the variable
|
||||
//! does not exist, a warning is printed if Complain
|
||||
//! is True.
|
||||
//!
|
||||
//! The name "." does a graphic selection. If the
|
||||
//! selection is a variable <Name> is overwritten with
|
||||
//! the name of the variable.
|
||||
Standard_EXPORT static Handle(Draw_Drawable3D) Get (Standard_CString& Name, const Standard_Boolean Complain = Standard_True);
|
||||
|
||||
|
||||
//! Returns a variable value.
|
||||
//! The name "." does a graphic selection; in this case theName will be is overwritten with the name of the variable.
|
||||
static Handle(Draw_Drawable3D) Get (Standard_CString& theName) { return getDrawable (theName, Standard_True); }
|
||||
|
||||
//! Returns a variable value.
|
||||
static Handle(Draw_Drawable3D) GetExisting (const Standard_CString& theName)
|
||||
{
|
||||
Standard_CString aName = theName;
|
||||
return getDrawable (aName, Standard_False);
|
||||
}
|
||||
|
||||
//! Gets a numeric variable. Returns True if the
|
||||
//! variable exist.
|
||||
Standard_EXPORT static Standard_Boolean Get (const Standard_CString Name, Standard_Real& val);
|
||||
@@ -129,20 +131,16 @@ public:
|
||||
//! Defines Draw unit commands
|
||||
Standard_EXPORT static void UnitCommands (Draw_Interpretor& I);
|
||||
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
//! Returns a variable value.
|
||||
//! @param theName [in] [out] variable name, or "." to activate picking
|
||||
//! @param theToAllowPick [in] when TRUE, "." name will activate picking
|
||||
Standard_EXPORT static Handle(Draw_Drawable3D) getDrawable (Standard_CString& theName,
|
||||
Standard_Boolean theToAllowPick);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
|
||||
friend class Draw_Drawable3D;
|
||||
friend class Draw_Drawable2D;
|
||||
friend class Draw_Color;
|
||||
|
@@ -627,7 +627,7 @@ static Standard_Integer dgetenv(Draw_Interpretor& di, Standard_Integer argc, con
|
||||
static Standard_Integer isdraw(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
||||
{
|
||||
if (n != 2) return 1;
|
||||
Handle(Draw_Drawable3D) D = Draw::Get(a[1],Standard_False);
|
||||
Handle(Draw_Drawable3D) D = Draw::Get (a[1]);
|
||||
if (D.IsNull())
|
||||
di << "0";
|
||||
else
|
||||
@@ -643,7 +643,7 @@ static Standard_Integer isdraw(Draw_Interpretor& di, Standard_Integer n, const c
|
||||
Standard_Integer isprot(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
||||
{
|
||||
if (n != 2) return 1;
|
||||
Handle(Draw_Drawable3D) D = Draw::Get(a[1],Standard_False);
|
||||
Handle(Draw_Drawable3D) D = Draw::Get(a[1]);
|
||||
if (D.IsNull())
|
||||
di << "0";
|
||||
else {
|
||||
@@ -814,75 +814,63 @@ void Draw::Set(const Standard_CString name,
|
||||
//function : Set
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void Draw::Set(const Standard_CString Name, const Standard_Real val)
|
||||
void Draw::Set(const Standard_CString theName, const Standard_Real theValue)
|
||||
{
|
||||
if ((Name[0] == '.') && (Name[1] == '\0')) return;
|
||||
Standard_CString aName = Name;
|
||||
Handle(Draw_Drawable3D) D = Draw::Get(aName,Standard_False);
|
||||
Handle(Draw_Number) N;
|
||||
if (!D.IsNull()) {
|
||||
N = Handle(Draw_Number)::DownCast(D);
|
||||
}
|
||||
if (N.IsNull()) {
|
||||
N = new Draw_Number(val);
|
||||
Draw::Set(aName,N,Standard_False);
|
||||
if (Handle(Draw_Number) aNumber = Handle(Draw_Number)::DownCast (Draw::GetExisting (theName)))
|
||||
{
|
||||
aNumber->Value (theValue);
|
||||
}
|
||||
else
|
||||
N->Value(val);
|
||||
{
|
||||
aNumber = new Draw_Number (theValue);
|
||||
Draw::Set (theName, aNumber, Standard_False);
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Get
|
||||
//purpose :
|
||||
//function : getDrawable
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Handle(Draw_Drawable3D) Draw::Get(Standard_CString& name,
|
||||
const Standard_Boolean )
|
||||
Handle(Draw_Drawable3D) Draw::getDrawable (Standard_CString& theName,
|
||||
Standard_Boolean theToAllowPick)
|
||||
{
|
||||
Standard_Boolean pick = ((name[0] == '.') && (name[1] == '\0'));
|
||||
Handle(Draw_Drawable3D) D;
|
||||
if (pick) {
|
||||
cout << "Pick an object" << endl;
|
||||
dout.Select(p_id,p_X,p_Y,p_b);
|
||||
dout.Pick(p_id,p_X,p_Y,5,D,0);
|
||||
if (!D.IsNull()) {
|
||||
if (D->Name()) {
|
||||
name = p_Name = D->Name();
|
||||
//p_Name = (char *)D->Name();
|
||||
}
|
||||
}
|
||||
const Standard_Boolean toPick = ((theName[0] == '.') && (theName[1] == '\0'));
|
||||
if (!toPick)
|
||||
{
|
||||
ClientData aCD = Tcl_VarTraceInfo (Draw::GetInterpretor().Interp(), theName, TCL_TRACE_UNSETS | TCL_TRACE_WRITES, tracevar, NULL);
|
||||
Handle(Draw_Drawable3D) aDrawable = reinterpret_cast<Draw_Drawable3D*>(aCD);
|
||||
return theVariables.Contains (aDrawable)
|
||||
? aDrawable
|
||||
: Handle(Draw_Drawable3D)();
|
||||
}
|
||||
else {
|
||||
ClientData aCD =
|
||||
Tcl_VarTraceInfo(Draw::GetInterpretor().Interp(),name,TCL_TRACE_UNSETS | TCL_TRACE_WRITES,
|
||||
tracevar, NULL);
|
||||
D = reinterpret_cast<Draw_Drawable3D*>(aCD);
|
||||
if (!theVariables.Contains(D))
|
||||
D.Nullify();
|
||||
#if 0
|
||||
if (D.IsNull() && complain)
|
||||
cout <<name<<" does not exist"<<endl;
|
||||
#endif
|
||||
else if (!theToAllowPick)
|
||||
{
|
||||
return Handle(Draw_Drawable3D)();
|
||||
}
|
||||
return D;
|
||||
|
||||
std::cout << "Pick an object" << std::endl;
|
||||
Handle(Draw_Drawable3D) aDrawable;
|
||||
dout.Select (p_id, p_X, p_Y, p_b);
|
||||
dout.Pick (p_id, p_X, p_Y, 5, aDrawable, 0);
|
||||
if (!aDrawable.IsNull()
|
||||
&& aDrawable->Name() != NULL)
|
||||
{
|
||||
theName = p_Name = aDrawable->Name();
|
||||
}
|
||||
return aDrawable;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Get
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean Draw::Get(const Standard_CString name,
|
||||
Standard_Real& val)
|
||||
Standard_Boolean Draw::Get (const Standard_CString theName,
|
||||
Standard_Real& theValue)
|
||||
{
|
||||
if ((name[0] == '.') && (name[1] == '\0')) {
|
||||
return Standard_False;
|
||||
}
|
||||
Standard_CString aName = name;
|
||||
Handle(Draw_Drawable3D) D = Draw::Get(aName,Standard_False);
|
||||
if (!D.IsNull()) {
|
||||
Handle(Draw_Number) N = Handle(Draw_Number)::DownCast(D);
|
||||
if (!N.IsNull()) {
|
||||
val = N->Value();
|
||||
return Standard_True;
|
||||
}
|
||||
if (Handle(Draw_Number) aNumber = Handle(Draw_Number)::DownCast (Draw::GetExisting (theName)))
|
||||
{
|
||||
theValue = aNumber->Value();
|
||||
return Standard_True;
|
||||
}
|
||||
return Standard_False;
|
||||
}
|
||||
|
@@ -55,12 +55,11 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
const DsgPrs_ArrowSide ArrowSide,
|
||||
const Standard_Boolean drawFromCenter)
|
||||
{
|
||||
Prs3d_Root::CurrentGroup(aPresentation)->SetPrimitivesAspect(LA->LineAspect()->Aspect());
|
||||
Handle(Graphic3d_Group) aGroup = aPresentation->NewGroup();
|
||||
|
||||
Quantity_Color aColor = LA->LineAspect()->Aspect()->Color();
|
||||
Handle(Graphic3d_AspectMarker3d) aMarkerAsp = new Graphic3d_AspectMarker3d (Aspect_TOM_O, aColor, 1.0);
|
||||
Prs3d_Root::CurrentGroup(aPresentation)->SetPrimitivesAspect (aMarkerAsp);
|
||||
Prs3d_Root::CurrentGroup(aPresentation)->SetPrimitivesAspect(LA->LineAspect()->Aspect());
|
||||
aGroup->SetGroupPrimitivesAspect (LA->LineAspect()->Aspect());
|
||||
|
||||
switch(ArrowSide) {
|
||||
case DsgPrs_AS_NONE:
|
||||
@@ -69,7 +68,7 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
}
|
||||
case DsgPrs_AS_FIRSTAR:
|
||||
{
|
||||
Prs3d_Arrow::Draw(Prs3d_Root::CurrentGroup (aPresentation),
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
pt1,
|
||||
dir1,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
@@ -79,7 +78,7 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
case DsgPrs_AS_LASTAR:
|
||||
{
|
||||
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
pt2,
|
||||
dir2,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
@@ -89,12 +88,12 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
|
||||
case DsgPrs_AS_BOTHAR:
|
||||
{
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
pt1,
|
||||
dir1,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
LA->ArrowAspect()->Length());
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
pt2,
|
||||
dir2,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
@@ -127,15 +126,11 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
{
|
||||
if(drawFromCenter)
|
||||
{
|
||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints1 = new Graphic3d_ArrayOfPoints (1);
|
||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints1 = new Graphic3d_ArrayOfPoints (2);
|
||||
anArrayOfPoints1->AddVertex (pt1.X(), pt1.Y(), pt1.Z());
|
||||
Prs3d_Root::CurrentGroup(aPresentation)->AddPrimitiveArray (anArrayOfPoints1);
|
||||
}
|
||||
if(drawFromCenter)
|
||||
{
|
||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints2 = new Graphic3d_ArrayOfPoints (1);
|
||||
anArrayOfPoints2->AddVertex (pt2.X(), pt2.Y(), pt2.Z());
|
||||
Prs3d_Root::CurrentGroup(aPresentation)->AddPrimitiveArray (anArrayOfPoints2);
|
||||
anArrayOfPoints1->AddVertex (pt2.X(), pt2.Y(), pt2.Z());
|
||||
aGroup->SetGroupPrimitivesAspect (aMarkerAsp);
|
||||
aGroup->AddPrimitiveArray (anArrayOfPoints1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -143,7 +138,7 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
case DsgPrs_AS_FIRSTAR_LASTPT:
|
||||
{
|
||||
// an Arrow
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
pt1,
|
||||
dir1,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
@@ -151,25 +146,28 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
// a Round
|
||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
||||
anArrayOfPoints->AddVertex (pt2.X(), pt2.Y(), pt2.Z());
|
||||
Prs3d_Root::CurrentGroup(aPresentation)->AddPrimitiveArray (anArrayOfPoints);
|
||||
aGroup->SetPrimitivesAspect (aMarkerAsp);
|
||||
aGroup->AddPrimitiveArray (anArrayOfPoints);
|
||||
break;
|
||||
}
|
||||
|
||||
case DsgPrs_AS_FIRSTPT_LASTAR:
|
||||
{
|
||||
// a Round
|
||||
if(drawFromCenter)
|
||||
{
|
||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
||||
anArrayOfPoints->AddVertex (pt1.X(), pt1.Y(), pt1.Z());
|
||||
Prs3d_Root::CurrentGroup(aPresentation)->AddPrimitiveArray (anArrayOfPoints);
|
||||
}
|
||||
// an Arrow
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
pt2,
|
||||
dir2,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
LA->ArrowAspect()->Length());
|
||||
|
||||
// a Round
|
||||
if (drawFromCenter)
|
||||
{
|
||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
||||
anArrayOfPoints->AddVertex (pt1.X(), pt1.Y(), pt1.Z());
|
||||
aGroup->SetPrimitivesAspect (aMarkerAsp);
|
||||
aGroup->AddPrimitiveArray (anArrayOfPoints);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -162,13 +162,14 @@ void Extrema_ExtPElS::Perform(const gp_Pnt& P,
|
||||
myDone = Standard_True;
|
||||
return;
|
||||
}
|
||||
gp_Vec DirZ;
|
||||
if (M.SquareDistance(O)<Tol * Tol)
|
||||
{ DirZ=OZ;
|
||||
if( A<0) DirZ.Multiplied(-1.);
|
||||
}
|
||||
else
|
||||
DirZ=gp_Vec(M,O);
|
||||
gp_Vec DirZ;
|
||||
if (M.SquareDistance(O) < Tol * Tol)
|
||||
{
|
||||
DirZ = (A < 0 ? -OZ : OZ);
|
||||
}
|
||||
else
|
||||
DirZ = gp_Vec(M, O);
|
||||
|
||||
// Projection of P in the reference plane of the cone ...
|
||||
Standard_Real Zp = gp_Vec(O, P).Dot(OZ);
|
||||
|
||||
|
@@ -155,7 +155,7 @@ FEmTool_ProfileMatrix::FEmTool_ProfileMatrix(const TColStd_Array1OfInteger& Firs
|
||||
|
||||
Standard_Real * x = &X(X.Lower());
|
||||
x--;
|
||||
Standard_Real * b = &B(B.Lower());
|
||||
const Standard_Real * b = &B(B.Lower());
|
||||
b--;
|
||||
const Standard_Real * SMA = &SMatrix->Value(1);
|
||||
SMA --;
|
||||
@@ -207,7 +207,7 @@ FEmTool_ProfileMatrix::FEmTool_ProfileMatrix(const TColStd_Array1OfInteger& Firs
|
||||
Standard_Integer i, j, jj, DiagAddr, CurrAddr;
|
||||
Standard_Real * m = &MX(MX.Lower());
|
||||
m--;
|
||||
Standard_Real * x = &X(X.Lower());
|
||||
const Standard_Real * x = &X(X.Lower());
|
||||
x--;
|
||||
const Standard_Real * PM = &ProfileMatrix->Value(1);
|
||||
PM--;
|
||||
|
@@ -702,20 +702,25 @@ Handle(Font_SystemFont) Font_FontMgr::FindFont (const TCollection_AsciiString& t
|
||||
}
|
||||
|
||||
// Trying to use font names mapping
|
||||
Handle(Font_FontAliasSequence) anAliases;
|
||||
const Standard_Boolean hasAliases = myFontAliases.Find (aFontName, anAliases)
|
||||
&& !anAliases.IsNull()
|
||||
&& !anAliases->IsEmpty();
|
||||
if (!hasAliases
|
||||
&& aFont.IsNull())
|
||||
for (int aPass = 0; aPass < 2; ++aPass)
|
||||
{
|
||||
anAliases = myFallbackAlias;
|
||||
}
|
||||
Handle(Font_FontAliasSequence) anAliases;
|
||||
if (aPass == 0)
|
||||
{
|
||||
myFontAliases.Find (aFontName, anAliases);
|
||||
}
|
||||
else
|
||||
{
|
||||
anAliases = myFallbackAlias;
|
||||
}
|
||||
|
||||
bool isAliasUsed = false, isBestAlias = false;
|
||||
if (!anAliases.IsNull()
|
||||
&& !anAliases->IsEmpty())
|
||||
{
|
||||
if (anAliases.IsNull()
|
||||
|| anAliases->IsEmpty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
bool isAliasUsed = false, isBestAlias = false;
|
||||
for (Font_FontAliasSequence::Iterator anAliasIter (*anAliases); anAliasIter.More(); anAliasIter.Next())
|
||||
{
|
||||
const Font_FontAlias& anAlias = anAliasIter.Value();
|
||||
@@ -737,24 +742,29 @@ Handle(Font_SystemFont) Font_FontMgr::FindFont (const TCollection_AsciiString& t
|
||||
}
|
||||
else if (anAlias.FontAspect == Font_FontAspect_UNDEFINED
|
||||
&& (theFontAspect == Font_FontAspect_UNDEFINED
|
||||
|| aFont2->HasFontAspect (theFontAspect)))
|
||||
|| aFont2->HasFontAspect (theFontAspect)))
|
||||
{
|
||||
isBestAlias = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasAliases)
|
||||
|
||||
if (aPass == 0)
|
||||
{
|
||||
if (isAliasUsed && myToTraceAliases)
|
||||
{
|
||||
Message::DefaultMessenger()->Send (TCollection_AsciiString("Font_FontMgr, using font alias '") + aFont->FontName() + "'"
|
||||
" instead of requested '" + theFontName +"'", Message_Trace);
|
||||
" instead of requested '" + theFontName +"'", Message_Trace);
|
||||
}
|
||||
if (isBestAlias)
|
||||
{
|
||||
return aFont;
|
||||
}
|
||||
else if (!aFont.IsNull())
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -65,7 +65,7 @@ public:
|
||||
Standard_EXPORT void Reverse();
|
||||
|
||||
//! Returns a copy of <me> reversed.
|
||||
Standard_EXPORT Handle(Geom_Axis1Placement) Reversed() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Axis1Placement) Reversed() const;
|
||||
|
||||
//! Assigns V to the unit vector of this axis.
|
||||
Standard_EXPORT void SetDirection (const gp_Dir& V) Standard_OVERRIDE;
|
||||
|
@@ -117,7 +117,7 @@ public:
|
||||
Standard_EXPORT virtual Standard_Real ParametricTransformation (const gp_Trsf& T) const;
|
||||
|
||||
//! Returns a copy of <me> reversed.
|
||||
Standard_EXPORT Handle(Geom_Curve) Reversed() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Curve) Reversed() const;
|
||||
|
||||
//! Returns the value of the first parameter.
|
||||
//! Warnings :
|
||||
|
@@ -99,21 +99,21 @@ public:
|
||||
//! (see class Transformation of the package Geom).
|
||||
Standard_EXPORT virtual void Transform (const gp_Trsf& T) = 0;
|
||||
|
||||
Standard_EXPORT Handle(Geom_Geometry) Mirrored (const gp_Pnt& P) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Mirrored (const gp_Pnt& P) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom_Geometry) Mirrored (const gp_Ax1& A1) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Mirrored (const gp_Ax1& A1) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom_Geometry) Mirrored (const gp_Ax2& A2) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Mirrored (const gp_Ax2& A2) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom_Geometry) Rotated (const gp_Ax1& A1, const Standard_Real Ang) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Rotated (const gp_Ax1& A1, const Standard_Real Ang) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom_Geometry) Scaled (const gp_Pnt& P, const Standard_Real S) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Scaled (const gp_Pnt& P, const Standard_Real S) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom_Geometry) Transformed (const gp_Trsf& T) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Transformed (const gp_Trsf& T) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom_Geometry) Translated (const gp_Vec& V) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Translated (const gp_Vec& V) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom_Geometry) Translated (const gp_Pnt& P1, const gp_Pnt& P2) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Translated (const gp_Pnt& P1, const gp_Pnt& P2) const;
|
||||
|
||||
//! Creates a new object which is a copy of this geometric object.
|
||||
Standard_EXPORT virtual Handle(Geom_Geometry) Copy() const = 0;
|
||||
|
@@ -79,7 +79,7 @@ public:
|
||||
//! Reverses the U direction of parametrization of <me>.
|
||||
//! The bounds of the surface are not modified.
|
||||
//! A copy of <me> is returned.
|
||||
Standard_EXPORT Handle(Geom_Surface) UReversed() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Surface) UReversed() const;
|
||||
|
||||
//! Returns the parameter on the Ureversed surface for
|
||||
//! the point of parameter U on <me>.
|
||||
@@ -100,7 +100,7 @@ public:
|
||||
//! Reverses the V direction of parametrization of <me>.
|
||||
//! The bounds of the surface are not modified.
|
||||
//! A copy of <me> is returned.
|
||||
Standard_EXPORT Handle(Geom_Surface) VReversed() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Surface) VReversed() const;
|
||||
|
||||
//! Returns the parameter on the Vreversed surface for
|
||||
//! the point of parameter V on <me>.
|
||||
|
@@ -160,12 +160,12 @@ public:
|
||||
//! Raised if the the transformation is singular. This means that
|
||||
//! the ScaleFactor is lower or equal to Resolution from
|
||||
//! package gp.
|
||||
Standard_EXPORT Handle(Geom_Transformation) Inverted() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Transformation) Inverted() const;
|
||||
|
||||
//! Computes the transformation composed with Other and <me>.
|
||||
//! <me> * Other.
|
||||
//! Returns a new transformation
|
||||
Standard_EXPORT Handle(Geom_Transformation) Multiplied (const Handle(Geom_Transformation)& Other) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Transformation) Multiplied (const Handle(Geom_Transformation)& Other) const;
|
||||
|
||||
//! Computes the transformation composed with Other and <me> .
|
||||
//! <me> = <me> * Other.
|
||||
|
@@ -47,7 +47,7 @@ public:
|
||||
|
||||
|
||||
//! Returns a copy of <me> reversed.
|
||||
Standard_EXPORT Handle(Geom_Vector) Reversed() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Vector) Reversed() const;
|
||||
|
||||
//! Computes the angular value, in radians, between this
|
||||
//! vector and vector Other. The result is a value between 0 and Pi.
|
||||
|
@@ -80,7 +80,7 @@ public:
|
||||
|
||||
|
||||
//! Adds the vector Other to <me>.
|
||||
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Added (const Handle(Geom_Vector)& Other) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_VectorWithMagnitude) Added (const Handle(Geom_Vector)& Other) const;
|
||||
|
||||
|
||||
//! Computes the cross product between <me> and Other
|
||||
@@ -106,12 +106,12 @@ public:
|
||||
|
||||
|
||||
//! Divides <me> by a scalar. A new vector is returned.
|
||||
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
||||
|
||||
|
||||
//! Computes the product of the vector <me> by a scalar.
|
||||
//! A new vector is returned.
|
||||
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Multiplied (const Standard_Real Scalar) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_VectorWithMagnitude) Multiplied (const Standard_Real Scalar) const;
|
||||
|
||||
|
||||
//! Computes the product of the vector <me> by a scalar.
|
||||
@@ -127,14 +127,15 @@ public:
|
||||
//!
|
||||
//! Raised if the magnitude of the vector is lower or equal to
|
||||
//! Resolution from package gp.
|
||||
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Normalized() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_VectorWithMagnitude) Normalized() const;
|
||||
|
||||
//! Subtracts the Vector Other to <me>.
|
||||
Standard_EXPORT void Subtract (const Handle(Geom_Vector)& Other);
|
||||
|
||||
|
||||
//! Subtracts the vector Other to <me>. A new vector is returned.
|
||||
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Subtracted (const Handle(Geom_Vector)& Other) const;
|
||||
Standard_EXPORT Standard_NODISCARD
|
||||
Handle(Geom_VectorWithMagnitude) Subtracted (const Handle(Geom_Vector)& Other) const;
|
||||
|
||||
//! Applies the transformation T to this vector.
|
||||
Standard_EXPORT void Transform (const gp_Trsf& T) Standard_OVERRIDE;
|
||||
|
@@ -64,7 +64,7 @@ public:
|
||||
//! Note:
|
||||
//! - Reverse assigns the result to this axis, while
|
||||
//! - Reversed creates a new one.
|
||||
Standard_EXPORT Handle(Geom2d_AxisPlacement) Reversed() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_AxisPlacement) Reversed() const;
|
||||
|
||||
//! Changes the complete definition of the axis placement.
|
||||
Standard_EXPORT void SetAxis (const gp_Ax2d& A);
|
||||
|
@@ -110,7 +110,7 @@ public:
|
||||
//! - the end point of the initial curve becomes the start
|
||||
//! point of the reversed curve.
|
||||
//! - Reversed creates a new curve.
|
||||
Standard_EXPORT Handle(Geom2d_Curve) Reversed() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Curve) Reversed() const;
|
||||
|
||||
//! Returns the value of the first parameter.
|
||||
//! Warnings :
|
||||
|
@@ -94,19 +94,19 @@ public:
|
||||
//! itself. A copy of the object is returned.
|
||||
Standard_EXPORT virtual void Transform (const gp_Trsf2d& T) = 0;
|
||||
|
||||
Standard_EXPORT Handle(Geom2d_Geometry) Mirrored (const gp_Pnt2d& P) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Mirrored (const gp_Pnt2d& P) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom2d_Geometry) Mirrored (const gp_Ax2d& A) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Mirrored (const gp_Ax2d& A) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom2d_Geometry) Rotated (const gp_Pnt2d& P, const Standard_Real Ang) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Rotated (const gp_Pnt2d& P, const Standard_Real Ang) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom2d_Geometry) Scaled (const gp_Pnt2d& P, const Standard_Real S) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Scaled (const gp_Pnt2d& P, const Standard_Real S) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom2d_Geometry) Transformed (const gp_Trsf2d& T) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Transformed (const gp_Trsf2d& T) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom2d_Geometry) Translated (const gp_Vec2d& V) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Translated (const gp_Vec2d& V) const;
|
||||
|
||||
Standard_EXPORT Handle(Geom2d_Geometry) Translated (const gp_Pnt2d& P1, const gp_Pnt2d& P2) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Translated (const gp_Pnt2d& P1, const gp_Pnt2d& P2) const;
|
||||
|
||||
Standard_EXPORT virtual Handle(Geom2d_Geometry) Copy() const = 0;
|
||||
|
||||
|
@@ -170,14 +170,15 @@ public:
|
||||
//! Computes the inverse of this transformation and creates a new one.
|
||||
//! Raises ConstructionError if the the transformation is singular. This means that
|
||||
//! the ScaleFactor is lower or equal to Resolution from package gp.
|
||||
Standard_EXPORT Handle(Geom2d_Transformation) Inverted() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Transformation) Inverted() const;
|
||||
|
||||
|
||||
//! Computes the transformation composed with Other and <me>.
|
||||
//! <me> * Other.
|
||||
//! Returns a new transformation
|
||||
Standard_EXPORT Handle(Geom2d_Transformation) Multiplied (const Handle(Geom2d_Transformation)& Other) const;
|
||||
Handle(Geom2d_Transformation) operator * (const Handle(Geom2d_Transformation)& Other) const
|
||||
Standard_EXPORT Standard_NODISCARD
|
||||
Handle(Geom2d_Transformation) Multiplied (const Handle(Geom2d_Transformation)& Other) const;
|
||||
Standard_NODISCARD Handle(Geom2d_Transformation) operator * (const Handle(Geom2d_Transformation)& Other) const
|
||||
{
|
||||
return Multiplied(Other);
|
||||
}
|
||||
|
@@ -46,7 +46,7 @@ public:
|
||||
Standard_EXPORT void Reverse();
|
||||
|
||||
//! Returns a copy of <me> reversed.
|
||||
Standard_EXPORT Handle(Geom2d_Vector) Reversed() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Vector) Reversed() const;
|
||||
|
||||
//! Computes the angular value, in radians, between this
|
||||
//! vector and vector Other. The result is a value
|
||||
|
@@ -135,8 +135,7 @@ void Geom2d_VectorWithMagnitude::Normalize () { gpVec2d.Normalize (); }
|
||||
|
||||
Handle(Geom2d_VectorWithMagnitude) Geom2d_VectorWithMagnitude::Normalized () const {
|
||||
|
||||
gp_Vec2d V = gpVec2d;
|
||||
V.Normalized ();
|
||||
gp_Vec2d V = gpVec2d.Normalized();
|
||||
return new VectorWithMagnitude (V);
|
||||
}
|
||||
|
||||
|
@@ -80,8 +80,9 @@ void operator += (const Handle(Geom2d_Vector)& Other)
|
||||
|
||||
|
||||
//! Adds the vector Other to <me>.
|
||||
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Added (const Handle(Geom2d_Vector)& Other) const;
|
||||
Handle(Geom2d_VectorWithMagnitude) operator + (const Handle(Geom2d_Vector)& Other) const
|
||||
Standard_EXPORT Standard_NODISCARD
|
||||
Handle(Geom2d_VectorWithMagnitude) Added (const Handle(Geom2d_Vector)& Other) const;
|
||||
Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator + (const Handle(Geom2d_Vector)& Other) const
|
||||
{
|
||||
return Added(Other);
|
||||
}
|
||||
@@ -104,8 +105,8 @@ void operator /= (const Standard_Real Scalar)
|
||||
|
||||
|
||||
//! Divides <me> by a scalar. A new vector is returned.
|
||||
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
||||
Handle(Geom2d_VectorWithMagnitude) operator / (const Standard_Real Scalar) const
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
||||
Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator / (const Standard_Real Scalar) const
|
||||
{
|
||||
return Divided(Scalar);
|
||||
}
|
||||
@@ -116,7 +117,7 @@ Handle(Geom2d_VectorWithMagnitude) operator / (const Standard_Real Scalar) const
|
||||
//!
|
||||
//! -C++: alias operator *
|
||||
//! Collision with same operator defined for the class Vector!
|
||||
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Multiplied (const Standard_Real Scalar) const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) Multiplied (const Standard_Real Scalar) const;
|
||||
|
||||
|
||||
//! Computes the product of the vector <me> by a scalar.
|
||||
@@ -136,7 +137,7 @@ void operator *= (const Standard_Real Scalar)
|
||||
//!
|
||||
//! Raised if the magnitude of the vector is lower or equal to
|
||||
//! Resolution from package gp.
|
||||
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Normalized() const;
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) Normalized() const;
|
||||
|
||||
//! Subtracts the Vector Other to <me>.
|
||||
Standard_EXPORT void Subtract (const Handle(Geom2d_Vector)& Other);
|
||||
@@ -147,8 +148,9 @@ void operator -= (const Handle(Geom2d_Vector)& Other)
|
||||
|
||||
|
||||
//! Subtracts the vector Other to <me>. A new vector is returned.
|
||||
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Subtracted (const Handle(Geom2d_Vector)& Other) const;
|
||||
Handle(Geom2d_VectorWithMagnitude) operator - (const Handle(Geom2d_Vector)& Other) const
|
||||
Standard_EXPORT Standard_NODISCARD
|
||||
Handle(Geom2d_VectorWithMagnitude) Subtracted (const Handle(Geom2d_Vector)& Other) const;
|
||||
Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator - (const Handle(Geom2d_Vector)& Other) const
|
||||
{
|
||||
return Subtracted(Other);
|
||||
}
|
||||
|
@@ -252,7 +252,7 @@ void GeomFill_GuideTrihedronPlan::SetCurve(const Handle(Adaptor3d_HCurve)& C)
|
||||
|
||||
Normal = n.Normalized();
|
||||
BiNormal = Tangent.Crossed(Normal);
|
||||
BiNormal.Normalized();
|
||||
BiNormal.Normalize();
|
||||
}
|
||||
else { // Erreur...
|
||||
#ifdef OCCT_DEBUG
|
||||
|
@@ -1381,7 +1381,7 @@ void GeomFill_LocationGuide::Resolution (const Standard_Integer ,
|
||||
//Function : InitX
|
||||
//Purpose : recherche par interpolation d'une valeur initiale
|
||||
//==================================================================
|
||||
void GeomFill_LocationGuide::InitX(const Standard_Real Param) const
|
||||
void GeomFill_LocationGuide::InitX(const Standard_Real Param)
|
||||
{
|
||||
|
||||
Standard_Integer Ideb = 1, Ifin = myPoles2d->RowLength(), Idemi;
|
||||
|
@@ -186,7 +186,7 @@ private:
|
||||
|
||||
Standard_EXPORT void SetRotation (const Standard_Real PrecAngle, Standard_Real& LastAngle);
|
||||
|
||||
Standard_EXPORT void InitX (const Standard_Real Param) const;
|
||||
Standard_EXPORT void InitX (const Standard_Real Param);
|
||||
|
||||
Handle(GeomFill_TrihedronWithGuide) myLaw;
|
||||
Handle(GeomFill_SectionLaw) mySec;
|
||||
|
@@ -124,7 +124,7 @@ gp_Vec GeomFill_TgtOnCoons::D1(const Standard_Real W) const
|
||||
|
||||
Standard_Real scal = tgsc.Dot(n);
|
||||
gp_Vec scaln = n.Multiplied(-scal);
|
||||
tgsc.Added(scaln);
|
||||
tgsc.Add(scaln);
|
||||
|
||||
gp_Vec scaldn = dn.Multiplied(-scal);
|
||||
|
||||
|
@@ -1,6 +1,5 @@
|
||||
GeometryTest.cxx
|
||||
GeometryTest.hxx
|
||||
GeometryTest_API2dCommands.cxx
|
||||
GeometryTest_APICommands.cxx
|
||||
GeometryTest_ConstraintCommands.cxx
|
||||
GeometryTest_ContinuityCommands.cxx
|
||||
|
@@ -14,9 +14,6 @@
|
||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||
// commercial license or contractual agreement.
|
||||
|
||||
// modified by mps (dec 96) ajout de ContinuityCommands
|
||||
// jpi 09/06/97 utilisation des commandes de GeomliteTest
|
||||
|
||||
#include <GeometryTest.hxx>
|
||||
#include <GeomliteTest.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
@@ -34,10 +31,6 @@ void GeometryTest::AllCommands(Draw_Interpretor& theCommands)
|
||||
GeometryTest::FairCurveCommands(theCommands);
|
||||
GeometryTest::SurfaceCommands(theCommands);
|
||||
GeometryTest::ConstraintCommands(theCommands);
|
||||
|
||||
// See bug #0030366
|
||||
// GeometryTest::API2dCommands(theCommands);
|
||||
|
||||
GeometryTest::APICommands(theCommands);
|
||||
GeometryTest::ContinuityCommands(theCommands);
|
||||
GeometryTest::TestProjCommands(theCommands);
|
||||
|
@@ -50,15 +50,8 @@ public:
|
||||
|
||||
//! defines cosntrained curves commands.
|
||||
Standard_EXPORT static void ConstraintCommands (Draw_Interpretor& I);
|
||||
|
||||
//! defines commands to test the Geom2dAPI
|
||||
//! - Intersection
|
||||
//! - Extrema
|
||||
//! - Projection
|
||||
//! - Approximation, interpolation
|
||||
Standard_EXPORT static void API2dCommands (Draw_Interpretor& I);
|
||||
|
||||
//! defines commands to test the Geom2dAPI
|
||||
|
||||
//! defines commands to test the GeomAPI
|
||||
//! - Intersection
|
||||
//! - Extrema
|
||||
//! - Projection
|
||||
@@ -76,27 +69,6 @@ public:
|
||||
//! defines commands to test projection of geometric objects
|
||||
Standard_EXPORT static void TestProjCommands (Draw_Interpretor& I);
|
||||
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _GeometryTest_HeaderFile
|
||||
|
@@ -1,287 +0,0 @@
|
||||
// Created on: 1995-01-11
|
||||
// Created by: Remi LEQUETTE
|
||||
// Copyright (c) 1995-1999 Matra Datavision
|
||||
// Copyright (c) 1999-2014 OPEN CASCADE SAS
|
||||
//
|
||||
// This file is part of Open CASCADE Technology software library.
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or modify it under
|
||||
// the terms of the GNU Lesser General Public License version 2.1 as published
|
||||
// by the Free Software Foundation, with special exception defined in the file
|
||||
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
|
||||
// distribution for complete text of the license and disclaimer of any warranty.
|
||||
//
|
||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||
// commercial license or contractual agreement.
|
||||
|
||||
#include <GeometryTest.hxx>
|
||||
#include <Geom2d_BSplineCurve.hxx>
|
||||
#include <Draw.hxx>
|
||||
#include <Draw_Interpretor.hxx>
|
||||
#include <DrawTrSurf.hxx>
|
||||
#include <Draw_Appli.hxx>
|
||||
#include <DrawTrSurf_Curve2d.hxx>
|
||||
#include <Geom2dAPI_ProjectPointOnCurve.hxx>
|
||||
#include <Geom2dAPI_ExtremaCurveCurve.hxx>
|
||||
#include <Geom2dAPI_PointsToBSpline.hxx>
|
||||
#include <Geom2dAPI_InterCurveCurve.hxx>
|
||||
#include <Geom2d_Line.hxx>
|
||||
#include <Geom2d_TrimmedCurve.hxx>
|
||||
#include <TColgp_Array1OfPnt2d.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <Draw_Marker2D.hxx>
|
||||
#include <Draw_Color.hxx>
|
||||
#include <Draw_MarkerShape.hxx>
|
||||
#include <TColStd_Array1OfReal.hxx>
|
||||
#include <GeomAbs_Shape.hxx>
|
||||
|
||||
#include <stdio.h>
|
||||
#ifdef _WIN32
|
||||
Standard_IMPORT Draw_Viewer dout;
|
||||
#endif
|
||||
|
||||
//=======================================================================
|
||||
//function : proj
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
static Standard_Integer proj (Draw_Interpretor& di, Standard_Integer n, const char** a)
|
||||
{
|
||||
if ( n < 4) return 1;
|
||||
|
||||
gp_Pnt2d P(Draw::Atof(a[2]),Draw::Atof(a[3]));
|
||||
|
||||
char name[100];
|
||||
|
||||
Handle(Geom2d_Curve) GC = DrawTrSurf::GetCurve2d(a[1]);
|
||||
|
||||
if (GC.IsNull())
|
||||
return 1;
|
||||
|
||||
Geom2dAPI_ProjectPointOnCurve proj(P,GC,GC->FirstParameter(),
|
||||
GC->LastParameter());
|
||||
|
||||
for ( Standard_Integer i = 1; i <= proj.NbPoints(); i++) {
|
||||
gp_Pnt2d P1 = proj.Point(i);
|
||||
Handle(Geom2d_Line) L = new Geom2d_Line(P,gp_Vec2d(P,P1));
|
||||
Handle(Geom2d_TrimmedCurve) CT =
|
||||
new Geom2d_TrimmedCurve(L, 0., P.Distance(P1));
|
||||
Sprintf(name,"%s%d","ext_",i);
|
||||
char* temp = name; // portage WNT
|
||||
DrawTrSurf::Set(temp, CT);
|
||||
di << name << " ";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : appro
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
static Standard_Integer appro(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
||||
{
|
||||
// Approximation et interpolation 2d
|
||||
|
||||
// 2dappro
|
||||
// - affiche la tolerance
|
||||
// 2dappro tol
|
||||
// - change la tolerance
|
||||
// 2dappro result nbpoint
|
||||
// - saisie interactive
|
||||
// 2dappro result nbpoint curve
|
||||
// - calcule des points sur la courbe
|
||||
// 2dappro result nbpoint x1 y1 x2 y2 ..
|
||||
// - tableau de points
|
||||
// 2dappro result nbpoint x1 dx y1 y2 ..
|
||||
// - tableau de points (x1,y1) (x1+dx,y2) ... avec x = t
|
||||
|
||||
|
||||
static Standard_Real Tol2d = 1.e-6;
|
||||
|
||||
if (n < 3) {
|
||||
if (n == 2)
|
||||
Tol2d = Draw::Atof(a[1]);
|
||||
|
||||
di << "Tolerance for 2d approx : "<< Tol2d << "\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Standard_Integer i, Nb = Draw::Atoi(a[2]);
|
||||
|
||||
Standard_Boolean hasPoints = Standard_True;
|
||||
TColgp_Array1OfPnt2d Points(1, Nb);
|
||||
TColStd_Array1OfReal YValues(1,Nb);
|
||||
Standard_Real X0=0,DX=0;
|
||||
|
||||
Handle(Draw_Marker2D) mark;
|
||||
|
||||
if (n == 3) {
|
||||
// saisie interactive
|
||||
Standard_Integer id,XX,YY,b;
|
||||
dout.Select(id,XX,YY,b);
|
||||
Standard_Real zoom = dout.Zoom(id);
|
||||
|
||||
Points(1) = gp_Pnt2d( ((Standard_Real)XX)/zoom,
|
||||
((Standard_Real)YY)/zoom );
|
||||
|
||||
mark = new Draw_Marker2D( Points(1), Draw_X, Draw_vert);
|
||||
|
||||
dout << mark;
|
||||
|
||||
for (Standard_Integer j = 2; j<=Nb; j++) {
|
||||
dout.Select(id,XX,YY,b);
|
||||
Points(j) = gp_Pnt2d( ((Standard_Real)XX)/zoom,
|
||||
((Standard_Real)YY)/zoom );
|
||||
mark = new Draw_Marker2D( Points(j), Draw_X, Draw_vert);
|
||||
dout << mark;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( n == 4) {
|
||||
// points sur courbe
|
||||
Handle(Geom2d_Curve) GC = DrawTrSurf::GetCurve2d(a[3]);
|
||||
if ( GC.IsNull())
|
||||
return 1;
|
||||
|
||||
Standard_Real U, U1, U2;
|
||||
U1 = GC->FirstParameter();
|
||||
U2 = GC->LastParameter();
|
||||
Standard_Real Delta = ( U2 - U1) / (Nb-1);
|
||||
for ( i = 1 ; i <= Nb; i++) {
|
||||
U = U1 + (i-1) * Delta;
|
||||
Points(i) = GC->Value(U);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
// test points ou ordonnees
|
||||
hasPoints = Standard_False;
|
||||
Standard_Integer nc = n - 3;
|
||||
if (nc == 2 * Nb) {
|
||||
// points
|
||||
nc = 3;
|
||||
for (i = 1; i <= Nb; i++) {
|
||||
Points(i).SetCoord(Draw::Atof(a[nc]),Draw::Atof(a[nc+1]));
|
||||
nc += 2;
|
||||
}
|
||||
}
|
||||
else if (nc - 2 == Nb) {
|
||||
// YValues
|
||||
nc = 5;
|
||||
X0 = Draw::Atof(a[3]);
|
||||
DX = Draw::Atof(a[4]);
|
||||
for (i = 1; i <= Nb; i++) {
|
||||
YValues(i) = Draw::Atof(a[nc]);
|
||||
Points(i).SetCoord(X0+(i-1)*DX,YValues(i));
|
||||
nc++;
|
||||
}
|
||||
}
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
// display the points
|
||||
for ( i = 1 ; i <= Nb; i++) {
|
||||
mark = new Draw_Marker2D( Points(i), Draw_X, Draw_vert);
|
||||
dout << mark;
|
||||
}
|
||||
}
|
||||
dout.Flush();
|
||||
Standard_Integer Dmin = 3;
|
||||
Standard_Integer Dmax = 8;
|
||||
|
||||
Handle(Geom2d_BSplineCurve) TheCurve;
|
||||
if (hasPoints)
|
||||
TheCurve = Geom2dAPI_PointsToBSpline(Points,Dmin,Dmax,GeomAbs_C2,Tol2d);
|
||||
else
|
||||
TheCurve = Geom2dAPI_PointsToBSpline(YValues,X0,DX,Dmin,Dmax,GeomAbs_C2,Tol2d);
|
||||
|
||||
DrawTrSurf::Set(a[1], TheCurve);
|
||||
di << a[1];
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : intersect
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
static Standard_Integer intersect(Draw_Interpretor& /*di*/, Standard_Integer n, const char** a)
|
||||
{
|
||||
if( n < 2)
|
||||
return 1;
|
||||
|
||||
Handle(Geom2d_Curve) C1 = DrawTrSurf::GetCurve2d(a[1]);
|
||||
if ( C1.IsNull())
|
||||
return 1;
|
||||
|
||||
Standard_Real Tol = 0.001;
|
||||
Geom2dAPI_InterCurveCurve Intersector;
|
||||
|
||||
Handle(Geom2d_Curve) C2;
|
||||
if ( n == 3) {
|
||||
C2 = DrawTrSurf::GetCurve2d(a[2]);
|
||||
if ( C2.IsNull())
|
||||
return 1;
|
||||
Intersector.Init(C1,C2,Tol);
|
||||
}
|
||||
else {
|
||||
Intersector.Init(C1, Tol);
|
||||
}
|
||||
|
||||
Standard_Integer i;
|
||||
|
||||
for ( i = 1; i <= Intersector.NbPoints(); i++) {
|
||||
gp_Pnt2d P = Intersector.Point(i);
|
||||
Handle(Draw_Marker2D) mark = new Draw_Marker2D( P, Draw_X, Draw_vert);
|
||||
dout << mark;
|
||||
}
|
||||
dout.Flush();
|
||||
|
||||
Handle(Geom2d_Curve) S1,S2;
|
||||
Handle(DrawTrSurf_Curve2d) CD;
|
||||
if ( n == 3) {
|
||||
for ( i = 1; i <= Intersector.NbSegments(); i++) {
|
||||
Intersector.Segment(i,S1,S2);
|
||||
CD = new DrawTrSurf_Curve2d(S1, Draw_bleu, 30);
|
||||
dout << CD;
|
||||
CD = new DrawTrSurf_Curve2d(S2, Draw_violet, 30);
|
||||
dout << CD;
|
||||
}
|
||||
}
|
||||
dout.Flush();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void GeometryTest::API2dCommands(Draw_Interpretor& theCommands)
|
||||
{
|
||||
static Standard_Boolean done = Standard_False;
|
||||
if (done) return;
|
||||
|
||||
const char *g;
|
||||
|
||||
done = Standard_True;
|
||||
g = "GEOMETRY curves and surfaces analysis";
|
||||
|
||||
theCommands.Add("2dproj", "proj curve x y",__FILE__, proj,g);
|
||||
|
||||
g = "GEOMETRY approximations";
|
||||
|
||||
theCommands.Add("2dapprox", "2dapprox result nbpoint [curve] [[x] y [x] y...]",__FILE__,
|
||||
appro,g);
|
||||
theCommands.Add("2dinterpole", "2dinterpole result nbpoint [curve] [[x] y [x] y ...]",__FILE__,
|
||||
appro,g);
|
||||
|
||||
g = "GEOMETRY curves and surfaces analysis";
|
||||
|
||||
g = "GEOMETRY intersections";
|
||||
|
||||
theCommands.Add("2dintersect", "intersect curve curve",__FILE__,
|
||||
intersect,g);
|
||||
}
|
@@ -11,6 +11,8 @@ Graphic3d_ArrayOfSegments.hxx
|
||||
Graphic3d_ArrayOfTriangleFans.hxx
|
||||
Graphic3d_ArrayOfTriangles.hxx
|
||||
Graphic3d_ArrayOfTriangleStrips.hxx
|
||||
Graphic3d_Aspects.cxx
|
||||
Graphic3d_Aspects.hxx
|
||||
Graphic3d_AspectFillArea3d.cxx
|
||||
Graphic3d_AspectFillArea3d.hxx
|
||||
Graphic3d_AspectLine3d.cxx
|
||||
@@ -19,7 +21,6 @@ Graphic3d_AspectMarker3d.cxx
|
||||
Graphic3d_AspectMarker3d.hxx
|
||||
Graphic3d_AspectText3d.cxx
|
||||
Graphic3d_AspectText3d.hxx
|
||||
Graphic3d_AspectTextDefinitionError.hxx
|
||||
Graphic3d_AttribBuffer.cxx
|
||||
Graphic3d_AttribBuffer.hxx
|
||||
Graphic3d_BndBox3d.hxx
|
||||
@@ -73,6 +74,7 @@ Graphic3d_IndexedMapOfAddress.hxx
|
||||
Graphic3d_LevelOfTextureAnisotropy.hxx
|
||||
Graphic3d_LightSet.cxx
|
||||
Graphic3d_LightSet.hxx
|
||||
Graphic3d_MapOfAspectsToAspects.hxx
|
||||
Graphic3d_MapIteratorOfMapOfStructure.hxx
|
||||
Graphic3d_MapOfObject.hxx
|
||||
Graphic3d_MapOfStructure.hxx
|
||||
|
@@ -15,29 +15,15 @@
|
||||
|
||||
#include <Graphic3d_AspectFillArea3d.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Standard_Transient)
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Graphic3d_Aspects)
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectFillArea3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_AspectFillArea3d::Graphic3d_AspectFillArea3d()
|
||||
: myInteriorColor (Quantity_NOC_CYAN1),
|
||||
myBackInteriorColor (Quantity_NOC_CYAN1),
|
||||
myEdgeColor (Quantity_NOC_WHITE),
|
||||
myInteriorStyle (Aspect_IS_EMPTY),
|
||||
myShadingModel (Graphic3d_TOSM_DEFAULT),
|
||||
myAlphaMode (Graphic3d_AlphaMode_BlendAuto),
|
||||
myAlphaCutoff (0.5f),
|
||||
myEdgeType (Aspect_TOL_SOLID),
|
||||
myEdgeWidth (1.0f),
|
||||
myHatchStyle (Handle(Graphic3d_HatchStyle)()),
|
||||
myToDistinguishMaterials (false),
|
||||
myToDrawEdges (false),
|
||||
myToSuppressBackFaces (true),
|
||||
myToMapTexture (false)
|
||||
{
|
||||
//
|
||||
myInteriorStyle = Aspect_IS_EMPTY;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
@@ -51,40 +37,13 @@ Graphic3d_AspectFillArea3d::Graphic3d_AspectFillArea3d (const Aspect_InteriorSty
|
||||
const Standard_Real theEdgeLineWidth,
|
||||
const Graphic3d_MaterialAspect& theFrontMaterial,
|
||||
const Graphic3d_MaterialAspect& theBackMaterial)
|
||||
: myFrontMaterial (theFrontMaterial),
|
||||
myBackMaterial (theBackMaterial),
|
||||
myInteriorColor (theInteriorColor),
|
||||
myBackInteriorColor (theInteriorColor),
|
||||
myEdgeColor (theEdgeColor),
|
||||
myInteriorStyle (theInteriorStyle),
|
||||
myShadingModel (Graphic3d_TOSM_DEFAULT),
|
||||
myAlphaMode (Graphic3d_AlphaMode_BlendAuto),
|
||||
myAlphaCutoff (0.5f),
|
||||
myEdgeType (theEdgeLineType),
|
||||
myEdgeWidth ((float )theEdgeLineWidth),
|
||||
myHatchStyle (Handle(Graphic3d_HatchStyle)()),
|
||||
myToDistinguishMaterials (false),
|
||||
myToDrawEdges (false),
|
||||
myToSuppressBackFaces (true),
|
||||
myToMapTexture (false)
|
||||
{
|
||||
if (theEdgeLineWidth <= 0.0)
|
||||
{
|
||||
throw Aspect_AspectFillAreaDefinitionError("Bad value for EdgeLineWidth");
|
||||
}
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectFillArea3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
void Graphic3d_AspectFillArea3d::SetTextureMap (const Handle(Graphic3d_TextureMap)& theTexture)
|
||||
{
|
||||
if (theTexture.IsNull())
|
||||
{
|
||||
myTextureSet.Nullify();
|
||||
return;
|
||||
}
|
||||
|
||||
myTextureSet = new Graphic3d_TextureSet (theTexture);
|
||||
myFrontMaterial = theFrontMaterial;
|
||||
myBackMaterial = theBackMaterial;
|
||||
myInteriorColor.SetRGB (theInteriorColor);
|
||||
myBackInteriorColor.SetRGB (theInteriorColor);
|
||||
myEdgeColor.SetRGB (theEdgeColor);
|
||||
myInteriorStyle = theInteriorStyle;
|
||||
myLineType = theEdgeLineType;
|
||||
SetEdgeWidth ((float )theEdgeLineWidth);
|
||||
}
|
||||
|
@@ -17,30 +17,12 @@
|
||||
#ifndef _Graphic3d_AspectFillArea3d_HeaderFile
|
||||
#define _Graphic3d_AspectFillArea3d_HeaderFile
|
||||
|
||||
#include <Aspect_AspectFillAreaDefinitionError.hxx>
|
||||
#include <Aspect_PolygonOffsetMode.hxx>
|
||||
#include <Aspect_InteriorStyle.hxx>
|
||||
#include <Aspect_TypeOfLine.hxx>
|
||||
#include <Graphic3d_AlphaMode.hxx>
|
||||
#include <Graphic3d_HatchStyle.hxx>
|
||||
#include <Graphic3d_MaterialAspect.hxx>
|
||||
#include <Graphic3d_PolygonOffset.hxx>
|
||||
#include <Graphic3d_ShaderProgram.hxx>
|
||||
#include <Graphic3d_TextureMap.hxx>
|
||||
#include <Graphic3d_TextureSet.hxx>
|
||||
#include <Graphic3d_TypeOfShadingModel.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <Standard_ShortReal.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <Quantity_ColorRGBA.hxx>
|
||||
#include <Graphic3d_Aspects.hxx>
|
||||
|
||||
//! This class defines graphic attributes for opaque 3d primitives (polygons, triangles, quadrilaterals).
|
||||
class Graphic3d_AspectFillArea3d : public Standard_Transient
|
||||
class Graphic3d_AspectFillArea3d : public Graphic3d_Aspects
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Standard_Transient)
|
||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Graphic3d_Aspects)
|
||||
public:
|
||||
|
||||
//! Creates a context table for fill area primitives defined with the following default values:
|
||||
@@ -73,310 +55,13 @@ public:
|
||||
const Graphic3d_MaterialAspect& theFrontMaterial,
|
||||
const Graphic3d_MaterialAspect& theBackMaterial);
|
||||
|
||||
//! Return interior rendering style (Aspect_IS_EMPTY by default, which means nothing will be rendered!).
|
||||
Aspect_InteriorStyle InteriorStyle() const { return myInteriorStyle; }
|
||||
|
||||
//! Modifies the interior type used for rendering
|
||||
void SetInteriorStyle (const Aspect_InteriorStyle theStyle) { myInteriorStyle = theStyle; }
|
||||
|
||||
//! Returns shading model (Graphic3d_TOSM_DEFAULT by default, which means that Shading Model set as default for entire Viewer will be used)
|
||||
Graphic3d_TypeOfShadingModel ShadingModel() const { return myShadingModel; }
|
||||
|
||||
//! Sets shading model
|
||||
void SetShadingModel (const Graphic3d_TypeOfShadingModel theShadingModel) { myShadingModel = theShadingModel; }
|
||||
|
||||
//! Returns the way how alpha value should be treated (Graphic3d_AlphaMode_BlendAuto by default, for backward compatibility).
|
||||
Graphic3d_AlphaMode AlphaMode() const { return myAlphaMode; }
|
||||
|
||||
//! Returns alpha cutoff threshold, for discarding fragments within Graphic3d_AlphaMode_Mask mode (0.5 by default).
|
||||
//! If the alpha value is greater than or equal to this value then it is rendered as fully opaque, otherwise, it is rendered as fully transparent.
|
||||
Standard_ShortReal AlphaCutoff() const { return myAlphaCutoff; }
|
||||
|
||||
//! Defines the way how alpha value should be treated.
|
||||
void SetAlphaMode (Graphic3d_AlphaMode theMode, Standard_ShortReal theAlphaCutoff = 0.5f)
|
||||
{
|
||||
myAlphaMode = theMode;
|
||||
myAlphaCutoff = theAlphaCutoff;
|
||||
}
|
||||
|
||||
//! Return interior color.
|
||||
const Quantity_Color& InteriorColor() const { return myInteriorColor.GetRGB(); }
|
||||
|
||||
//! Return interior color.
|
||||
const Quantity_ColorRGBA& InteriorColorRGBA() const { return myInteriorColor; }
|
||||
|
||||
//! Modifies the color of the interior of the face
|
||||
void SetInteriorColor (const Quantity_Color& theColor) { myInteriorColor.SetRGB (theColor); }
|
||||
|
||||
//! Modifies the color of the interior of the face
|
||||
void SetInteriorColor (const Quantity_ColorRGBA& theColor) { myInteriorColor = theColor; }
|
||||
|
||||
//! Return back interior color.
|
||||
const Quantity_Color& BackInteriorColor() const { return myBackInteriorColor.GetRGB(); }
|
||||
|
||||
//! Return back interior color.
|
||||
const Quantity_ColorRGBA& BackInteriorColorRGBA() const { return myBackInteriorColor; }
|
||||
|
||||
//! Modifies the color of the interior of the back face
|
||||
void SetBackInteriorColor (const Quantity_Color& theColor) { myBackInteriorColor.SetRGB (theColor); }
|
||||
|
||||
//! Modifies the color of the interior of the back face
|
||||
void SetBackInteriorColor (const Quantity_ColorRGBA& theColor) { myBackInteriorColor = theColor; }
|
||||
|
||||
//! Returns the surface material of external faces
|
||||
const Graphic3d_MaterialAspect& FrontMaterial() const { return myFrontMaterial; }
|
||||
|
||||
//! Returns the surface material of external faces
|
||||
Graphic3d_MaterialAspect& ChangeFrontMaterial() { return myFrontMaterial; }
|
||||
|
||||
//! Modifies the surface material of external faces
|
||||
void SetFrontMaterial (const Graphic3d_MaterialAspect& theMaterial) { myFrontMaterial = theMaterial; }
|
||||
|
||||
//! Returns the surface material of internal faces
|
||||
const Graphic3d_MaterialAspect& BackMaterial() const { return myBackMaterial; }
|
||||
|
||||
//! Returns the surface material of internal faces
|
||||
Graphic3d_MaterialAspect& ChangeBackMaterial() { return myBackMaterial; }
|
||||
|
||||
//! Modifies the surface material of internal faces
|
||||
void SetBackMaterial (const Graphic3d_MaterialAspect& theMaterial) { myBackMaterial = theMaterial; }
|
||||
|
||||
//! Returns true if back faces should be suppressed (true by default).
|
||||
bool ToSuppressBackFaces() const { return myToSuppressBackFaces; }
|
||||
|
||||
//! Assign back faces culling flag.
|
||||
void SetSuppressBackFaces (bool theToSuppress) { myToSuppressBackFaces = theToSuppress; }
|
||||
|
||||
//! Returns true if back faces should be suppressed (true by default).
|
||||
bool BackFace() const { return myToSuppressBackFaces; }
|
||||
|
||||
//! Allows the display of back-facing filled polygons.
|
||||
void AllowBackFace() { myToSuppressBackFaces = false; }
|
||||
|
||||
//! Suppress the display of back-facing filled polygons.
|
||||
//! A back-facing polygon is defined as a polygon whose
|
||||
//! vertices are in a clockwise order with respect to screen coordinates.
|
||||
void SuppressBackFace() { myToSuppressBackFaces = true; }
|
||||
|
||||
//! Returns true if material properties should be distinguished for back and front faces (false by default).
|
||||
bool Distinguish() const { return myToDistinguishMaterials; }
|
||||
|
||||
//! Set material distinction between front and back faces.
|
||||
void SetDistinguish (bool toDistinguish) { myToDistinguishMaterials = toDistinguish; }
|
||||
|
||||
//! Allows material distinction between front and back faces.
|
||||
void SetDistinguishOn() { myToDistinguishMaterials = true; }
|
||||
|
||||
//! Forbids material distinction between front and back faces.
|
||||
void SetDistinguishOff() { myToDistinguishMaterials = false; }
|
||||
|
||||
//! Return shader program.
|
||||
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
||||
|
||||
//! Sets up OpenGL/GLSL shader program.
|
||||
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
||||
|
||||
//! Return texture array to be mapped.
|
||||
const Handle(Graphic3d_TextureSet)& TextureSet() const { return myTextureSet; }
|
||||
|
||||
//! Setup texture array to be mapped.
|
||||
void SetTextureSet (const Handle(Graphic3d_TextureSet)& theTextures) { myTextureSet = theTextures; }
|
||||
|
||||
//! Return texture to be mapped.
|
||||
//Standard_DEPRECATED("Deprecated method, TextureSet() should be used instead")
|
||||
Handle(Graphic3d_TextureMap) TextureMap() const
|
||||
{
|
||||
return !myTextureSet.IsNull() && !myTextureSet->IsEmpty()
|
||||
? myTextureSet->First()
|
||||
: Handle(Graphic3d_TextureMap)();
|
||||
}
|
||||
|
||||
//! Assign texture to be mapped.
|
||||
//! See also SetTextureMapOn() to actually activate texture mapping.
|
||||
//Standard_DEPRECATED("Deprecated method, SetTextureSet() should be used instead")
|
||||
Standard_EXPORT void SetTextureMap (const Handle(Graphic3d_TextureMap)& theTexture);
|
||||
|
||||
//! Return true if texture mapping is enabled (false by default).
|
||||
bool ToMapTexture() const { return myToMapTexture; }
|
||||
|
||||
//! Return true if texture mapping is enabled (false by default).
|
||||
bool TextureMapState() const { return myToMapTexture; }
|
||||
|
||||
//! Enable or disable texture mapping (has no effect if texture is not set).
|
||||
void SetTextureMapOn (bool theToMap) { myToMapTexture = theToMap; }
|
||||
|
||||
//! Enable texture mapping (has no effect if texture is not set).
|
||||
void SetTextureMapOn() { myToMapTexture = true; }
|
||||
|
||||
//! Disable texture mapping.
|
||||
void SetTextureMapOff() { myToMapTexture = false; }
|
||||
|
||||
//! Returns current polygon offsets settings.
|
||||
const Graphic3d_PolygonOffset& PolygonOffset() const { return myPolygonOffset; }
|
||||
|
||||
//! Sets polygon offsets settings.
|
||||
void SetPolygonOffset (const Graphic3d_PolygonOffset& theOffset) { myPolygonOffset = theOffset; }
|
||||
|
||||
//! Returns current polygon offsets settings.
|
||||
void PolygonOffsets (Standard_Integer& theMode,
|
||||
Standard_ShortReal& theFactor,
|
||||
Standard_ShortReal& theUnits) const
|
||||
{
|
||||
theMode = myPolygonOffset.Mode;
|
||||
theFactor = myPolygonOffset.Factor;
|
||||
theUnits = myPolygonOffset.Units;
|
||||
}
|
||||
|
||||
//! Sets up OpenGL polygon offsets mechanism.
|
||||
//! <aMode> parameter can contain various combinations of
|
||||
//! Aspect_PolygonOffsetMode enumeration elements (Aspect_POM_None means
|
||||
//! that polygon offsets are not changed).
|
||||
//! If <aMode> is different from Aspect_POM_Off and Aspect_POM_None, then <aFactor> and <aUnits>
|
||||
//! arguments are used by graphic renderer to calculate a depth offset value:
|
||||
//!
|
||||
//! offset = <aFactor> * m + <aUnits> * r, where
|
||||
//! m - maximum depth slope for the polygon currently being displayed,
|
||||
//! r - minimum window coordinates depth resolution (implementation-specific)
|
||||
//!
|
||||
//! Default settings for OCC 3D viewer: mode = Aspect_POM_Fill, factor = 1., units = 0.
|
||||
//!
|
||||
//! Negative offset values move polygons closer to the viewport,
|
||||
//! while positive values shift polygons away.
|
||||
//! Consult OpenGL reference for details (glPolygonOffset function description).
|
||||
void SetPolygonOffsets (const Standard_Integer theMode,
|
||||
const Standard_ShortReal theFactor = 1.0f,
|
||||
const Standard_ShortReal theUnits = 0.0f)
|
||||
{
|
||||
myPolygonOffset.Mode = (Aspect_PolygonOffsetMode )(theMode & Aspect_POM_Mask);
|
||||
myPolygonOffset.Factor = theFactor;
|
||||
myPolygonOffset.Units = theUnits;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
//! Returns true if edges should be drawn (false by default).
|
||||
bool ToDrawEdges() const { return myToDrawEdges; }
|
||||
|
||||
//! Set if edges should be drawn or not.
|
||||
void SetDrawEdges (bool theToDraw) { myToDrawEdges = theToDraw; }
|
||||
|
||||
//! Returns true if edges should be drawn.
|
||||
bool Edge() const { return myToDrawEdges; }
|
||||
|
||||
//! The edges of FillAreas are drawn.
|
||||
void SetEdgeOn() { myToDrawEdges = true; }
|
||||
|
||||
//! The edges of FillAreas are not drawn.
|
||||
void SetEdgeOff() { myToDrawEdges = false; }
|
||||
|
||||
//! Return color of edges.
|
||||
const Quantity_Color& EdgeColor() const { return myEdgeColor.GetRGB(); }
|
||||
|
||||
//! Return color of edges.
|
||||
const Quantity_ColorRGBA& EdgeColorRGBA() const { return myEdgeColor; }
|
||||
|
||||
//! Modifies the color of the edge of the face
|
||||
void SetEdgeColor (const Quantity_Color& theColor) { myEdgeColor.SetRGB (theColor); }
|
||||
|
||||
//! Return edges line type.
|
||||
Aspect_TypeOfLine EdgeLineType() const { return myEdgeType; }
|
||||
|
||||
//! Modifies the edge line type
|
||||
void SetEdgeLineType (const Aspect_TypeOfLine theType) { myEdgeType = theType; }
|
||||
|
||||
//! Return width for edges in pixels.
|
||||
Standard_ShortReal EdgeWidth() const { return myEdgeWidth; }
|
||||
|
||||
//! Modifies the edge thickness
|
||||
//! Warning: Raises AspectFillAreaDefinitionError if the width is a negative value.
|
||||
void SetEdgeWidth (const Standard_Real theWidth)
|
||||
{
|
||||
if (theWidth <= 0.0)
|
||||
{
|
||||
throw Aspect_AspectFillAreaDefinitionError("Bad value for EdgeLineWidth");
|
||||
}
|
||||
myEdgeWidth = (float )theWidth;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
//! Returns the hatch type used when InteriorStyle is IS_HATCH
|
||||
const Handle(Graphic3d_HatchStyle)& HatchStyle() const { return myHatchStyle; }
|
||||
|
||||
//! Modifies the hatch type used when InteriorStyle is IS_HATCH
|
||||
void SetHatchStyle (const Handle(Graphic3d_HatchStyle)& theStyle) { myHatchStyle = theStyle; }
|
||||
|
||||
//! Modifies the hatch type used when InteriorStyle is IS_HATCH
|
||||
//! @warning This method always creates a new handle for a given hatch style
|
||||
void SetHatchStyle (const Aspect_HatchStyle theStyle)
|
||||
{
|
||||
if (theStyle == Aspect_HS_SOLID)
|
||||
{
|
||||
myHatchStyle.Nullify();
|
||||
return;
|
||||
}
|
||||
|
||||
myHatchStyle = new Graphic3d_HatchStyle (theStyle);
|
||||
}
|
||||
|
||||
//! Returns the current values.
|
||||
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||
void Values (Aspect_InteriorStyle& theStyle,
|
||||
Quantity_Color& theIntColor,
|
||||
Quantity_Color& theEdgeColor,
|
||||
Aspect_TypeOfLine& theType,
|
||||
Standard_Real& theWidth) const
|
||||
{
|
||||
theStyle = myInteriorStyle;
|
||||
theIntColor = myInteriorColor.GetRGB();
|
||||
theEdgeColor= myEdgeColor.GetRGB();
|
||||
theType = myEdgeType;
|
||||
theWidth = myEdgeWidth;
|
||||
}
|
||||
|
||||
//! Returns the current values.
|
||||
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||
void Values (Aspect_InteriorStyle& theStyle,
|
||||
Quantity_Color& theIntColor,
|
||||
Quantity_Color& theBackIntColor,
|
||||
Quantity_Color& theEdgeColor,
|
||||
Aspect_TypeOfLine& theType,
|
||||
Standard_Real& theWidth) const
|
||||
{
|
||||
theStyle = myInteriorStyle;
|
||||
theIntColor = myInteriorColor.GetRGB();
|
||||
theBackIntColor= myBackInteriorColor.GetRGB();
|
||||
theEdgeColor = myEdgeColor.GetRGB();
|
||||
theType = myEdgeType;
|
||||
theWidth = myEdgeWidth;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
Handle(Graphic3d_ShaderProgram) myProgram;
|
||||
Handle(Graphic3d_TextureSet) myTextureSet;
|
||||
Graphic3d_MaterialAspect myFrontMaterial;
|
||||
Graphic3d_MaterialAspect myBackMaterial;
|
||||
|
||||
Quantity_ColorRGBA myInteriorColor;
|
||||
Quantity_ColorRGBA myBackInteriorColor;
|
||||
Quantity_ColorRGBA myEdgeColor;
|
||||
Aspect_InteriorStyle myInteriorStyle;
|
||||
Graphic3d_TypeOfShadingModel myShadingModel;
|
||||
Graphic3d_AlphaMode myAlphaMode;
|
||||
Standard_ShortReal myAlphaCutoff;
|
||||
Aspect_TypeOfLine myEdgeType;
|
||||
Standard_ShortReal myEdgeWidth;
|
||||
Handle(Graphic3d_HatchStyle) myHatchStyle;
|
||||
|
||||
Graphic3d_PolygonOffset myPolygonOffset;
|
||||
bool myToDistinguishMaterials;
|
||||
bool myToDrawEdges;
|
||||
bool myToSuppressBackFaces;
|
||||
bool myToMapTexture;
|
||||
Standard_DEPRECATED("Deprecated method, ToDrawEdges() should be used instead")
|
||||
bool Edge() const { return ToDrawEdges(); }
|
||||
|
||||
};
|
||||
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectFillArea3d, Standard_Transient)
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectFillArea3d, Graphic3d_Aspects)
|
||||
|
||||
#endif // _Graphic3d_AspectFillArea3d_HeaderFile
|
||||
|
@@ -15,33 +15,30 @@
|
||||
|
||||
#include <Graphic3d_AspectLine3d.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Standard_Transient)
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Graphic3d_Aspects)
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectLine3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_AspectLine3d::Graphic3d_AspectLine3d()
|
||||
: myColor (Quantity_NOC_YELLOW),
|
||||
myType (Aspect_TOL_SOLID),
|
||||
myWidth (1.0f)
|
||||
{
|
||||
//
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myInteriorColor.SetRGB (Quantity_NOC_YELLOW);
|
||||
myLineType = Aspect_TOL_SOLID;
|
||||
myLineWidth = 1.0f;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectLine3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_AspectLine3d::Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||
const Aspect_TypeOfLine theType,
|
||||
const Standard_Real theWidth)
|
||||
: myColor (theColor),
|
||||
myType (theType),
|
||||
myWidth ((float )theWidth)
|
||||
Graphic3d_AspectLine3d::Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||
Aspect_TypeOfLine theType,
|
||||
Standard_Real theWidth)
|
||||
{
|
||||
if (myWidth <= 0.0f)
|
||||
{
|
||||
throw Aspect_AspectLineDefinitionError("Graphic3d_AspectLine3d, Bad value for LineWidth");
|
||||
}
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myInteriorColor.SetRGB (theColor);
|
||||
myLineType = theType;
|
||||
SetLineWidth ((float)theWidth);
|
||||
}
|
||||
|
@@ -16,19 +16,13 @@
|
||||
#ifndef _Graphic3d_AspectLine3d_HeaderFile
|
||||
#define _Graphic3d_AspectLine3d_HeaderFile
|
||||
|
||||
#include <Aspect_AspectLineDefinitionError.hxx>
|
||||
#include <Aspect_TypeOfLine.hxx>
|
||||
#include <Graphic3d_ShaderProgram.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <Quantity_ColorRGBA.hxx>
|
||||
#include <Graphic3d_Aspects.hxx>
|
||||
|
||||
//! Creates and updates a group of attributes for 3d line primitives.
|
||||
//! This group contains the color, the type of line, and its thickness.
|
||||
class Graphic3d_AspectLine3d : public Standard_Transient
|
||||
class Graphic3d_AspectLine3d : public Graphic3d_Aspects
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Standard_Transient)
|
||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Graphic3d_Aspects)
|
||||
public:
|
||||
|
||||
//! Creates a context table for line primitives
|
||||
@@ -44,85 +38,32 @@ public:
|
||||
//! The nominal line width is 1 pixel.
|
||||
//! The width of the line is determined by applying the line width scale factor to this nominal line width.
|
||||
//! The supported line widths vary by 1-pixel units.
|
||||
Standard_EXPORT Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||
const Aspect_TypeOfLine theType,
|
||||
const Standard_Real theWidth);
|
||||
|
||||
//! Return color.
|
||||
const Quantity_ColorRGBA& ColorRGBA() const { return myColor; }
|
||||
|
||||
//! Return color.
|
||||
const Quantity_Color& Color() const { return myColor.GetRGB(); }
|
||||
|
||||
//! Modifies the color.
|
||||
void SetColor (const Quantity_Color& theColor) { myColor.SetRGB (theColor); }
|
||||
Standard_EXPORT Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||
Aspect_TypeOfLine theType,
|
||||
Standard_Real theWidth);
|
||||
|
||||
//! Return line type.
|
||||
Aspect_TypeOfLine Type() const { return myType; }
|
||||
Aspect_TypeOfLine Type() const { return myLineType; }
|
||||
|
||||
//! Modifies the type of line.
|
||||
void SetType (const Aspect_TypeOfLine theType) { myType = theType; }
|
||||
void SetType (const Aspect_TypeOfLine theType) { myLineType = theType; }
|
||||
|
||||
//! Return line width.
|
||||
Standard_ShortReal Width() const { return myWidth; }
|
||||
Standard_ShortReal Width() const { return myLineWidth; }
|
||||
|
||||
//! Modifies the line thickness.
|
||||
//! Warning: Raises AspectLineDefinitionError if the width is a negative value.
|
||||
//! Warning: Raises Standard_OutOfRange if the width is a negative value.
|
||||
void SetWidth (const Standard_Real theWidth) { SetWidth ((float )theWidth); }
|
||||
|
||||
//! Modifies the line thickness.
|
||||
//! Warning: Raises AspectLineDefinitionError if the width is a negative value.
|
||||
void SetWidth (const Standard_ShortReal theWidth)
|
||||
//! Warning: Raises Standard_OutOfRange if the width is a negative value.
|
||||
void SetWidth (Standard_ShortReal theWidth)
|
||||
{
|
||||
if (theWidth <= 0.0f)
|
||||
{
|
||||
throw Aspect_AspectLineDefinitionError("Graphic3d_AspectLine3d, Bad value for LineWidth");
|
||||
}
|
||||
myWidth = theWidth;
|
||||
SetLineWidth (theWidth);
|
||||
}
|
||||
|
||||
//! Return shader program.
|
||||
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
||||
|
||||
//! Sets up OpenGL/GLSL shader program.
|
||||
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
||||
|
||||
//! Check for equality with another line aspect.
|
||||
bool IsEqual (const Graphic3d_AspectLine3d& theOther)
|
||||
{
|
||||
if (this == &theOther)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return myProgram == theOther.myProgram
|
||||
&& myType == theOther.myType
|
||||
&& myColor == theOther.myColor
|
||||
&& myWidth == theOther.myWidth;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
//! Returns the current values of the group.
|
||||
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||
void Values (Quantity_Color& theColor,
|
||||
Aspect_TypeOfLine& theType,
|
||||
Standard_Real& theWidth) const
|
||||
{
|
||||
theColor = myColor.GetRGB();
|
||||
theType = myType;
|
||||
theWidth = myWidth;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
Handle(Graphic3d_ShaderProgram) myProgram;
|
||||
Quantity_ColorRGBA myColor;
|
||||
Aspect_TypeOfLine myType;
|
||||
Standard_ShortReal myWidth;
|
||||
|
||||
};
|
||||
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectLine3d, Standard_Transient)
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectLine3d, Graphic3d_Aspects)
|
||||
|
||||
#endif // _Graphic3d_AspectLine3d_HeaderFile
|
||||
|
@@ -15,18 +15,18 @@
|
||||
|
||||
#include <Graphic3d_AspectMarker3d.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Standard_Transient)
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Graphic3d_Aspects)
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectMarker3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d()
|
||||
: myColor (Quantity_NOC_YELLOW),
|
||||
myType (Aspect_TOM_X),
|
||||
myScale (1.0f)
|
||||
{
|
||||
//
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myInteriorColor.SetRGB (Quantity_NOC_YELLOW);
|
||||
myMarkerType = Aspect_TOM_X;
|
||||
myMarkerScale = 1.0f;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
@@ -36,14 +36,11 @@ Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d()
|
||||
Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Aspect_TypeOfMarker theType,
|
||||
const Quantity_Color& theColor,
|
||||
const Standard_Real theScale)
|
||||
: myColor (theColor),
|
||||
myType (theType),
|
||||
myScale ((float )theScale)
|
||||
{
|
||||
if (theScale <= 0.0)
|
||||
{
|
||||
throw Aspect_AspectMarkerDefinitionError("Bad value for MarkerScale");
|
||||
}
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myInteriorColor.SetRGB (theColor);
|
||||
myMarkerType = theType;
|
||||
SetMarkerScale ((float )theScale);
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
@@ -54,12 +51,12 @@ Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Quantity_Color& theCo
|
||||
const Standard_Integer theWidth,
|
||||
const Standard_Integer theHeight,
|
||||
const Handle(TColStd_HArray1OfByte)& theTextureBitMap)
|
||||
: myMarkerImage (new Graphic3d_MarkerImage (theTextureBitMap, theWidth, theHeight)),
|
||||
myColor (theColor),
|
||||
myType (Aspect_TOM_USERDEFINED),
|
||||
myScale (1.0f)
|
||||
{
|
||||
//
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myMarkerImage = new Graphic3d_MarkerImage(theTextureBitMap, theWidth, theHeight);
|
||||
myInteriorColor.SetRGB (theColor),
|
||||
myMarkerType = Aspect_TOM_USERDEFINED;
|
||||
myMarkerScale = 1.0f;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
@@ -67,12 +64,12 @@ Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Quantity_Color& theCo
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Handle(Image_PixMap)& theTextureImage)
|
||||
: myMarkerImage (new Graphic3d_MarkerImage (theTextureImage)),
|
||||
myColor (Quantity_NOC_YELLOW),
|
||||
myType (Aspect_TOM_USERDEFINED),
|
||||
myScale (1.0f)
|
||||
{
|
||||
//
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myMarkerImage = new Graphic3d_MarkerImage (theTextureImage);
|
||||
myInteriorColor.SetRGB (Quantity_NOC_YELLOW);
|
||||
myMarkerType = Aspect_TOM_USERDEFINED;
|
||||
myMarkerScale = 1.0f;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
|
@@ -16,23 +16,13 @@
|
||||
#ifndef _Graphic3d_AspectMarker3d_HeaderFile
|
||||
#define _Graphic3d_AspectMarker3d_HeaderFile
|
||||
|
||||
#include <Aspect_AspectMarkerDefinitionError.hxx>
|
||||
#include <Aspect_TypeOfMarker.hxx>
|
||||
#include <Graphic3d_MarkerImage.hxx>
|
||||
#include <Graphic3d_ShaderProgram.hxx>
|
||||
#include <Image_PixMap.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <TColStd_HArray1OfByte.hxx>
|
||||
#include <Quantity_ColorRGBA.hxx>
|
||||
#include <Graphic3d_Aspects.hxx>
|
||||
|
||||
//! Creates and updates an attribute group for marker type primitives.
|
||||
//! This group contains the type of marker, its color, and its scale factor.
|
||||
class Graphic3d_AspectMarker3d : public Standard_Transient
|
||||
class Graphic3d_AspectMarker3d : public Graphic3d_Aspects
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Standard_Transient)
|
||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Graphic3d_Aspects)
|
||||
public:
|
||||
|
||||
//! Creates a context table for marker primitives
|
||||
@@ -53,39 +43,26 @@ public:
|
||||
//! defined with the specified values.
|
||||
Standard_EXPORT Graphic3d_AspectMarker3d(const Handle(Image_PixMap)& theTextureImage);
|
||||
|
||||
//! Return color.
|
||||
const Quantity_ColorRGBA& ColorRGBA() const { return myColor; }
|
||||
|
||||
//! Return the color.
|
||||
const Quantity_Color& Color() const { return myColor.GetRGB(); }
|
||||
|
||||
//! Modifies the color.
|
||||
void SetColor (const Quantity_Color& theColor) { myColor.SetRGB (theColor); }
|
||||
|
||||
//! Return scale factor.
|
||||
Standard_ShortReal Scale() const { return myScale; }
|
||||
Standard_ShortReal Scale() const { return myMarkerScale; }
|
||||
|
||||
//! Modifies the scale factor.
|
||||
//! Marker type Aspect_TOM_POINT is not affected by the marker size scale factor.
|
||||
//! It is always the smallest displayable dot.
|
||||
//! Warning: Raises AspectMarkerDefinitionError if the scale is a negative value.
|
||||
//! Warning: Raises Standard_OutOfRange if the scale is a negative value.
|
||||
void SetScale (const Standard_ShortReal theScale)
|
||||
{
|
||||
if (theScale <= 0.0f)
|
||||
{
|
||||
throw Aspect_AspectMarkerDefinitionError("Bad value for MarkerScale");
|
||||
}
|
||||
myScale = theScale;
|
||||
SetMarkerScale (theScale);
|
||||
}
|
||||
|
||||
//! Assign scale factor.
|
||||
void SetScale (const Standard_Real theScale) { SetScale ((float )theScale); }
|
||||
|
||||
//! Return marker type.
|
||||
Aspect_TypeOfMarker Type() const { return myType; }
|
||||
Aspect_TypeOfMarker Type() const { return myMarkerType; }
|
||||
|
||||
//! Modifies the type of marker.
|
||||
void SetType (const Aspect_TypeOfMarker theType) { myType = theType; }
|
||||
void SetType (const Aspect_TypeOfMarker theType) { myMarkerType = theType; }
|
||||
|
||||
//! Returns marker's texture size.
|
||||
Standard_EXPORT void GetTextureSize (Standard_Integer& theWidth, Standard_Integer& theHeight) const;
|
||||
@@ -94,40 +71,10 @@ public:
|
||||
//! Could be null handle if marker aspect has been initialized as default type of marker.
|
||||
const Handle(Graphic3d_MarkerImage)& GetMarkerImage() const { return myMarkerImage; }
|
||||
|
||||
//! Set marker's image texture.
|
||||
void SetMarkerImage (const Handle(Graphic3d_MarkerImage)& theImage) { myMarkerImage = theImage; }
|
||||
|
||||
Standard_EXPORT void SetBitMap (const Standard_Integer theWidth, const Standard_Integer theHeight, const Handle(TColStd_HArray1OfByte)& theTexture);
|
||||
|
||||
//! Return the program.
|
||||
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
||||
|
||||
//! Sets up OpenGL/GLSL shader program.
|
||||
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
||||
|
||||
public:
|
||||
|
||||
//! Returns the current values of the group.
|
||||
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||
void Values (Quantity_Color& theColor,
|
||||
Aspect_TypeOfMarker& theType,
|
||||
Standard_Real& theScale) const
|
||||
{
|
||||
theColor = myColor.GetRGB();
|
||||
theType = myType;
|
||||
theScale = myScale;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
Handle(Graphic3d_ShaderProgram) myProgram;
|
||||
Handle(Graphic3d_MarkerImage) myMarkerImage;
|
||||
Quantity_ColorRGBA myColor;
|
||||
Aspect_TypeOfMarker myType;
|
||||
Standard_ShortReal myScale;
|
||||
|
||||
};
|
||||
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectMarker3d, Standard_Transient)
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectMarker3d, Graphic3d_Aspects)
|
||||
|
||||
#endif // _Graphic3d_AspectMarker3d_HeaderFile
|
||||
|
@@ -15,55 +15,43 @@
|
||||
|
||||
#include <Graphic3d_AspectText3d.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Standard_Transient)
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Graphic3d_Aspects)
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectText3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_AspectText3d::Graphic3d_AspectText3d()
|
||||
: myFont (Font_NOF_ASCII_MONO),
|
||||
myColor (Quantity_NOC_YELLOW),
|
||||
myFactor (1.0),
|
||||
mySpace (0.0),
|
||||
myStyle (Aspect_TOST_NORMAL),
|
||||
myDisplayType (Aspect_TODT_NORMAL),
|
||||
myColorSubTitle (Quantity_NOC_WHITE),
|
||||
myTextZoomable (false),
|
||||
myTextAngle (0.0),
|
||||
myTextFontAspect(Font_FA_Regular)
|
||||
{
|
||||
//
|
||||
// actually this should be a special state Graphic3d_AlphaMode_MaskBlend
|
||||
// since text is drawn in usual order with normal opaque objects (thanks to alpha test),
|
||||
// but blending is also enabled to smoothen boundaries
|
||||
SetAlphaMode (Graphic3d_AlphaMode_Mask, 0.285f);
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myInteriorColor.SetRGB (Quantity_NOC_YELLOW);
|
||||
myEdgeColor.SetRGB (Quantity_NOC_WHITE);
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectText3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_AspectText3d::Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||
const Standard_CString theFont,
|
||||
const Standard_Real theExpansionFactor,
|
||||
const Standard_Real theSpace,
|
||||
const Aspect_TypeOfStyleText theStyle,
|
||||
const Aspect_TypeOfDisplayText theDisplayType)
|
||||
: myFont (theFont),
|
||||
myColor (theColor),
|
||||
myFactor (theExpansionFactor),
|
||||
mySpace (theSpace),
|
||||
myStyle (theStyle),
|
||||
myDisplayType (theDisplayType),
|
||||
myColorSubTitle (Quantity_NOC_WHITE),
|
||||
myTextZoomable (false),
|
||||
myTextAngle (0.0),
|
||||
myTextFontAspect(Font_FA_Regular)
|
||||
Graphic3d_AspectText3d::Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||
Standard_CString theFont,
|
||||
Standard_Real ,
|
||||
Standard_Real ,
|
||||
Aspect_TypeOfStyleText theStyle,
|
||||
Aspect_TypeOfDisplayText theDisplayType)
|
||||
{
|
||||
if (myFont.IsEmpty())
|
||||
SetAlphaMode (Graphic3d_AlphaMode_Mask, 0.285f);
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myTextStyle = theStyle;
|
||||
myTextDisplayType = theDisplayType;
|
||||
myInteriorColor.SetRGB (theColor);
|
||||
myEdgeColor.SetRGB (Quantity_NOC_WHITE);
|
||||
if (theFont != NULL
|
||||
&& *theFont != '\0')
|
||||
{
|
||||
myFont = Font_NOF_ASCII_MONO;
|
||||
}
|
||||
|
||||
if (theExpansionFactor <= 0.0)
|
||||
{
|
||||
throw Graphic3d_AspectTextDefinitionError("Bad value for TextScaleFactor");
|
||||
myTextFont = new TCollection_HAsciiString (theFont);
|
||||
}
|
||||
}
|
||||
|
@@ -16,89 +16,69 @@
|
||||
#ifndef _Graphic3d_AspectText3d_HeaderFile
|
||||
#define _Graphic3d_AspectText3d_HeaderFile
|
||||
|
||||
#include <Aspect_TypeOfStyleText.hxx>
|
||||
#include <Aspect_TypeOfDisplayText.hxx>
|
||||
#include <Graphic3d_AspectTextDefinitionError.hxx>
|
||||
#include <Graphic3d_ShaderProgram.hxx>
|
||||
#include <Font_FontAspect.hxx>
|
||||
#include <Font_NameOfFont.hxx>
|
||||
#include <Standard_Transient.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
#include <Quantity_ColorRGBA.hxx>
|
||||
#include <Graphic3d_Aspects.hxx>
|
||||
|
||||
//! Creates and updates a group of attributes for
|
||||
//! text primitives. This group contains the color,
|
||||
//! font, expansion factor (height/width ratio), and
|
||||
//! inter-character space.
|
||||
//!
|
||||
//! NOTE: The font name is stored in the aspect instance
|
||||
//! so it is safe to pass it as const char* to OpenGl package
|
||||
//! without copying the string. However, the aspect should not
|
||||
//! be deleted until the text drawn using this aspect is no longer
|
||||
//! visible. The best practice is to keep the aspect in the object's drawer.
|
||||
class Graphic3d_AspectText3d : public Standard_Transient
|
||||
//! Creates and updates a group of attributes for text primitives.
|
||||
class Graphic3d_AspectText3d : public Graphic3d_Aspects
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Standard_Transient)
|
||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Graphic3d_Aspects)
|
||||
public:
|
||||
|
||||
//! Creates a context table for text primitives
|
||||
//! defined with the following default values:
|
||||
//!
|
||||
//! Color : NOC_YELLOW
|
||||
//! Font : NOF_ASCII_MONO
|
||||
//! Expansion factor : 1.
|
||||
//! Space between characters : 0.
|
||||
//! The style : TOST_NORMAL
|
||||
//! The display type : TODT_NORMAL
|
||||
//! Creates a context table for text primitives defined with the following default values:
|
||||
//! Color : Quantity_NOC_YELLOW
|
||||
//! Font : Font_NOF_ASCII_MONO
|
||||
//! The style : Aspect_TOST_NORMAL
|
||||
//! The display type : Aspect_TODT_NORMAL
|
||||
Standard_EXPORT Graphic3d_AspectText3d();
|
||||
|
||||
//! Creates a context table for text primitives
|
||||
//! defined with the specified values.
|
||||
//! AFont may be to take means from User(example "Courier New")
|
||||
//! or Font name defined in Font_NameOfFont(example Font_NOF_ASCII_MONO)
|
||||
//! or use default font("Courier")
|
||||
Standard_EXPORT Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||
const Standard_CString theFont,
|
||||
const Standard_Real theExpansionFactor,
|
||||
const Standard_Real theSpace,
|
||||
const Aspect_TypeOfStyleText theStyle = Aspect_TOST_NORMAL,
|
||||
const Aspect_TypeOfDisplayText theDisplayType = Aspect_TODT_NORMAL);
|
||||
//! Creates a context table for text primitives defined with the specified values.
|
||||
//! @param theColor [in] text color
|
||||
//! @param theFont [in] font family name or alias like Font_NOF_ASCII_MONO
|
||||
//! @param theExpansionFactor [in] deprecated parameter, has no effect
|
||||
//! @param theSpace [in] deprecated parameter, has no effect
|
||||
//! @param theStyle [in] font style
|
||||
//! @param theDisplayType [in] display mode
|
||||
Standard_EXPORT Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||
Standard_CString theFont,
|
||||
Standard_Real theExpansionFactor,
|
||||
Standard_Real theSpace,
|
||||
Aspect_TypeOfStyleText theStyle = Aspect_TOST_NORMAL,
|
||||
Aspect_TypeOfDisplayText theDisplayType = Aspect_TODT_NORMAL);
|
||||
|
||||
//! Return the text color.
|
||||
const Quantity_Color& Color() const { return myColor.GetRGB(); }
|
||||
const Quantity_Color& Color() const { return myInteriorColor.GetRGB(); }
|
||||
|
||||
//! Return the text color.
|
||||
const Quantity_ColorRGBA& ColorRGBA() const { return myColor; }
|
||||
const Quantity_ColorRGBA& ColorRGBA() const { return myInteriorColor; }
|
||||
|
||||
//! Modifies the color.
|
||||
void SetColor (const Quantity_Color& theColor) { myColor.SetRGB (theColor); }
|
||||
void SetColor (const Quantity_Color& theColor) { myInteriorColor.SetRGB (theColor); }
|
||||
|
||||
//! Modifies the color.
|
||||
void SetColor (const Quantity_ColorRGBA& theColor) { myColor = theColor; }
|
||||
|
||||
//! Modifies the expansion factor (height/width ratio)
|
||||
//! If the factor is less than 1, the characters will
|
||||
//! be higher than they are wide.
|
||||
void SetExpansionFactor (const Standard_Real theFactor)
|
||||
{
|
||||
if (theFactor <= 0.0)
|
||||
{
|
||||
throw Graphic3d_AspectTextDefinitionError("Bad value for TextScaleFactor");
|
||||
}
|
||||
myFactor = theFactor;
|
||||
}
|
||||
void SetColor (const Quantity_ColorRGBA& theColor) { myInteriorColor = theColor; }
|
||||
|
||||
//! Return the font.
|
||||
const TCollection_AsciiString& Font() const { return myFont; }
|
||||
const TCollection_AsciiString& Font() const
|
||||
{
|
||||
if (myTextFont.IsNull())
|
||||
{
|
||||
static const TCollection_AsciiString anEmpty;
|
||||
return anEmpty;
|
||||
}
|
||||
return myTextFont->String();
|
||||
}
|
||||
|
||||
//! Modifies the font.
|
||||
void SetFont (const TCollection_AsciiString& theFont)
|
||||
{
|
||||
myFont = !theFont.IsEmpty() ? theFont : TCollection_AsciiString (Font_NOF_ASCII_MONO);
|
||||
if (!theFont.IsEmpty())
|
||||
{
|
||||
myTextFont = new TCollection_HAsciiString (theFont);
|
||||
}
|
||||
else
|
||||
{
|
||||
myTextFont.Nullify();
|
||||
}
|
||||
}
|
||||
|
||||
//! Modifies the font.
|
||||
@@ -107,174 +87,32 @@ public:
|
||||
SetFont (TCollection_AsciiString (theFont));
|
||||
}
|
||||
|
||||
//! Return the space between characters.
|
||||
Standard_Real Space() const { return mySpace; }
|
||||
|
||||
//! Modifies the space between the characters.
|
||||
void SetSpace (const Standard_Real theSpace) { mySpace = theSpace; }
|
||||
|
||||
//! Return the text style.
|
||||
Aspect_TypeOfStyleText Style() const { return myStyle; }
|
||||
Aspect_TypeOfStyleText Style() const { return myTextStyle; }
|
||||
|
||||
//! Modifies the style of the text.
|
||||
//! * TOST_NORMAL
|
||||
//! Default text. The text is displayed like any other graphic object.
|
||||
//! This text can be hidden by another object that is nearest from the point of view.
|
||||
//! * TOST_ANNOTATION
|
||||
//! The text is always visible.
|
||||
//! The text is displayed over the other object according to the priority.
|
||||
void SetStyle (const Aspect_TypeOfStyleText theStyle) { myStyle = theStyle; }
|
||||
void SetStyle (Aspect_TypeOfStyleText theStyle) { myTextStyle = theStyle; }
|
||||
|
||||
//! Return display type.
|
||||
Aspect_TypeOfDisplayText DisplayType() const { return myDisplayType; }
|
||||
Aspect_TypeOfDisplayText DisplayType() const { return myTextDisplayType; }
|
||||
|
||||
//! Define the display type of the text.
|
||||
//!
|
||||
//! TODT_NORMAL Default display. Text only.
|
||||
//! TODT_SUBTITLE There is a subtitle under the text.
|
||||
//! TODT_DEKALE The text is displayed with a 3D style.
|
||||
//! TODT_BLEND The text is displayed in XOR.
|
||||
//! TODT_DIMENSION Dimension line under text will be invisible.
|
||||
void SetDisplayType (const Aspect_TypeOfDisplayText theDisplayType) { myDisplayType = theDisplayType; }
|
||||
|
||||
//! Return subtitle color.
|
||||
const Quantity_ColorRGBA& ColorSubTitleRGBA() const { return myColorSubTitle; }
|
||||
|
||||
//! Return subtitle color.
|
||||
const Quantity_Color& ColorSubTitle() const { return myColorSubTitle.GetRGB(); }
|
||||
|
||||
//! Modifies the color of the subtitle for the TODT_SUBTITLE TextDisplayType
|
||||
//! and the color of background for the TODT_DEKALE TextDisplayType.
|
||||
void SetColorSubTitle (const Quantity_Color& theColor) { myColorSubTitle.SetRGB (theColor); }
|
||||
|
||||
//! Modifies the color of the subtitle for the TODT_SUBTITLE TextDisplayType
|
||||
//! and the color of background for the TODT_DEKALE TextDisplayType.
|
||||
void SetColorSubTitle (const Quantity_ColorRGBA& theColor) { myColorSubTitle = theColor; }
|
||||
void SetDisplayType (Aspect_TypeOfDisplayText theDisplayType) { myTextDisplayType = theDisplayType; }
|
||||
|
||||
//! Returns TRUE when the Text Zoomable is on.
|
||||
bool GetTextZoomable() const { return myTextZoomable; }
|
||||
|
||||
//! Turns usage of text zoomable on/off
|
||||
void SetTextZoomable (const bool theFlag) { myTextZoomable = theFlag; }
|
||||
bool GetTextZoomable() const { return myIsTextZoomable; }
|
||||
|
||||
//! Returns Angle of degree
|
||||
Standard_Real GetTextAngle() const { return myTextAngle; }
|
||||
Standard_ShortReal GetTextAngle() const { return myTextAngle; }
|
||||
|
||||
//! Turns usage of text rotated
|
||||
void SetTextAngle (const Standard_Real theAngle) { myTextAngle = theAngle; }
|
||||
void SetTextAngle (const Standard_Real theAngle) { myTextAngle = (Standard_ShortReal )theAngle; }
|
||||
|
||||
//! Returns text FontAspect
|
||||
Font_FontAspect GetTextFontAspect() const { return myTextFontAspect; }
|
||||
|
||||
//! Turns usage of Aspect text
|
||||
void SetTextFontAspect (const Font_FontAspect theFontAspect) { myTextFontAspect = theFontAspect; }
|
||||
|
||||
//! Return the shader program.
|
||||
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
||||
|
||||
//! Sets up OpenGL/GLSL shader program.
|
||||
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
||||
|
||||
public:
|
||||
|
||||
//! Returns the current values of the group.
|
||||
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||
void Values (Quantity_Color& theColor,
|
||||
Standard_CString& theFont,
|
||||
Standard_Real& theExpansionFactor,
|
||||
Standard_Real& theSpace) const
|
||||
{
|
||||
theColor = myColor.GetRGB();
|
||||
theFont = myFont.ToCString();
|
||||
theExpansionFactor = myFactor;
|
||||
theSpace = mySpace;
|
||||
}
|
||||
|
||||
//! Returns the current values of the group.
|
||||
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||
void Values (Quantity_Color& theColor,
|
||||
Standard_CString& theFont,
|
||||
Standard_Real& theExpansionFactor,
|
||||
Standard_Real& theSpace,
|
||||
Aspect_TypeOfStyleText& theStyle,
|
||||
Aspect_TypeOfDisplayText& theDisplayType,
|
||||
Quantity_Color& theColorSubTitle) const
|
||||
{
|
||||
theColor = myColor.GetRGB();
|
||||
theFont = myFont.ToCString();
|
||||
theExpansionFactor= myFactor;
|
||||
theSpace = mySpace;
|
||||
theStyle = myStyle;
|
||||
theDisplayType = myDisplayType;
|
||||
theColorSubTitle = myColorSubTitle.GetRGB();
|
||||
}
|
||||
|
||||
//! Returns the current values of the group.
|
||||
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||
void Values (Quantity_Color& theColor,
|
||||
Standard_CString& theFont,
|
||||
Standard_Real& theExpansionFactor,
|
||||
Standard_Real& theSpace,
|
||||
Aspect_TypeOfStyleText& theStyle,
|
||||
Aspect_TypeOfDisplayText& theDisplayType,
|
||||
Quantity_Color& theColorSubTitle,
|
||||
Standard_Boolean& theTextZoomable,
|
||||
Standard_Real& theTextAngle) const
|
||||
{
|
||||
theColor = myColor.GetRGB();
|
||||
theFont = myFont.ToCString();
|
||||
theExpansionFactor= myFactor;
|
||||
theSpace = mySpace;
|
||||
theStyle = myStyle;
|
||||
theDisplayType = myDisplayType;
|
||||
theColorSubTitle = myColorSubTitle.GetRGB();
|
||||
|
||||
theTextZoomable = myTextZoomable;
|
||||
theTextAngle = myTextAngle;
|
||||
}
|
||||
|
||||
//! Returns the current values of the group.
|
||||
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||
void Values (Quantity_Color& theColor,
|
||||
Standard_CString& theFont,
|
||||
Standard_Real& theExpansionFactor,
|
||||
Standard_Real& theSpace,
|
||||
Aspect_TypeOfStyleText& theStyle,
|
||||
Aspect_TypeOfDisplayText& theDisplayType,
|
||||
Quantity_Color& theColorSubTitle,
|
||||
Standard_Boolean& theTextZoomable,
|
||||
Standard_Real& theTextAngle,
|
||||
Font_FontAspect& theTextFontAspect) const
|
||||
{
|
||||
theColor = myColor.GetRGB();
|
||||
theFont = myFont.ToCString();
|
||||
theExpansionFactor= myFactor;
|
||||
theSpace = mySpace;
|
||||
theStyle = myStyle;
|
||||
theDisplayType = myDisplayType;
|
||||
theColorSubTitle = myColorSubTitle.GetRGB();
|
||||
|
||||
theTextZoomable = myTextZoomable;
|
||||
theTextAngle = myTextAngle;
|
||||
theTextFontAspect = myTextFontAspect;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
TCollection_AsciiString myFont;
|
||||
Quantity_ColorRGBA myColor;
|
||||
Standard_Real myFactor;
|
||||
Standard_Real mySpace;
|
||||
Aspect_TypeOfStyleText myStyle;
|
||||
Aspect_TypeOfDisplayText myDisplayType;
|
||||
Quantity_ColorRGBA myColorSubTitle;
|
||||
bool myTextZoomable;
|
||||
Standard_Real myTextAngle;
|
||||
Font_FontAspect myTextFontAspect;
|
||||
Handle(Graphic3d_ShaderProgram) myProgram;
|
||||
|
||||
};
|
||||
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectText3d, Standard_Transient)
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectText3d, Graphic3d_Aspects)
|
||||
|
||||
#endif // _Graphic3d_AspectText3d_HeaderFile
|
||||
|
@@ -1,37 +0,0 @@
|
||||
// Created on: 1993-03-31
|
||||
// Created by: NW,JPB,CAL
|
||||
// Copyright (c) 1993-1999 Matra Datavision
|
||||
// Copyright (c) 1999-2014 OPEN CASCADE SAS
|
||||
//
|
||||
// This file is part of Open CASCADE Technology software library.
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or modify it under
|
||||
// the terms of the GNU Lesser General Public License version 2.1 as published
|
||||
// by the Free Software Foundation, with special exception defined in the file
|
||||
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
|
||||
// distribution for complete text of the license and disclaimer of any warranty.
|
||||
//
|
||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||
// commercial license or contractual agreement.
|
||||
|
||||
#ifndef _Graphic3d_AspectTextDefinitionError_HeaderFile
|
||||
#define _Graphic3d_AspectTextDefinitionError_HeaderFile
|
||||
|
||||
#include <Standard_Type.hxx>
|
||||
#include <Standard_DefineException.hxx>
|
||||
#include <Standard_SStream.hxx>
|
||||
#include <Standard_OutOfRange.hxx>
|
||||
|
||||
class Graphic3d_AspectTextDefinitionError;
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectTextDefinitionError, Standard_OutOfRange)
|
||||
|
||||
#if !defined No_Exception && !defined No_Graphic3d_AspectTextDefinitionError
|
||||
#define Graphic3d_AspectTextDefinitionError_Raise_if(CONDITION, MESSAGE) \
|
||||
if (CONDITION) throw Graphic3d_AspectTextDefinitionError(MESSAGE);
|
||||
#else
|
||||
#define Graphic3d_AspectTextDefinitionError_Raise_if(CONDITION, MESSAGE)
|
||||
#endif
|
||||
|
||||
DEFINE_STANDARD_EXCEPTION(Graphic3d_AspectTextDefinitionError, Standard_OutOfRange)
|
||||
|
||||
#endif // _Graphic3d_AspectTextDefinitionError_HeaderFile
|
62
src/Graphic3d/Graphic3d_Aspects.cxx
Normal file
62
src/Graphic3d/Graphic3d_Aspects.cxx
Normal file
@@ -0,0 +1,62 @@
|
||||
// Copyright (c) 2019 OPEN CASCADE SAS
|
||||
//
|
||||
// This file is part of Open CASCADE Technology software library.
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or modify it under
|
||||
// the terms of the GNU Lesser General Public License version 2.1 as published
|
||||
// by the Free Software Foundation, with special exception defined in the file
|
||||
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
|
||||
// distribution for complete text of the license and disclaimer of any warranty.
|
||||
//
|
||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||
// commercial license or contractual agreement.
|
||||
|
||||
#include <Graphic3d_Aspects.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_Aspects, Standard_Transient)
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_Aspects
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_Aspects::Graphic3d_Aspects()
|
||||
: myInteriorColor (Quantity_NOC_CYAN1),
|
||||
myBackInteriorColor (Quantity_NOC_CYAN1),
|
||||
myEdgeColor (Quantity_NOC_WHITE),
|
||||
myInteriorStyle (Aspect_IS_SOLID),
|
||||
myShadingModel (Graphic3d_TOSM_DEFAULT),
|
||||
myAlphaMode (Graphic3d_AlphaMode_BlendAuto),
|
||||
myAlphaCutoff (0.5f),
|
||||
myLineType (Aspect_TOL_SOLID),
|
||||
myLineWidth (1.0f),
|
||||
myMarkerType (Aspect_TOM_POINT),
|
||||
myMarkerScale (1.0f),
|
||||
myTextStyle (Aspect_TOST_NORMAL),
|
||||
myTextDisplayType (Aspect_TODT_NORMAL),
|
||||
myTextFontAspect (Font_FontAspect_Regular),
|
||||
myTextAngle (0.0f),
|
||||
myToSkipFirstEdge (false),
|
||||
myToDistinguishMaterials (false),
|
||||
myToDrawEdges (false),
|
||||
myToDrawSilhouette (false),
|
||||
myToSuppressBackFaces (true),
|
||||
myToMapTexture (false),
|
||||
myIsTextZoomable (false)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : SetTextureMap
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
void Graphic3d_Aspects::SetTextureMap (const Handle(Graphic3d_TextureMap)& theTexture)
|
||||
{
|
||||
if (theTexture.IsNull())
|
||||
{
|
||||
myTextureSet.Nullify();
|
||||
return;
|
||||
}
|
||||
|
||||
myTextureSet = new Graphic3d_TextureSet (theTexture);
|
||||
}
|
510
src/Graphic3d/Graphic3d_Aspects.hxx
Normal file
510
src/Graphic3d/Graphic3d_Aspects.hxx
Normal file
@@ -0,0 +1,510 @@
|
||||
// Copyright (c) 2019 OPEN CASCADE SAS
|
||||
//
|
||||
// This file is part of Open CASCADE Technology software library.
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or modify it under
|
||||
// the terms of the GNU Lesser General Public License version 2.1 as published
|
||||
// by the Free Software Foundation, with special exception defined in the file
|
||||
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
|
||||
// distribution for complete text of the license and disclaimer of any warranty.
|
||||
//
|
||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||
// commercial license or contractual agreement.
|
||||
|
||||
#ifndef _Graphic3d_Aspects_HeaderFile
|
||||
#define _Graphic3d_Aspects_HeaderFile
|
||||
|
||||
#include <Aspect_PolygonOffsetMode.hxx>
|
||||
#include <Aspect_InteriorStyle.hxx>
|
||||
#include <Aspect_TypeOfDisplayText.hxx>
|
||||
#include <Aspect_TypeOfLine.hxx>
|
||||
#include <Aspect_TypeOfMarker.hxx>
|
||||
#include <Aspect_TypeOfStyleText.hxx>
|
||||
#include <Font_FontAspect.hxx>
|
||||
#include <Font_NameOfFont.hxx>
|
||||
#include <Graphic3d_AlphaMode.hxx>
|
||||
#include <Graphic3d_MarkerImage.hxx>
|
||||
#include <Graphic3d_HatchStyle.hxx>
|
||||
#include <Graphic3d_MaterialAspect.hxx>
|
||||
#include <Graphic3d_PolygonOffset.hxx>
|
||||
#include <Graphic3d_ShaderProgram.hxx>
|
||||
#include <Graphic3d_TextureMap.hxx>
|
||||
#include <Graphic3d_TextureSet.hxx>
|
||||
#include <Graphic3d_TypeOfShadingModel.hxx>
|
||||
#include <TCollection_HAsciiString.hxx>
|
||||
|
||||
//! This class defines graphic attributes.
|
||||
class Graphic3d_Aspects : public Standard_Transient
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_Aspects, Standard_Transient)
|
||||
public:
|
||||
|
||||
//! Creates a context table for drawing primitives defined with the following default values:
|
||||
Standard_EXPORT Graphic3d_Aspects();
|
||||
|
||||
//! Return interior rendering style; Aspect_IS_SOLID by default.
|
||||
Aspect_InteriorStyle InteriorStyle() const { return myInteriorStyle; }
|
||||
|
||||
//! Modifies the interior type used for rendering
|
||||
void SetInteriorStyle (const Aspect_InteriorStyle theStyle) { myInteriorStyle = theStyle; }
|
||||
|
||||
//! Returns shading model; Graphic3d_TOSM_DEFAULT by default.
|
||||
//! Graphic3d_TOSM_DEFAULT means that Shading Model set as default for entire Viewer will be used.
|
||||
Graphic3d_TypeOfShadingModel ShadingModel() const { return myShadingModel; }
|
||||
|
||||
//! Sets shading model
|
||||
void SetShadingModel (const Graphic3d_TypeOfShadingModel theShadingModel) { myShadingModel = theShadingModel; }
|
||||
|
||||
//! Returns the way how alpha value should be treated (Graphic3d_AlphaMode_BlendAuto by default, for backward compatibility).
|
||||
Graphic3d_AlphaMode AlphaMode() const { return myAlphaMode; }
|
||||
|
||||
//! Returns alpha cutoff threshold, for discarding fragments within Graphic3d_AlphaMode_Mask mode (0.5 by default).
|
||||
//! If the alpha value is greater than or equal to this value then it is rendered as fully opaque, otherwise, it is rendered as fully transparent.
|
||||
Standard_ShortReal AlphaCutoff() const { return myAlphaCutoff; }
|
||||
|
||||
//! Defines the way how alpha value should be treated.
|
||||
void SetAlphaMode (Graphic3d_AlphaMode theMode, Standard_ShortReal theAlphaCutoff = 0.5f)
|
||||
{
|
||||
myAlphaMode = theMode;
|
||||
myAlphaCutoff = theAlphaCutoff;
|
||||
}
|
||||
|
||||
//! Return color
|
||||
const Quantity_ColorRGBA& ColorRGBA() const { return myInteriorColor; }
|
||||
|
||||
//! Return the color.
|
||||
const Quantity_Color& Color() const { return myInteriorColor.GetRGB(); }
|
||||
|
||||
//! Modifies the color.
|
||||
void SetColor (const Quantity_Color& theColor) { myInteriorColor.SetRGB(theColor); }
|
||||
|
||||
//! Return interior color.
|
||||
const Quantity_Color& InteriorColor() const { return myInteriorColor.GetRGB(); }
|
||||
|
||||
//! Return interior color.
|
||||
const Quantity_ColorRGBA& InteriorColorRGBA() const { return myInteriorColor; }
|
||||
|
||||
//! Modifies the color of the interior of the face
|
||||
void SetInteriorColor (const Quantity_Color& theColor) { myInteriorColor.SetRGB (theColor); }
|
||||
|
||||
//! Modifies the color of the interior of the face
|
||||
void SetInteriorColor (const Quantity_ColorRGBA& theColor) { myInteriorColor = theColor; }
|
||||
|
||||
//! Return back interior color.
|
||||
const Quantity_Color& BackInteriorColor() const { return myBackInteriorColor.GetRGB(); }
|
||||
|
||||
//! Return back interior color.
|
||||
const Quantity_ColorRGBA& BackInteriorColorRGBA() const { return myBackInteriorColor; }
|
||||
|
||||
//! Modifies the color of the interior of the back face
|
||||
void SetBackInteriorColor (const Quantity_Color& theColor) { myBackInteriorColor.SetRGB (theColor); }
|
||||
|
||||
//! Modifies the color of the interior of the back face
|
||||
void SetBackInteriorColor (const Quantity_ColorRGBA& theColor) { myBackInteriorColor = theColor; }
|
||||
|
||||
//! Returns the surface material of external faces
|
||||
const Graphic3d_MaterialAspect& FrontMaterial() const { return myFrontMaterial; }
|
||||
|
||||
//! Returns the surface material of external faces
|
||||
Graphic3d_MaterialAspect& ChangeFrontMaterial() { return myFrontMaterial; }
|
||||
|
||||
//! Modifies the surface material of external faces
|
||||
void SetFrontMaterial (const Graphic3d_MaterialAspect& theMaterial) { myFrontMaterial = theMaterial; }
|
||||
|
||||
//! Returns the surface material of internal faces
|
||||
const Graphic3d_MaterialAspect& BackMaterial() const { return myBackMaterial; }
|
||||
|
||||
//! Returns the surface material of internal faces
|
||||
Graphic3d_MaterialAspect& ChangeBackMaterial() { return myBackMaterial; }
|
||||
|
||||
//! Modifies the surface material of internal faces
|
||||
void SetBackMaterial (const Graphic3d_MaterialAspect& theMaterial) { myBackMaterial = theMaterial; }
|
||||
|
||||
//! Returns true if back faces should be suppressed (true by default).
|
||||
bool ToSuppressBackFaces() const { return myToSuppressBackFaces; }
|
||||
|
||||
//! Assign back faces culling flag.
|
||||
void SetSuppressBackFaces (bool theToSuppress) { myToSuppressBackFaces = theToSuppress; }
|
||||
|
||||
//! Returns true if back faces should be suppressed (true by default).
|
||||
bool BackFace() const { return myToSuppressBackFaces; }
|
||||
|
||||
//! Allows the display of back-facing filled polygons.
|
||||
void AllowBackFace() { myToSuppressBackFaces = false; }
|
||||
|
||||
//! Suppress the display of back-facing filled polygons.
|
||||
//! A back-facing polygon is defined as a polygon whose
|
||||
//! vertices are in a clockwise order with respect to screen coordinates.
|
||||
void SuppressBackFace() { myToSuppressBackFaces = true; }
|
||||
|
||||
//! Returns true if material properties should be distinguished for back and front faces (false by default).
|
||||
bool Distinguish() const { return myToDistinguishMaterials; }
|
||||
|
||||
//! Set material distinction between front and back faces.
|
||||
void SetDistinguish (bool toDistinguish) { myToDistinguishMaterials = toDistinguish; }
|
||||
|
||||
//! Allows material distinction between front and back faces.
|
||||
void SetDistinguishOn() { myToDistinguishMaterials = true; }
|
||||
|
||||
//! Forbids material distinction between front and back faces.
|
||||
void SetDistinguishOff() { myToDistinguishMaterials = false; }
|
||||
|
||||
//! Return shader program.
|
||||
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
||||
|
||||
//! Sets up OpenGL/GLSL shader program.
|
||||
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
||||
|
||||
//! Return texture array to be mapped.
|
||||
const Handle(Graphic3d_TextureSet)& TextureSet() const { return myTextureSet; }
|
||||
|
||||
//! Setup texture array to be mapped.
|
||||
void SetTextureSet (const Handle(Graphic3d_TextureSet)& theTextures) { myTextureSet = theTextures; }
|
||||
|
||||
//! Return texture to be mapped.
|
||||
//Standard_DEPRECATED("Deprecated method, TextureSet() should be used instead")
|
||||
Handle(Graphic3d_TextureMap) TextureMap() const
|
||||
{
|
||||
return !myTextureSet.IsNull() && !myTextureSet->IsEmpty()
|
||||
? myTextureSet->First()
|
||||
: Handle(Graphic3d_TextureMap)();
|
||||
}
|
||||
|
||||
//! Assign texture to be mapped.
|
||||
//! See also SetTextureMapOn() to actually activate texture mapping.
|
||||
//Standard_DEPRECATED("Deprecated method, SetTextureSet() should be used instead")
|
||||
Standard_EXPORT void SetTextureMap (const Handle(Graphic3d_TextureMap)& theTexture);
|
||||
|
||||
//! Return true if texture mapping is enabled (false by default).
|
||||
bool ToMapTexture() const { return myToMapTexture; }
|
||||
|
||||
//! Return true if texture mapping is enabled (false by default).
|
||||
bool TextureMapState() const { return myToMapTexture; }
|
||||
|
||||
//! Enable or disable texture mapping (has no effect if texture is not set).
|
||||
void SetTextureMapOn (bool theToMap) { myToMapTexture = theToMap; }
|
||||
|
||||
//! Enable texture mapping (has no effect if texture is not set).
|
||||
void SetTextureMapOn() { myToMapTexture = true; }
|
||||
|
||||
//! Disable texture mapping.
|
||||
void SetTextureMapOff() { myToMapTexture = false; }
|
||||
|
||||
//! Returns current polygon offsets settings.
|
||||
const Graphic3d_PolygonOffset& PolygonOffset() const { return myPolygonOffset; }
|
||||
|
||||
//! Sets polygon offsets settings.
|
||||
void SetPolygonOffset (const Graphic3d_PolygonOffset& theOffset) { myPolygonOffset = theOffset; }
|
||||
|
||||
//! Returns current polygon offsets settings.
|
||||
void PolygonOffsets (Standard_Integer& theMode,
|
||||
Standard_ShortReal& theFactor,
|
||||
Standard_ShortReal& theUnits) const
|
||||
{
|
||||
theMode = myPolygonOffset.Mode;
|
||||
theFactor = myPolygonOffset.Factor;
|
||||
theUnits = myPolygonOffset.Units;
|
||||
}
|
||||
|
||||
//! Sets up OpenGL polygon offsets mechanism.
|
||||
//! <aMode> parameter can contain various combinations of
|
||||
//! Aspect_PolygonOffsetMode enumeration elements (Aspect_POM_None means
|
||||
//! that polygon offsets are not changed).
|
||||
//! If <aMode> is different from Aspect_POM_Off and Aspect_POM_None, then <aFactor> and <aUnits>
|
||||
//! arguments are used by graphic renderer to calculate a depth offset value:
|
||||
//!
|
||||
//! offset = <aFactor> * m + <aUnits> * r, where
|
||||
//! m - maximum depth slope for the polygon currently being displayed,
|
||||
//! r - minimum window coordinates depth resolution (implementation-specific)
|
||||
//!
|
||||
//! Default settings for OCC 3D viewer: mode = Aspect_POM_Fill, factor = 1., units = 0.
|
||||
//!
|
||||
//! Negative offset values move polygons closer to the viewport,
|
||||
//! while positive values shift polygons away.
|
||||
//! Consult OpenGL reference for details (glPolygonOffset function description).
|
||||
void SetPolygonOffsets (const Standard_Integer theMode,
|
||||
const Standard_ShortReal theFactor = 1.0f,
|
||||
const Standard_ShortReal theUnits = 0.0f)
|
||||
{
|
||||
myPolygonOffset.Mode = (Aspect_PolygonOffsetMode )(theMode & Aspect_POM_Mask);
|
||||
myPolygonOffset.Factor = theFactor;
|
||||
myPolygonOffset.Units = theUnits;
|
||||
}
|
||||
|
||||
//! @name parameters specific to Line primitive rendering
|
||||
public:
|
||||
|
||||
//! Return line type; Aspect_TOL_SOLID by default.
|
||||
Aspect_TypeOfLine LineType() const { return myLineType; }
|
||||
|
||||
//! Modifies the line type
|
||||
void SetLineType (Aspect_TypeOfLine theType) { myLineType = theType; }
|
||||
|
||||
//! Return width for edges in pixels; 1.0 by default.
|
||||
Standard_ShortReal LineWidth() const { return myLineWidth; }
|
||||
|
||||
//! Modifies the line thickness
|
||||
//! Warning: Raises Standard_OutOfRange if the width is a negative value.
|
||||
void SetLineWidth (Standard_ShortReal theWidth)
|
||||
{
|
||||
if (theWidth <= 0.0f)
|
||||
{
|
||||
throw Standard_OutOfRange ("Bad value for EdgeLineWidth");
|
||||
}
|
||||
myLineWidth = theWidth;
|
||||
}
|
||||
|
||||
//! @name parameters specific to Point (Marker) primitive rendering
|
||||
public:
|
||||
|
||||
//! Return marker type; Aspect_TOM_POINT by default.
|
||||
Aspect_TypeOfMarker MarkerType() const { return myMarkerType; }
|
||||
|
||||
//! Modifies the type of marker.
|
||||
void SetMarkerType (Aspect_TypeOfMarker theType) { myMarkerType = theType; }
|
||||
|
||||
//! Return marker scale factor; 1.0 by default.
|
||||
Standard_ShortReal MarkerScale() const { return myMarkerScale; }
|
||||
|
||||
//! Modifies the scale factor.
|
||||
//! Marker type Aspect_TOM_POINT is not affected by the marker size scale factor.
|
||||
//! It is always the smallest displayable dot.
|
||||
//! Warning: Raises Standard_OutOfRange if the scale is a negative value.
|
||||
void SetMarkerScale (const Standard_ShortReal theScale)
|
||||
{
|
||||
if (theScale <= 0.0f)
|
||||
{
|
||||
throw Standard_OutOfRange ("Bad value for MarkerScale");
|
||||
}
|
||||
myMarkerScale = theScale;
|
||||
}
|
||||
|
||||
//! Returns marker's image texture.
|
||||
//! Could be null handle if marker aspect has been initialized as default type of marker.
|
||||
const Handle(Graphic3d_MarkerImage)& MarkerImage() const { return myMarkerImage; }
|
||||
|
||||
//! Set marker's image texture.
|
||||
void SetMarkerImage (const Handle(Graphic3d_MarkerImage)& theImage) { myMarkerImage = theImage; }
|
||||
|
||||
//! @name parameters specific to text rendering
|
||||
public:
|
||||
|
||||
//! Returns the font; NULL string by default.
|
||||
const Handle(TCollection_HAsciiString)& TextFont() const { return myTextFont; }
|
||||
|
||||
//! Modifies the font.
|
||||
void SetTextFont (const Handle(TCollection_HAsciiString)& theFont) { myTextFont = theFont; }
|
||||
|
||||
//! Returns text FontAspect
|
||||
Font_FontAspect TextFontAspect() const { return myTextFontAspect; }
|
||||
|
||||
//! Turns usage of Aspect text
|
||||
void SetTextFontAspect (Font_FontAspect theFontAspect) { myTextFontAspect = theFontAspect; }
|
||||
|
||||
//! Returns display type; Aspect_TODT_NORMAL by default.
|
||||
Aspect_TypeOfDisplayText TextDisplayType() const { return myTextDisplayType; }
|
||||
|
||||
//! Sets display type.
|
||||
void SetTextDisplayType (Aspect_TypeOfDisplayText theType) { myTextDisplayType = theType; }
|
||||
|
||||
//! Returns text background/shadow color; equals to EdgeColor() property.
|
||||
const Quantity_ColorRGBA& ColorSubTitleRGBA() const { return myEdgeColor; }
|
||||
|
||||
//! Return text background/shadow color; equals to EdgeColor() property.
|
||||
const Quantity_Color& ColorSubTitle() const { return myEdgeColor.GetRGB(); }
|
||||
|
||||
//! Modifies text background/shadow color; equals to EdgeColor() property.
|
||||
void SetColorSubTitle (const Quantity_Color& theColor) { myEdgeColor.SetRGB (theColor); }
|
||||
|
||||
//! Modifies text background/shadow color; equals to EdgeColor() property.
|
||||
void SetColorSubTitle (const Quantity_ColorRGBA& theColor) { myEdgeColor = theColor; }
|
||||
|
||||
//! Returns TRUE when the Text Zoomable is on.
|
||||
bool IsTextZoomable() const { return myIsTextZoomable; }
|
||||
|
||||
//! Turns usage of text zoomable on/off
|
||||
void SetTextZoomable (bool theFlag) { myIsTextZoomable = theFlag; }
|
||||
|
||||
//! Returns the text style; Aspect_TOST_NORMAL by default.
|
||||
Aspect_TypeOfStyleText TextStyle() const { return myTextStyle; }
|
||||
|
||||
//! Modifies the style of the text.
|
||||
void SetTextStyle (Aspect_TypeOfStyleText theStyle) { myTextStyle = theStyle; }
|
||||
|
||||
//! Returns Angle of degree
|
||||
Standard_ShortReal TextAngle() const { return myTextAngle; }
|
||||
|
||||
//! Turns usage of text rotated
|
||||
void SetTextAngle (Standard_ShortReal theAngle) { myTextAngle = (Standard_ShortReal )theAngle; }
|
||||
|
||||
//! @name parameters specific to Mesh Edges (of triangulation primitive) rendering
|
||||
public:
|
||||
|
||||
//! Returns true if mesh edges should be drawn (false by default).
|
||||
bool ToDrawEdges() const { return myToDrawEdges && myLineType != Aspect_TOL_EMPTY; }
|
||||
|
||||
//! Set if mesh edges should be drawn or not.
|
||||
void SetDrawEdges (bool theToDraw)
|
||||
{
|
||||
myToDrawEdges = theToDraw;
|
||||
if (myLineType == Aspect_TOL_EMPTY)
|
||||
{
|
||||
myLineType = Aspect_TOL_SOLID;
|
||||
}
|
||||
}
|
||||
|
||||
//! The edges of FillAreas are drawn.
|
||||
void SetEdgeOn() { SetDrawEdges (true); }
|
||||
|
||||
//! The edges of FillAreas are not drawn.
|
||||
void SetEdgeOff() { SetDrawEdges (false); }
|
||||
|
||||
//! Return color of edges.
|
||||
const Quantity_Color& EdgeColor() const { return myEdgeColor.GetRGB(); }
|
||||
|
||||
//! Return color of edges.
|
||||
const Quantity_ColorRGBA& EdgeColorRGBA() const { return myEdgeColor; }
|
||||
|
||||
//! Modifies the color of the edge of the face
|
||||
void SetEdgeColor (const Quantity_Color& theColor) { myEdgeColor.SetRGB (theColor); }
|
||||
|
||||
//! Modifies the color of the edge of the face
|
||||
void SetEdgeColor (const Quantity_ColorRGBA& theColor) { myEdgeColor = theColor; }
|
||||
|
||||
//! Return edges line type (same as LineType()).
|
||||
Aspect_TypeOfLine EdgeLineType() const { return myLineType; }
|
||||
|
||||
//! Modifies the edge line type (same as SetLineType())
|
||||
void SetEdgeLineType (Aspect_TypeOfLine theType) { myLineType = theType; }
|
||||
|
||||
//! Return width for edges in pixels (same as LineWidth()).
|
||||
Standard_ShortReal EdgeWidth() const { return myLineWidth; }
|
||||
|
||||
//! Modifies the edge thickness (same as SetLineWidth())
|
||||
void SetEdgeWidth (Standard_Real theWidth) { SetLineWidth ((Standard_ShortReal )theWidth); }
|
||||
|
||||
//! Returns TRUE if drawing element edges should discard first edge in triangle; FALSE by default.
|
||||
//! Graphics hardware works mostly with triangles, so that wireframe presentation will draw triangle edges by default.
|
||||
//! This flag allows rendering wireframe presentation of quad-only array split into triangles.
|
||||
//! For this, quads should be split in specific order, so that the quad diagonal (to be NOT rendered) goes first:
|
||||
//! 1------2
|
||||
//! / / Triangle #1: 2-0-1; Triangle #2: 0-2-3
|
||||
//! 0------3
|
||||
bool ToSkipFirstEdge() const { return myToSkipFirstEdge; }
|
||||
|
||||
//! Set skip first triangle edge flag for drawing wireframe presentation of quads array split into triangles.
|
||||
void SetSkipFirstEdge (bool theToSkipFirstEdge) { myToSkipFirstEdge = theToSkipFirstEdge; }
|
||||
|
||||
//! Returns TRUE if silhouette (outline) should be drawn (with edge color and width); FALSE by default.
|
||||
bool ToDrawSilhouette() const { return myToDrawSilhouette; }
|
||||
|
||||
//! Enables/disables drawing silhouette (outline).
|
||||
void SetDrawSilhouette (bool theToDraw) { myToDrawSilhouette = theToDraw; }
|
||||
|
||||
public:
|
||||
|
||||
//! Returns the hatch type used when InteriorStyle is IS_HATCH
|
||||
const Handle(Graphic3d_HatchStyle)& HatchStyle() const { return myHatchStyle; }
|
||||
|
||||
//! Modifies the hatch type used when InteriorStyle is IS_HATCH
|
||||
void SetHatchStyle (const Handle(Graphic3d_HatchStyle)& theStyle) { myHatchStyle = theStyle; }
|
||||
|
||||
//! Modifies the hatch type used when InteriorStyle is IS_HATCH
|
||||
//! @warning This method always creates a new handle for a given hatch style
|
||||
void SetHatchStyle (const Aspect_HatchStyle theStyle)
|
||||
{
|
||||
if (theStyle == Aspect_HS_SOLID)
|
||||
{
|
||||
myHatchStyle.Nullify();
|
||||
return;
|
||||
}
|
||||
|
||||
myHatchStyle = new Graphic3d_HatchStyle (theStyle);
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
//! Check for equality with another aspects.
|
||||
bool IsEqual (const Graphic3d_Aspects& theOther)
|
||||
{
|
||||
if (this == &theOther)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return myProgram == theOther.myProgram
|
||||
&& myTextureSet == theOther.myTextureSet
|
||||
&& myMarkerImage == theOther.myMarkerImage
|
||||
&& myInteriorColor == theOther.myInteriorColor
|
||||
&& myBackInteriorColor == theOther.myBackInteriorColor
|
||||
&& myFrontMaterial == theOther.myFrontMaterial
|
||||
&& myBackMaterial == theOther.myBackMaterial
|
||||
&& myInteriorStyle == theOther.myInteriorStyle
|
||||
&& myShadingModel == theOther.myShadingModel
|
||||
&& myAlphaMode == theOther.myAlphaMode
|
||||
&& myAlphaCutoff == theOther.myAlphaCutoff
|
||||
&& myLineType == theOther.myLineType
|
||||
&& myEdgeColor == theOther.myEdgeColor
|
||||
&& myLineWidth == theOther.myLineWidth
|
||||
&& myMarkerType == theOther.myMarkerType
|
||||
&& myMarkerScale == theOther.myMarkerScale
|
||||
&& myHatchStyle == theOther.myHatchStyle
|
||||
&& myTextFont == theOther.myTextFont
|
||||
&& myPolygonOffset == theOther.myPolygonOffset
|
||||
&& myTextStyle == theOther.myTextStyle
|
||||
&& myTextDisplayType == theOther.myTextDisplayType
|
||||
&& myTextFontAspect == theOther.myTextFontAspect
|
||||
&& myTextAngle == theOther.myTextAngle
|
||||
&& myToSkipFirstEdge == theOther.myToSkipFirstEdge
|
||||
&& myToDistinguishMaterials == theOther.myToDistinguishMaterials
|
||||
&& myToDrawEdges == theOther.myToDrawEdges
|
||||
&& myToDrawSilhouette == theOther.myToDrawSilhouette
|
||||
&& myToSuppressBackFaces == theOther.myToSuppressBackFaces
|
||||
&& myToMapTexture == theOther.myToMapTexture
|
||||
&& myIsTextZoomable == theOther.myIsTextZoomable;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
Handle(Graphic3d_ShaderProgram) myProgram;
|
||||
Handle(Graphic3d_TextureSet) myTextureSet;
|
||||
Handle(Graphic3d_MarkerImage) myMarkerImage;
|
||||
Handle(Graphic3d_HatchStyle) myHatchStyle;
|
||||
Handle(TCollection_HAsciiString) myTextFont;
|
||||
Graphic3d_MaterialAspect myFrontMaterial;
|
||||
Graphic3d_MaterialAspect myBackMaterial;
|
||||
|
||||
Quantity_ColorRGBA myInteriorColor;
|
||||
Quantity_ColorRGBA myBackInteriorColor;
|
||||
Quantity_ColorRGBA myEdgeColor;
|
||||
|
||||
Graphic3d_PolygonOffset myPolygonOffset;
|
||||
Aspect_InteriorStyle myInteriorStyle;
|
||||
Graphic3d_TypeOfShadingModel myShadingModel;
|
||||
Graphic3d_AlphaMode myAlphaMode;
|
||||
Standard_ShortReal myAlphaCutoff;
|
||||
|
||||
Aspect_TypeOfLine myLineType;
|
||||
Standard_ShortReal myLineWidth;
|
||||
|
||||
Aspect_TypeOfMarker myMarkerType;
|
||||
Standard_ShortReal myMarkerScale;
|
||||
|
||||
Aspect_TypeOfStyleText myTextStyle;
|
||||
Aspect_TypeOfDisplayText myTextDisplayType;
|
||||
Font_FontAspect myTextFontAspect;
|
||||
Standard_ShortReal myTextAngle;
|
||||
|
||||
bool myToSkipFirstEdge;
|
||||
bool myToDistinguishMaterials;
|
||||
bool myToDrawEdges;
|
||||
bool myToDrawSilhouette;
|
||||
bool myToSuppressBackFaces;
|
||||
bool myToMapTexture;
|
||||
bool myIsTextZoomable;
|
||||
|
||||
};
|
||||
|
||||
DEFINE_STANDARD_HANDLE(Graphic3d_Aspects, Standard_Transient)
|
||||
|
||||
#endif // _Graphic3d_Aspects_HeaderFile
|
@@ -211,68 +211,6 @@ void Graphic3d_Group::Update() const
|
||||
myStructure->StructureManager()->Update();
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : IsGroupPrimitivesAspectSet
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Standard_Boolean Graphic3d_Group::IsGroupPrimitivesAspectSet (const Graphic3d_GroupAspect theAspect) const
|
||||
{
|
||||
switch (theAspect)
|
||||
{
|
||||
case Graphic3d_ASPECT_LINE: return !LineAspect().IsNull();
|
||||
case Graphic3d_ASPECT_TEXT: return !TextAspect().IsNull();
|
||||
case Graphic3d_ASPECT_MARKER: return !MarkerAspect().IsNull();
|
||||
case Graphic3d_ASPECT_FILL_AREA: return !FillAreaAspect().IsNull();
|
||||
default: return Standard_False;
|
||||
}
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : GroupPrimitivesAspect
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
void Graphic3d_Group::GroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& theAspLine,
|
||||
const Handle(Graphic3d_AspectText3d)& theAspText,
|
||||
const Handle(Graphic3d_AspectMarker3d)& theAspMarker,
|
||||
const Handle(Graphic3d_AspectFillArea3d)& theAspFill) const
|
||||
{
|
||||
if (!theAspLine.IsNull())
|
||||
{
|
||||
Handle(Graphic3d_AspectLine3d) aLineAspect = LineAspect();
|
||||
if (!aLineAspect.IsNull())
|
||||
{
|
||||
*theAspLine.operator->() = *aLineAspect;
|
||||
}
|
||||
}
|
||||
|
||||
if (!theAspText.IsNull())
|
||||
{
|
||||
Handle(Graphic3d_AspectText3d) aTextAspect = TextAspect();
|
||||
if (!aTextAspect.IsNull())
|
||||
{
|
||||
*theAspText.operator->() = *aTextAspect;
|
||||
}
|
||||
}
|
||||
|
||||
if (!theAspMarker.IsNull())
|
||||
{
|
||||
Handle(Graphic3d_AspectMarker3d) aMarkerAspect = MarkerAspect();
|
||||
if (!aMarkerAspect.IsNull())
|
||||
{
|
||||
*theAspMarker.operator->() = *aMarkerAspect;
|
||||
}
|
||||
}
|
||||
|
||||
if (!theAspFill.IsNull())
|
||||
{
|
||||
Handle(Graphic3d_AspectFillArea3d) aFillAspect = FillAreaAspect();
|
||||
if (!aFillAspect.IsNull())
|
||||
{
|
||||
*theAspFill.operator->() = *aFillAspect;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : AddPrimitiveArray
|
||||
// purpose :
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user