Example #1
0
Sciana* Sciana::add(){

    if (useTexture){
        glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, textureID);
        glBegin(GL_QUADS);
            glNormal3f( n->getX(), n->getY(), n->getZ());
            glTexCoord2f(teksturaLewyDol->getX(), teksturaLewyDol->getY() );
              glVertex3f(a->getX(), a->getY(), a->getZ());
            glTexCoord2f(teksturaPrawaGora->getX(), teksturaLewyDol->getY() );
              glVertex3f(b->getX(), b->getY(), b->getZ());
            glTexCoord2f(teksturaPrawaGora->getX(), teksturaPrawaGora->getY() );
              glVertex3f(c->getX(), c->getY(), c->getZ());
            glTexCoord2f(teksturaLewyDol->getX(), teksturaPrawaGora->getY() );
              glVertex3f(d->getX(), d->getY(), d->getZ());
        glEnd();
        glDisable(GL_TEXTURE_2D);
    } else {
        glBegin(GL_POLYGON);
        glNormal3f( n->getX(), n->getY(), n->getZ());
        glColor4f(kolor->getR(),kolor->getG(),kolor->getB(), kolor->getAlfa() );
            glVertex3f(a->getX(), a->getY(), a->getZ());
            glVertex3f(b->getX(), b->getY(), b->getZ());
            glVertex3f(c->getX(), c->getY(), c->getZ());
            glVertex3f(d->getX(), d->getY(), d->getZ());
        glEnd();
    }
    
    finishDrawing();
    return this;
}
Example #2
0
bool DrawCircleTool::mouseReleaseEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget)
{
	Q_UNUSED(widget);
	
	if (!isDrawingButton(event->button()))
	{
		if (event->button() == Qt::RightButton)
			abortDrawing();
		return false;
	}
	if (!editingInProgress())
		return false;
	
	updateStatusText();
	
	if (dragging || second_point_set)
	{
		cur_pos = event->pos();
		cur_pos_map = map_coord;
		if (dragging && !second_point_set)
			opposite_pos_map = map_coord;
		updateCircle();
		finishDrawing();
		return true;
	}
	return false;
}
Example #3
0
void OgreBuilding::render()
{
  while (readNextSymbol())
  {
    if (!boundingBox->encloses(cursor.getPosition()))
    {
      finishDrawing();
      break;
    }
  }

  Ogre::String name = buildingObject->getName();
  buildingObject->convertToMesh(name + "Mesh");

  Ogre::SceneNode* sceneNode = parentSceneNode->createChildSceneNode(name+"Node");
  Ogre::StaticGeometry* staticObject = sceneManager->createStaticGeometry(name+"Static");

  Ogre::Entity* entity;
  entity = sceneManager->createEntity(name + "Entity", name + "Mesh");
  entity->setCastShadows(true);
  staticObject->addEntity(entity, Ogre::Vector3(0,0,0));
  staticObject->setCastShadows(true);
  staticObject->build();
  //sceneNode->attachObject(entity);
}
Example #4
0
Obraz* Obraz::add(){
    obrazek->translate( 0.0f, 0.0f, szerokoscY / 2 + szerokoscRamka / 2);
    obrazek->rotate( 90, 1.0f, 0.0f, 0.0f );
    obrazek->scale( szerokoscX, szerokoscY, 0.5f );
    obrazek->add();

    gornaRama->translate( 0.0f, 0.0f, szerokoscY  + szerokoscRamka);
    gornaRama->rotate( 90, 1.0f, 0.0f, 0.0f );
    gornaRama->scale( szerokoscX + szerokoscRamka * 2, szerokoscRamka, 1.0f);
    gornaRama->add();

    dolnaRama->translate( 0.0f, 0.0f, szerokoscRamka * 0.5 );
    dolnaRama->rotate( 90, 1.0f, 0.0f, 0.0f );
    dolnaRama->scale( szerokoscX + szerokoscRamka * 2, szerokoscRamka, 1.0f);
    dolnaRama->add();

    lewaRama->translate( -szerokoscX / 2 -szerokoscRamka * 0.5, 0.0f, szerokoscRamka + szerokoscY / 2 );
    lewaRama->rotate( 90, 1.0f, 0.0f, 0.0f );
    lewaRama->scale( szerokoscRamka, szerokoscY, 1.0f);
    lewaRama->add();

    prawaRama->translate( szerokoscX / 2 + szerokoscRamka * 0.5, 0.0f, szerokoscRamka + szerokoscY / 2 );
    prawaRama->rotate( 90, 1.0f, 0.0f, 0.0f );
    prawaRama->scale( szerokoscRamka, szerokoscY, 1.0f);
    prawaRama->add();

    finishDrawing();
    return this;
}
void DrawLineAndAreaTool::setDrawingSymbol(const Symbol* symbol)
{
	// Avoid using deleted symbol
	if (map()->findSymbolIndex(drawing_symbol) == -1)
		symbol = NULL;
	
	// End current editing
	if (editingInProgress())
	{
		if (symbol)
			finishDrawing();
		else
			abortDrawing();
	}
	
	// Handle new symbol
	if (!is_helper_tool)
		drawing_symbol = symbol;
	
	if (!symbol)
		deactivate();
	else if (symbol->isHidden())
		deactivate();
	else if ((symbol->getType() & (Symbol::Line | Symbol::Area | Symbol::Combined)) == 0)
		switchToDefaultDrawTool(symbol);
	else
		createPreviewPoints();
}
Example #6
0
bool DrawRectangleTool::mouseDoubleClickEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget)
{
	Q_UNUSED(map_coord);
	Q_UNUSED(widget);
	
	if (event->button() != Qt::LeftButton)
		return false;
	
	if (editingInProgress())
	{
		// Finish drawing by double click.
		// As the double click is also reported as two single clicks first
		// (in total: press - release - press - double - release),
		// need to undo two steps in general.
		if (angles.size() > 2 && !ctrl_pressed)
		{
			undoLastPoint();
			updateHover(false);
		}
		
		if (angles.size() <= 1)
		{
			abortDrawing();
		}
		else
		{
			constrained_pos_map = MapCoordF(preview_path->getCoordinate(angles.size() - 1));
			undoLastPoint();
			finishDrawing();
		}
		no_more_effect_on_click = true;
	}
	return true;
}
Example #7
0
bool DrawPathTool::keyPressEvent(QKeyEvent* event)
{
	bool key_handled = false;
	if (editingInProgress())
	{
		key_handled = true;
		if (event->key() == Qt::Key_Escape)
			abortDrawing();
		else if (event->key() == Qt::Key_Backspace)
			undoLastPoint();
		else if (event->key() == Qt::Key_Return && allow_closing_paths)
		{
			if (! (event->modifiers() & Qt::ControlModifier))
				closeDrawing();
			finishDrawing();
		}
		else
			key_handled = false;
	}
	else if (event->key() == Qt::Key_Backspace && finished_path_is_selected)
	{
		key_handled = removeLastPointFromSelectedPath();
	}
	
	if (event->key() == Qt::Key_Tab)
		deactivate();
	else if (event->key() == Qt::Key_Space)
	{
		draw_dash_points = !draw_dash_points;
		updateStatusText();
	}
	else if (event->key() == Qt::Key_Control)
	{
		ctrl_pressed = true;
		angle_helper->setActive(true);
		if (editingInProgress() && !dragging)
			updateDrawHover();
		picked_angle = false;
		updateStatusText();
	}
	else if (event->key() == Qt::Key_Shift)
	{
		shift_pressed = true;
		if (!dragging)
		{
			updateHover();
			updateDirtyRect();
		}
		updateStatusText();
	}
	else
		return key_handled;
	return true;
}
Example #8
0
Obiekt3D* Walec::add()
{
  
  if (useTexture){
    
    dol->add();
    for (int i = 0; i<n; i++)
        sciany[i]->add();
    gora->translate(0,0,1);
    gora->add();
    finishDrawing();
  }else{
    dol->add();
    for (int i = 0; i<n; i++){
      sciany[i]->add();
    }
    gora->translate(0,0,1);
    gora->add();
    finishDrawing();
  }
    return this;
}
Example #9
0
Obiekt3D* Fotel::add()
{
//     A->scale(7,2,5);
//     A->translate( -4,2,0);
//     A->translate( 0.5f, 0.5f, 0.0f );
//     A->add();
//     
//     B->scale(7,2,5);
//     B->translate( -4,-3,0);
//     B->translate( 0.5f, 0.5f, 0.0f );
//     B->add();
//     
//     C->scale(4,4,2);
//     C->translate(0,-2,0);
//     C->translate( 0.5f, 0.5f, 0.0f );
//     C->add();
//     
//     D->scale(5*M_SQRT2, 4, 2*M_SQRT2);
//     D->translate(0, -2, 0);
//     D->rotate( (3/4)*M_PI, 0, 1, 0);
//     D->translate(0, 2, 0);
//     D->translate( 0.5f, 0.5f, 0.0f );
//     D->add();



    
    C->translate( 1.5f, 0.0f, 0.0f );
    C->scale( 3.0f, 4.0f, 2.0f );
    C->add();

    A->translate( 0.5f, 3.0f, 0.0f );
    A->scale( 5.0f, 2.0f, 3.0f );
    A->add();

    B->translate( 0.5f, -3.0f, 0.0f );
    B->scale( 5.0f, 2.0f, 3.0f );
    B->add();

    D->translate( 0.0f, 0.0f, 1.0f );
    D->rotate( -45, 0.0f, 1.0f, 0.0f );
    D->scale( 2*M_SQRT2, 4.0f, 4*M_SQRT2 );
    D->add();

    finishDrawing();
    return this;
  
}
Example #10
0
bool DrawPathTool::mouseDoubleClickEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget)
{
	Q_UNUSED(map_coord);
	Q_UNUSED(widget);
	
	if (event->button() != Qt::LeftButton)
		return false;
	
	if (editingInProgress())
	{
		if (created_point_at_last_mouse_press)
			undoLastPoint();
		if (editingInProgress())
			finishDrawing();
	}
	return true;
}
Example #11
0
bool DrawRectangleTool::mouseReleaseEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget)
{
	cur_pos = event->pos();
	cur_pos_map = map_coord;
	if (shift_pressed)
		cur_pos_map = MapCoordF(snap_helper->snapToObject(cur_pos_map, widget));
	constrained_pos_map = cur_pos_map;
	
	if (no_more_effect_on_click)
	{
		no_more_effect_on_click = false;
		return true;
	}
	
	if (ctrl_pressed && event->button() == Qt::LeftButton && !editingInProgress())
	{
		pickDirection(cur_pos_map, widget);
		return true;
	}
	
	bool result = false;
	if (editingInProgress())
	{
		if (isDrawingButton(event->button()) && dragging)
		{
			dragging = false;
			result = mousePressEvent(event, cur_pos_map, widget);
		}
		
		if (event->button() == Qt::RightButton && drawOnRightClickEnabled())
		{
			if (!dragging)
			{
				constrained_pos_map = MapCoordF(preview_path->getCoordinate(angles.size() - 1));
				undoLastPoint();
			}
			if (editingInProgress()) // despite undoLastPoint()
				finishDrawing();
			return true;
		}
	}
	return result;
}
Example #12
0
bool DrawFreehandTool::mouseReleaseEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget)
{
	Q_UNUSED(widget);
	
	if (!editingInProgress())
		return false;
	
	if (!dragging)
	{
		abortDrawing();
		return true;
	}
	else if (dragging && event->button() == Qt::LeftButton)
	{
		cur_pos = event->pos();
		cur_pos_map = map_coord;
		updatePath();
		finishDrawing();
		return true;
	}
	return false;
}
Example #13
0
void AngleTool::handlePointAddition()
{
    if (m_2DViewer->hasInput())
    {
        if (m_2DViewer->getInteractor()->GetRepeatCount() == 0)
        {
            if (m_state == None)
            {
                this->annotateFirstPoint();
            }
            else if (m_state == FirstPointFixed)
            {
                this->fixFirstSegment();
            }
            else
            {
                // Voldrem enregistrar l'Ășltim punt, pertant posem l'estat a none
                m_state = None;
                finishDrawing();
            }
        }
    }
}
Example #14
0
bool DrawPathTool::mouseReleaseEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget)
{
	if (!isDrawingButton(event->button()))
		return false;

	left_mouse_down = false;
	
	if (picking_angle)
	{
		picking_angle = false;
		picked_angle = pickAngle(map_coord, widget);
		return true;
	}
	else if (!editingInProgress())
	{
		return false;
	}
	
	if (following)
	{
		finishFollowing();
		if ((event->button() == Qt::RightButton) && drawOnRightClickEnabled())
			finishDrawing();
		return true;
	}
	
	if (!create_segment)
		return true;
	
	if (previous_point_is_curve_point && !dragging && !create_spline_corner)
	{
		// The new point has not been added yet
		MapCoord coord;
		if (shift_pressed)
		{
			coord = snap_helper->snapToObject(map_coord, widget);
		}
		else if (angle_helper->isActive())
		{
			QPointF constrained_pos;
			angle_helper->getConstrainedCursorPositions(map_coord, constrained_pos_map, constrained_pos, widget);
			coord = MapCoord(constrained_pos_map);
		}
		else
		{
			coord = MapCoord(map_coord);
		}
		
		if (draw_dash_points)
			coord.setDashPoint(true);
		preview_path->addCoordinate(coord);
		updatePreviewPath();
		updateDirtyRect();
	}
	
	previous_point_is_curve_point = dragging;
	if (previous_point_is_curve_point)
	{
		QPointF constrained_pos;
		angle_helper->getConstrainedCursorPositions(map_coord, constrained_pos_map, constrained_pos, widget);
		
		previous_pos_map = click_pos_map;
		previous_drag_map = constrained_pos_map;
		previous_point_direction = calculateRotation(constrained_pos.toPoint(), constrained_pos_map);
	}
	
	updateAngleHelper();
	
	create_spline_corner = false;
	path_has_preview_point = false;
	dragging = false;
	
	if ((event->button() == Qt::RightButton) && drawOnRightClickEnabled())
		finishDrawing();
	return true;
}
Example #15
0
bool DrawPathTool::mousePressEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget)
{
	cur_map_widget = widget;
	created_point_at_last_mouse_press = false;
	
	if (editingInProgress() &&
		((event->button() == Qt::RightButton) &&
		!drawOnRightClickEnabled()))
	{
		finishDrawing();
		return true;
	}
	else if (editingInProgress() &&
		((event->button() == Qt::RightButton && event->buttons() & Qt::LeftButton) ||
		 (event->button() == Qt::LeftButton && event->buttons() & Qt::RightButton)))
	{
		if (!previous_point_is_curve_point)
			undoLastPoint();
		if (editingInProgress())
			finishDrawing();
		return true;
	}
	else if (isDrawingButton(event->button()))
	{
		dragging = false;
		bool start_appending = false;
		if (shift_pressed)
		{
			SnappingToolHelperSnapInfo snap_info;
			MapCoord snap_coord = snap_helper->snapToObject(map_coord, widget, &snap_info);
			click_pos_map = MapCoordF(snap_coord);
			cur_pos_map = click_pos_map;
			click_pos = widget->mapToViewport(click_pos_map).toPoint();
			
			// Check for following and appending
			if (!is_helper_tool)
			{
				if (!editingInProgress())
				{
					if (snap_info.type == SnappingToolHelper::ObjectCorners &&
						(snap_info.coord_index == 0 || snap_info.coord_index == snap_info.object->asPath()->getCoordinateCount() - 1) &&
						snap_info.object->getSymbol() == editor->activeSymbol())
					{
						// Appending to another path
						start_appending = true;
						startAppending(snap_info);
					}
					
					// Setup angle helper
					if (snap_helper->snapToDirection(map_coord, widget, angle_helper.data()))
						picked_angle = true;
				}
				else if (editingInProgress() &&
						 (snap_info.type == SnappingToolHelper::ObjectCorners || snap_info.type == SnappingToolHelper::ObjectPaths) &&
						 snap_info.object->getType() == Object::Path)
				{
					// Start following another path
					startFollowing(snap_info, snap_coord);
					return true;
				}
			}
		}
		else if (!editingInProgress() && ctrl_pressed)
		{
			// Start picking direction of an existing object
			picking_angle = true;
			pickAngle(map_coord, widget);
			return true;
		}
		else
		{
			click_pos = event->pos();
			click_pos_map = map_coord;
			cur_pos_map = map_coord;
		}
		
		if (!editingInProgress())
		{
			// Start a new path
			startDrawing();
			angle_helper->setCenter(click_pos_map);
			updateSnapHelper();
			
			path_has_preview_point = false;
			previous_point_is_curve_point = false;
			appending = start_appending;
		}
		else
		{
			if (!shift_pressed)
				angle_helper->getConstrainedCursorPosMap(click_pos_map, click_pos_map);
			cur_pos_map = click_pos_map;
		}

		// Set path point
		auto coord = MapCoord { click_pos_map };
		if (draw_dash_points)
			coord.setDashPoint(true);
		
		if (preview_path->getCoordinateCount() > 0 && picked_angle)
			picked_angle = false;
		if (previous_point_is_curve_point)
		{
			// Do nothing yet, wait until the user drags or releases the mouse button
		}
		else if (path_has_preview_point)
		{
			preview_path->setCoordinate(preview_path->getCoordinateCount() - 1, coord);
			updateAngleHelper();
			created_point_at_last_mouse_press = true;
		}
		else
		{
			if (preview_path->getCoordinateCount() == 0 || !preview_path->getCoordinate(preview_path->getCoordinateCount() - 1).isPositionEqualTo(coord))
			{
				preview_path->addCoordinate(coord);
				updatePreviewPath();
				if (!start_appending)
					updateAngleHelper();
				created_point_at_last_mouse_press = true;
			}
		}
		
		path_has_preview_point = false;
		
		create_segment = true;
		updateDirtyRect();
		updateStatusText();
		return true;
	}
	
	return false;
}
Example #16
0
Studzienka* Studzienka::add() {
    dno->scale( szerokoscX, szerokoscY, 0.5f );
    dno->add();
    
    gornyMurek->translate( 0.0f, 0.5*szerokoscY  + 0.5*szerokoscRamka, 0.0f );
    gornyMurek->scale( szerokoscX + szerokoscRamka * 2, szerokoscRamka, wysokoscMurka);
    gornyMurek->add();
    
    dolnyMurek->translate( 0.0f, -0.5*szerokoscY  - 0.5*szerokoscRamka, 0.0f );
    dolnyMurek->scale( szerokoscX + szerokoscRamka * 2, szerokoscRamka, wysokoscMurka);
    dolnyMurek->add();
    
    lewyMurek->translate( -0.5*szerokoscX - 0.5*szerokoscRamka, 0.0f, 0.0f );
    //lewyMurek->rotate(90, 0.0f, 0.0f, 1.0f); 
    lewyMurek->scale(szerokoscRamka, szerokoscY, wysokoscMurka);
    lewyMurek->add();
    
    prawyMurek->translate( 0.5*szerokoscX + 0.5*szerokoscRamka, 0.0f, 0.0f );
    //prawyMurek->rotate(90, 0.0f, 0.0f, 1.0f); 
    prawyMurek->scale(szerokoscRamka, szerokoscY, wysokoscMurka);
    prawyMurek->add();
    
    //Sciana *pedzelSciany = new Sciana();
    int a = liczbaCykliFal;
    int b= dokladnoscNaCykl;
    int c= a*b;
    float pr = przesuniecie;
    float pw = poziomWody;
    float wf = wysokoscFali;
    float sc = szerokoscX / c;
    float dc = szerokoscY / c;

    glPushMatrix();
    glTranslatef(-0.5*szerokoscX, -0.5*szerokoscY,0);
    //glColor4f(0.0f, 0.0f, 0.4f, 0.2f);
  //  glColorMaterial(GL_FRONT_AND_BACK,GL_EMISSION);
  //  glEnable( GL_COLOR_MATERIAL);
    glEnable(GL_BLEND);
    for(int i = 0; i < c; i++){
        for(int j = 0; j < c; j++) {
            Punkt *a1 = new Punkt(sc*i, dc *j, pw +  wf* (sin(sc*i + pr) + sin(dc * j + pr) ) );
            Punkt *b1 = new Punkt(sc*(i+1), dc *j, pw +  wf*(sin(sc* (i+1) +pr) + sin(dc * j +pr) ) );
            Punkt *c1 = new Punkt(sc*(i+1), dc *(j+1), pw +  wf*(sin(sc*(i+1) +pr) + sin(dc * (j+1) +pr) ) );
            Punkt *d1 = Punkt::normal( a1, b1, c1);
            glBegin(GL_QUADS);
            
             
               // glColor4f(0.0f, 0.0f, 0.4f, 0.2f);
                //glColor3f(0.0f, 0.0f, 0.4f);
                glNormal3f(d1->getX(), d1->getY(), d1->getZ());
                glVertex3f(a1->getX(), a1->getY(), a1->getZ());
                glVertex3f(b1->getX(), b1->getY(), b1->getZ());
                glVertex3f(c1->getX(), c1->getY(), c1->getZ());
                //glVertex3f(sc*i, dc *j, pw +  wf* (sin(sc*i + pr) + sin(dc * j + pr) ) );
                //glVertex3f(sc*(i+1), dc *j, pw +  wf*(sin(sc* (i+1) +pr) + sin(dc * j +pr) ) );
                //glVertex3f(sc*(i+1), dc *(j+1), pw +  wf*(sin(sc*(i+1) +pr) + sin(dc * (j+1) +pr) ) );
                glVertex3f(sc*i, dc *(j+1), pw +  wf*(sin(sc*i +pr) + sin(dc * (j+1) +pr) ) );
                
            glEnd();
            delete a1;
            delete b1;
            delete c1;
            delete d1;
        }
    }
 //   glDisable( GL_COLOR_MATERIAL);
  //  glColor4f(1.0f, 1.0f, 1.f, 0.0f);
   glDisable(GL_BLEND);
    glPopMatrix();
    finishDrawing();
    przesuniecie += 0.03;
    return this;
}
Example #17
0
bool DrawRectangleTool::mousePressEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget)
{
	// Adjust flags to have possibly more recent state
	int modifiers = (event->modifiers() | (key_button_bar ? key_button_bar->activeModifiers() : 0));
	ctrl_pressed = modifiers & Qt::ControlModifier;
	shift_pressed = modifiers & Qt::ShiftModifier;
	cur_map_widget = widget;
	if (isDrawingButton(event->button()))
	{
		dragging = false;
		click_pos = event->pos();
		click_pos_map = map_coord;
		cur_pos = event->pos();
		cur_pos_map = click_pos_map;
		if (shift_pressed)
			cur_pos_map = MapCoordF(snap_helper->snapToObject(cur_pos_map, widget));
		constrained_pos_map = cur_pos_map;
		
		if (!editingInProgress())
		{
			if (ctrl_pressed)
			{
				// Pick direction
				pickDirection(cur_pos_map, widget);
			}
			else
			{
				// Start drawing
				if (angle_helper->isActive())
					angle_helper->setCenter(click_pos_map);
				startDrawing();
				MapCoord coord = MapCoord(cur_pos_map);
				coord.setDashPoint(draw_dash_points);
				preview_path->addCoordinate(coord);
				preview_path->addCoordinate(coord);
				angles.push_back(0);
				updateStatusText();
			}
		}
		else
		{
			if (angles.size() >= 2 && drawingParallelTo(angles[angles.size() - 2]))
			{
				// Drawing parallel to last section, just move the last point
				undoLastPoint();
			}
			
			// Add new point
			int cur_point_index = angles.size();
			if (!preview_path->getCoordinate(cur_point_index).isPositionEqualTo(preview_path->getCoordinate(cur_point_index - 1)))
			{
				MapCoord coord = MapCoord(cur_pos_map);
				coord.setDashPoint(draw_dash_points);
				preview_path->addCoordinate(coord);
				if (angles.size() == 1)
				{
					// Bring to correct number of points: line becomes a rectangle
					preview_path->addCoordinate(coord);
				}
				angles.push_back(0);
				
				angle_helper->setActive(true, MapCoordF(preview_path->getCoordinate(cur_point_index)));
				angle_helper->clearAngles();
				angle_helper->addAngles(angles[0], M_PI/4);
			
				if (event->button() != Qt::RightButton || !drawOnRightClickEnabled())
				{
					updateHover(false);
					updateHover(false); // Call it again, really.
				}
			}
		}
	}
	else if (event->button() == Qt::RightButton && editingInProgress())
	{
		constrained_pos_map = MapCoordF(preview_path->getCoordinate(angles.size() - 1));
		undoLastPoint();
		if (editingInProgress()) // despite undoLastPoint()
			finishDrawing();
		no_more_effect_on_click = true;
	}
	else
	{
		return false;
	}
	
	return true;
}
Example #18
0
bool DrawRectangleTool::keyPressEvent(QKeyEvent* event)
{
	if (event->key() == Qt::Key_Return)
	{
		if (editingInProgress())
		{
			if (angles.size() <= 1)
				abortDrawing();
			else
			{
				constrained_pos_map = MapCoordF(preview_path->getCoordinate(angles.size() - 1));
				undoLastPoint();
				finishDrawing();
			}
		}
	}
	else if (event->key() == Qt::Key_Escape)
	{
		if (editingInProgress())
			abortDrawing();
	}
	else if (event->key() == Qt::Key_Backspace)
	{
		if (editingInProgress())
		{
			undoLastPoint();
			updateHover(false);
		}
	}
	else if (event->key() == Qt::Key_Tab)
	{
		deactivate();
	}
	else if (event->key() == Qt::Key_Space)
	{
		draw_dash_points = !draw_dash_points;
		updateStatusText();
	}
	else if (event->key() == Qt::Key_Control)
	{
		ctrl_pressed = true;
		if (editingInProgress() && angles.size() == 1)
		{
			angle_helper->clearAngles();
			angle_helper->addDefaultAnglesDeg(0);
			angle_helper->setActive(true, MapCoordF(preview_path->getCoordinate(0)));
			if (dragging)
				updateRectangle();
		}
		else if (editingInProgress() && angles.size() > 2)
		{
			// Try to snap to existing lines
			updateRectangle();
		}
		updateStatusText();
	}
	else if (event->key() == Qt::Key_Shift)
	{
		shift_pressed = true;
		updateHover(false);
		updateStatusText();
	}
	else
		return false;
	return true;
}
void DrawLineAndAreaTool::finishDrawing()
{
    finishDrawing(NULL);
}