int main(){
	initCanvas("ARCHERY",1300,700);
	
	Polygon rect(650,350,{{50,50},{50,-50},{-50,50},{-50,-50}},4);
	rect.imprint();
	getClick();
}
示例#2
0
bool Document::loadCanvas(canvas::SessionLoader &loader)
{
	QList<protocol::MessagePtr> init = loader.loadInitCommands();

	if(init.isEmpty())
		return false;

	setAutosave(false);

	initCanvas();

	// Set local history size limit. This must be at least as big as the initializer,
	// otherwise a new snapshot will always have to be generated when hosting a session.
	uint minsizelimit = 0;
	for(protocol::MessagePtr msg : init)
		minsizelimit += msg->length();
	minsizelimit *= 2;

	m_canvas->stateTracker()->setMaxHistorySize(qMax(1024*1024*10u, minsizelimit));
	m_client->sendInitialSnapshot(init);

	setCurrentFilename(loader.filename());
	unmarkDirty();
	return true;
}
示例#3
0
void ScheduleDialog::swapRows(int index1, int index2)
{
    Q_ASSERT(index1 != index2);
    Q_ASSERT(index1 >= 0);
    Q_ASSERT(index1 < (int)blocks_.size());
    Q_ASSERT(index2 >= 0);
    Q_ASSERT(index2 < (int)blocks_.size());
    Q_ASSERT((int)blocks_.size() == timingTable->numRows());

    BlockNode *node = blocks_[index1];
    blocks_[index1] = blocks_[index2];
    blocks_[index2] = node;

    timingTable->swapRows(index1, index2);
    timingTable->clearSelection();

    timingTable->updateContents();

    // set row selection
    // doesnt work with qt 3.0.6:
    //    timingTable->selectRow(index2);
    // workaround:
    QTableSelection selection;
    selection.init(index2, 0);
    selection.expandTo(index2, timingTable->numCols() -1);
    timingTable->addSelection(selection);


    // redraw canvas
    clearCanvas();
    initCanvas();
    // sync selection
    updateHighlighter(index2, 0);
}
示例#4
0
//--------------------------------------------------------------
void facade::windowResized(int w, int h){
	width = w;
	height = h;
	
	physics.setWorldSize(ofVec3f(-width/2, -height, -width/2), ofVec3f(width/2, height, width/2));

	initCanvas();
}
示例#5
0
main(){
  initCanvas("Eigenvector demonstration", 1000, 0, 1000, 1000);
  Turtle t1,t2;

  t1.penDown(false);
  t2.penDown(false);

  t1.move(250, 250);
  t2.move(-250, 250);
  

  t1.penDown();
  t2.penDown();

  cout << "Give matrix entries 00 01 10 11: ";

  double A[2][2];

  cin >> A[0][0] >> A[0][1] >> A[1][0] >> A[1][1];

  for(int i=0; i<36; i++){
    double angle = PI*i/18;
    double x = cos(angle);
    double y = sin(angle);

    double xt = A[0][0]*x + A[0][1]*y;
    double yt = A[1][0]*x + A[1][1]*y;

    t1.move(x*100, y*100);
    t2.move(xt*100, yt*100);

    t1.move(-x*100, -y*100);
    t2.move(-xt*100, -yt*100);
  }

  Turtle t3;
  //  t3.penDown(false);
  //  t3.move(250, -250);
  //  t3.penDown();

  double x=1, y=1;

  for(int i=0; i<10; i++){
    t3.move(100*x, 100*y);
    t3.move(-100*x, -100*y);

    double nx = A[0][0]*x + A[0][1]*y;
    double ny = A[1][0]*x + A[1][1]*y;
    
    double magnitude = sqrt(nx*nx+ny*ny);

    x = nx/magnitude;
    y = ny/magnitude;
    wait(1);
  }

  wait(5);
}
示例#6
0
void MainWindow::initialize(TraceModelPtr& model)
{
    model = restoreModel(model);//? trying to take settings from QSettings, but this is sooo bad
    initCanvas(model);
    // Restore window geometry
    QRect r = restoreGeometry();
    if (r.isValid())
    {
        setGeometry(r);
    }
    else
    {
        r = QApplication::desktop()->screenGeometry();
        resize(r.width(), r.height());
    }

    initToolbar();
    initSidebar();

    xinitialize(sidebarContents, canvas);

    toolbar->addActions(modeActions->actions());

    Q_ASSERT(browser);
    browser->addToolbarActions(toolbar);

    QAction* resetView = new QAction(this);
    resetView->setShortcut(Qt::Key_Escape);
    resetView->setShortcutContext(Qt::WindowShortcut);
    addAction(resetView);

    connect(resetView, SIGNAL(triggered(bool)), this,
                       SLOT(resetView()));

    toolbar->addSeparator();

    // Restore time unit and format
    QSettings settings;
    QString time_unit = settings.value("time_unit", Time::unit_name(0)).toString();
    for(int i = 0; i < Time::units().size(); ++i)
    {
        if (Time::unit_name(i) == time_unit)
        {
            Time::setUnit(i);
            break;
        }
    }
    if (settings.value("time_format", "separated") == "separated")
    {
        Time::setFormat(Time::Advanced);
    }

    // Adding freestanding tools
    foreach (QAction * action, freestandingTools)
    {
        toolbar->addAction(action);
    }
示例#7
0
void _wrap_initCanvas() {
    initCanvas();
    {

    }
    {
        AS3_ReturnAS3Var(undefined);
    }
}
示例#8
0
void DemoWidget::startSkiaAnimate()
{
	_curState = SKIA_ANIMATE;
	_SkiaAnimatorView.show();

	initCanvas(ak::SkiaGraphics);
	startAnimate();
	center();
	show();
}
示例#9
0
void DemoWidget::startGdiplusPrimitive()
{
	_curState = GDIPLUS_PRIMITIVE;
	_gdiplusView.show();

	initCanvas(ak::GdiPlusGraphics);
	drawToWindow();
	center();
	show();
}
示例#10
0
void DemoWidget::startSkiaPrimitive()
{
	_curState = SKIA_PRIMITIVE;
	_skiaView.show();

	initCanvas(ak::SkiaGraphics);
	drawToWindow();
	center();
	show();
}
示例#11
0
void DemoWidget::startGdiplusAnimate()
{
	_curState = GDIPLUS_ANIMATE;
	_GdiplusAnimatorView.show();

	initCanvas(ak::GdiPlusGraphics);
	startAnimate();
	center();
	show();
}
示例#12
0
void Document::onServerLogin(bool join)
{
	if(join)
		initCanvas();

	Q_ASSERT(m_canvas);

	m_canvas->connectedToServer(m_client->myId());

	if(m_autoRecordOnConnect) {
		startRecording(utils::uniqueFilename(utils::settings::recordingFolder(), "session-" + m_client->sessionId(), "dprec"));
	}
}
示例#13
0
int main(){
  initCanvas("Snake", gridsep*npts, gridsep*npts);
  Snake s;
  while(true){
    XEvent event;
    if(checkEvent(event) && keyPressEvent(event)){
	char c = charFromEvent(event);
	s.move(c);
    }
    else s.move('\0'); // NULL = continue to move in previous direction.
    wait(0.1);
  }
}
示例#14
0
arnTimeBasedVectorPlot::arnTimeBasedVectorPlot(QWidget *parent):
    QwtPlot(parent),
    d_paintedPoints(0),
    d_interval(0.0, 5.0)
    //CanvasInitialized(0)
{
    d_directPainter = new QwtPlotDirectPainter();
    grid = new QwtPlotGrid();
    d_origin = new QwtPlotMarker();
    d_curve = new QwtPlotCurve();
    initCanvas();
    initGradient();
}
示例#15
0
void init(int w, int h)
{
	// OpenGL setup
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  
	
	// low-level graphics setup
	initCanvas(w,h);
	
	// raytracer setup
	initCamera(w,h);
	initScene();
}
示例#16
0
void ScheduleDialog::autoSchedule()
{
    AutoSchedulingDialog *dialog = new AutoSchedulingDialog(graph_);

    int result = dialog->exec();
    delete dialog;
    if (result == QDialog::Accepted) {
    int count = timingTable->numRows();
    for (int i = 0; i < count; ++i) {
        static_cast<SpinBoxItem*>(timingTable->item(i, 3))->updateText();
    }
    clearCanvas();
    initCanvas();
    }
}
int main(){
  initCanvas("Pentagon and Star");
  double pentaV[5][2], starV[5][2];

  for(int i=0; i<5; i++){
    pentaV[i][0] = 100 * cos(2*PI/5*i);
    pentaV[i][1] = 100 * sin(2*PI/5*i);
    starV[i][0] = 100 * cos(4*PI/5*i);
    starV[i][1] = 100 * sin(4*PI/5*i);
  }

  Polygon penta(200,200,pentaV,5);
  Polygon star(200,400,starV,5);

  for(int i=0; i<100; i++){
    penta.left(5);
    star.right(5);
    wait(0.1);
  }

  getClick();
}
示例#18
0
int main()
{

  initCanvas("Tiling",W*N,W*N);

  int clickPos = getClick();  // to fix square to leave untiled.

  int holeX = clickPos/65536/W, holeY =(clickPos % 65536)/W;

  Circle c(holeX*W + W/2, holeY*W + W/2, W/2);
  c.setFill();
  c.setColor(COLOR("red"));
  c.imprint();

  tile(0,0,N,holeX,holeY);
  Circle c1(holeX*W + W/2, holeY*W + W/2, W/2);
  c1.setFill();
  c1.setColor(COLOR("red"));
  c1.imprint();

  getClick();

}
示例#19
0
void init(int w, int h) {

  /* OpenGL setup */
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
  glClearColor(0.0, 0.0, 0.0, 0.0);  

  /* low-level graphics setup */
  initCanvas(w,h);

  /* raytracer setup */
  initCamera(w,h);
  initScene();
  initLight();

  printf("DEPTH = %d. Computing the scene...          ",depth);
  list = glGenLists(1);
  glNewList(list, GL_COMPILE);
    drawScene();
    flushCanvas();
  glEndList();
  printf("Done\n");
}
示例#20
0
int main(){
  initCanvas("Car",800,800);

  Car c(200,300,COLOR("blue")), d(200,600,COLOR("red"));
  d.scale(0.5);

  getClick();

  for(int i=0; i<400; i++){
    beginFrame();
    c.forward(1); d.forward(1);
    endFrame();
  }
  getClick();

  for(int i=0; i<90; i++){
    beginFrame();
    d.forward(-1);
    endFrame();
    beginFrame();
    d.forward(-1);
    endFrame();
    beginFrame();
    d.forward(-1);
    endFrame();
    beginFrame();
    d.forward(-1);
    endFrame();
    beginFrame();
    d.forward(-1);
    d.right(1);
    endFrame();
  }
  getClick();

}
示例#21
0
void ScheduleDialog::initGraphWidget()
{
    int height = RULER_HEIGHT + blocks_.count() * (BOX_HEIGHT + BOX_YSPACING);

    labelCanvas = new QCanvas();
    labelCanvas->setBackgroundColor(lightGray);
    labelCanvasView = new FitCanvasView(labelCanvas, middleWidget, height);
    labelCanvasView->setVScrollBarMode(QScrollView::AlwaysOff);
    labelCanvasView->setHScrollBarMode(QScrollView::AlwaysOn);
    middleLayout->addWidget(labelCanvasView);

    canvas = new QCanvas();
    canvas->setBackgroundColor(QObject::white);
    canvasView = new FitCanvasView(canvas, middleWidget, height);

    middleLayout->addWidget(canvasView);

    connect(canvasView, SIGNAL(contentsMoving(int, int)),
            labelCanvasView, SLOT(setContentsPos(int, int)));

    canvas->resize(CANVAS_WIDTH, height);
    labelCanvas->resize(50, height);
    initCanvas();
}
示例#22
0
int ed_renz_reg (Tcl_Interp *interp,
		 int seq_id,
		 out_canvas_e *output,
		 char *frame,
		 char *names_win,
		 char *re_win,
		 char *inlist,
		 int num_items,
		 int start,
		 int end,
		 int text_offset,
		 char *text_fill,
		 tick_s *tick,
		 int yoffset,
		 ruler_s *ruler,
		 cursor_s cursor)
{
    editor_result *result;
    RENZYMES *r_enzyme;
    SELECTION *selection;
    EDITOR_RECORD *er;
    ed_renz_res *data;
    int id, ed_id, group_id, member_id;
    int seq_num, seq_type;
    seq_reg_cursor_notify cn;
    int line_width;
    char **sel = NULL;
    int num_sel;
     
    if (NULL == (result = (editor_result *)xmalloc(sizeof(editor_result))))
	return -1;
    if (NULL == (data = (ed_renz_res *)xmalloc(sizeof(ed_renz_res))))
	return -1;
  
    seq_num = GetEdenNum(seq_id); /* get position of the sequence in registration list */

    seq_type = GetEdenType (seq_num);
    result->data = data;
    result->seq_id[HORIZONTAL] = seq_id;
    result->seq_id[VERTICAL] = -1;
 
    id = get_editor_reg_id();
    result->id = id; 
    result->output = (void *)output;
    result->pr_func = ed_nip_renz_print_func;
    result->op_func = ed_renz_callback;
    result->txt_func = ed_nip_renz_text_func;

    /* data structure */
    strcpy(data->re_win, re_win);
    strcpy(data->frame, frame);
    strcpy(data->names_win, names_win);
    
    data->tick = tick;
    data->ruler = ruler;
    data->cursor = cursor; /* cursor_s */
    data->sequence_len = GetEdenLength (seq_num);
    data->sequence_type = seq_type;
   
    /* create list of windows in the restriction enzyme display */
    if (NULL == (data->win_list = (win **)xmalloc(MAX_NUM_WINS * sizeof(win*))))
	return -1;

    data->num_wins = 0;
    addWindow(data->win_list, &data->num_wins, data->re_win, 'b', id);
    addWindow(data->win_list, &data->num_wins, data->ruler->window, 'x', id);
    addWindow(data->win_list, &data->num_wins, data->names_win, 'y', id);
   
    if (NULL == (data->canvas = (CanvasPtr *)xmalloc(sizeof(CanvasPtr))))
	return -1;

    if (NULL == (data->world= (WorldPtr *)xmalloc(sizeof(WorldPtr))))
	return -1;

    if (NULL == (data->world->visible = (d_box *)xmalloc(sizeof(d_box))))
	return -1;

    if (NULL == (data->world->total = (d_box *)xmalloc(sizeof(d_box))))
	return -1;

    initCanvas(interp, data->canvas, data->re_win);
    createZoom(&data->zoom);

    /* create selecing Renzyme name array */
    if (Tcl_SplitList(interp, inlist, &num_sel, &sel) != TCL_OK)
      return -1;
    
    r_enzyme = get_selected_renzyme ( num_sel, sel);   
    data->r_enzyme = r_enzyme;
    data->num_enzymes = num_sel; /* num_items = num_sel ? */;    
    data->tick = tick;
    data->yoffset = yoffset;
    data->text_offset = text_offset;   
    data->text_colour = strdup(text_fill);
    /*data->seq_id = seq_num;*/
    data->seq_id = seq_id;
    data->match = NULL;
    data->num_match = 0;
    selection = init_selection ();
    data->sel = selection;
   
    line_width = get_default_int(interp, nip_defs, w("NIP.CURSOR.LINE_WIDTH"));
   
    /* private=0: share cursor for every plot */
    output->cursor = editor_create_cursor(seq_num, 0, NULL, line_width, 1, HORIZONTAL);
    output->cursor_visible = 0;
    
    ed_id = GetEdIdFromSeqId (seq_id);
    member_id = GetMemberIdFromSeqId (seq_id);
    group_id = GetGroupIdFromSeqId (seq_id);
    er = GetEditor (ed_id);
    er->graphical = 1;
    output->cursor->frame_name = NULL;
   
    output->cursor->posy = member_id;
    set_editor_cursor (ed_id, output->cursor);

    /* move cursor to start position if this is our own cursor */
    if (output->cursor->refs == 1) {
	output->cursor->abspos = start;
	output->cursor->posy = 1;
    }
    
    editor_register(seq_num, ed_renz_callback, (void *)result, SEQ_PLOT_TEMP, id);

    ed_renz_replot (interp, output, result, data);
    /* if above returns -1, may want to
     * to editor_renz_shutdown(interp, result, seq_num); ?
     */
    
    cn.job = SEQ_CURSOR_NOTIFY;
    cn.cursor = output->cursor;
    cn.cursor->job = CURSOR_MOVE;
    cn.selection = selection;
    editor_notify(seq_num, (editor_reg_data *)&cn);
    
    return id;
}
示例#23
0
 void turtleSim(const char* name, int w, int h){
   initCanvas(name,w,h);
   _PsystemTurtle_=new Turtle;
 }
示例#24
0
void facade::setup()
{
#ifdef USE_KINECT
	//Kinect
	ofxKinectNui::InitSetting initSetting;
	initSetting.grabVideo = false;
	initSetting.grabDepth = false;
	initSetting.grabAudio = false;
	initSetting.grabLabel = false;
	initSetting.grabSkeleton = true;
	initSetting.grabCalibratedVideo = false;
	initSetting.grabLabelCv = false;
	initSetting.videoResolution = NUI_IMAGE_RESOLUTION_640x480;
	initSetting.depthResolution = NUI_IMAGE_RESOLUTION_320x240;
	kinect.init(initSetting);
	kinect.open();
	kinect.addKinectListener(this, &facade::kinectPlugged, &facade::kinectUnplugged);
	
	kinectSource = &kinect;
	angle = kinect.getCurrentAngle();
	bPlugged = kinect.isConnected();
	nearClipping = kinect.getNearClippingDistance();
	farClipping = kinect.getFarClippingDistance();
	currentSkeletonIndex = -1;
#endif	

	//debug
	showFPS = false;

	//Particles
	mouseAttract	= false;
	mouseSpring		= false;
	doMouseXY		= false;		// pressing left mmouse button moves mouse in XY plane
	doMouseYZ		= false;		// pressing right mouse button moves mouse in YZ plane
	doRender		= true;
	forceTimer		= false;


	rotation		= 0;
	mouseMass		= 1;

	gravity			= 0;
	
	min_mass		= 1;
	max_mass		= 3;
	
	min_bounce		= 0.2;
	max_bounce		= 0.4;
	
	min_strength = 0.07;
	max_strength = 0.5;

	min_width = 10;
	max_width = 30;

	scale = 3;
	y = 0;

	delay = 1;

	probability = 1;

	ballImage.loadImage("ball.png");
	
	width = ofGetWidth();
	height = ofGetHeight();
	
	//	physics.verbose = true;			// dump activity to log
	physics.setGravity(ofVec3f(0, gravity, 0));
	
	// set world dimensions, not essential, but speeds up collision
	physics.setWorldSize(ofVec3f(-width/2, -height, -width/2), ofVec3f(width/2, height, width/2));
	physics.setSectorCount(SECTOR_COUNT);
    physics.setDrag(0.97f);
	physics.setDrag(1);		// FIXTHIS
	//physics.enableCollision();
	
	initScene();
	
	//integration kinect + physics
	minZ = 0;
	maxZ = 0;

	colorSpaceVariation = 1;
	
	initCanvas();
	blackout = 0;
	canvasFade = 125;
	canvasY = 0;

	//gestures
	gestureControl.setup();
}
示例#25
0
int
contig_selector_reg(Tcl_Interp *interp,
		    GapIO *io,
		    char *frame,
		    char *csh_win,
		    tag_s tag,
		    cursor_s cursor,
		    tick_s *tick)
{
    obj_cs *cs;
    int id;
    int i;

    if (NULL == (cs = (obj_cs *)xmalloc(sizeof(obj_cs))))
	return 0;

    id = register_id();

    cs->line_width = get_default_int(interp, gap_defs,
				     "CONTIG_SEL.LINE_WIDTH");

    cs->line_colour = get_default_astring(interp, gap_defs,
					  "CONTIG_SEL.COLOUR");

/*
    cs->tag = tag_struct(interp, "CONTIG_SEL");
    cs->cursor = cursor_struct(interp, "CONTIG_SEL");
    cs->tick = tick_struct(interp, "CONTIG_SEL");
*/
    cs->tag = tag;
    cs->cursor = cursor;
    cs->tick = tick;
    cs->buffer_count = 0;
    cs->do_update = 0;

    cs->vert[0] = '\0';
    strcpy(cs->frame, frame);
    strcpy(cs->window, csh_win);
    strcpy(cs->hori, cs->window);

    /* create list of windows in the contig selector display */
    if (NULL == (cs->win_list = (win **)xmalloc(MAX_NUM_WINS * sizeof(win*))))
	return -1;
    cs->num_wins = 0;
    addWindow(cs->win_list, &cs->num_wins, cs->window, 'x', id);

    if (NULL == (cs->canvas = (CanvasPtr *)xmalloc(sizeof(CanvasPtr))))
	return -1;

    if (NULL == (cs->world= (WorldPtr *)xmalloc(sizeof(WorldPtr))))
	return -1;

    if (NULL == (cs->world->visible = (d_box *)xmalloc(sizeof(d_box))))
	return -1;

    if (NULL == (cs->world->total = (d_box *)xmalloc(sizeof(d_box))))
	return -1;

    initCanvas(interp, cs->canvas, cs->window);
    createZoom(&cs->zoom);

    /* do the first plot */
    update_contig_selector(interp, io, cs);

    for (i = 1; i <= NumContigs(io); i++) {
	contig_register(io, i, cs_callback, (void *)cs, id,
			REG_REQUIRED | REG_DATA_CHANGE | REG_OPS |
			REG_NUMBER_CHANGE | REG_ANNO | REG_GENERIC |
			REG_BUFFER | REG_ORDER | REG_FLAG_INVIS, REG_TYPE_CONTIGSEL);
    }
    return id;

}
示例#26
0
int main(){
	initCanvas("tic-tac-toe",150,150);
	int checkout;
	for (int i=0; i<2; i++) {
		Line l1(50+i*50,0,50+i*50,150);
		l1.imprint();
		Line l2(0,50+i*50,150,50+i*50);
		l2.imprint();
	}; // just prints a 3X3 cube
	
	int square[3][3],a,b;
	for(a=0;a<3;a++){
		for( b=0;b<3;b++){
			square[a][b]=0;
		}
	} // assigns a definite variable to each square, eg., a[i][j] to square (i,j)
	int n,pos;
	for(n=1;n<10;n++){
		pos=getClick();			//getClick...click the required slot
		int i=(pos/65536)/50;			
		int j=(pos%65536)/50;
		
		double g=(pos/65536)/50;
		double h=(pos%65536)/50;
		if(n%2==1){
			Text t(25+50*g,25+50*h,"x"); 
			t.imprint();
		}
		if(n%2==0){
			Text t(25+50*g,25+50*h,"0");
			t.imprint();
		}												//print X or O accordingly
		
		if(n%2==1) square[i][j]=1;			// first player virtually denoted by 1,thus assign all its square 1
		if(n%2==0) square[i][j]=2;		//2nd player by 2,thus assign all its square 2
		
		if(n>4){									//before n=5, its impossible to complete the game
			int q;								
			if((square[0][0]*square[1][1]*square[2][2]==1)||(square[0][2]*square[1][1]*square[2][0]==1)){
				checkout=1;
				cout<<"player 1 wins"<<endl;
				break;
				}										//check diagonal for p1
			if((square[0][0]*square[1][1]*square[2][2]==8)||(square[0][2]*square[1][1]*square[2][0]==8)){
				checkout=1;
				cout<<"player 2 wins"<<endl;
				break;
			}											//check diagonal for p1
			for(q=0;q<3;q++){
				int b=square[q][0]*square[q][1]*square[q][2], c=square[0][q]*square[1][q]*square[2][q]; 
				if(b==1||c==1){
					checkout=1;
					cout<<"player 1 wins"<<endl;
					break;							//check horizontal and vertical for p1
				}
				if(b==8||c==8){
					checkout=1;
					cout<<"player 2 wins";
					break;							//check horizontal and vertical for p1
				}
			}
		}
		if(checkout==1) break;				//breaks the main for loop if someone wins
	}
	if(n==10)
	cout<<"invalid";								//in case no one wins...its a LOL.
}
示例#27
0
void Plot::init()
{
    initCanvas();
    initCurves();
    initTools();
}
示例#28
0
void ScheduleDialog::modelChanged(int, int)
{
    modified_ = true;
    clearCanvas();
    initCanvas();
}
示例#29
0
void ScheduleDialog::zoomChanged(int zoom)
{
    zoom_ = 1.0 + (zoom/5);
    clearCanvas();
    initCanvas();
}