Skip to content
Snippets Groups Projects
Commit fb81d539 authored by Mohammad Sarhan's avatar Mohammad Sarhan
Browse files

Painter

parent 8c055be1
No related branches found
No related tags found
No related merge requests found
# http://doc.qt.io/qt-5/qmake-variable-reference.html
CONFIG += console
QT += core widgets gui
DEFINES += QT_WIDGETS_LIB
#LIBS +=
INCLUDEPATH += .
HEADERS += paint.h \
canvas.h \
circle.h \
freehand.h \
graphobj.h \
line.h \
rectangle.h \
scene.h \
triangle.h
SOURCES += paint.cpp \
canvas.cpp \
circle.cpp \
freehand.cpp \
graphobj.cpp \
line.cpp \
main.cpp \
rectangle.cpp \
scene.cpp \
triangle.cpp
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 9.0.1, 2023-06-14T23:20:14. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{3c253d81-a365-45f4-b51c-82dbe60b8dbd}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="qlonglong">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
<value type="bool" key="EditorConfiguration.tintMarginArea">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
<valuemap type="QVariantMap" key="CppEditor.QuickFix">
<value type="bool" key="UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 6.4.0 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 6.4.0 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt6.640.win64_mingw_kit</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\saifa\Desktop\Paint\..\build-Paint-Desktop_Qt_6_4_0_MinGW_64_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/saifa/Desktop/build-Paint-Desktop_Qt_6_4_0_MinGW_64_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\saifa\Desktop\Paint\..\build-Paint-Desktop_Qt_6_4_0_MinGW_64_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/saifa/Desktop/build-Paint-Desktop_Qt_6_4_0_MinGW_64_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\saifa\Desktop\Paint\..\build-Paint-Desktop_Qt_6_4_0_MinGW_64_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/saifa/Desktop/build-Paint-Desktop_Qt_6_4_0_MinGW_64_bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Paint2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/saifa/Desktop/Hochschule/PG2_Hochschule_Darmstadt_Praktikums/Paint/Paint.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/Users/saifa/Desktop/Hochschule/PG2_Hochschule_Darmstadt_Praktikums/Paint/Paint.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/Users/saifa/Desktop/build-Paint-Desktop_Qt_6_4_0_MinGW_64_bit-Debug</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="qlonglong">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
#!/bin/bash
qmake -spec macx-xcode Paint.pro
#include "canvas.h"
#include "freehand.h"
#include "line.h"
#include "circle.h"
#include "rectangle.h"
#include "triangle.h"
bool CheckIfShapeIsAcceptable(GraphObj *obj){
// Free hand is allways true
FreeHand* freeHandObj;
if( (freeHandObj = dynamic_cast<FreeHand*>(obj)) ){return true;}
int length = std::sqrt( (obj->getStartPoint().x() - obj->getStopPoint().x()) *
(obj->getStartPoint().x() - obj->getStopPoint().x()) +
(obj->getStartPoint().y() - obj->getStopPoint().y()) *
(obj->getStartPoint().y() - obj->getStopPoint().y()) );
if(length > 20) return true;
else return false;
}
Canvas::Canvas(QWidget *parent): QFrame(parent){
setFrameStyle(QFrame::Box);
setMouseTracking(true);
scene = new Scene();
type = NONE;
dragging = false;
shape = nullptr;
}
Canvas::~Canvas(){
delete shape;
delete scene;
}
QSize Canvas::minimumSizeHint() const{
return QSize(200, 200);
}
QSize Canvas::sizeHint() const{
return QSize(640, 480);
}
void Canvas::clearCanvas(void){
scene->DeleteAllShape();
}
void Canvas::setPrimitiveMode(int mode){
type = (Canvas::PrimitiveMode)mode;
}
void Canvas::paintEvent(QPaintEvent *event){
QFrame::paintEvent(event); // parent class draws border
QPainter painter(this);
// draw all old Shapes
scene->draw(painter);
//draw the new Shape
if(shape != nullptr){shape->draw(painter);}
}
void Canvas::Create(QMouseEvent *event){
switch (type) {
case LINE:
shape = new Line();
break;
case CIRCLE:
shape = new Circle();
break;
case RECTANGLE:
shape = new Rectangle ();
break;
case FREE_HAND:
shape = new FreeHand ();
break;
case TRIANGLE:
shape = new Triangle();
break;
case NONE:
shape = nullptr;
break;
default:
break;
}
if(shape != nullptr){
shape->setStartPoint(event->pos());
shape->setStopPoint(event->pos());
shape->setColor(color);
shape->setOutline(outline);
}
}
void Canvas::Delete(QMouseEvent *event){
scene->deleteShape(event);
update();
}
void Canvas::Coloring(QMouseEvent *event){
scene->colorShape(event,getColor());
update();
}
void Canvas::Move(QPoint startPoint, QPoint endPoint ){
scene->moveShape(startPoint,endPoint);
update();
}
void Canvas::mousePressEvent(QMouseEvent *event){
if (event->button() == Qt::LeftButton) {
dragging = true;
// set The Points for the class Canvas (falls wir sie brauchen)
this->startPoint = event->pos();
this->StopPoint = event->pos();
switch (oparation) {
case CREAT:
Create(event);
break;
case DEL:
Delete(event);
break;
case COL:
Coloring(event);
break;
case TRAFO:
//set The Object that was selected
scene->setSelectedIndex(scene->selectObj(event->pos()));
Move( this->startPoint, this->StopPoint);
break;
default:
break;
}
update();
}
}
void Canvas::mouseMoveEvent(QMouseEvent *event){
if ((event->buttons() & Qt::LeftButton) && dragging) {
if(oparation == CREAT){
if(shape == nullptr){return;}
shape->setStopPoint(event->pos());
if(type == FREE_HAND && oparation == CREAT){
koordinate *k = new koordinate(shape->getStartPoint(),event->pos());
FreeHand* freeHandObj = dynamic_cast<FreeHand*>(shape);
freeHandObj->pointHestory.push_back(k);
shape->setStartPoint(event->pos());
}
}else if(oparation == TRAFO){
this->StopPoint = event->pos();
Move(this->startPoint,this->StopPoint);
this->startPoint = event->pos();
}
update();
}
}
void Canvas::mouseReleaseEvent(QMouseEvent *event){
if (event->button() == Qt::LeftButton && dragging) {
dragging = false;
//Create
if(shape != nullptr && type != NONE){
shape->setStopPoint(event->pos());
//Save Shape but need more Contorlle for how much big is my shape
if(CheckIfShapeIsAcceptable(shape)){
// Triangle* triangle;
// if( (triangle = dynamic_cast<Triangle*>(shape)) ){
// triangle->setReleasedClicked(true);
// }
if(shape->getDoneDrawing()){
scene->AddShape(shape);
shape = nullptr;
}
}
}
if(oparation == TRAFO){
this->StopPoint = event->pos();
Move(this->startPoint,this->StopPoint);
//reinitial The Object that was selected to -1
scene->setSelectedIndex(-1);
}
update();
}
}
void Canvas::setOparation(InteractionMode newOparation){
oparation = newOparation;
}
void Canvas::resizeEvent(QResizeEvent *event){
QFrame::resizeEvent(event);
}
bool Canvas::getOutline() const{
return outline;
}
void Canvas::setOutline(bool newOutline){
outline = newOutline;
}
QColor Canvas::getColor() const{
return color;
}
void Canvas::setColor(const QColor &newColor){
color = newColor;
}
#ifndef CANVAS_H
#define CANVAS_H
#include <QFrame>
#include <QPainter>
#include <QPainterPath>
#include <QMouseEvent>
#include <math.h>
#include <iostream>
#include "graphobj.h"
#include "scene.h"
class Canvas : public QFrame
{
Q_OBJECT
public:
enum PrimitiveMode {
NONE, FREE_HAND, CIRCLE, LINE, TRIANGLE, RECTANGLE, POLYGON
};
enum InteractionMode{ CREAT, DEL, COL, TRAFO };
Canvas(QWidget *parent = 0);
~Canvas();
QSize minimumSizeHint() const;
QSize sizeHint() const;
void clearCanvas(void);
void setPrimitiveMode(int mode);
QPoint getStartPos() const;
void setStartPos(QPoint newStartPos);
QPoint getStopPos() const;
void setStopPos(QPoint newStopPos);
QColor getColor() const;
void setColor(const QColor &newColor);
bool getOutline() const;
void setOutline(bool newOutline);
//InteractionMode getOparation() const;
void setOparation(InteractionMode newOparation);
void Create(QMouseEvent *event);
void Delete(QMouseEvent *event);
void Coloring(QMouseEvent *event);
void Move(QPoint startPoint, QPoint endPoint);
protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private:
bool dragging;
PrimitiveMode type;
QColor color;
bool outline = true;
Scene* scene;
GraphObj *shape ;
QColor lastColorOfSelectedShap;
InteractionMode oparation ;
QPoint startPoint;
QPoint StopPoint;
};
#endif // CANVAS_H
#include "circle.h"
#include <iostream>
Circle::Circle(){
diameter = std::sqrt( (getStartPoint().x()-getStopPoint().x()) * (getStartPoint().x()-getStopPoint().x()) + (getStartPoint().y()-getStopPoint().y()) * (getStartPoint().y()-getStopPoint().y()) );
}
Circle::~Circle(){
}
void Circle::draw(QPainter &painter){
// change later if i will work with new
diameter = std::sqrt( (getStartPoint().x()-getStopPoint().x()) * (getStartPoint().x()-getStopPoint().x()) + (getStartPoint().y()-getStopPoint().y()) * (getStartPoint().y()-getStopPoint().y()) );
// Set brush color using hexadecimal value
setBrushForTheObject(painter);
painter.drawEllipse(getStartPoint(), diameter,diameter);
}
void Circle::move(QPoint vector){
setStartPoint(getStartPoint() + vector);
setStopPoint(getStopPoint() + vector);
}
bool Circle::checkTheSelectedShape(QPoint p){
int distancePointToCenter = std::sqrt( (getStartPoint().x() - p.x()) *
(getStartPoint().x() - p.x()) +
(getStartPoint().y() - p.y()) *
(getStartPoint().y() - p.y()) );
if( diameter > distancePointToCenter ){
std::cout<<"Object is selected"<<std::endl;
return true;
}
return false;
}
int Circle::getDiameter() const{
return diameter;
}
void Circle::setDiameter(int newDiameter){
diameter = newDiameter;
}
#ifndef CIRCLE_H
#define CIRCLE_H
#include "graphobj.h"
class Circle: public GraphObj{
public:
Circle();
virtual ~Circle();
void draw(QPainter &painter);
void move(QPoint vector);
bool checkTheSelectedShape(QPoint);
int getDiameter() const;
void setDiameter(int newDiameter);
private:
int diameter;
};
#endif // CIRCLE_H
#include "freehand.h"
#include <iostream>
FreeHand::FreeHand(){
}
FreeHand::FreeHand(const FreeHand &graph)
{
}
FreeHand &FreeHand::operator=(const FreeHand &graph)
{
}
FreeHand::~FreeHand(){
}
void FreeHand::draw(QPainter &painter){
// Set brush color using hexadecimal value
setBrushForTheObject(painter);
for (size_t i = 0; i < pointHestory.size(); ++i) {
painter.drawLine(pointHestory[i]->startPoint,pointHestory[i]->stopPoint);
}
}
void FreeHand::move(QPoint vector){
for(auto eachpoint : pointHestory){
eachpoint->startPoint+=vector;
eachpoint->stopPoint+=vector;
}
}
bool FreeHand::checkTheSelectedShape(QPoint p){
QPoint vector;
for(koordinate *k : pointHestory) {
vector = p - k->startPoint ;
if ( RANGEs > sqrt( (vector.x()*vector.x()) + (vector.y()*vector.y()) ) ){
return true;
}
}
return false;
}
#ifndef FREEHAND_H
#define FREEHAND_H
#include "graphobj.h"
#include <QPixmap>
#include <vector>
#define RANGEs 10
struct koordinate{
QPoint startPoint;
QPoint stopPoint ;
koordinate(){};
koordinate(QPoint start, QPoint stop):startPoint(start),stopPoint(stop){};
};
class FreeHand : public GraphObj{
public:
FreeHand();
FreeHand(const FreeHand& graph) ;
FreeHand &operator=(const FreeHand& graph) ;
virtual ~FreeHand();
void draw(QPainter &painter);
void move(QPoint vector);
bool checkTheSelectedShape(QPoint);
std::vector<koordinate *>pointHestory;
};
#endif // FREEHAND_H
#include "graphobj.h"
GraphObj::GraphObj(){
}
//GraphObj::GraphObj(const GraphObj &graph)
//{
// this->startPoint = graph.startPoint ;
// this->stopPoint = graph.stopPoint ;
// this->color = graph.color ;
// this->outline = graph.outline ;
//}
//GraphObj &GraphObj::operator=(const GraphObj &graph) {
// // check if the Operation is a = a then do nothing ;
// //but a = b ; is okey
// if (this != &graph) {
// // we dont need to do that because there are no pointer
// this->startPoint = graph.startPoint ;
// this->stopPoint = graph.stopPoint ;
// this->color = graph.color ;
// this->outline = graph.outline ;
// }
// return *this;
//}
//GraphObj::~GraphObj(){
//}
QPoint GraphObj::getStopPoint() const
{
return stopPoint;
}
void GraphObj::setStopPoint(QPoint newStopPoint)
{
stopPoint = newStopPoint;
}
QPoint GraphObj::getStartPoint() const
{
return startPoint;
}
void GraphObj::setStartPoint(QPoint newStartPoint)
{
startPoint = newStartPoint;
}
bool GraphObj::getOutline() const{
return outline;
}
void GraphObj::setOutline(bool newOutline){
outline = newOutline;
}
QColor GraphObj::getColor() const
{
return color;
}
void GraphObj::setColor(const QColor &newColor)
{
color = newColor;
}
void GraphObj::setBrushForTheObject(QPainter &painter)
{
// Set brush color using hexadecimal value
painter.setPen(QPen(getColor(), FONTSIZE , Qt::SolidLine));
if(!getOutline()){
painter.setBrush(Qt::NoBrush);
}else{
painter.setBrush(getColor());
}
}
bool GraphObj::getDoneDrawing() const
{
return doneDrawing;
}
void GraphObj::setDoneDrawing(bool newDoneDrawing)
{
doneDrawing = newDoneDrawing;
}
#ifndef GRAPHOBJ_H
#define GRAPHOBJ_H
#include <QPainter>
#include<QPoint>
#include <QPainter>
#define FONTSIZE 3
class GraphObj
{
public:
GraphObj();
GraphObj(const GraphObj& graph) = delete ;
GraphObj& operator=(const GraphObj& graph) = delete ;
virtual ~GraphObj()= default;
virtual void draw(QPainter &painter) = 0;
virtual void move(QPoint vector) = 0;
virtual bool checkTheSelectedShape(QPoint) = 0 ;
void setBrushForTheObject(QPainter &painter);
QPoint getStopPoint() const;
void setStopPoint(QPoint newStopPoint);
QPoint getStartPoint() const;
void setStartPoint(QPoint newStartPoint);
bool getOutline() const;
void setOutline(bool newOutline);
QColor getColor() const;
void setColor(const QColor &newColor);
bool getDoneDrawing() const;
void setDoneDrawing(bool newDoneDrawing);
private:
QPoint startPoint;
QPoint stopPoint;
QColor color;
bool outline;
bool doneDrawing = true;
};
#endif // GRAPHOBJ_H
#include "line.h"
#include <iostream>
Line::Line(){
}
Line::Line(const Line &graph){
}
Line &Line::operator=(const Line &graph){
}
Line::~Line(){
}
void Line::draw(QPainter &painter){
// Set brush color using hexadecimal value
setBrushForTheObject(painter);
painter.drawLine(getStartPoint(), getStopPoint());
}
void Line::move(QPoint vector){
setStartPoint(getStartPoint() + vector);
setStopPoint(getStopPoint() + vector);
}
float Line::getSteigung(){
float a = (float)(getStartPoint().y() - getStopPoint().y())/(getStartPoint().x() - getStopPoint().x());
return a;
}
float Line::getConstanteB()
{
float a = getSteigung();
float b = getStartPoint().y() - a * getStartPoint().x() ;
return b;
}
bool Line::checkTheSelectedShape(QPoint clicked){
// QPoint p = clicked;
// // swap start- and stop point if stop grather than start point
// if(getStartPoint().y() > getStopPoint().y()){
// QPoint y;
// y = getStopPoint();
// setStopPoint(getStartPoint());
// setStartPoint(y);
// }
// float a = getSteigung();
// float b = getConstanteB() ;
// float res = a * p.x() + b - p.y();
// return( getStartPoint().y() < p.y() && getStopPoint().y() > p.y() ) && ( res<RANGE && res> - RANGE) ;
// L(t) V
// p---------------------->
// |
// |
// R
// t0= (R - P).v/|v|^2
QPoint v = getStopPoint() - getStartPoint();
QPoint v_RP = clicked - getStartPoint();
//streckungsFaktor
float t = (float)(v_RP.x() * v.x() + v_RP.y() * v.y() ) / (sqrt(v.x()*v.x() + v.y() *v.y()) * sqrt(v.x()*v.x() + v.y() *v.y())) ;
// init lt and the cordonation of the POint must be positive abs() solve that problem
QPoint lt ; lt.setX((t * v.x())); lt.setY((t * v.y()));
lt = lt + getStartPoint();
std::cout<<" lt point "<<lt.x()<<" , "<<lt.y()<<std::endl;
// Vector Senkrecht zu der Line v = RL(t)
QPoint clicked_vector = lt - clicked ;
std::cout<<"clicked vector "<<clicked_vector.x()<<" , "<<clicked_vector.y()<<std::endl;
std::cout<<"Betrag "<<sqrt(clicked_vector.x()*clicked_vector.x() + clicked_vector.y() * clicked_vector.y())<<std::endl;
return ( t<=1 && t>=0 && RANGE >= sqrt( clicked_vector.x() * clicked_vector.x() + clicked_vector.y() * clicked_vector.y() ) );
}
#ifndef LINE_H
#define LINE_H
#include "graphobj.h"
#define RANGE 50
class Line : public GraphObj{
public:
Line();
Line(const Line& graph) ;
Line& operator=(const Line& graph) ;
virtual ~Line();
void draw(QPainter &painter);
void move(QPoint vector);
bool checkTheSelectedShape(QPoint p);
float getSteigung();
float getConstanteB();
};
#endif // LINE_H
#include <QtWidgets/QApplication>
#include "paint.h"
int main(int argc, char *argv[])
{
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication::setHighDpiScaleFactorRoundingPolicy(
Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
QApplication app(argc, argv);
Paint w;
w.show();
return app.exec();
}
//#include<iostream>
//void groupBoxChanged(){
// std::cout<<"clicked"<<std::endl;
//}
//#include <QtWidgets>
//int main(int argc, char *argv[]) {
// QApplication app(argc, argv);
// QWidget window;
// QVBoxLayout layout(&window);
// QGroupBox groupBox("Radio Buttons");
// QVBoxLayout groupLayout;
// groupBox.setLayout(&groupLayout);
// QRadioButton radio1("Option 1");
// QRadioButton radio2("Option 2");
// QRadioButton radio3("Option 3");
// QButtonGroup buttonGroup;
// buttonGroup.addButton(&radio1);
// buttonGroup.addButton(&radio2);
// buttonGroup.addButton(&radio3);
// groupLayout.addWidget(&radio1);
// groupLayout.addWidget(&radio2);
// groupLayout.addWidget(&radio3);
// layout.addWidget(&groupBox);
// window.setLayout(&layout);
// window.show();
// return app.exec();
//}
#include <QPushButton>
#include <QComboBox>
#include <QLabel>
#include <QColorDialog>
#include <QGridLayout>
#include <QCheckBox>
#include <QDebug>
#include "paint.h"
#include "canvas.h"
/** c'tor */
Paint::Paint(QWidget *parent): QWidget(parent)
{
// instantiate Canvas and button
viewport = new Canvas();
btnClearCanvas = new QPushButton("&Clear Canvas");
cobPrimModes = new QComboBox();
cobPrimModes->addItem(tr("None"), Canvas::NONE);
cobPrimModes->addItem(tr("Line"), Canvas::LINE);
cobPrimModes->addItem(tr("Freehand"), Canvas::FREE_HAND);
cobPrimModes->addItem(tr("Circle"), Canvas::CIRCLE);
cobPrimModes->addItem(tr("Rectangle"), Canvas::RECTANGLE);
cobPrimModes->addItem(tr("Triangle"), Canvas::TRIANGLE);
//cobPrimModes->addItem(tr("Polygon"), Canvas::POLYGON);
lblPrimModes = new QLabel("Primitive Mode");
lblPrimModes->setBuddy(cobPrimModes);
btnDeleteObj = new QPushButton("&Delete Selected");
btnDeleteObj->setDisabled(false);
btnChangeCol = new QPushButton("C&hange Color");
cbOutline = new QCheckBox("Show Only &Outline", this);
BBox = new QCheckBox("Show BBox", this);
//1
groupBox = new QGroupBox("Radio Buttons");
//2
QVBoxLayout* groupBoxLayout = new QVBoxLayout();
groupBox->setLayout(groupBoxLayout);
//3
QRadioButton* creating = new QRadioButton("Create");
creating->setChecked(true);
QRadioButton* deleting = new QRadioButton("Delete Selected");
QRadioButton* coloring = new QRadioButton("Change Color");
QRadioButton* moving = new QRadioButton("Move Selected");
//4
action = new QButtonGroup(this);
//5
action->addButton(creating);
action->addButton(deleting);
action->addButton(coloring);
action->addButton(moving);
//6
action->addButton(creating,Canvas::InteractionMode::CREAT);
action->addButton(deleting,Canvas::InteractionMode::DEL);
action->addButton(coloring,Canvas::InteractionMode::COL);
action->addButton(moving,Canvas::InteractionMode::TRAFO);
//7
groupBoxLayout->addWidget(creating);
groupBoxLayout->addWidget(deleting);
groupBoxLayout->addWidget(coloring);
groupBoxLayout->addWidget(moving);
//8
//connect(action, QOverload<QAbstractButton*>::of(&QButtonGroup::buttonClicked), this, &Paint::groupBoxChanged);
// create layout and add gui elements to it
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(viewport, 0, 0, 1, 4);
mainLayout->addWidget(groupBox, 1, 0 ,3,2);
mainLayout->addWidget(lblPrimModes, 1, 2,Qt::AlignRight);
mainLayout->addWidget(cobPrimModes, 1, 3);
mainLayout->addWidget(btnChangeCol, 2, 3);
mainLayout->addWidget(cbOutline, 2, 2, Qt::AlignRight);
mainLayout->addWidget(btnClearCanvas,3, 3);
mainLayout->addWidget(BBox, 3, 2, Qt::AlignRight);
//mainLayout->addWidget(btnDeleteObj, 2, 0);
// add layout to this widget instance
setLayout(mainLayout);
// connect button click event to clear canvas handler
connect(btnClearCanvas, SIGNAL(clicked()),
this, SLOT(clearBtnPressed()));
// connect button click event to delete selected object handler
connect(btnDeleteObj, SIGNAL(clicked()),
this, SLOT(deleteBtnPressed()));
// connect button click event to color chooser handler
connect(btnChangeCol, SIGNAL(clicked()),
this, SLOT(colorBtnPressed()));
// connect list view to primitive changed event handler
connect(cobPrimModes, SIGNAL(activated(int)),
this, SLOT(primModeChanged()));
// connect checkbox to toggle outline event handler
connect(cbOutline, SIGNAL(toggled(bool)),
this, SLOT(showOutlineOnly(bool)));
// connect checkbox to toggle BBox event handler
connect(BBox, SIGNAL(toggled(bool)),
this, SLOT(BBoxPressed(bool)));
// connect groupButton to toggle action event handler
connect(action, QOverload<QAbstractButton*>::of(&QButtonGroup::buttonClicked),
this, &Paint::groupBoxChanged);
}
/** d'tor */
Paint::~Paint(){
delete groupBox;
delete groupBoxLayout;
delete creating;
delete deleting;
delete coloring;
delete moving;
delete action;
}
/** method for handling button clicked event */
void Paint::clearBtnPressed(){
viewport->clearCanvas();
viewport->update();
}
void Paint::deleteBtnPressed()
{
// if(viewport->getSelectedIndex() != -1){
// viewport->AllShape.erase(viewport->AllShape.begin()+viewport->getSelectedIndex());
// //reset SelectedIndex to -1 for the next Shape
// viewport->setSelectedIndex(-1) ;
// viewport->update();
// }
}
void Paint::colorBtnPressed(){
QColor color = QColorDialog::getColor(Qt::yellow, this );
if (color.isValid()) {
//set color from the GUI
viewport->setColor(color);
}
//qDebug() << "Color Choosen : " << color.name();
}
void Paint::showOutlineOnly(bool outline){
qDebug() << "Only show outline: " << outline;
viewport->setOutline(!viewport->getOutline());
}
void Paint::BBoxPressed(bool bbox)
{
qDebug() << "BBox : " << bbox;
}
void Paint::groupBoxChanged()
{
std::cout<<"action change"<<std::endl;
// you need to cast das here
viewport->setOparation((Canvas::InteractionMode)action->checkedId());
}
void Paint::primModeChanged(){
int mode = cobPrimModes->itemData(cobPrimModes->currentIndex(), Qt::UserRole).toInt();
viewport->setPrimitiveMode(mode);
qDebug() << "Primitive Mode changed to " << mode;
}
#ifndef PAINT_H
#define PAINT_H
#include <QWidget>
#include <QGroupBox>
#include<QRadioButton>
#include<QVBoxLayout>
#include <QButtonGroup>
class QPushButton;
class QComboBox;
class QLabel;
class QCheckBox;
class Canvas;
class QGroupBox;
class QRadioButton;
class QVBoxLayout;
class QButtonGroup;
class Paint : public QWidget
{
Q_OBJECT
public:
Paint(QWidget *parent = 0);
~Paint();
private slots:
void clearBtnPressed();
void deleteBtnPressed();
void colorBtnPressed();
void primModeChanged();
void showOutlineOnly(bool);
void BBoxPressed(bool bbox);
void groupBoxChanged();
private:
Canvas *viewport;
QPushButton *btnClearCanvas;
QComboBox *cobPrimModes;
QLabel *lblPrimModes;
QPushButton *btnDeleteObj;
QPushButton *btnChangeCol;
QCheckBox *cbOutline;
QCheckBox *BBox;
QGroupBox* groupBox ;
QVBoxLayout* groupBoxLayout;
QRadioButton* creating ;
QRadioButton* deleting ;
QRadioButton* coloring ;
QRadioButton* moving ;
QButtonGroup *action;
};
#endif // PAINT_H
#include "rectangle.h"
#include <iostream>
#include <ostream>
Rectangle::Rectangle(){
width = getStopPoint().x() - getStartPoint().x() ;
height = getStopPoint().y() - getStartPoint().y() ;
}
Rectangle::Rectangle(const Rectangle &graph)
{
}
Rectangle::~Rectangle(){
}
void Rectangle::draw(QPainter &painter){
// change later if i will work with new
width = getStopPoint().x() - getStartPoint().x() ;
height = getStopPoint().y() - getStartPoint().y() ;
// Set brush color using hexadecimal value
setBrushForTheObject(painter);
painter.drawRect(getStartPoint().x(),getStartPoint().y(), width, height);
}
void Rectangle::move(QPoint vector){
setStartPoint(getStartPoint() + vector);
setStopPoint(getStopPoint() + vector);
}
bool Rectangle::checkTheSelectedShape(QPoint p){
// swap start- and stop point if stop grather than start point
// swap start- and stop point if stop grather than start point
if(getStartPoint().y() < getStopPoint().y()){
QPoint y;
y = getStopPoint();
setStopPoint(getStartPoint());
setStartPoint(y);
}
float steigung = (float)(getStartPoint().y() - getStopPoint().y())/(getStartPoint().x() - getStopPoint().x());
// wenn Y nicht stimmt
if(!(p.y() <= getStartPoint().y() && p.y() >= getStopPoint().y())) return false;
// jenach Start- StopPunkt wird X anders geprüft mit Hilfe der Steigung der Diagonale
if (steigung<0)
return( p.x() >= getStartPoint().x() && p.x() <= getStopPoint().x() );
else
return(p.x() <= getStartPoint().x() &&p.x() >= getStopPoint().x() );
// wenn Y nicht stimmt
if(!(p.y() <= getStartPoint().y() && p.y() >= getStopPoint().y())) return false;
// jenach Start- StopPunkt wird X anders geprüft mit Hilfe der Steigung der Diagonale
if (steigung<0)
return( p.x() >= getStartPoint().x() && p.x() <= getStopPoint().x() );
else
return(p.x() <= getStartPoint().x() &&p.x() >= getStopPoint().x() );
}
int Rectangle::getWidth() const
{
return width;
}
void Rectangle::setWidth(int newWidth)
{
width = newWidth;
}
int Rectangle::getHeight() const
{
return height;
}
void Rectangle::setHeight(int newHeight)
{
height = newHeight;
}
#ifndef RECTANGLE_H
#define RECTANGLE_H
#include "graphobj.h"
class Rectangle : public GraphObj{
public:
Rectangle();
Rectangle(const Rectangle& graph) ;
Rectangle &operator=(const Rectangle& graph) ;
virtual ~Rectangle();
void draw(QPainter &painter);
void move(QPoint vector);
bool checkTheSelectedShape(QPoint p);
int getWidth() const;
void setWidth(int newWidth);
int getHeight() const;
void setHeight(int newHeight);
private:
int width = 0;
int height = 0;
};
#endif // RECTANGLE_H
#include "scene.h"
#include <iostream>
#include <ostream>
Scene::Scene(){
}
Scene::Scene(const Scene &scene) {
for (int i = 0; (size_t)i < scene.AllShape.size(); ++i)
this->AllShape[i] = scene.AllShape[i];
}
Scene &Scene::operator=(const Scene &scene){
// check if the Operation is a = a then do nothing ;
//but a = b ; is okey
if (this != &scene) {
for (int i = 0; (size_t)i < scene.AllShape.size(); ++i)
this->AllShape[i] = scene.AllShape[i];
}
return *this;
}
Scene::~Scene()
{
for(int i = 0; i < (int)AllShape.size(); i++){
delete AllShape[i];
}
}
void Scene::draw(QPainter &painter)
{
for(int i = 0; i < (int)AllShape.size(); i++){
AllShape[i]->draw(painter);
}
}
void Scene::deleteShape(QMouseEvent *event){
int selectedIndex = selectObj(event) ;
if(selectedIndex !=-1 ){
AllShape.erase(AllShape.begin()+ selectedIndex );
}
}
void Scene::AddShape(GraphObj *obj){
AllShape.push_back(obj);
}
void Scene::DeleteAllShape(){
AllShape.clear();
}
void Scene::moveShape(QPoint startPoint , QPoint endPoint){
QPoint mouseClickedPoint = startPoint;
QPoint mouseStopedPoint = endPoint;
QPoint vectorOfTheMovingEvent = mouseStopedPoint - mouseClickedPoint ;
if( SelectedIndex !=-1){
AllShape[SelectedIndex]->move(vectorOfTheMovingEvent);
}
}
void Scene::colorShape(QMouseEvent *event,QColor color)
{
int selectedIndex = selectObj(event) ;
if(selectedIndex !=-1 ){
AllShape[selectedIndex]->setColor(color);
}
}
int Scene::selectObj(QPoint p){
for( int i = AllShape.size() - 1 ; i != -1 ; --i) {
if(AllShape[i]->checkTheSelectedShape(p)){
return i;
}
}//end for loop
return -1;
}
int Scene::getSelectedIndex() const
{
return SelectedIndex;
}
void Scene::setSelectedIndex(int newSelectedIndex)
{
SelectedIndex = newSelectedIndex;
}
int Scene::selectObj(QMouseEvent *event){
for( int i = AllShape.size() - 1 ; i != -1 ; --i) {
if(AllShape[i]->checkTheSelectedShape(event->pos())){
return i;
}
}
return -1;
// lastColorOfSelectedShap = scene->AllShape[i]->getColor();
// //Set oppicity to the Shape
// QColor newColorForSelectedShape = Qt::gray;
// newColorForSelectedShape.setAlpha(100);
// scene->AllShape[i]->setColor(newColorForSelectedShape);
}
#ifndef SCENE_H
#define SCENE_H
#include <vector>
#include <QMouseEvent>
#include <QColor>
#include"graphobj.h"
class Scene
{
public:
Scene();
Scene(const Scene& scene) ;
Scene& operator=(const Scene& scene) ;
~Scene();
void draw(QPainter &painter);
void deleteShape(QMouseEvent *event);
void AddShape(GraphObj* obj);
void DeleteAllShape();
void moveShape(QPoint startPoint, QPoint endPoint );
void colorShape(QMouseEvent *event,QColor color);
int selectObj(QMouseEvent *event);
// function overload
int selectObj(QPoint p);
int getSelectedIndex() const;
void setSelectedIndex(int newSelectedIndex);
private:
std::vector<GraphObj *> AllShape;
int SelectedIndex = -1 ;
};
#endif // SCENE_H
// MOV R7 , #0 @ R7 ist der Counter für die Anzhal der Ketten @das Brauchen wir um zu überprüfen ob unsere Zeichnenkette über 255 ist
//loop:
// CMP R7 , 254 @ prüfen ob wir unsere Maximal erreicht haben
// BEQ checkIfStringover255 @ retrun function die /0 am Ende kopiert
// ADD R7 , #1 @ increment den Counter
// LDRB R1 , [R0] , #1 ; @ R0 ist der Zeiger auf StringA
// STRB R1 , [R2] , #1 ; @ R2 ist ein Zeiger auf StringB
// CMP R1 , #0 @ R1 hat immer eine Kopie von dem aktuellen Inhalt
// BNE loop @ noch mal incremetieren und kopieren den nächsten Inhalt
//checkIfStringover255:
// MOV R9 #0 @ Mov 0 zu r9 weil wir nicht sagen können speichere #0 in R2
// STRB R9,[R2,#1] @ incrementieren den Zeiger vor dem Speichern
// @//.......................... weiter code
// MOV R5, #0;
//PushNumberInStack:
// ADD R5,#1;
// LDRB R8 , [R2] , #1 ; @ R2 ist der Zeiger auf StringB
// @ charakter laden von dem Speicher
// @ und Zeiger Incrementieren
// CMP R8 , #0 ; @ check ob zeichen ist 0 (Terminiert)
// BEQ PopNumberInSpeicher ; @ überprüfung ist fertig
// CMP R8 , 49 @ Vergeleiche charakter mit 0
// BLT PushNumberInStack ; @ Ignore
// CMP R8 , 57 @ Vergeleiche charakter mit 9
// BGT PushNumberInStack ; @ Ignore
// PUSH R8 ;
// B SaveNumberInStack ; @ noch mal incremetieren und kopieren den nächsten Inhalt
//PopNumberInSpeicher:
// POP R8;
// STR R8 , [R2], #1; @ Speichern Zahlen in den Speicher
// SUBS R5, #1; @ Counter Dekrimentieren
// BNE PopNumberInSpeicher ; @ Jump wenn R5 nicht 0 ist
//@//.......................... weiter code
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment