Gradient Fertig

This commit is contained in:
AshBastian
2020-01-26 18:43:14 +01:00
parent 9f6fe965ec
commit 710848307f
3 changed files with 35 additions and 19 deletions

View File

@@ -1 +1,3 @@
history tool doesnt load polygon data on undo iff project was loaded
history tool doesnt load polygon data on undo iff project was loaded
history tool doesnt save delete Layer
Gradient breaks Heap Size, when big Witdh and Height (appeared on 1280x720)

View File

@@ -21,7 +21,6 @@ void IntelliToolGradient::onMouseLeftPressed(int x, int y){
B = QPoint(x,y);
VectorAB[0] = 0;
VectorAB[1] = 0;
Canvas->image->drawPlain(colorPicker->getFirstColor());
Canvas->image->drawPixel(A,LineColor);
}
@@ -30,14 +29,13 @@ void IntelliToolGradient::onMouseRightPressed(int x, int y){
}
void IntelliToolGradient::onMouseLeftReleased(int x, int y){
if(hasMoved && A != B){
for(int i = 0; i < activeLayer->height; i++){
for(int j = 0; j < activeLayer->width; j++){
computePixelColor(QPoint(i,j));
}
}
if(hasMoved){
computeGradientLayer();
IntelliTool::onMouseLeftReleased(x,y);
}
else{
IntelliTool::onMouseRightPressed(x,y);
}
IntelliTool::onMouseLeftReleased(x,y);
}
void IntelliToolGradient::onMouseRightReleased(int x, int y){
@@ -49,12 +47,11 @@ void IntelliToolGradient::onMouseMoved(int x, int y){
B = QPoint(x,y);
VectorAB[0] = static_cast<float>(B.x() - A.x());
VectorAB[1] = static_cast<float>(B.y() - A.y());
NormalVector[0] = VectorAB[1];
NormalVector[1] = (-1*VectorAB[0]);
NormalDotNormal = dotProduct(NormalVector,NormalVector);
this->Canvas->image->drawPlain(Qt::transparent);
for(int i = 0; i < activeLayer->height; i++){
for(int j = 0; j < activeLayer->width; j++){
computePixelColor(QPoint(i,j));
}
}
computeGradientLayer();
Canvas->image->drawLine(A,B,LineColor,1);
IntelliTool::onMouseMoved(x,y);
}
@@ -64,9 +61,6 @@ void IntelliToolGradient::onWheelScrolled(int value){
}
void IntelliToolGradient::computePixelColor(QPoint Point){
double NormalVector[2];
NormalVector[0] = VectorAB[1];
NormalVector[1] = (-1*VectorAB[0]);
double doublePoint[2];
doublePoint[0] = static_cast<double>(Point.x());
doublePoint[1] = static_cast<double>(Point.y());
@@ -75,7 +69,6 @@ void IntelliToolGradient::computePixelColor(QPoint Point){
doublePointSubA[1] = doublePoint[1] - doubleA[1];
double Perpendicular[2];
double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector);
double NormalDotNormal = dotProduct(NormalVector,NormalVector);
Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0];
Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1];
double VectorAPoint[2];
@@ -120,3 +113,20 @@ double IntelliToolGradient::dotProduct(double Vector1[2], double Vector2[2]){
double IntelliToolGradient::lenghtVector(double Vector[2]){
return static_cast<double>((std::sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1])));
}
void IntelliToolGradient::computeGradientLayer(){
bool switched = false;
if(Canvas->image->isFastRendering()){
switched = true;
Canvas->image->updateRendererSetting(false);
}
qDebug() << activeLayer->width << activeLayer->height;
for(int i = 0; i < activeLayer->height; i++){
for(int j = 0; j < activeLayer->width; j++){
computePixelColor(QPoint(i,j));
}
}
if(switched){
Canvas->image->updateRendererSetting(true);
}
}

View File

@@ -6,8 +6,10 @@ class IntelliToolGradient : public IntelliTool{
private:
QPoint A;
QPoint B;
double VectorAB[2];
double doubleA[2];
double VectorAB[2];
double NormalVector[2];
double NormalDotNormal;
QColor LineColor;
bool hasMoved;
@@ -62,6 +64,8 @@ public:
double dotProduct(double Vector1[2], double Vector2[2]);
double lenghtVector(double Vector[2]);
void computeGradientLayer();
};
#endif // INTELLITOOLGRADIENT_H