From fa086ddf8b0ee04475a869f1ba26040b5e41bc13 Mon Sep 17 00:00:00 2001 From: wuyize Date: Mon, 16 Jan 2023 15:20:38 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86Renderer?= =?UTF-8?q?=E7=9A=84=E9=83=A8=E5=88=86=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Shaders/painting.comp | 182 ++++++++-------- .../Shaders/shadow_mapping.comp | 2 +- .../src/Editor/GraphicElement.cpp | 1 + .../src/Renderer/Model.cpp | 201 +++++++++++------- .../src/Renderer/Painting/ShortCutTree.cpp | 31 +-- .../src/Renderer/RendererWidget.cpp | 2 + 6 files changed, 231 insertions(+), 188 deletions(-) diff --git a/ArchitectureColoredPainting/Shaders/painting.comp b/ArchitectureColoredPainting/Shaders/painting.comp index fba3020..3df1c25 100644 --- a/ArchitectureColoredPainting/Shaders/painting.comp +++ b/ArchitectureColoredPainting/Shaders/painting.comp @@ -28,7 +28,7 @@ layout(std430, binding = 4) buffer elementOffsetBuffer { /********************** ** @[0] elementBvhRoot - ** @[1] elementBvhLength + ** @[1] styleOffset ** @[2] pointsOffset ** @[3] linesOffset **********************/ @@ -42,6 +42,7 @@ layout(std430, binding = 6) buffer elementDataBuffer { float elementData[]; //点和Style }; + const float PI = 3.14159265358979; @@ -832,6 +833,49 @@ float cubic_bezier_dis(vec2 uv, vec2 p0, vec2 p1, vec2 p2, vec2 p3, bool roundEn return sqrt(d0); } +void drawLine(in float d, in uint styleIndex, out vec4 elementColor, out vec2 metallicRoughness) +{ + elementColor = vec4(1); + metallicRoughness = vec2(0.8); + switch(int(elementData[styleIndex+3])) + { + case 0: + { + elementColor = vec4(elementData[styleIndex+7],elementData[styleIndex+8],elementData[styleIndex+9],1); + metallicRoughness = vec2(elementData[styleIndex+10],elementData[styleIndex+11]); + break; + } + case 1: + { + elementColor = vec4(mix(vec3(0), vec3(1), d), 1); + metallicRoughness = vec2(0,0.8); + break; + } + case 2: + { + float levels[] = {0.25,0.5,0.75}; + vec3 colors[] = {vec3(1,0,0), vec3(0,1,0), vec3(0,0,1), vec3(1,1,0)}; + int i = 0; + while(i<3) + { + if(d= elementBvhLength) { - if (any(greaterThan(bound.xy+vec2(0.001), localUV)) || any(greaterThan(localUV, bound.zw-vec2(0.001)))) + if (any(greaterThan(bound.xy+vec2(0.003), localUV)) || any(greaterThan(localUV, bound.zw-vec2(0.003)))) + { + debugBVH.g = 0; debugBVH.r += 1; - - uint styleIndex = bvhChildren[elementBvhRoot + elementBvhIndex].y; + } + //uint styleIndex = bvhChildren[elementBvhRoot + elementBvhIndex].y; + uint elementType = bvhChildren[elementBvhRoot + elementBvhIndex].y; + // for(int i = 0; i<200;i++) - if (elementData[styleIndex] == 0.) //面 + if (elementType == 0) //面 { uint contourIndex = linesOffset + leftChild - 0x80000000; @@ -892,12 +942,12 @@ bool drawElement(uint elementIndex, vec2 localUV, out vec3 color, out vec2 metal // vec2(elementData[pxIndex[1]], elementData[pyIndex[1]]), // vec2(elementData[pxIndex[2]],elementData[pyIndex[2]]), // vec2(elementData[pxIndex[3]], elementData[pyIndex[3]])}; - if( bound.z==p[0].x && distance(localUV, p[3])<0.01) - { - debugBVH = vec3(0,0,1); - } - else if(distance(localUV, p[0])<0.01) - debugBVH = vec3(1,1,1); +// if( bound.z==p[0].x && distance(localUV, p[3])<0.01) +// { +// debugBVH = vec3(0,0,1); +// } +// else if(distance(localUV, p[0])<0.01) +// debugBVH = vec3(1,1,1); // if (p0 == p1 && p2 == p3) // { // num_its += segment_int_test(localUV, p0, p3); @@ -920,7 +970,7 @@ bool drawElement(uint elementIndex, vec2 localUV, out vec3 color, out vec2 metal } } - else if (elementData[styleIndex] == 1) //线 + else if (elementType == 1) //线 { float strokeWidth = elementData[styleIndex+1]; uint contourIndex = linesOffset + leftChild - 0x80000000; @@ -947,7 +997,7 @@ bool drawElement(uint elementIndex, vec2 localUV, out vec3 color, out vec2 metal mat4x2 p = mat4x2(elementData[pxIndex[0]], elementData[pyIndex[0]], elementData[pxIndex[1]], elementData[pyIndex[1]], - elementData[pxIndex[2]],elementData[pyIndex[2]], + elementData[pxIndex[2]], elementData[pyIndex[2]], elementData[pxIndex[3]], elementData[pyIndex[3]]); bvec3 signTestResult = cubic_bezier_sign_test(localUV, p[0], p[1], p[2], p[3]); @@ -957,50 +1007,16 @@ bool drawElement(uint elementIndex, vec2 localUV, out vec3 color, out vec2 metal if(lastSign) signTmp = !signTmp; float lineType = elementData[styleIndex+4]; - if(d<=0.001) + /*if(d<=0.001) { hitElement = true; elementColor = vec4(0,0,0,1); } - else if(d<=strokeWidth && (lineType==2 || signTmp==(lineType==1-reverseFlag))) + else*/ if(d<=strokeWidth && (lineType==2 || signTmp==(lineType==1-reverseFlag))) { d/=strokeWidth; hitElement = true; - elementColor = vec4(1); - metallicRoughness = vec2(0.8); - if(elementData[styleIndex+3]==0) - { - elementColor = vec4(elementData[styleIndex+7],elementData[styleIndex+8],elementData[styleIndex+9],1); - metallicRoughness = vec2(elementData[styleIndex+10],elementData[styleIndex+11]); - } - else if(elementData[styleIndex+3]==1) - { - elementColor = vec4(mix(vec3(0), vec3(1), d), 1); - metallicRoughness = vec2(0,0.8); - } - else if(elementData[styleIndex+3]==2) - { - float levels[] = {0.25,0.5,0.75}; - vec3 colors[] = {vec3(1,0,0), vec3(0,1,0), vec3(0,0,1), vec3(1,1,0)}; - int i = 0; - while(i<3) - { - if(dcolor.w) { - if (zIndex == 1) - debugBVH = vec3(1, 0, 1); + if (any(greaterThan(bound.xy+vec2(0.005), uv)) || any(greaterThan(uv, bound.zw-vec2(0.005)))) + debugBVH.g += 0.3; //uint elementIndex = leftChild - bvhLength; - debugBVH.bg += 0.5 * (localUV + vec2(1)); + //debugBVH.bg += 0.5 * (localUV + vec2(1)); - debugBVH = vec3(0); + //debugBVH = vec3(0); vec3 elementColor; vec2 elementMetallicRoughness; if(drawElement(leftChild - 0x80000000, localUV, elementColor, elementMetallicRoughness, debugBVH)) @@ -1187,7 +1170,9 @@ void main() } else if (all(lessThan(bound.xy, uv)) && all(lessThan(uv, bound.zw))) { - debugBVH.r += 0.02; + if (any(greaterThan(bound.xy+vec2(0.005), uv)) || any(greaterThan(uv, bound.zw-vec2(0.005)))) + debugBVH.g += 0.3; + //debugBVH.r += 0.02; stack.push(index); index = leftChild; } @@ -1205,9 +1190,14 @@ void main() imageStore(gBaseColor, pixelLocation, vec4(color.rgb,1)); imageStore(gMetallicRoughness, pixelLocation, vec4(metallicRoughness, 0, 1)); return; - if (color.a!=-1&&debugBVH==vec3(0)) - imageStore(gBaseColor, pixelLocation, vec4(vec3(1, 1, 0),1)); + if (/*color.a!=-1&&*/debugBVH==vec3(0)) + { + //imageStore(gBaseColor, pixelLocation, vec4(vec3(1, 1, 0),1)); + } else + { imageStore(gBaseColor, pixelLocation, vec4(debugBVH,1)); + imageStore(gMetallicRoughness, pixelLocation, vec4(0,0.8, 0, 1)); + } } \ No newline at end of file diff --git a/ArchitectureColoredPainting/Shaders/shadow_mapping.comp b/ArchitectureColoredPainting/Shaders/shadow_mapping.comp index 6e6c592..56741e5 100644 --- a/ArchitectureColoredPainting/Shaders/shadow_mapping.comp +++ b/ArchitectureColoredPainting/Shaders/shadow_mapping.comp @@ -68,7 +68,7 @@ vec3 fresnelSchlick(float cosTheta, vec3 F0) const int pcfRadius = 3; float getShadowFromLayer(vec3 fragPosWorldSpace, vec3 normal,int layer) { - float normalBias = 4. /** (1+pcfRadius)*/ * shadowBiases[layer]*max((1.0 - dot(normal, mainLightDirection)), 0.1)/textureSize(gShadowMap, 0).x; + float normalBias = 1.2*4. /** (1+pcfRadius)*/ * shadowBiases[layer]*max((1.0 - dot(normal, mainLightDirection)), 0.1)/textureSize(gShadowMap, 0).x; vec4 fragPosLightSpace = lightSpaceMatrices[layer] * vec4(fragPosWorldSpace+normal*normalBias, 1.0); // perform perspective divide vec3 projCoords = fragPosLightSpace.xyz / fragPosLightSpace.w; diff --git a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp index 1b4dea4..567ccc1 100644 --- a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp +++ b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp @@ -32,6 +32,7 @@ QPainterPath GroupElement::getPaintObject() const if (sourceLayer != nullptr) { sourceLayer->refresh(); return sourceLayer->getCache(); + } else return QPainterPath(); } diff --git a/ArchitectureColoredPainting/src/Renderer/Model.cpp b/ArchitectureColoredPainting/src/Renderer/Model.cpp index 353b67e..7bde75f 100644 --- a/ArchitectureColoredPainting/src/Renderer/Model.cpp +++ b/ArchitectureColoredPainting/src/Renderer/Model.cpp @@ -176,7 +176,7 @@ Drawable* Model::processMesh(aiMesh* mesh, const aiScene* scene, aiMatrix4x4 mod m_mesh->indices.push_back(face.mIndices[j]); } } - + //////////////////////////////////////////////////////////////////////////////////////////////////////////// BvhTree rootBvhTree; vector rootBvhTreeData; for (int i = 0; i < 1000; i++) @@ -185,8 +185,13 @@ Drawable* Model::processMesh(aiMesh* mesh, const aiScene* scene, aiMatrix4x4 mod float y = (float)rand() / RAND_MAX * 2 - 1; float z = 0.05 + x;//(float)rand() / RAND_MAX * (0.1) + x; float w = 0.05 + y;//(float)rand() / RAND_MAX * (0.1) + y; - rootBvhTreeData.push_back(BvhTreeData( QVector4D(x, y, z, w), 0, encodeZIndexAngle(1, (float)rand() / RAND_MAX * 360))); + rootBvhTreeData.push_back(BvhTreeData(QVector4D(x, y, z, w), 0, encodeZIndexAngle(1, (float)rand() / RAND_MAX * 360))); + //rootBvhTreeData.push_back(BvhTreeData(QVector4D(x, y, z, w), 0, encodeZIndexAngle(1, 0))); } + /*rootBvhTreeData.push_back(BvhTreeData(QVector4D(-0.7, -0.7, -0.1, -0.1), 0, encodeZIndexAngle(1, 0))); + rootBvhTreeData.push_back(BvhTreeData(QVector4D(-0.8, 0.2, -0.2, 0.8), 0, encodeZIndexAngle(1, 0))); + rootBvhTreeData.push_back(BvhTreeData(QVector4D(0.2, -0.8, 0.8, -0.2), 0, encodeZIndexAngle(1, 0))); + rootBvhTreeData.push_back(BvhTreeData(QVector4D(0.1, 0.1, 0.7, 0.7), 0, encodeZIndexAngle(1, 0)));*/ //rootBvhTreeData.push_back(BvhTreeData(QVector4D(-0.8, -0.8, -0.2, -0.1), 0, 0)); //rootBvhTreeData.push_back(BvhTreeData(QVector4D(-0.7, -0.8, -0.2, -0.1), 0, 0)); /* initBound.push_back(QVector4D(-0.8, -0.8, -0.7, -0.7)); @@ -206,99 +211,99 @@ Drawable* Model::processMesh(aiMesh* mesh, const aiScene* scene, aiMatrix4x4 mod // {{-0.5,0.3}, {-0.420466,0.379534}, {-0.736743,0.6}, {-0.624264,0.6}}, // {{-0.624264,0.6}, {-0.511785,0.6}, {-0.579534,0.979534}, {-0.5,0.9}} //}; - /*vector> lineSet = SvgParser("M377,459.61a11.26,11.26,0,0,1,11.27-11.27H696.12a11.27,11.27,0,0,0,11-8.62A359.84,359.84,0,0,0,708,280.56a11.26,11.26,0,0,0-11-8.73H388.27A11.26,11.26,0,0,1,377,260.57h0a11.26,11.26,0,0,1,11.27-11.26H683.71A11.32,11.32,0,0,0,694.28,234C649.8,113.69,542.57,23.85,412.3,4.12a11.22,11.22,0,0,0-12.76,11.17v158.9a11.26,11.26,0,0,0,11.26,11.27H583.12a11.32,11.32,0,0,0,9.26-17.75c-31.67-46.59-78.51-75.2-109.11-90.07a11.25,11.25,0,0,0-16.13,10.17V115.2a11.24,11.24,0,0,0,6.22,10.07l7.51,3.76a11.28,11.28,0,0,1,5,15.12h0a11.27,11.27,0,0,1-15.11,5l-20-10a11.27,11.27,0,0,1-6.22-10.07V54a11.27,11.27,0,0,1,14.62-10.75c5.11,1.59,125.66,40.35,172.24,149A11.27,11.27,0,0,1,621.11,208H388.27A11.26,11.26,0,0,1,377,196.73V11.36A11.32,11.32,0,0,0,365.89.08C363.34,0,360.79,0,358.22,0s-5.11,0-7.66.08a11.32,11.32,0,0,0-11.11,11.28V196.74A11.26,11.26,0,0,1,328.18,208H95.35A11.27,11.27,0,0,1,85,192.3c46.57-108.67,167.12-147.42,172.23-149A11.26,11.26,0,0,1,271.86,54v75.11a11.25,11.25,0,0,1-6.23,10.07l-20,10a11.27,11.27,0,0,1-15.11-5h0a11.26,11.26,0,0,1,5-15.11l7.52-3.76a11.27,11.27,0,0,0,6.22-10.07V87.82a11.25,11.25,0,0,0-16.14-10.16c-30.6,14.87-77.45,43.48-109.1,90.07a11.3,11.3,0,0,0,9.25,17.74H305.66a11.26,11.26,0,0,0,11.27-11.26V15.31A11.22,11.22,0,0,0,304.17,4.14C173.88,23.86,66.66,113.71,22.17,234a11.32,11.32,0,0,0,10.56,15.29H328.18a11.26,11.26,0,0,1,11.27,11.26v0a11.26,11.26,0,0,1-11.27,11.26H19.52a11.26,11.26,0,0,0-11,8.72,359.84,359.84,0,0,0,.83,159.16,11.26,11.26,0,0,0,11,8.61H328.18a11.26,11.26,0,0,1,11.27,11.27h0a11.26,11.26,0,0,1-11.27,11.26h-294a11.32,11.32,0,0,0-10.53,15.4C69,604.65,175.3,692.78,304.16,712.3a11.21,11.21,0,0,0,12.76-11.16V542.22A11.26,11.26,0,0,0,305.66,531h-166c-9.53,0-14.89,11.22-8.69,18.47,34.09,39.77,74.45,65.66,101.77,80.18a11.25,11.25,0,0,0,16.53-10V591a11.26,11.26,0,0,1,11.26-11.26h0A11.26,11.26,0,0,1,271.85,591v63.85A11.27,11.27,0,0,1,256.8,665.5c-4.45-1.59-109.58-40-171-139.9a11.27,11.27,0,0,1,9.59-17.17H328.18a11.26,11.26,0,0,1,11.27,11.26V705.08a11.32,11.32,0,0,0,11.11,11.28q3.82.07,7.66.08c2.57,0,5.12,0,7.67-.08A11.32,11.32,0,0,0,377,705.08V519.69a11.25,11.25,0,0,1,11.27-11.26H621.1a11.26,11.26,0,0,1,9.59,17.16c-61.46,99.87-166.59,138.3-171,139.9a11.27,11.27,0,0,1-15-10.61V591a11.26,11.26,0,0,1,11.26-11.26h0A11.26,11.26,0,0,1,467.14,591v28.6a11.25,11.25,0,0,0,16.53,10c27.33-14.53,67.68-40.42,101.77-80.19,6.2-7.23.85-18.46-8.69-18.46h-166a11.26,11.26,0,0,0-11.26,11.26V701.12a11.21,11.21,0,0,0,12.76,11.17c128.86-19.51,235.14-107.66,280.48-226a11.33,11.33,0,0,0-10.53-15.41h-294A11.25,11.25,0,0,1,377,459.61ZM35.27,399.53V316.9a11.26,11.26,0,0,1,11.27-11.26H669.92a11.25,11.25,0,0,1,11.26,11.26v82.63a11.25,11.25,0,0,1-11.26,11.26H46.54a11.27,11.27,0,0,1-11.27-11.26Z", 716.45, 716.44).parse(); + vector> lineSet = SvgParser("M377,459.61a11.26,11.26,0,0,1,11.27-11.27H696.12a11.27,11.27,0,0,0,11-8.62A359.84,359.84,0,0,0,708,280.56a11.26,11.26,0,0,0-11-8.73H388.27A11.26,11.26,0,0,1,377,260.57h0a11.26,11.26,0,0,1,11.27-11.26H683.71A11.32,11.32,0,0,0,694.28,234C649.8,113.69,542.57,23.85,412.3,4.12a11.22,11.22,0,0,0-12.76,11.17v158.9a11.26,11.26,0,0,0,11.26,11.27H583.12a11.32,11.32,0,0,0,9.26-17.75c-31.67-46.59-78.51-75.2-109.11-90.07a11.25,11.25,0,0,0-16.13,10.17V115.2a11.24,11.24,0,0,0,6.22,10.07l7.51,3.76a11.28,11.28,0,0,1,5,15.12h0a11.27,11.27,0,0,1-15.11,5l-20-10a11.27,11.27,0,0,1-6.22-10.07V54a11.27,11.27,0,0,1,14.62-10.75c5.11,1.59,125.66,40.35,172.24,149A11.27,11.27,0,0,1,621.11,208H388.27A11.26,11.26,0,0,1,377,196.73V11.36A11.32,11.32,0,0,0,365.89.08C363.34,0,360.79,0,358.22,0s-5.11,0-7.66.08a11.32,11.32,0,0,0-11.11,11.28V196.74A11.26,11.26,0,0,1,328.18,208H95.35A11.27,11.27,0,0,1,85,192.3c46.57-108.67,167.12-147.42,172.23-149A11.26,11.26,0,0,1,271.86,54v75.11a11.25,11.25,0,0,1-6.23,10.07l-20,10a11.27,11.27,0,0,1-15.11-5h0a11.26,11.26,0,0,1,5-15.11l7.52-3.76a11.27,11.27,0,0,0,6.22-10.07V87.82a11.25,11.25,0,0,0-16.14-10.16c-30.6,14.87-77.45,43.48-109.1,90.07a11.3,11.3,0,0,0,9.25,17.74H305.66a11.26,11.26,0,0,0,11.27-11.26V15.31A11.22,11.22,0,0,0,304.17,4.14C173.88,23.86,66.66,113.71,22.17,234a11.32,11.32,0,0,0,10.56,15.29H328.18a11.26,11.26,0,0,1,11.27,11.26v0a11.26,11.26,0,0,1-11.27,11.26H19.52a11.26,11.26,0,0,0-11,8.72,359.84,359.84,0,0,0,.83,159.16,11.26,11.26,0,0,0,11,8.61H328.18a11.26,11.26,0,0,1,11.27,11.27h0a11.26,11.26,0,0,1-11.27,11.26h-294a11.32,11.32,0,0,0-10.53,15.4C69,604.65,175.3,692.78,304.16,712.3a11.21,11.21,0,0,0,12.76-11.16V542.22A11.26,11.26,0,0,0,305.66,531h-166c-9.53,0-14.89,11.22-8.69,18.47,34.09,39.77,74.45,65.66,101.77,80.18a11.25,11.25,0,0,0,16.53-10V591a11.26,11.26,0,0,1,11.26-11.26h0A11.26,11.26,0,0,1,271.85,591v63.85A11.27,11.27,0,0,1,256.8,665.5c-4.45-1.59-109.58-40-171-139.9a11.27,11.27,0,0,1,9.59-17.17H328.18a11.26,11.26,0,0,1,11.27,11.26V705.08a11.32,11.32,0,0,0,11.11,11.28q3.82.07,7.66.08c2.57,0,5.12,0,7.67-.08A11.32,11.32,0,0,0,377,705.08V519.69a11.25,11.25,0,0,1,11.27-11.26H621.1a11.26,11.26,0,0,1,9.59,17.16c-61.46,99.87-166.59,138.3-171,139.9a11.27,11.27,0,0,1-15-10.61V591a11.26,11.26,0,0,1,11.26-11.26h0A11.26,11.26,0,0,1,467.14,591v28.6a11.25,11.25,0,0,0,16.53,10c27.33-14.53,67.68-40.42,101.77-80.19,6.2-7.23.85-18.46-8.69-18.46h-166a11.26,11.26,0,0,0-11.26,11.26V701.12a11.21,11.21,0,0,0,12.76,11.17c128.86-19.51,235.14-107.66,280.48-226a11.33,11.33,0,0,0-10.53-15.41h-294A11.25,11.25,0,0,1,377,459.61ZM35.27,399.53V316.9a11.26,11.26,0,0,1,11.27-11.26H669.92a11.25,11.25,0,0,1,11.26,11.26v82.63a11.25,11.25,0,0,1-11.26,11.26H46.54a11.27,11.27,0,0,1-11.27-11.26Z", 716.45, 716.44).parse(); qDebug() << lineSet.size(); for (vector& line : lineSet) { for (Point& p : line) p.show(); std::cout << std::endl; + } + + + ShortCutTree shortCutTree(20); + shortCutTree.buildShortCutTree(lineSet); + vector pointVector; + vector lineVector; + vector bvhTreeData = shortCutTree.getPointLineAndBvhTree(pointVector, lineVector); + for (auto& data : bvhTreeData) + data.rightSon = 0; + qDebug() << "----------------------------------------------"; + qDebug() << "element0CellNum: " << bvhTreeData.size(); + //qDebug() << pointVector; + //qDebug() << lineVector; + /*for (BvhTreeData data : bvhTreeData) + { + data.show(); }*/ + BvhTree element0Bvh; + element0Bvh.buildBvhTree(bvhTreeData.data(), bvhTreeData.size()); + std::vector element0Children; + std::vector element0Bounds; + element0Bvh.getBvhArray(element0Children, element0Bounds); + //qDebug() << element0Children; + //qDebug() << element0Bounds; + + //std::vector bvhChildren = { + // //root + // 1,2, + // 3,4, 5,6, + // encodeChild(0),0, encodeChild(0),GLuint(30. / 360 * 65536 + 1 * 65536) /*右儿子用来表示旋转角度和zIndex*/, encodeChild(0),0, encodeChild(0),0 + //}; + //std::vector bvhBounds = { + // //root + // QVector4D(-1,-1,1,1), + // QVector4D(-0.9,-0.9,-0.1,0.9), QVector4D(0.1, -0.9,0.9,0.9), + // QVector4D(-0.8,-0.8,-0.2,-0.1), QVector4D(-0.7,0.2,-0.2,0.7), QVector4D(0.2,-0.8,0.8,-0.1), QVector4D(0.2,0.1,0.8,0.8), + //}; + std::vector bvhChildren; + std::vector bvhBounds; + rootBvhTree.getBvhArray(bvhChildren, bvhBounds); + //qDebug() << bvhChildren; + bvhChildren.insert(bvhChildren.end(), element0Children.begin(), element0Children.end()); + bvhBounds.insert(bvhBounds.end(), element0Bounds.begin(), element0Bounds.end()); - //ShortCutTree shortCutTree(20); - //shortCutTree.buildShortCutTree(lineSet); - //vector pointVector; - //vector lineVector; - //vector bvhTreeData = shortCutTree.getPointLineAndBvhTree(pointVector, lineVector); - //for (auto& data : bvhTreeData) - // data.rightSon = 0; - //qDebug() << "----------------------------------------------"; - //qDebug() << "element0CellNum: " << bvhTreeData.size(); - ////qDebug() << pointVector; - ////qDebug() << lineVector; - ///*for (BvhTreeData data : bvhTreeData) - //{ - // data.show(); - //}*/ - //BvhTree element0Bvh; - //element0Bvh.buildBvhTree(bvhTreeData.data(), bvhTreeData.size()); - //std::vector element0Children; - //std::vector element0Bounds; - //element0Bvh.getBvhArray(element0Children, element0Bounds); - ////qDebug() << element0Children; - ////qDebug() << element0Bounds; - - ////std::vector bvhChildren = { - //// //root - //// 1,2, - //// 3,4, 5,6, - //// encodeChild(0),0, encodeChild(0),GLuint(30. / 360 * 65536 + 1 * 65536) /*右儿子用来表示旋转角度和zIndex*/, encodeChild(0),0, encodeChild(0),0 - ////}; - ////std::vector bvhBounds = { - //// //root - //// QVector4D(-1,-1,1,1), - //// QVector4D(-0.9,-0.9,-0.1,0.9), QVector4D(0.1, -0.9,0.9,0.9), - //// QVector4D(-0.8,-0.8,-0.2,-0.1), QVector4D(-0.7,0.2,-0.2,0.7), QVector4D(0.2,-0.8,0.8,-0.1), QVector4D(0.2,0.1,0.8,0.8), - ////}; - //std::vector bvhChildren; - //std::vector bvhBounds; - //rootBvhTree.getBvhArray(bvhChildren, bvhBounds); - // - ////qDebug() << bvhChildren; - //bvhChildren.insert(bvhChildren.end(), element0Children.begin(), element0Children.end()); - //bvhBounds.insert(bvhBounds.end(), element0Bounds.begin(), element0Bounds.end()); + std::vector elementIndex = lineVector; + std::vector elementData = { + //fillStyle + //fill + 0, + //fillType + 0, //单色 + //fillColorMetallicRoughness + 240/255.,220/255.,160/255., 0.996,0.18, + }; + std::vector elementOffset = { + //element0 + rootBvhTree.getBvhNodeNum(), //elementBvhRoot + 0, //styleOffset + (GLuint)elementData.size(), //pointsOffset + 0, //linesOffset + }; + elementData.insert(elementData.end(), pointVector.begin(), pointVector.end()); + //qDebug() << elementIndex; + //qDebug() << elementData; - //std::vector elementIndex = lineVector; - //std::vector elementData = { - // //fillStyle - // //fill - // 0, - // //fillType - // 0, //单色 - // //fillColorMetallicRoughness - // 240/255.,220/255.,160/255., 0.996,0.18, - //}; - //std::vector elementOffset = { - // //element0 - // rootBvhTree.getBvhNodeNum(), //elementBvhRoot - // (GLuint)element0Bounds.size(), //elementBvhLength - // (GLuint)elementData.size(), //pointsOffset - // 0, //linesOffset - //}; - //elementData.insert(elementData.end(), pointVector.begin(), pointVector.end()); - ////qDebug() << elementIndex; - ////qDebug() << elementData; - - + ///////////////////////////////////////////////////////////////////////////////////////////////// std::vector bvhChildren0 = { //root 1,2, 3,4, 5,6, - encodeChild(0),0, encodeChild(0),GLuint(30. / 360 * 65536 + 1 * 65536) /*右儿子用来表示旋转角度和zIndex*/, encodeChild(1),0, encodeChild(0),0, + encodeChild(2),0, encodeChild(1),GLuint(30. / 360 * 65536 + 1 * 65536) /*右儿子用来表示旋转角度和zIndex*/, encodeChild(3),0, encodeChild(0),0, //elememt0 1,2, - encodeChild(20)/*contour索引,由于contour不定长,这里需要给到contour在elementIndex中位置*/,14/*style索引,在elementData中位置*/, encodeChild(24), 14, + encodeChild(20)/*contour索引,由于contour不定长,这里需要给到contour在elementIndex中位置*/,0/*封闭图形*/, encodeChild(24), 0, //elememt1 - encodeChild(12)/*contour索引*/, 39 + encodeChild(12)/*contour索引*/, 1/*线*/ }; std::vector bvhBounds0 = { //root QVector4D(-1,-1,1,1), QVector4D(-0.9,-0.9,-0.1,0.9), QVector4D(0.1, -0.9,0.9,0.9), - QVector4D(-0.8,-0.8,-0.2,-0.1), QVector4D(-0.7,0.2,-0.2,0.7), QVector4D(0.2,-0.8,0.8,-0.1), QVector4D(0.2,0.1,0.8,0.8), + QVector4D(-0.8,-0.8,-0.2,-0.1), QVector4D(-0.7,0.2,-0.2,0.7), QVector4D(0.2,-0.8,0.8,-0.1), QVector4D(0.3,0.2,0.7,0.7), //elememt0 QVector4D(-1,-1,1,1), QVector4D(-1,-1,-0.2,1), QVector4D(-0.2,-1,1,1), @@ -308,12 +313,22 @@ Drawable* Model::processMesh(aiMesh* mesh, const aiScene* scene, aiMatrix4x4 mod std::vector elementOffset0 = { //element0 7, //elementBvhRoot - 3, //elementBvhLength + 14, //styleOffset 0, //pointsOffset 0, //linesOffset //element1 10, //elementBvhRoot - 1, //elementBvhLength + 39, //styleOffset + 21, //pointsOffset + 28, //linesOffset + //element2 + 10, //elementBvhRoot + 51, //styleOffset + 21, //pointsOffset + 28, //linesOffset + //element3 + 10, //elementBvhRoot + 63, //styleOffset 21, //pointsOffset 28, //linesOffset }; @@ -361,6 +376,23 @@ Drawable* Model::processMesh(aiMesh* mesh, const aiScene* scene, aiMatrix4x4 mod //strokeEndType 0, //圆角 //strokeFillType + 0, //单色 + //线类型 + 2, //左侧 + //线外描边宽度 + 0, + //线外描边方式 + 0, //单色 + //strokeFillColorMetallicRoughness + 1,0,1, 0,0.8, + //strokeStyle + //stroke + 1, + //strokeWidth + 0.1, + //strokeEndType + 0, //圆角 + //strokeFillType 2, //单色 //线类型 1, //左侧 @@ -369,13 +401,30 @@ Drawable* Model::processMesh(aiMesh* mesh, const aiScene* scene, aiMatrix4x4 mod //线外描边方式 0, //单色 //strokeFillColorMetallicRoughness - 1,0,1, 0,0.8 + 1,0,1, 0,0.8, + //strokeStyle + //stroke + 1, + //strokeWidth + 0.1, + //strokeEndType + 0, //圆角 + //strokeFillType + 1, //单色 + //线类型 + 0, //左侧 + //线外描边宽度 + 0, + //线外描边方式 + 0, //单色 + //strokeFillColorMetallicRoughness + 1,0,1, 0,0.8, }; //m_mesh->paintingIndex = paintingHelper->addPainting(bounds.size(), std::vector(children.begin()+2, children.end()), bounds, // elementOffset, elementIndex, elementData); - //m_mesh->paintingIndex = paintingHelper->addPainting(rootBvhTree.getBvhNodeNum(), bvhChildren, bvhBounds, - // elementOffset, elementIndex, elementData); + /* m_mesh->paintingIndex = paintingHelper->addPainting(rootBvhTree.getBvhNodeNum(), bvhChildren, bvhBounds, + elementOffset, elementIndex, elementData);*/ m_mesh->paintingIndex = paintingHelper->addPainting(7, bvhChildren0, bvhBounds0, elementOffset0, elementIndex0, elementData0); m_mesh->setupMesh(); diff --git a/ArchitectureColoredPainting/src/Renderer/Painting/ShortCutTree.cpp b/ArchitectureColoredPainting/src/Renderer/Painting/ShortCutTree.cpp index 4bbebfa..7308c33 100644 --- a/ArchitectureColoredPainting/src/Renderer/Painting/ShortCutTree.cpp +++ b/ArchitectureColoredPainting/src/Renderer/Painting/ShortCutTree.cpp @@ -31,7 +31,7 @@ int ShortCutTree::getPointIndex(Point nowPoint) { bool ShortCutTree::IsBorderValueResonable(double value, set & valueSet) { bool isResonable = true; auto iter = valueSet.lower_bound(value); - if (iter != valueSet.end() && fabs(*iter-value) <= eps) { + if (iter != valueSet.end() && fabs(*iter - value) <= eps) { isResonable = false; } if (iter != valueSet.begin()) { @@ -64,12 +64,12 @@ bool ShortCutTree::isLineEqual(PointIndexVector& a, PointIndexVector& b) const { } void ShortCutTree::monotonization(vector& inLines, vector>& outLines) { - for (PointVector&l: inLines) { + for (PointVector& l : inLines) { std::shared_ptr nowLine; - switch(l.size()) { - case 2: nowLine.reset(new StraightLine(l)); break; - case 3: case 4: nowLine.reset(new CubicBezier(l)); break; - default: break; + switch (l.size()) { + case 2: nowLine.reset(new StraightLine(l)); break; + case 3: case 4: nowLine.reset(new CubicBezier(l)); break; + default: break; } nowLine->monotonization(outLines); outLines.push_back(nowLine); @@ -77,9 +77,9 @@ void ShortCutTree::monotonization(vector& inLines, vector > pointSet; - for (int & lineIndex : nowTreeNode.lineSet) { + for (int& lineIndex : nowTreeNode.lineSet) { int type = allLines[lineIndex]->judgeOneSideIntersection(nowTreeNode.bound.z(), nowTreeNode.bound.y(), nowTreeNode.bound.w(), false), lineIndexBegin, lineIndexEnd; if (type >= 2) { if (type == 2) { @@ -88,7 +88,7 @@ void ShortCutTree::generateShortCutSegment(ShortCutNode& nowTreeNode) { if (type == 3) { p = allLines[lineIndex]->getBegin(); } - lineIndexBegin = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.w()}); + lineIndexBegin = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.w() }); lineIndexEnd = getPointIndex({ nowTreeNode.bound.z(), p.y }); auto iter = pointSet.find({ lineIndexBegin, lineIndexEnd }); if (iter != pointSet.end()) { @@ -100,7 +100,7 @@ void ShortCutTree::generateShortCutSegment(ShortCutNode& nowTreeNode) { } } if (nowTreeNode.windingIncrement != 0) { - int lineIndexBegin = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.y()}); + int lineIndexBegin = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.y() }); int lineIndexEnd = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.w() }); auto iter = pointSet.find({ lineIndexBegin, lineIndexEnd }); if (iter != pointSet.end()) { @@ -122,7 +122,7 @@ void ShortCutTree::generateShortCutSegment(ShortCutNode& nowTreeNode) { bool ShortCutTree::handleShortCutNode(ShortCutNode& fa, ShortCutNode& nowTreeNode, double yValue, vector& v, int& sumIncrement) { nowTreeNode.windingIncrement = sumIncrement; - for (int & lineIndex : fa.lineSet) { + for (int& lineIndex : fa.lineSet) { int type = allLines[lineIndex]->judgeOneSideIntersection(yValue, nowTreeNode.bound.x(), nowTreeNode.bound.z(), true); if (type == 2) sumIncrement++; @@ -132,7 +132,7 @@ bool ShortCutTree::handleShortCutNode(ShortCutNode& fa, ShortCutNode& nowTreeNod nowTreeNode.lineSet.push_back(lineIndex); } } - qDebug() << nowTreeNode.lineSet.size() ; + qDebug() << nowTreeNode.lineSet.size(); if (nowTreeNode.lineSet.size() <= requiredLineMin) { if (nowTreeNode.lineSet.empty() && nowTreeNode.windingIncrement == 0) return false; @@ -145,7 +145,7 @@ bool ShortCutTree::handleShortCutNode(ShortCutNode& fa, ShortCutNode& nowTreeNod v.push_back(nowTreeNode); return true; } - + } void ShortCutTree::simplifyLineVector() { @@ -245,7 +245,7 @@ void ShortCutTree::spliteToShortCutTree() { } if (isUpperDivided) { ++eastGroupSize; - lineBound.push({yMid, segment.second}); + lineBound.push({ yMid, segment.second }); for (auto& nowTreeNode : upperTreeNodes) { nowTreeNode.eastGroup = eastGroupSize; Q.push(nowTreeNode); @@ -276,7 +276,7 @@ vector ShortCutTree::getPointLineAndBvhTree(vector& resPoint std::cout << now.windingIncrement << ' '; } for (auto& mapIter : pointMap) { - tmpPoints.push_back({ mapIter.second , mapIter.first}); + tmpPoints.push_back({ mapIter.second , mapIter.first }); } sort(tmpPoints.begin(), tmpPoints.end()); for (auto& vectorIter : tmpPoints) { @@ -295,6 +295,7 @@ vector ShortCutTree::getPointLineAndBvhTree(vector& resPoint BvhTreeData oneData; oneData.leftSon = resLines.size(); //oneData.rightSon = rightSon; + oneData.rightSon = 0; oneData.bound = nowTreeNode.bound; std::cout << nowTreeNode.lineSet.size() << ' '; resLines.push_back(nowTreeNode.lineSet.size()); diff --git a/ArchitectureColoredPainting/src/Renderer/RendererWidget.cpp b/ArchitectureColoredPainting/src/Renderer/RendererWidget.cpp index d8a6bb8..e8cb926 100644 --- a/ArchitectureColoredPainting/src/Renderer/RendererWidget.cpp +++ b/ArchitectureColoredPainting/src/Renderer/RendererWidget.cpp @@ -9,6 +9,8 @@ RendererWidget::RendererWidget(QWidget *parent) ui.openGLWidget, &RendererGLWidget::setMainLightPitch); QObject::connect(ui.horizontalSlider_2, &QSlider::valueChanged, ui.openGLWidget, &RendererGLWidget::setMainLightYaw); + ui.horizontalSlider->setValue(105); + ui.horizontalSlider_2->setValue(80); } RendererWidget::~RendererWidget() From 3d770ea92fcd0be4e7afd7efa7baf9a7d198d39d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B0=81=E7=BE=BD?= <2360164671@qq.com> Date: Mon, 16 Jan 2023 21:19:35 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0layer=E6=A0=91=E5=BD=A2?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=92=8C=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArchitectureColoredPainting.vcxproj | 4 +- ...rchitectureColoredPainting.vcxproj.filters | 12 +++-- ArchitectureColoredPainting/EditorWidget.ui | 54 ++++++++++++++----- .../src/Editor/EditorWidget.cpp | 5 ++ .../src/Editor/EditorWidget.h | 4 +- .../src/Editor/LayerManager.cpp | 12 +++++ .../src/Editor/LayerManager.h | 7 +++ .../src/Editor/LayerWrapper.cpp | 32 ++++++++--- .../src/Editor/LayerWrapper.h | 11 ++++ .../src/Editor/RightBar/InfoDisplayWidget.h | 1 + .../src/Editor/RightBar/LayerTreeWidget.cpp | 53 ++++++++++++++++++ .../src/Editor/RightBar/LayerTreeWidget.h | 18 +++++++ 12 files changed, 189 insertions(+), 24 deletions(-) create mode 100644 ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h create mode 100644 ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp create mode 100644 ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj index b06b955..6555ec8 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj @@ -68,7 +68,7 @@ stdcpp17 - $(SolutionDir)QGoodWindow;%(AdditionalIncludeDirectories); + $(SolutionDir)ArchitectureColoredPainting\src\Editor\RightBar;$(SolutionDir)ArchitectureColoredPainting\src\Editor\;$(SolutionDir)QGoodWindow;%(AdditionalIncludeDirectories) @@ -105,6 +105,7 @@ + @@ -161,6 +162,7 @@ + diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters index 0d4ccee..d127dfd 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters @@ -174,6 +174,9 @@ Source Files\Editor\third-party modules + + Source Files + @@ -203,6 +206,9 @@ Header Files\Editor + + Header Files + @@ -330,9 +336,6 @@ Header Files\Editor - - Header Files\Editor - Header Files\Renderer\Painting @@ -354,6 +357,9 @@ Header Files\Editor\util + + Header Files\Editor + diff --git a/ArchitectureColoredPainting/EditorWidget.ui b/ArchitectureColoredPainting/EditorWidget.ui index 7f00648..b4a34e5 100644 --- a/ArchitectureColoredPainting/EditorWidget.ui +++ b/ArchitectureColoredPainting/EditorWidget.ui @@ -27,18 +27,43 @@ 0 - - - - - 绾圭悊缂栬緫 - - - - - - - + + + + + + 绾圭悊缂栬緫 + + + Qt::AlignCenter + + + + + + + + + + + + + + + + + + Qt::CustomContextMenu + + + + + + + + + + @@ -49,6 +74,11 @@ QOpenGLWidget
PreviewWindow.h
+ + LayerTreeWidget + QTreeWidget +
LayerTreeWidget.h
+
diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp index c61e341..17bd5f9 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp @@ -4,6 +4,7 @@ EditorWidget::EditorWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); previewWindow = ui.Preview; + treeWidget = ui.LayerTree; qDebug() << "123"; // test QFile settingFile; @@ -19,6 +20,10 @@ EditorWidget::EditorWidget(QWidget *parent) : QWidget(parent) elementManager = new ElementManager(source); layerManager = new LayerManager(source, elementManager); previewWindow->initialize(layerManager); + if (layerManager->getRoot() != nullptr) + { + treeWidget->addTopLevelItem(layerManager->getRoot()->qTreeItem); + } } EditorWidget::~EditorWidget() diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.h b/ArchitectureColoredPainting/src/Editor/EditorWidget.h index 14ce226..26ac4c0 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.h @@ -2,11 +2,12 @@ #include "ElementManager.h" #include "LayerManager.h" +#include "LayerTreeWidget.h" #include "PreviewWindow.h" #include "ui_EditorWidget.h" #include +#include #include - class EditorWidget : public QWidget { Q_OBJECT @@ -16,6 +17,7 @@ class EditorWidget : public QWidget PreviewWindow *previewWindow; ElementManager *elementManager; LayerManager *layerManager; + LayerTreeWidget *treeWidget; public: EditorWidget(QWidget *parent = nullptr); diff --git a/ArchitectureColoredPainting/src/Editor/LayerManager.cpp b/ArchitectureColoredPainting/src/Editor/LayerManager.cpp index dfc7ea6..3a9a60f 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerManager.cpp +++ b/ArchitectureColoredPainting/src/Editor/LayerManager.cpp @@ -7,6 +7,10 @@ LayerManager::LayerManager(QJsonObject source, ElementManager *elementManager) else root = new LeafLayerWrapper(rootJson, elementManager, nullptr); } +LayerWrapper *LayerManager::getRoot() const +{ + return root; +} void LayerManager::paint(QPainter *painter) const { painter->drawPath(root->getCache()); @@ -57,3 +61,11 @@ bool LayerManager::changeParent(FolderLayerWrapper *newParent) const selectedLayers[0]->setParent(newParent); return true; } +void LayerManager::addLayer(LayerWrapper *layer) +{ + layerSet.insert(layer); +} +void LayerManager::removeLayer(LayerWrapper *layer) +{ + layerSet.erase(layer); +} diff --git a/ArchitectureColoredPainting/src/Editor/LayerManager.h b/ArchitectureColoredPainting/src/Editor/LayerManager.h index 370861a..a3a9742 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerManager.h +++ b/ArchitectureColoredPainting/src/Editor/LayerManager.h @@ -3,9 +3,11 @@ #include "LayerWrapper.h" #include #include +#include #include #include using std::pair; +using std::set; using std::vector; class ElementManager; class LayerWrapper; @@ -21,8 +23,13 @@ class LayerManager LayerPtrs involvedLeafLayersCache; bool singleSelectedCheck() const; bool multipleSelectedCheck() const; + set layerSet; public: + void addLayer(LayerWrapper *layer); + void removeLayer(LayerWrapper *layer); + LayerWrapper *getRoot() const; + LayerManager() = default; LayerManager(QJsonObject source, ElementManager *elementManager); void paint(QPainter *painter) const; bool rename(QString newName) const; diff --git a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp index 96ea1af..a06788e 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp +++ b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp @@ -33,15 +33,23 @@ LayerWrapper::LayerWrapper(QJsonObject json, LayerWrapper *parent) { this->parent = shared_ptr(parent); auto transformJson = json.value("transform").toObject(); - property.offset = { transformJson.value("offset").toObject().value("x").toDouble(), transformJson.value("offset").toObject().value("y").toDouble() }; - property.scale = { transformJson.value("scale").toObject().value("x").toDouble(), transformJson.value("scale").toObject().value("y").toDouble() }; - property.rotation = { transformJson.value("rotation").toDouble()}; + property.name = json.value("name").toString(); + property.offset = {transformJson.value("offset").toObject().value("x").toDouble(), + transformJson.value("offset").toObject().value("y").toDouble()}; + property.scale = {transformJson.value("scale").toObject().value("x").toDouble(), + transformJson.value("scale").toObject().value("y").toDouble()}; + property.rotation = {transformJson.value("rotation").toDouble()}; + qTreeItem = new QTreeWidgetItem(); + qTreeItem->setText(0, property.name); + if (parent != nullptr) + parent->qTreeItem->addChild(qTreeItem); + qTreeItem->setData(0, Qt::UserRole, QVariant::fromValue(this)); } FolderLayerWrapper::FolderLayerWrapper(QJsonObject json, ElementManager *elementManager, LayerWrapper *parent) : LayerWrapper(json, parent) { - qDebug() << json.value("name").toString()<<" "<getPaintObject()); } LayerWrapper::refresh(); @@ -113,3 +122,12 @@ void FolderLayerWrapper::removeAllChild() { children.clear(); } + +namespace LayerEvent +{ + +static void onDoubleClick(QTreeWidgetItem *qItem, LayerWrapper *layerWrapper) +{ +} + +} // namespace LayerEvent diff --git a/ArchitectureColoredPainting/src/Editor/LayerWrapper.h b/ArchitectureColoredPainting/src/Editor/LayerWrapper.h index 0aefcc0..b36fb74 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerWrapper.h +++ b/ArchitectureColoredPainting/src/Editor/LayerWrapper.h @@ -7,7 +7,9 @@ #include #include #include +#include #include +#include #include #include using std::shared_ptr; @@ -19,6 +21,7 @@ class ElementManager; class LayerWrapper { + protected: shared_ptr parent; QPointF referencePoint; @@ -26,6 +29,7 @@ class LayerWrapper QPainterPath cache; public: + QTreeWidgetItem *qTreeItem; struct SimpleProperty { QString name = ""; @@ -42,6 +46,11 @@ class LayerWrapper LayerWrapper *getParent() const; // invoke by manager, then invoke parent's applyStyles LayerWrapper(QJsonObject json, LayerWrapper *parent); LayerWrapper() = default; + // TODO : export Function + // virtual LayerWrapper *addChild() = 0; // Leaf Child Only + // virtual LayerWrapper *addParent() = 0; // Folder Parent Only + // virtual void deleteSelf() const = 0; + // virtual void deleteAll() const = 0; }; class FolderLayerWrapper : public LayerWrapper @@ -68,3 +77,5 @@ class LeafLayerWrapper : public LayerWrapper LeafLayerWrapper() = default; LeafLayerWrapper(QJsonObject json, ElementManager *elementManager, LayerWrapper *parent); }; + +Q_DECLARE_METATYPE(LayerWrapper *) diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h @@ -0,0 +1 @@ +#pragma once diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp new file mode 100644 index 0000000..13137c5 --- /dev/null +++ b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp @@ -0,0 +1,53 @@ +#include "LayerTreeWidget.h" +#include +#include +LayerTreeWidget::LayerTreeWidget(QWidget *parent) +{ + this->selectedItem = nullptr; + this->copiedItem = nullptr; + this->setContextMenuPolicy(Qt::CustomContextMenu); + this->setHeaderLabel("Layer Content"); + connect(this, &QTreeWidget::customContextMenuRequested, this, &LayerTreeWidget::popMenu); + // connect(this, &QTreeWidget::itemDoubleClicked, this, &LayerTreeWidget::onItemDoubleClicked); +} + +// void LayerTreeWidget::mouseDoubleClickEvent(QMouseEvent *event) +//{ +// // stay empty to avoid the default behavior +// } +// +// void LayerTreeWidget::onItemDoubleClicked(QTreeWidgetItem *item, int column) +//{ +// this->selectedItem = item; +// // TODO +// } + +void LayerTreeWidget::popMenu(const QPoint &pos) +{ + QMenu menu; + QTreeWidgetItem *item = itemAt(pos); + this->selectedItem = item; + // TODO + menu.addAction("Add Child", this, &LayerTreeWidget::onRenameEvent); + menu.addAction("Rename", this, &LayerTreeWidget::onRenameEvent); + menu.addAction("Copy", this, &LayerTreeWidget::onRenameEvent); + if (item != nullptr && item->childCount() > 0) + menu.addAction("Delete (Self Only)", this, &LayerTreeWidget::onRenameEvent); + menu.addAction("Delete", this, &LayerTreeWidget::onRenameEvent); + menu.exec(mapToGlobal(pos)); +} + +void LayerTreeWidget::onRenameEvent() +{ + if (this->selectedItem == nullptr) + return; + qDebug() << this->selectedItem->data(0, Qt::UserRole).value()->property.name; + bool bOk = false; + QString sName = + QInputDialog::getText(this, "Rename", "New Name:", QLineEdit::Normal, this->selectedItem->text(0), &bOk); + if (bOk && !sName.isEmpty()) + { + this->selectedItem->setText(0, sName); + this->selectedItem->data(0, Qt::UserRole).value()->property.name = sName; + } +} diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h new file mode 100644 index 0000000..cf6359a --- /dev/null +++ b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h @@ -0,0 +1,18 @@ +#pragma once +#include "LayerWrapper.h" +#include +#include +class LayerTreeWidget : public QTreeWidget +{ + Q_OBJECT + private: + QTreeWidgetItem *selectedItem; + LayerWrapper *copiedItem; + + public: + LayerTreeWidget(QWidget *parent = nullptr); + void onRenameEvent(); + void popMenu(const QPoint &pos); + // void mouseDoubleClickEvent(QMouseEvent *event) override; + // void onItemDoubleClicked(QTreeWidgetItem *item, int column = 0); +}; From cee219409ed8671e7daaa3cf5d1ee0c80a8186eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B0=81=E7=BE=BD?= <2360164671@qq.com> Date: Tue, 17 Jan 2023 20:21:04 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=AE=8C=E6=88=90layer=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=92=8C=E6=95=B0=E6=8D=AE=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=88=E9=83=A8=E5=88=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArchitectureColoredPainting.vcxproj | 2 + ...rchitectureColoredPainting.vcxproj.filters | 6 ++ ArchitectureColoredPainting/EditorWidget.ui | 25 +++++++- .../src/Editor/EditorWidget.cpp | 13 ++++ .../src/Editor/EditorWidget.h | 12 +++- .../src/Editor/RightBar/InfoDisplayWidget.cpp | 62 +++++++++++++++++++ .../src/Editor/RightBar/InfoDisplayWidget.h | 19 ++++++ .../src/Editor/RightBar/LayerTreeWidget.cpp | 6 ++ .../src/Editor/RightBar/LayerTreeWidget.h | 3 + 9 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj index 6555ec8..5867370 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj @@ -105,6 +105,7 @@ + @@ -163,6 +164,7 @@
+ diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters index d127dfd..305767a 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters @@ -177,6 +177,9 @@ Source Files + + Source Files + @@ -209,6 +212,9 @@ Header Files + + Header Files + diff --git a/ArchitectureColoredPainting/EditorWidget.ui b/ArchitectureColoredPainting/EditorWidget.ui index b4a34e5..38ca891 100644 --- a/ArchitectureColoredPainting/EditorWidget.ui +++ b/ArchitectureColoredPainting/EditorWidget.ui @@ -49,7 +49,24 @@ - + + + + + 0 + + + + Layer + + + + + Element + + + + @@ -79,6 +96,12 @@ QTreeWidget
LayerTreeWidget.h
+ + InfoDisplayWidget + QWidget +
InfoDisplayWidget.h
+ 1 +
diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp index 17bd5f9..fbf2262 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp @@ -2,9 +2,14 @@ EditorWidget::EditorWidget(QWidget *parent) : QWidget(parent) { + displayLayer = nullptr; + displayElement = nullptr; ui.setupUi(this); previewWindow = ui.Preview; treeWidget = ui.LayerTree; + tabWidget = ui.DisplayTab; + qDebug() << tabWidget; + connect(treeWidget, &LayerTreeWidget::displayLayerChange, this, &EditorWidget::onLayerChange); qDebug() << "123"; // test QFile settingFile; @@ -33,3 +38,11 @@ EditorWidget::~EditorWidget() void EditorWidget::paintEvent(QPaintEvent *event) { } + +void EditorWidget::onLayerChange(LayerWrapper *layer) +{ + displayLayer = layer; + // TODO : notify InfoDisplayWidget and update + dynamic_cast(tabWidget->widget(0))->setLayer(layer); + this->update(); +} diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.h b/ArchitectureColoredPainting/src/Editor/EditorWidget.h index 26ac4c0..9b41934 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.h @@ -1,6 +1,7 @@ #pragma once #include "ElementManager.h" +#include "InfoDisplayWidget.h" #include "LayerManager.h" #include "LayerTreeWidget.h" #include "PreviewWindow.h" @@ -13,14 +14,23 @@ class EditorWidget : public QWidget Q_OBJECT private: - Ui::EditorWidgetClass ui; + // DATA PART PreviewWindow *previewWindow; ElementManager *elementManager; LayerManager *layerManager; + // QT GUI PART + Ui::EditorWidgetClass ui; LayerTreeWidget *treeWidget; + QTabWidget *tabWidget; + // QT DATA PART + LayerWrapper *displayLayer; + GraphicElement *displayElement; public: EditorWidget(QWidget *parent = nullptr); ~EditorWidget(); void paintEvent(QPaintEvent *event) override; + + private slots: + void onLayerChange(LayerWrapper *layer); }; diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp new file mode 100644 index 0000000..eb3d186 --- /dev/null +++ b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp @@ -0,0 +1,62 @@ +#include "InfoDisplayWidget.h" +#include +#include +void InfoDisplayWidget::setLayer(LayerWrapper *layer) +{ + this->displayLayer = layer; + generateLayerForm(); +} +void InfoDisplayWidget::setElement(GraphicElement *element) +{ + this->displayElement = element; + generateElementForm(); +} +void InfoDisplayWidget::generateLayerForm() +{ + QLayoutItem *item; + if (this->layout() != nullptr) + { + while ((item = this->layout()->takeAt(0)) != nullptr) + { + delete item->widget(); + delete item; + } + delete this->layout(); + } + + QFormLayout *layout = new QFormLayout(); + layout->setRowWrapPolicy(QFormLayout::WrapAllRows); + if (this->displayLayer == nullptr) + { + layout->addRow("no selected layer", new QLabel()); + } + else + { + QLineEdit *name = new QLineEdit(this->displayLayer->property.name, this); + QLineEdit *rotation = new QLineEdit(QString::number(this->displayLayer->property.rotation, 'f', 0), this); + QLineEdit *offsetX = new QLineEdit(QString::number(this->displayLayer->property.offset.x()), this); + QLineEdit *offsetY = new QLineEdit(QString::number(this->displayLayer->property.offset.y()), this); + name->setDisabled(true); + rotation->setValidator(new QIntValidator(-1000, 1000, this)); + connect(rotation, &QLineEdit::textChanged, + [=](QString content) { this->displayLayer->property.rotation = content.toDouble(); }); + offsetX->setValidator(new QIntValidator(-1000, 1000, this)); + connect(offsetX, &QLineEdit::textChanged, [=](QString content) { + this->displayLayer->property.offset = {content.toDouble(), this->displayLayer->property.offset.y()}; + }); + offsetY->setValidator(new QIntValidator(-1000, 1000, this)); + connect(offsetY, &QLineEdit::textChanged, [=](QString content) { + this->displayLayer->property.offset = {this->displayLayer->property.offset.x(), content.toDouble()}; + ; + }); + + layout->addRow("layer name:", name); + layout->addRow("rotation:", rotation); + layout->addRow("offset-X:", offsetX); + layout->addRow("offset-Y:", offsetY); + } + this->setLayout(layout); +} +void InfoDisplayWidget::generateElementForm() +{ +} diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h index 6f70f09..1e5f225 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h +++ b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h @@ -1 +1,20 @@ #pragma once +#include "GraphicElement.h" +#include "LayerWrapper.h" +#include +#include +#include + +class InfoDisplayWidget : public QWidget +{ + Q_OBJECT + private: + LayerWrapper *displayLayer; + GraphicElement *displayElement; + + public: + void setLayer(LayerWrapper *layer); + void setElement(GraphicElement *element); + void generateLayerForm(); + void generateElementForm(); +}; diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp index 13137c5..bb59b9b 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp @@ -3,11 +3,16 @@ #include LayerTreeWidget::LayerTreeWidget(QWidget *parent) { + emit displayLayerChange(nullptr); this->selectedItem = nullptr; this->copiedItem = nullptr; this->setContextMenuPolicy(Qt::CustomContextMenu); this->setHeaderLabel("Layer Content"); connect(this, &QTreeWidget::customContextMenuRequested, this, &LayerTreeWidget::popMenu); + connect(this, &QTreeWidget::currentItemChanged, [=](QTreeWidgetItem *currentItem) { + this->selectedItem = currentItem; + emit displayLayerChange(this->selectedItem->data(0, Qt::UserRole).value()); + }); // connect(this, &QTreeWidget::itemDoubleClicked, this, &LayerTreeWidget::onItemDoubleClicked); } @@ -50,4 +55,5 @@ void LayerTreeWidget::onRenameEvent() this->selectedItem->setText(0, sName); this->selectedItem->data(0, Qt::UserRole).value()->property.name = sName; } + emit displayLayerChange(this->selectedItem->data(0, Qt::UserRole).value()); } diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h index cf6359a..e8510a1 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h +++ b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h @@ -15,4 +15,7 @@ class LayerTreeWidget : public QTreeWidget void popMenu(const QPoint &pos); // void mouseDoubleClickEvent(QMouseEvent *event) override; // void onItemDoubleClicked(QTreeWidgetItem *item, int column = 0); + + signals: + void displayLayerChange(LayerWrapper *); }; From fcd6c011274376060237da4a888913fafd45986f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B0=81=E7=BE=BD?= <2360164671@qq.com> Date: Thu, 19 Jan 2023 11:43:54 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A7=A6=E5=8F=91=E9=87=8D=E6=96=B0=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Editor/EditorWidget.cpp | 14 ++++++++--- .../src/Editor/EditorWidget.h | 2 ++ .../src/Editor/RightBar/InfoDisplayWidget.cpp | 24 ++++++++++++++++--- .../src/Editor/RightBar/InfoDisplayWidget.h | 3 +++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp index fbf2262..69527c7 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp @@ -8,10 +8,13 @@ EditorWidget::EditorWidget(QWidget *parent) : QWidget(parent) previewWindow = ui.Preview; treeWidget = ui.LayerTree; tabWidget = ui.DisplayTab; - qDebug() << tabWidget; + layerInfoDisplayWidget = dynamic_cast(tabWidget->widget(0)); + elementInfoDisplayWidget = dynamic_cast(tabWidget->widget(1)); connect(treeWidget, &LayerTreeWidget::displayLayerChange, this, &EditorWidget::onLayerChange); - qDebug() << "123"; - // test + connect(layerInfoDisplayWidget, &InfoDisplayWidget::requireRefreshPreview, this, + &EditorWidget::triggerRefreshPreview); + // &EditorWidget::triggerRefreshPreview); + // test QFile settingFile; settingFile.setFileName("../data.json"); settingFile.open(QFile::ReadOnly); @@ -46,3 +49,8 @@ void EditorWidget::onLayerChange(LayerWrapper *layer) dynamic_cast(tabWidget->widget(0))->setLayer(layer); this->update(); } + +void EditorWidget::triggerRefreshPreview() +{ + previewWindow->update(); +} diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.h b/ArchitectureColoredPainting/src/Editor/EditorWidget.h index 9b41934..3e7a3f5 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.h @@ -22,6 +22,7 @@ class EditorWidget : public QWidget Ui::EditorWidgetClass ui; LayerTreeWidget *treeWidget; QTabWidget *tabWidget; + InfoDisplayWidget *layerInfoDisplayWidget, *elementInfoDisplayWidget; // QT DATA PART LayerWrapper *displayLayer; GraphicElement *displayElement; @@ -33,4 +34,5 @@ class EditorWidget : public QWidget private slots: void onLayerChange(LayerWrapper *layer); + void triggerRefreshPreview(); }; diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp index eb3d186..82f5c97 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp @@ -36,24 +36,42 @@ void InfoDisplayWidget::generateLayerForm() QLineEdit *rotation = new QLineEdit(QString::number(this->displayLayer->property.rotation, 'f', 0), this); QLineEdit *offsetX = new QLineEdit(QString::number(this->displayLayer->property.offset.x()), this); QLineEdit *offsetY = new QLineEdit(QString::number(this->displayLayer->property.offset.y()), this); + QLineEdit *scaleX = new QLineEdit(QString::number(this->displayLayer->property.scale.x()), this); + QLineEdit *scaleY = new QLineEdit(QString::number(this->displayLayer->property.scale.y()), this); name->setDisabled(true); rotation->setValidator(new QIntValidator(-1000, 1000, this)); - connect(rotation, &QLineEdit::textChanged, - [=](QString content) { this->displayLayer->property.rotation = content.toDouble(); }); + connect(rotation, &QLineEdit::textChanged, [=](QString content) { + this->displayLayer->property.rotation = content.toDouble(); + emit requireRefreshPreview(); + }); offsetX->setValidator(new QIntValidator(-1000, 1000, this)); connect(offsetX, &QLineEdit::textChanged, [=](QString content) { this->displayLayer->property.offset = {content.toDouble(), this->displayLayer->property.offset.y()}; + emit requireRefreshPreview(); }); offsetY->setValidator(new QIntValidator(-1000, 1000, this)); connect(offsetY, &QLineEdit::textChanged, [=](QString content) { this->displayLayer->property.offset = {this->displayLayer->property.offset.x(), content.toDouble()}; - ; + emit requireRefreshPreview(); + }); + scaleX->setValidator(new QDoubleValidator(0.01, 100, 4, this)); + connect(scaleX, &QLineEdit::textChanged, [=](QString content) { + this->displayLayer->property.scale = {content.toDouble(), this->displayLayer->property.scale.y()}; + emit requireRefreshPreview(); + }); + scaleY->setValidator(new QDoubleValidator(0.01, 100, 4, this)); + connect(scaleY, &QLineEdit::textChanged, [=](QString content) { + this->displayLayer->property.scale = {this->displayLayer->property.scale.x(), content.toDouble()}; + emit requireRefreshPreview(); }); layout->addRow("layer name:", name); layout->addRow("rotation:", rotation); layout->addRow("offset-X:", offsetX); layout->addRow("offset-Y:", offsetY); + layout->addRow("scale-X:", scaleX); + layout->addRow("scale-Y:", scaleY); + layout->setRowWrapPolicy(QFormLayout::DontWrapRows); } this->setLayout(layout); } diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h index 1e5f225..c95586d 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h +++ b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.h @@ -17,4 +17,7 @@ class InfoDisplayWidget : public QWidget void setElement(GraphicElement *element); void generateLayerForm(); void generateElementForm(); + + signals: + void requireRefreshPreview(); }; From 6b283c20178317572e59cf1fd912fad78b7210b1 Mon Sep 17 00:00:00 2001 From: "yang.yongquan" <3395816735@qq.com> Date: Sat, 14 Jan 2023 17:52:34 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86Svg=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=B7=AF=E5=BE=84=E7=9A=84=E8=AF=BB=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArchitectureColoredPainting.vcxproj.filters | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters index 305767a..d2b4aff 100644 --- a/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters +++ b/ArchitectureColoredPainting/ArchitectureColoredPainting.vcxproj.filters @@ -173,6 +173,7 @@
Source Files\Editor\third-party modules + Source Files\Editor\third-party modules Source Files @@ -365,6 +366,10 @@ Header Files\Editor + Header Files\Editor\third-party modules\qquick + + + Header Files\Editor\util From 23ee9170339a59197e7495408e074f61da0fa717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B0=81=E7=BE=BD?= <2360164671@qq.com> Date: Thu, 19 Jan 2023 12:38:12 +0800 Subject: [PATCH 6/6] add svg data, trigger preview update when layer property changes --- .../src/Editor/GraphicElement.cpp | 4 +++- .../src/Editor/LayerWrapper.cpp | 14 +++++++------- data.json | 2 +- svg/0.svg | 1 + svg/1.svg | 1 + svg/2.svg | 1 + svg/3.svg | 1 + svg/4.svg | 1 + svg/5.svg | 1 + svg/6.svg | 1 + svg/鍘熷浘.png | Bin 0 -> 127061 bytes 11 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 svg/0.svg create mode 100644 svg/1.svg create mode 100644 svg/2.svg create mode 100644 svg/3.svg create mode 100644 svg/4.svg create mode 100644 svg/5.svg create mode 100644 svg/6.svg create mode 100644 svg/鍘熷浘.png diff --git a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp index 567ccc1..fd1078f 100644 --- a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp +++ b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp @@ -11,12 +11,14 @@ void SimpleElement::loadSvgFile(const QString& filePath) // TODO 样式问题 SvgFileLoader loader; loader.loadSvgFile(filePath, painterPath); + qDebug() << "load svg file success "<0 \ No newline at end of file diff --git a/svg/1.svg b/svg/1.svg new file mode 100644 index 0000000..602a167 --- /dev/null +++ b/svg/1.svg @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/svg/2.svg b/svg/2.svg new file mode 100644 index 0000000..92bd7ef --- /dev/null +++ b/svg/2.svg @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/svg/3.svg b/svg/3.svg new file mode 100644 index 0000000..28600f3 --- /dev/null +++ b/svg/3.svg @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/svg/4.svg b/svg/4.svg new file mode 100644 index 0000000..d5f56ec --- /dev/null +++ b/svg/4.svg @@ -0,0 +1 @@ +4 \ No newline at end of file diff --git a/svg/5.svg b/svg/5.svg new file mode 100644 index 0000000..addc399 --- /dev/null +++ b/svg/5.svg @@ -0,0 +1 @@ +5 \ No newline at end of file diff --git a/svg/6.svg b/svg/6.svg new file mode 100644 index 0000000..4bb0826 --- /dev/null +++ b/svg/6.svg @@ -0,0 +1 @@ +6 \ No newline at end of file diff --git a/svg/鍘熷浘.png b/svg/鍘熷浘.png new file mode 100644 index 0000000000000000000000000000000000000000..499036a0df10f5faf70117f7bce46951062e1ef0 GIT binary patch literal 127061 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

vMFz5#>k4?2b)c3+l$i2B!J1e=3uaEQ>wP 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

%7_bG`livijcd&gxIfU0(3#HNP4gB=?s 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 MQePxt;zq&$4_4OAb^rhX literal 0 HcmV?d00001