mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-05-16 10:54:53 +03:00
0022332: Fix for Visual3d_Layer (linetype, linewidth and transparency)
Changes: There are following changes in packages: OpenGl package: 1) The method that sets the line attributes in layer mode call_togl_set_line_attributes has been modified. Now it doesn't depends on static flag variables, instead of it method tries to acquire the current OpenGl attribute flags. 2) The layer begin/end methods call_togl_begin_layer2d / call_togl_end_layer2d has been modified to keep the OpenGl attribute flags unchanged. 3) The maximum count of predefined line styles for OpenGl driver has been defined as TEL_LS_MAX in InterfaceGraphic.hxx, this value is used during the line style list creation in TsmInitAttributes. InterfaceGraphic package: 1) The maximum count of default line styles has been defined as TEL_LS_MAX in InterfaceGraphic.hxx ViewerTest package: 1) DRAW command "vlayerline" has been added to test linewidth, linetype and transparency of the Visual3d_Layer class. The command draws a line and has the following arguments: >> vlayerline x1 y1 x2 y2 [linewidth=0.5] [linetype=0] [transparency=1.0] Linewidth in pixels, Transparency in range [0.0-1.0].
This commit is contained in:
parent
d0ad288a66
commit
20637bd27c
@ -29,6 +29,11 @@
|
||||
#include <Aspect_PrintAlgo.hxx>
|
||||
#include <Image_PixMap.hxx>
|
||||
#include <TColStd_SequenceOfInteger.hxx>
|
||||
#include <Visual3d_Layer.hxx>
|
||||
#include <Visual3d_LayerItem.hxx>
|
||||
#include <V3d_LayerMgr.hxx>
|
||||
#include <V3d_LayerMgrPointer.hxx>
|
||||
#include <Aspect_TypeOfLine.hxx>
|
||||
|
||||
#ifdef WNT
|
||||
#undef DrawText
|
||||
@ -2224,6 +2229,167 @@ void V3d_TextItem::RedrawLayerPrs ()
|
||||
myLayer->DrawText (myText.ToCString (), myX1, myY1, myHeight);
|
||||
}
|
||||
|
||||
DEFINE_STANDARD_HANDLE(V3d_LineItem, Visual3d_LayerItem)
|
||||
|
||||
// The Visual3d_LayerItem line item for "vlayerline" command
|
||||
// it provides a presentation of line with user-defined
|
||||
// linewidth, linetype and transparency.
|
||||
class V3d_LineItem : public Visual3d_LayerItem
|
||||
{
|
||||
public:
|
||||
// CASCADE RTTI
|
||||
DEFINE_STANDARD_RTTI(V3d_LineItem)
|
||||
|
||||
// constructor
|
||||
Standard_EXPORT V3d_LineItem(Standard_Real X1, Standard_Real Y1,
|
||||
Standard_Real X2, Standard_Real Y2,
|
||||
V3d_LayerMgrPointer theLayerMgr,
|
||||
Aspect_TypeOfLine theType = Aspect_TOL_SOLID,
|
||||
Standard_Real theWidth = 0.5,
|
||||
Standard_Real theTransp = 1.0);
|
||||
|
||||
// redraw method
|
||||
Standard_EXPORT void RedrawLayerPrs();
|
||||
|
||||
private:
|
||||
|
||||
Standard_Real myX1, myY1, myX2, myY2;
|
||||
Standard_Real myWidth;
|
||||
Standard_Real myTransparency;
|
||||
Aspect_TypeOfLine myType;
|
||||
V3d_LayerMgrPointer myLayerMgr;
|
||||
};
|
||||
|
||||
IMPLEMENT_STANDARD_HANDLE(V3d_LineItem, Visual3d_LayerItem)
|
||||
IMPLEMENT_STANDARD_RTTIEXT(V3d_LineItem, Visual3d_LayerItem)
|
||||
|
||||
// default constructor for line item
|
||||
V3d_LineItem::V3d_LineItem(Standard_Real X1, Standard_Real Y1,
|
||||
Standard_Real X2, Standard_Real Y2,
|
||||
V3d_LayerMgrPointer theLayerMgr,
|
||||
Aspect_TypeOfLine theType,
|
||||
Standard_Real theWidth,
|
||||
Standard_Real theTransp) :
|
||||
myX1(X1), myY1(Y1), myX2(X2), myY2(Y2), myLayerMgr(theLayerMgr),
|
||||
myType(theType), myWidth(theWidth), myTransparency(theTransp)
|
||||
{
|
||||
if (myLayerMgr && myLayerMgr->Overlay())
|
||||
myLayerMgr->Overlay()->AddLayerItem (this);
|
||||
}
|
||||
|
||||
// render line
|
||||
void V3d_LineItem::RedrawLayerPrs ()
|
||||
{
|
||||
Handle (Visual3d_Layer) aOverlay;
|
||||
|
||||
if (myLayerMgr)
|
||||
aOverlay = myLayerMgr->Overlay();
|
||||
|
||||
if (!aOverlay.IsNull())
|
||||
{
|
||||
Quantity_Color aColor(1.0, 0, 0, Quantity_TOC_RGB);
|
||||
aOverlay->SetColor(aColor);
|
||||
aOverlay->SetTransparency((Standard_ShortReal)myTransparency);
|
||||
aOverlay->SetLineAttributes((Aspect_TypeOfLine)myType, myWidth);
|
||||
aOverlay->BeginPolyline();
|
||||
aOverlay->AddVertex(myX1, myY1);
|
||||
aOverlay->AddVertex(myX2, myY2);
|
||||
aOverlay->ClosePrimitive();
|
||||
}
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
//function : VLayerLine
|
||||
//purpose : Draws line in the v3d view layer with given attributes: linetype,
|
||||
// : linewidth, transparency coefficient
|
||||
//============================================================================
|
||||
static int VLayerLine(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
|
||||
{
|
||||
// get the active view
|
||||
Handle(V3d_View) aView = ViewerTest::CurrentView();
|
||||
if (aView.IsNull())
|
||||
{
|
||||
di << "Call vinit before!\n";
|
||||
return 1;
|
||||
}
|
||||
else if (argc < 5)
|
||||
{
|
||||
di << "Use: " << argv[0];
|
||||
di << " x1 y1 x2 y2 [linewidth = 0.5] [linetype = 0] [transparency = 1]\n";
|
||||
di << " linetype : { 0 | 1 | 2 | 3 } \n";
|
||||
di << " 0 - solid \n";
|
||||
di << " 1 - dashed \n";
|
||||
di << " 2 - dot \n";
|
||||
di << " 3 - dashdot\n";
|
||||
di << " transparency : { 0.0 - 1.0 } \n";
|
||||
di << " 0.0 - transparent\n";
|
||||
di << " 1.0 - visible \n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// get the input params
|
||||
Standard_Real X1 = atof(argv[1]);
|
||||
Standard_Real Y1 = atof(argv[2]);
|
||||
Standard_Real X2 = atof(argv[3]);
|
||||
Standard_Real Y2 = atof(argv[4]);
|
||||
|
||||
Standard_Real aWidth = 0.5;
|
||||
Standard_Integer aType = 0;
|
||||
Standard_Real aTransparency = 1.0;
|
||||
|
||||
// has width
|
||||
if (argc > 5)
|
||||
aWidth = atof(argv[5]);
|
||||
|
||||
// has type
|
||||
if (argc > 6)
|
||||
aType = (Standard_Integer) atoi(argv[6]);
|
||||
|
||||
// has transparency
|
||||
if (argc > 7)
|
||||
{
|
||||
aTransparency = atof(argv[7]);
|
||||
if (aTransparency < 0 || aTransparency > 1.0)
|
||||
aTransparency = 1.0;
|
||||
}
|
||||
|
||||
// select appropriate line type
|
||||
Aspect_TypeOfLine aLineType;
|
||||
switch (aType)
|
||||
{
|
||||
case 1:
|
||||
aLineType = Aspect_TOL_DASH;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
aLineType = Aspect_TOL_DOT;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
aLineType = Aspect_TOL_DOTDASH;
|
||||
break;
|
||||
|
||||
default:
|
||||
aLineType = Aspect_TOL_SOLID;
|
||||
}
|
||||
|
||||
// replace layer manager
|
||||
Handle(V3d_LayerMgr) aMgr = new V3d_LayerMgr(aView);
|
||||
aView->SetLayerMgr(aMgr);
|
||||
|
||||
// add line item
|
||||
Handle (V3d_LineItem) anItem = new V3d_LineItem(X1, Y1, X2, Y2,
|
||||
aMgr.operator->(),
|
||||
aLineType, aWidth,
|
||||
aTransparency);
|
||||
|
||||
// update view
|
||||
aView->MustBeResized();
|
||||
aView->Redraw();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : VOverlayText
|
||||
//purpose : Test text displaying in view overlay
|
||||
@ -2412,4 +2578,7 @@ void ViewerTest::ViewerCommands(Draw_Interpretor& theCommands)
|
||||
" : display_type = {normal/subtitle/decal/blend}, (default=normal) "
|
||||
" : background_color - three values: RedColor GreenColor BlueColor (default = 255.0 255.0 255.0), the parameter is defined for subtitle and decal display types ",
|
||||
__FILE__,VOverlayText,group);
|
||||
theCommands.Add("vlayerline",
|
||||
"vlayerline : vlayerline x1 y1 x2 y2 [linewidth=0.5] [linetype=0] [transparency=1.0]",
|
||||
__FILE__,VLayerLine,group);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user