本文整理汇总了C++中wxMemoryDC::DrawLine方法的典型用法代码示例。如果您正苦于以下问题:C++ wxMemoryDC::DrawLine方法的具体用法?C++ wxMemoryDC::DrawLine怎么用?C++ wxMemoryDC::DrawLine使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类wxMemoryDC
的用法示例。
在下文中一共展示了wxMemoryDC::DrawLine方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void
TstLayer_t::paint_cursor(wxCoord cx, wxCoord cy)
{
wxSize sz;
_drawbegin();
sz = mDC->GetSize();
mDC->Clear();
mDC->DrawLine(cx, 0, cx, sz.GetHeight());
mDC->DrawLine(0, cy, sz.GetWidth(), cy);
_drawend();
}
示例2: DrawSolvePath
void DrawSolvePath(wxMemoryDC &mem)
{
unsigned int route_count=0;
unsigned int x=0,y=0;
wxBrush yellowback(wxColour(255,255,0),wxSOLID);
wxPen yellow(wxColour(255,255,0),1,wxSOLID);
while ( GetRouteWaypoint(GetWorldHandler(),0,route_count,&x,&y) == 1 )
{
mem.SetPen(yellow);
mem.SetBrush(yellowback);
mem.DrawRectangle(x*map_box_size,y*map_box_size,map_box_size,map_box_size);
++route_count;
}
//printf("Drawing Level 1 Lines \n");
wxPen redfat(wxColour(255,0,0),3,wxSOLID);
unsigned int oldx=0,oldy=0;
if ( GetStraightRouteWaypoint(GetWorldHandler(),OURROBOT,0,&oldx,&oldy)==1 ) { mem.DrawCircle(oldx*10+5,oldy*10+5,3); }
route_count=1;
while ( GetStraightRouteWaypoint(GetWorldHandler(),OURROBOT,route_count,&x,&y)==1 )
{
mem.SetPen(redfat);
mem.DrawCircle(x*map_box_size+map_box_size_half,y*map_box_size+map_box_size_half,3);
mem.DrawLine(oldx*map_box_size+map_box_size_half,oldy*map_box_size+map_box_size_half,x*map_box_size+map_box_size_half,y*map_box_size+map_box_size_half);
++route_count;
oldx = x , oldy = y ;
}
return;
}
示例3: DrawCurrentValues
void StripChart::DrawCurrentValues(wxMemoryDC &dc){
//see if data was logged for the mouse location
int dataBufferSize = _dataBuffer.size();
float zoomFactor = (float)_zoomPercentage / 100.0;
int dataBufferIndex = dataBufferSize - (int)(((float)(_currentWidth - _mouseX)) / zoomFactor) - 1;
//adjust for uboundoffset
dataBufferIndex-=((dataBufferSize - 1) -_currentDataBufferUBound);
if (dataBufferIndex < 0 || dataBufferIndex >= dataBufferSize) return;
dc.SetPen(*wxThePenList->FindOrCreatePen(*wxWHITE, 1, wxSOLID));
dc.DrawLine(_mouseX, 0, _mouseX, _currentHeight);
int currentOffset = 0;
StripChartLogItem logItem = _dataBuffer[dataBufferIndex];
wxDateTime timestamp = logItem.GetTimestamp();
wxDateTime fromTime;
switch(_timespanMode){
case TIMESPAN_FROM_LAST_LOG_ENTRY:
{
StripChartLogItem lastLogItem = _dataBuffer[dataBufferSize - 1];
fromTime = lastLogItem.GetTimestamp();
break;
}
case TIMESPAN_FROM_NOW:
fromTime = wxDateTime::UNow();
break;
}
wxTimeSpan span = (fromTime - timestamp);
wxString timeString = wxString::Format("%d seconds back",(int)span.GetSeconds().ToLong());
wxFont labelFont = GetFont();
int labelWidth,labelHeight,descent,externalLeading;
dc.GetTextExtent(timeString, &labelHeight, &labelWidth, &descent, &externalLeading, &labelFont);
dc.SetTextForeground(*wxWHITE);
dc.DrawRotatedText(timeString, _mouseX - labelWidth, _mouseY,90);
for (LogItemTypes::iterator it = _logItemTypes.begin(); it != _logItemTypes.end(); ++it){
wxString key = it->first;
LogItemType *logItemType = it->second;
ChartScale *scale = &_chartScales[logItemType->scaleId];
dc.SetTextForeground(logItemType->lineColor);
int value = logItem[logItemType->typeKey];
wxString valueString = logItemType->typeLabel + ": " + wxString::Format("%d",value) + " " +scale->scaleLabel;
dc.GetTextExtent(valueString, &labelHeight, &labelWidth, &descent, &externalLeading, &labelFont);
currentOffset += labelWidth;
dc.DrawRotatedText(valueString,_mouseX - labelHeight - 15, _mouseY - currentOffset,0);
}
}
示例4: DrawMouseoverMarker
void LineChart::DrawMouseoverMarker(wxMemoryDC &dc){
dc.SetPen(*wxThePenList->FindOrCreatePen(*wxWHITE, 1, wxSOLID));
dc.DrawLine(m_mouseX, 0, m_mouseX, _currentHeight);
size_t dataIndex = (size_t)(((double)GetMaxSeriesBufferSize()) * m_viewOffsetFactor) + m_mouseX - m_leftEdge;
DrawCurrentValues(dc, dataIndex, m_mouseX, m_mouseY);
}
示例5: DrawGrid
void LineChart::DrawGrid(wxMemoryDC &dc){
dc.SetPen(*wxThePenList->FindOrCreatePen(wxColor(40,40,40), 1, wxSOLID));
int width = _currentWidth;
int height = _currentHeight;
float zoomFactor = (float)_zoomPercentage / 100;
int gridIncrement = (int)(GRID_SIZE * zoomFactor);
for (int x = width; x >=0 ; x -= gridIncrement){
dc.DrawLine(x, 0, x, height);
}
float i = 0;
while (i < 1){
int y = (int)(((float)height) * i);
dc.DrawLine(0, y, width, y);
i = i + 0.1;
}
}
示例6: drawJoin
void gqbGraphSimple::drawJoin(wxMemoryDC& bdc, wxPoint& origin, wxPoint& dest, wxPoint& anchorUsed, bool selected=false, type_Join joinKind=_equally)
{
wxPoint origin2=origin;
wxPoint dest2=dest;
if(selected)
{
bdc.SetPen(selectedPen);
bdc.SetBrush(selectedBrush);
}
else
{
bdc.SetPen(*wxBLACK_PEN);
bdc.SetBrush(*wxBLACK_BRUSH);
}
// GQB-TODO: optimize this if possible, I know one other can be the same?
// getAnchorsUsed() [-1==left] [1==right] x->origin y->destination
if(anchorUsed.x==1)
{
bdc.DrawRectangle(origin.x,origin.y-4,8,8);
origin2.x+=20;
}
else
{
bdc.DrawRectangle(origin.x-8,origin.y-4,8,8);
origin2.x-=20;
}
if(anchorUsed.y==1)
{
bdc.DrawRectangle(dest.x,dest.y-4,8,8);
dest2.x+=20;
}
else
{
bdc.DrawRectangle(dest.x-8,dest.y-4,8,8);
dest2.x-=20;
}
bdc.DrawLine(origin,origin2);
bdc.DrawLine(dest,dest2);
bdc.DrawLine(origin2,dest2);
// Draw type of join
switch(joinKind)
{
case _equally:
bdc.DrawText(wxT("="),findLineMiddle(origin2, dest2));
break;
case _lesser:
bdc.DrawText(wxT("<"),findLineMiddle(origin2, dest2));
break;
case _greater:
bdc.DrawText(wxT(">"),findLineMiddle(origin2, dest2));
break;
case _equlesser:
bdc.DrawText(wxT("<="),findLineMiddle(origin2, dest2));
break;
case _equgreater:
bdc.DrawText(wxT(">="),findLineMiddle(origin2, dest2));
break;
};
}
示例7: DrawStartPoint
//.........这里部分代码省略.........
x = r cos q
y = r sin q
x' = r cos ( q + f ) = r cos q cos f - r sin q sin f
y' = r sin ( q + w ) = r sin q cos f + r cos q sin f
hence:
x' = x cos f - y sin f
y' = y cos f + x sin f
We also asume
-,- 0,+ + . -
XL,YL
X4,Y4________________ X1,Y1
| |
XB | * | XF
YB| | YF
|________________|
X3,Y3 X2,Y2
-.+ 0,- + , +
XR,YR
*/
float box_width = robot_length/ (1000*GetMapUnit_In_cm(GetWorldHandler()));
float box_height = robot_width/ (1000*GetMapUnit_In_cm(GetWorldHandler()));
float XA1 = 0.0+box_width/2 ;
float YA1 = 0.0-box_height/2 ;
float XA2 = 0.0+box_width/2 ;
float YA2 = 0.0+box_height/2 ;
float XA3 = 0.0-box_width/2 ;
float YA3 = 0.0+box_height/2 ;
float XA4 = 0.0-box_width/2 ;
float YA4 = 0.0-box_height/2 ;
float XAF = 0.0+box_width/2 ;
float YAF = 0.0;
float XAB= 0.0-box_width/2 ;
float YAB = 0.0;
float XAR = 0.0;
float YAR = 0.0+box_height/2 ;
float XAL = 0.0 ;
float YAL = 0.0-box_height/2 ;
float XB1 , YB1, XB2, YB2, XB3 , YB3, XB4, YB4 , XBF, YBF , XBB, YBB , XBR, YBR , XBL, YBL ;
XB1 = startx + XA1 * cos(heading*PI/180) - YA1 * sin(heading*PI/180);
YB1 = starty + YA1 * cos(heading*PI/180) + XA1 * sin(heading*PI/180);
XB2 = startx + XA2 * cos(heading*PI/180) - YA2 * sin(heading*PI/180);
YB2 = starty + YA2 * cos(heading*PI/180) + XA2 * sin(heading*PI/180);
XB3 = startx + XA3 * cos(heading*PI/180) - YA3 * sin(heading*PI/180);
YB3 = starty + YA3 * cos(heading*PI/180) + XA3 * sin(heading*PI/180);
XB4 = startx + XA4 * cos(heading*PI/180) - YA4 * sin(heading*PI/180);
YB4 = starty + YA4 * cos(heading*PI/180) + XA4 * sin(heading*PI/180);
XBF = startx + XAF * cos(heading*PI/180) - YAF * sin(heading*PI/180);
YBF = starty + YAF * cos(heading*PI/180) + XAF * sin(heading*PI/180);
XBB = startx + XAB * cos(heading*PI/180) - YAB * sin(heading*PI/180);
YBB = starty + YAB * cos(heading*PI/180) + XAB * sin(heading*PI/180);
XBR = startx + XAR * cos(heading*PI/180) - YAR * sin(heading*PI/180);
YBR = starty + YAR * cos(heading*PI/180) + XAR * sin(heading*PI/180);
XBL = startx + XAL * cos(heading*PI/180) - YAL * sin(heading*PI/180);
YBL = starty + YAL * cos(heading*PI/180) + XAL * sin(heading*PI/180);
fprintf(stderr,"We have points %0.2f,%0.2f %0.2f,%0.2f %0.2f,%0.2f %0.2f,%0.2f \n",XB1,YB1,XB2,YB2,XB3,YB3,XB4,YB4);
if ( (startx!=0) || (starty!=0) )
{
mem.SetPen(green);
mem.SetBrush(greenback);
mem.DrawLine((signed int)XB1*map_box_size,(signed int)YB1*map_box_size,(signed int)XB2*map_box_size,(signed int)YB2*map_box_size);
mem.DrawLine((signed int)XB2*map_box_size,(signed int)YB2*map_box_size,(signed int)XB3*map_box_size,(signed int)YB3*map_box_size);
mem.DrawLine((signed int)XB3*map_box_size,(signed int)YB3*map_box_size,(signed int)XB4*map_box_size,(signed int)YB4*map_box_size);
mem.DrawLine((signed int)XB4*map_box_size,(signed int)YB4*map_box_size,(signed int)XB1*map_box_size,(signed int)YB1*map_box_size);
//ARROW
mem.DrawLine((signed int)XBB*map_box_size,(signed int)YBB*map_box_size,(signed int)XBF*map_box_size,(signed int)YBF*map_box_size);
mem.DrawLine((signed int)XBF*map_box_size,(signed int)YBF*map_box_size,(signed int)XBL*map_box_size,(signed int)YBL*map_box_size);
mem.DrawLine((signed int)XBF*map_box_size,(signed int)YBF*map_box_size,(signed int)XBR*map_box_size,(signed int)YBR*map_box_size);
mem.DrawRectangle(startx*map_box_size-1,starty*map_box_size-1,2,2);
}
}
示例8: DrawScale
int LineChart::DrawScale(wxMemoryDC &dc){
int leftOrientationEdge = 0;
int rightOrientationEdge = _currentWidth - 1;
int scaleOrientation = LineChart::ORIENTATION_LEFT;
wxFont labelFont = GetFont();
int tickLabelWidth = 0;
for (SeriesMap::iterator it = m_seriesMap.begin(); it != m_seriesMap.end(); ++it){
int maxLabelWidth = 0;
Series *series = it->second;
Range * range = m_rangeArray[series->GetRangeId()];
double minValue = range->GetMin();
double maxValue = range->GetMax();
double rangeSize = maxValue - minValue;
double stepInterval = (maxValue - minValue) / 10;
if (stepInterval == 0) stepInterval = 1;
dc.SetPen(*wxThePenList->FindOrCreatePen(series->GetColor(), 1, wxSOLID));
dc.SetTextForeground(series->GetColor());
bool labelOn = false;
int tickLabelHeight,tickDescent,tickExternalLeading;
dc.DrawLine(leftOrientationEdge, 0, leftOrientationEdge, _currentHeight);
for (double tick = minValue; tick <=maxValue; tick += stepInterval){
int y = _currentHeight - (double)_currentHeight * ((tick - minValue) / rangeSize);
int nextY = _currentHeight - (double)_currentHeight * ((tick + stepInterval - minValue) / rangeSize);
if (labelOn){
wxString numberFormat = "%." + wxString::Format("%df", range->GetPrecision());
wxString tickLabel = wxString::Format(numberFormat, tick);
dc.GetTextExtent(tickLabel, &tickLabelHeight, &tickLabelWidth, &tickDescent, &tickExternalLeading, &labelFont);
if (tickLabelHeight > maxLabelWidth) maxLabelWidth = tickLabelHeight;
if (tickLabelWidth < y - nextY ){
switch (scaleOrientation){
case LineChart::ORIENTATION_LEFT:
{
dc.DrawRotatedText(tickLabel, leftOrientationEdge, y, 0);
break;
}
case LineChart::ORIENTATION_RIGHT:
{
dc.DrawRotatedText(tickLabel, rightOrientationEdge, y, 0);
break;
}
}
}
}
labelOn = !labelOn;
dc.DrawLine(leftOrientationEdge, y, leftOrientationEdge + tickLabelWidth, y);
}
maxLabelWidth+=(tickLabelWidth / 2);
switch (scaleOrientation){
case LineChart::ORIENTATION_LEFT:
{
leftOrientationEdge += (maxLabelWidth);
break;
}
case LineChart::ORIENTATION_RIGHT:
{
rightOrientationEdge -= (maxLabelWidth);
break;
}
}
}
return leftOrientationEdge;
}
示例9: DrawScale
void StripChart::DrawScale(wxMemoryDC &dc){
int leftOrientationEdge = 0;
int rightOrientationEdge = _currentWidth - 1;
wxFont labelFont = GetFont();
for (LogItemTypes::iterator it = _logItemTypes.begin(); it != _logItemTypes.end(); ++it){
wxString key = it->first;
LogItemType *logItemType = it->second;
ChartScale *scale = &_chartScales[logItemType->scaleId];
ChartScale::UNITS_DISPLAY_ORIENTATION orientation = scale->displayOrientation;
double stepInterval = scale->stepInterval;
double minValue = scale->minValue;
double maxValue = scale->maxValue;
dc.SetPen(*wxThePenList->FindOrCreatePen(logItemType->lineColor, 1, wxSOLID));
wxString chartLabel = logItemType->typeLabel + " ( " + scale->scaleLabel + " )";
int labelWidth,labelHeight,descent,externalLeading;
dc.GetTextExtent(chartLabel, &labelHeight, &labelWidth, &descent, &externalLeading, &labelFont);
dc.SetTextForeground(logItemType->lineColor);
int verticalMiddleOfChart = _currentHeight / 2;
int tickFromX = 0;
int tickToX = 0;
bool showLabels;
showLabels = (_currentHeight > labelHeight * 2 );
switch (orientation){
case ChartScale::ORIENTATION_LEFT:
{
if (showLabels) dc.DrawRotatedText(chartLabel,leftOrientationEdge, verticalMiddleOfChart + (labelHeight / 2),90);
leftOrientationEdge += labelWidth;
tickFromX = leftOrientationEdge;
leftOrientationEdge += 5;
tickToX = leftOrientationEdge;
dc.DrawLine(tickFromX, 0 , tickFromX, _currentHeight);
break;
}
case ChartScale::ORIENTATION_RIGHT:
{
if (showLabels) dc.DrawRotatedText(chartLabel, rightOrientationEdge, verticalMiddleOfChart - (labelHeight / 2), 270);
rightOrientationEdge -= labelWidth;
tickToX = rightOrientationEdge;
rightOrientationEdge -= 5;
tickFromX = rightOrientationEdge;
dc.DrawLine(tickToX, 0 , tickToX, _currentHeight);
break;
}
}
bool labelOn = false;
int tickLabelWidth,tickLabelHeight,tickDescent,tickExternalLeading;
for (double tick = minValue; tick <=maxValue; tick = tick + stepInterval){
double percentageOfMax = (tick - minValue) / (maxValue - minValue);
int y = _currentHeight - (int)(((double)_currentHeight) * percentageOfMax);
dc.DrawLine(tickFromX, y, tickToX, y);
if (labelOn){
wxString tickLabel;
tickLabel.Printf("%d",(int)tick);
dc.GetTextExtent(chartLabel, &tickLabelHeight, &tickLabelWidth, &tickDescent, &tickExternalLeading, &labelFont);
if (showLabels){
switch (orientation){
case ChartScale::ORIENTATION_LEFT:
{
dc.DrawRotatedText(tickLabel, leftOrientationEdge, y + (tickLabelWidth / 2), 90);
break;
}
case ChartScale::ORIENTATION_RIGHT:
{
dc.DrawRotatedText(tickLabel, rightOrientationEdge, y - (tickLabelWidth / 2), 270);
break;
}
}
}
}
labelOn = !labelOn;
}
switch (orientation){
case ChartScale::ORIENTATION_LEFT:
{
leftOrientationEdge += (tickLabelWidth);
break;
}
case ChartScale::ORIENTATION_RIGHT:
{
rightOrientationEdge -= (tickLabelWidth);
break;
}
//.........这里部分代码省略.........