⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display_x11.c

📁 robocup rcssmonitor-11.1.1.zip
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 1999 - 2001, Artur Merke <amerke@ira.uka.de> * * This file is part of FrameView2d. * * FrameView2d is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * FrameView2d is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FrameView2d; see the file COPYING.  If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */#include "display_x11.h"#include <iostream>void DisplayX11::init_area_number() {  area_number= 1;}void DisplayX11::step_area_number() {  area_number++;  if (area_number==0) //skip 0 after rewinding    init_area_number();}DisplayX11::DisplayX11(Display* d,Pixmap p,GC g) : d_xpoints(32), d_xsegments(32), d_xarcs(32) {   disp= d;   pixmap= p;   gc= g;	   init_area_number();}void DisplayX11::ASetPlainArea(const Area2d & a) {  step_area_number();  conv.init_plane( a.center, a.size_x, a.size_y);}void DisplayX11::ASetWindowArea(int width, int height) {  step_area_number();  conv.init_win(width,height);}unsigned long DisplayX11::AGetColor(const RGBcolor & col) {  XColor xcol;  xcol.red= col.get_red();  xcol.green= col.get_green();  xcol.blue= col.get_blue();  if (!XAllocColor(disp, DefaultColormap(disp, 0), &xcol)) {    std::cerr << "\nwarning: problem with allocating color:"              << "\n(red,green,blue)= (" << int(col.red) << "," << int(col.green) << "," << int(col.blue) << ")"              << "\n(Red,Green,Blue)= (" << col.get_red() << "," << col.get_green() << ","<< col.get_blue() << ")"              << "\nresulting in XColor.pixel= " << xcol.pixel              << "\n(XRed,XGreen,XBlue)= (" << xcol.red << "," << xcol.green << ","<< xcol.blue << ")";  }  return xcol.pixel;}#if 0void DisplayX11::ASetForeground(char* color) {  XColor def, closest ;  XAllocNamedColor(disp, DefaultColormap(disp, 0),color, &def, &closest) ;  XSetForeground(disp, gc, closest.pixel) ;}void DisplayX11::ASetBackground(char* color) {  XColor def, closest ;  XAllocNamedColor(disp, DefaultColormap(disp, 0),color, &def, &closest) ;  XSetBackground(disp, gc, closest.pixel) ;}void DisplayX11::AFillRectangle(double a1,double a2,double w,double h) {  XFillRectangle(disp, pixmap, gc, 		 conv.x_Plane_to_x_Win(a1),		 conv.y_Plane_to_y_Win(a2),		 conv.size_x_Plane_to_size_x_Win(w),		 conv.size_y_Plane_to_size_y_Win(h));}#endifvoid DisplayX11::draw_point(DisplayObject * d_obj, const RGBcolor & col, const Point2d & point) {  D_XPoint *myobj;  if (!d_obj) {    myobj= &d_xpoint;    myobj->mark_col_change();    myobj->mark_pos_change();  }  else    myobj= static_cast<D_XPoint*>(d_obj); //dynamic_cast should also work, but it doesn't <- why?  if (myobj->col_change) {     myobj->col_change= false;    myobj->XColor_pixel= AGetColor(col);  }  if (myobj->area_number != area_number) {     myobj->area_number= area_number;     copy_2_XPoint(myobj->p,point);  }  ASetForeground(myobj->XColor_pixel);  XDrawPoint(disp,pixmap,gc, myobj->p.x, myobj->p.y );}void DisplayX11::draw_points(DisplayObject * d_obj, const RGBcolor & col, int num, const Point2d * vec){  D_XPoints *myobj;  if (!d_obj) {    if (d_xpoints.pp.max_size < num)      d_xpoints.pp.set_max_size(num);    d_xpoints.pp.set_cur_size(num);    myobj= &d_xpoints;    myobj->mark_col_change();    myobj->mark_pos_change();  }  else    myobj= static_cast<D_XPoints*>(d_obj); //dynamic_cast should also work, but it doesn't <- why?  //here we have the assumption num= myobj->pp.max_size; i.e. the it is not allowed to change the number of points  if (myobj->col_change) {     myobj->col_change= false;    myobj->XColor_pixel= AGetColor(col);  }  if (myobj->area_number != area_number) {     myobj->area_number= area_number;     copy_2_XPoints(myobj->pp.tab, num, vec);  }  ASetForeground(myobj->XColor_pixel);  XDrawPoints(disp,pixmap,gc,myobj->pp.tab,num,CoordModeOrigin);}void DisplayX11::draw_line(DisplayObject * d_obj, const RGBcolor & col, const Line2d & line){  D_XSegment *myobj;  if (!d_obj) {    myobj= &d_xsegment;    myobj->mark_col_change();    myobj->mark_pos_change();  }  else    myobj= static_cast<D_XSegment*>(d_obj); //dynamic_cast should also work, but it doesn't <- why?  if (myobj->col_change) {     myobj->col_change= false;    myobj->XColor_pixel= AGetColor(col);  }  if (myobj->area_number != area_number) {     myobj->area_number= area_number;     copy_2_XSegment(myobj->s,line);  }  ASetForeground(myobj->XColor_pixel);  XDrawLine(disp,pixmap,gc, myobj->s.x1, myobj->s.y1, myobj->s.x2, myobj->s.y2);}void DisplayX11::draw_lines(DisplayObject * d_obj, const RGBcolor & col, int num, const Line2d * vec){  D_XSegments *myobj;  if (!d_obj) {    if (d_xsegments.ss.max_size < num)      d_xsegments.ss.set_max_size(num);    d_xsegments.ss.set_cur_size(num);    myobj= &d_xsegments;    myobj->mark_col_change();    myobj->mark_pos_change();  }  else    myobj= static_cast<D_XSegments*>(d_obj); //dynamic_cast should also work, but it doesn't <- why?  //here we have the assumption num= myobj->ss.max_size; i.e. the it is not allowed to change the number of points  if (myobj->col_change) {     myobj->col_change= false;    myobj->XColor_pixel= AGetColor(col);  }  if (myobj->area_number != area_number) {     myobj->area_number= area_number;     copy_2_XSegments(myobj->ss.tab, num, vec);  }  ASetForeground(myobj->XColor_pixel);  XDrawSegments(disp,pixmap,gc,myobj->ss.tab,num);}void DisplayX11::draw_circle(DisplayObject * d_obj, const RGBcolor & col, const Circle2d & circle) {  D_XArc *myobj;  if (!d_obj) {    myobj= &d_xarc;    myobj->mark_col_change();    myobj->mark_pos_change();  }  else    myobj= static_cast<D_XArc*>(d_obj); //dynamic_cast should also work, but it doesn't <- why?  if (myobj->col_change) {     myobj->col_change= false;    myobj->XColor_pixel= AGetColor(col);  }  if (myobj->area_number != area_number) {     myobj->area_number= area_number;     copy_2_XArc(myobj->a,circle);  }  ASetForeground(myobj->XColor_pixel);  XDrawArc(disp,pixmap,gc,           myobj->a.x,           myobj->a.y,           myobj->a.width,           myobj->a.height,           myobj->a.angle1,myobj->a.angle2);}void DisplayX11::draw_circles(DisplayObject * d_obj, const RGBcolor & col, int num, const Circle2d * vec){  D_XArcs *myobj;  if (!d_obj) {    if (d_xarcs.aa.max_size < num)      d_xarcs.aa.set_max_size(num);    d_xarcs.aa.set_cur_size(num);    myobj= &d_xarcs;    myobj->mark_col_change();    myobj->mark_pos_change();  }  else    myobj= static_cast<D_XArcs*>(d_obj); //dynamic_cast should also work, but it doesn't <- why?  //here we have the assumption num= myobj->pp.max_size; i.e. the it is not allowed to change the number of arcs  if (myobj->col_change) {     myobj->col_change= false;    myobj->XColor_pixel= AGetColor(col);  }  if (myobj->area_number != area_number) {     myobj->area_number= area_number;     copy_2_XArcs(myobj->aa.tab, num, vec);  }  ASetForeground(myobj->XColor_pixel);  XDrawArcs(disp,pixmap,gc,myobj->aa.tab,num);}void DisplayX11::fill_circle(DisplayObject * d_obj, const RGBcolor & col, const Circle2d & circlearc){  D_XArc *myobj;  if (!d_obj) {    myobj= &d_xarc;    myobj->mark_col_change();    myobj->mark_pos_change();  }  else    myobj= static_cast<D_XArc*>(d_obj); //dynamic_cast should also work, but it doesn't <- why?  if (myobj->col_change) {     myobj->col_change= false;    myobj->XColor_pixel= AGetColor(col);  }  if (myobj->area_number != area_number) {     myobj->area_number= area_number;     copy_2_XArc(myobj->a,circlearc);  }  ASetForeground(myobj->XColor_pixel);  XFillArc(disp,pixmap,gc,           myobj->a.x,           myobj->a.y,           myobj->a.width,           myobj->a.height,           myobj->a.angle1,myobj->a.angle2);}void DisplayX11::fill_circles(DisplayObject * d_obj, const RGBcolor & col, int num, const Circle2d * vec){  D_XArcs *myobj;  if (!d_obj) {    if (d_xarcs.aa.max_size < num)      d_xarcs.aa.set_max_size(num);    d_xarcs.aa.set_cur_size(num);    myobj= &d_xarcs;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -