本文整理汇总了C++中wxPen::GetDashes方法的典型用法代码示例。如果您正苦于以下问题:C++ wxPen::GetDashes方法的具体用法?C++ wxPen::GetDashes怎么用?C++ wxPen::GetDashes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类wxPen
的用法示例。
在下文中一共展示了wxPen::GetDashes方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Set
void wxGenericPen::Set( const wxPen &pen )
{
wxCHECK_RET(Ok() && pen.Ok(), wxT("Invalid generic pen"));
SetColour(pen.GetColour());
M_GPENDATA->m_width = pen.GetWidth();
M_GPENDATA->m_style = pen.GetStyle();
M_GPENDATA->m_cap = pen.GetCap();
M_GPENDATA->m_join = pen.GetJoin();
wxDash* dash;
int n_dashes = pen.GetDashes(&dash);
SetDashes(n_dashes, dash);
// or SetDashes(pen.GetDashCount(), pen.GetDash()); not in msw 2.4
}
示例2: DrawThickLine
// Draws a line between (x1,y1) - (x2,y2) with a start thickness of t1
void DrawThickLine( double x1, double y1, double x2, double y2, wxPen pen, bool b_hiqual )
{
double angle = atan2( y2 - y1, x2 - x1 );
double t1 = pen.GetWidth();
double t2sina1 = t1 / 2 * sin( angle );
double t2cosa1 = t1 / 2 * cos( angle );
glPushAttrib( GL_COLOR_BUFFER_BIT | GL_HINT_BIT | GL_POLYGON_BIT ); //Save state
ocpnDC::SetGLAttrs( b_hiqual );
// n.b. The dwxDash interpretation for GL only allows for 2 elements in the dash table.
// The first is assumed drawn, second is assumed space
wxDash *dashes;
int n_dashes = pen.GetDashes( &dashes );
if( n_dashes ) {
double lpix = sqrt( ( x1 - x2 ) * ( x1 - x2 ) + ( y1 - y2 ) * ( y1 - y2 ) );
double lrun = 0.;
double xa = x1;
double ya = y1;
double ldraw = t1 * dashes[0];
double lspace = t1 * dashes[1];
while( lrun < lpix ) {
// Dash
double xb = xa + ldraw * cos( angle );
double yb = ya + ldraw * sin( angle );
if( ( lrun + ldraw ) >= lpix ) // last segment is partial draw
{
xb = x2;
yb = y2;
}
glBegin( GL_TRIANGLES );
glVertex2f( xa + t2sina1, ya - t2cosa1 );
glVertex2f( xb + t2sina1, yb - t2cosa1 );
glVertex2f( xb - t2sina1, yb + t2cosa1 );
glVertex2f( xb - t2sina1, yb + t2cosa1 );
glVertex2f( xa - t2sina1, ya + t2cosa1 );
glVertex2f( xa + t2sina1, ya - t2cosa1 );
glEnd();
xa = xb;
ya = yb;
lrun += ldraw;
// Space
xb = xa + lspace * cos( angle );
yb = ya + lspace * sin( angle );
xa = xb;
ya = yb;
lrun += lspace;
}
} else {
glBegin( GL_TRIANGLES );
glVertex2f( x1 + t2sina1, y1 - t2cosa1 );
glVertex2f( x2 + t2sina1, y2 - t2cosa1 );
glVertex2f( x2 - t2sina1, y2 + t2cosa1 );
glVertex2f( x2 - t2sina1, y2 + t2cosa1 );
glVertex2f( x1 - t2sina1, y1 + t2cosa1 );
glVertex2f( x1 + t2sina1, y1 - t2cosa1 );
glEnd();
}
glPopAttrib();
}
示例3: DrawGLThickLines
// Draws thick lines from triangles
void DrawGLThickLines( int n, wxPoint points[],wxCoord xoffset,
wxCoord yoffset, wxPen pen, bool b_hiqual )
{
#ifdef ocpnUSE_GL
if(n < 2)
return;
/* for dashed case, for now just draw thick lines */
wxDash *dashes;
if( pen.GetDashes( &dashes ) )
{
wxPoint p0 = points[0];
for( int i = 1; i < n; i++ ) {
DrawGLThickLine( p0.x + xoffset, p0.y + yoffset, points[i].x + xoffset,
points[i].y + yoffset, pen, b_hiqual );
p0 = points[i];
}
return;
}
/* cull zero segments */
wxPoint *cpoints = new wxPoint[n];
cpoints[0] = points[0];
int c = 1;
for( int i = 1; i < n; i++ ) {
if(points[i].x != points[i-1].x || points[i].y != points[i-1].y)
cpoints[c++] = points[i];
}
/* nicer than than rendering each segment separately, this is because thick
line segments drawn as rectangles which have different angles have
rectangles which overlap and also leave a gap.
This code properly calculates vertexes for adjoining segments */
float t1 = pen.GetWidth();
float x0 = cpoints[0].x, y0 = cpoints[0].y, x1 = cpoints[1].x, y1 = cpoints[1].y;
float a0 = atan2f( y1 - y0, x1 - x0 );
// It is also possible to use triangle strip, (and triangle fan for endcap)
// to reduce vertex count.. is it worth it?
glBegin( GL_TRIANGLES );
float t2sina0 = t1 / 2 * sinf( a0 );
float t2cosa0 = t1 / 2 * cosf( a0 );
for( int i = 1; i < c; i++ ) {
float x2, y2;
float a1;
if(i < c - 1) {
x2 = cpoints[i + 1].x, y2 = cpoints[i + 1].y;
a1 = atan2f( y2 - y1, x2 - x1 );
} else {
x2 = x1, y2 = y1;
a1 = a0;
}
float aa = (a0 + a1) / 2;
float diff = fabsf(a0 - a1);
if(diff > M_PI)
diff -= 2 * (float)M_PI;
float rad = t1 / 2 / wxMax(cosf(diff / 2), .4);
float t2sina1 = rad * sinf( aa );
float t2cosa1 = rad * cosf( aa );
glVertex2f( x1 + t2sina1, y1 - t2cosa1 );
glVertex2f( x1 - t2sina1, y1 + t2cosa1 );
glVertex2f( x0 + t2sina0, y0 - t2cosa0 );
glVertex2f( x0 - t2sina0, y0 + t2cosa0 );
glVertex2f( x0 + t2sina0, y0 - t2cosa0 );
float dot = t2sina0 * t2sina1 + t2cosa0 * t2cosa1;
if(dot > 0)
glVertex2f( x1 - t2sina1, y1 + t2cosa1 );
else
glVertex2f( x1 + t2sina1, y1 - t2cosa1 );
x0 = x1, x1 = x2;
y0 = y1, y1 = y2;
a0 = a1;
t2sina0 = t2sina1, t2cosa0 = t2cosa1;
}
if(pen.GetCap() == wxCAP_ROUND) {
DrawEndCap( x0, y0, t1, a0);
DrawEndCap( x0, y0, t1, a0 + M_PI);
}
glEnd();
glPopAttrib();
delete [] cpoints;
#endif
}
示例4: DrawGLThickLine
// Draws a line between (x1,y1) - (x2,y2) with a start thickness of t1
void DrawGLThickLine( float x1, float y1, float x2, float y2, wxPen pen, bool b_hiqual )
{
#ifdef ocpnUSE_GL
float angle = atan2f( y2 - y1, x2 - x1 );
float t1 = pen.GetWidth();
float t2sina1 = t1 / 2 * sinf( angle );
float t2cosa1 = t1 / 2 * cosf( angle );
glBegin( GL_TRIANGLES );
// n.b. The dwxDash interpretation for GL only allows for 2 elements in the dash table.
// The first is assumed drawn, second is assumed space
wxDash *dashes;
int n_dashes = pen.GetDashes( &dashes );
if( n_dashes ) {
float lpix = sqrtf( powf( (float) (x1 - x2), 2) + powf( (float) (y1 - y2), 2) );
float lrun = 0.;
float xa = x1;
float ya = y1;
float ldraw = t1 * dashes[0];
float lspace = t1 * dashes[1];
while( lrun < lpix ) {
// Dash
float xb = xa + ldraw * cosf( angle );
float yb = ya + ldraw * sinf( angle );
if( ( lrun + ldraw ) >= lpix ) // last segment is partial draw
{
xb = x2;
yb = y2;
}
glVertex2f( xa + t2sina1, ya - t2cosa1 );
glVertex2f( xb + t2sina1, yb - t2cosa1 );
glVertex2f( xb - t2sina1, yb + t2cosa1 );
glVertex2f( xb - t2sina1, yb + t2cosa1 );
glVertex2f( xa - t2sina1, ya + t2cosa1 );
glVertex2f( xa + t2sina1, ya - t2cosa1 );
xa = xb;
ya = yb;
lrun += ldraw;
// Space
xb = xa + lspace * cos( angle );
yb = ya + lspace * sin( angle );
xa = xb;
ya = yb;
lrun += lspace;
}
} else {
glVertex2f( x1 + t2sina1, y1 - t2cosa1 );
glVertex2f( x2 + t2sina1, y2 - t2cosa1 );
glVertex2f( x2 - t2sina1, y2 + t2cosa1 );
glVertex2f( x2 - t2sina1, y2 + t2cosa1 );
glVertex2f( x1 - t2sina1, y1 + t2cosa1 );
glVertex2f( x1 + t2sina1, y1 - t2cosa1 );
/* wx draws a nice rounded end in dc mode, so replicate
this for opengl mode, should this be done for the dashed mode case? */
if(pen.GetCap() == wxCAP_ROUND) {
DrawEndCap( x1, y1, t1, angle);
DrawEndCap( x2, y2, t1, angle + M_PI);
}
}
glEnd();
#endif
}