mirror of
				https://github.com/JakubMelka/PDF4QT.git
				synced 2025-06-05 21:59:17 +02:00 
			
		
		
		
	Bugfixes of tensor patch mesh
This commit is contained in:
		@@ -620,7 +620,14 @@ void PDFPageContentProcessor::processPathPainting(const QPainterPath& path, bool
 | 
			
		||||
 | 
			
		||||
                    // Now, merge the current path to the mesh clipping path
 | 
			
		||||
                    QPainterPath boundingPath = mesh.getBoundingPath();
 | 
			
		||||
                    boundingPath.addPath(getCurrentWorldMatrix().map(path));
 | 
			
		||||
                    if (boundingPath.isEmpty())
 | 
			
		||||
                    {
 | 
			
		||||
                        boundingPath = getCurrentWorldMatrix().map(path);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        boundingPath = boundingPath.intersected(path);
 | 
			
		||||
                    }
 | 
			
		||||
                    mesh.setBoundingPath(boundingPath);
 | 
			
		||||
 | 
			
		||||
                    performMeshPainting(mesh);
 | 
			
		||||
@@ -686,7 +693,14 @@ void PDFPageContentProcessor::processPathPainting(const QPainterPath& path, bool
 | 
			
		||||
                    QPainterPath strokedPath = stroker.createStroke(path);
 | 
			
		||||
 | 
			
		||||
                    QPainterPath boundingPath = mesh.getBoundingPath();
 | 
			
		||||
                    boundingPath.addPath(getCurrentWorldMatrix().map(strokedPath));
 | 
			
		||||
                    if (boundingPath.isEmpty())
 | 
			
		||||
                    {
 | 
			
		||||
                        boundingPath = getCurrentWorldMatrix().map(strokedPath);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        boundingPath = boundingPath.intersected(strokedPath);
 | 
			
		||||
                    }
 | 
			
		||||
                    mesh.setBoundingPath(boundingPath);
 | 
			
		||||
 | 
			
		||||
                    performMeshPainting(mesh);
 | 
			
		||||
 
 | 
			
		||||
@@ -1351,8 +1351,6 @@ PDFMesh PDFFreeFormGouradTriangleShading::createMesh(const PDFMeshQualitySetting
 | 
			
		||||
 | 
			
		||||
    std::vector<VertexData> vertices;
 | 
			
		||||
    vertices.resize(vertexCount);
 | 
			
		||||
    std::vector<size_t> indices(vertexCount, 0);
 | 
			
		||||
    std::iota(indices.begin(), indices.end(), static_cast<size_t>(0));
 | 
			
		||||
    std::vector<QPointF> meshVertices;
 | 
			
		||||
    meshVertices.resize(vertexCount);
 | 
			
		||||
 | 
			
		||||
@@ -1382,6 +1380,7 @@ PDFMesh PDFFreeFormGouradTriangleShading::createMesh(const PDFMeshQualitySetting
 | 
			
		||||
        vertices[index] = qMove(data);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    PDFIntegerRange indices(size_t(0), vertexCount);
 | 
			
		||||
    std::for_each(std::execution::parallel_policy(), indices.begin(), indices.end(), readVertex);
 | 
			
		||||
    mesh.setVertices(qMove(meshVertices));
 | 
			
		||||
 | 
			
		||||
@@ -1502,8 +1501,6 @@ PDFMesh PDFLatticeFormGouradTriangleShading::createMesh(const PDFMeshQualitySett
 | 
			
		||||
 | 
			
		||||
    std::vector<VertexData> vertices;
 | 
			
		||||
    vertices.resize(vertexCount);
 | 
			
		||||
    std::vector<size_t> indices(vertexCount, 0);
 | 
			
		||||
    std::iota(indices.begin(), indices.end(), static_cast<size_t>(0));
 | 
			
		||||
    std::vector<QPointF> meshVertices;
 | 
			
		||||
    meshVertices.resize(vertexCount);
 | 
			
		||||
 | 
			
		||||
@@ -1532,6 +1529,7 @@ PDFMesh PDFLatticeFormGouradTriangleShading::createMesh(const PDFMeshQualitySett
 | 
			
		||||
        vertices[index] = qMove(data);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    PDFIntegerRange indices(size_t(0), vertexCount);
 | 
			
		||||
    std::for_each(std::execution::parallel_policy(), indices.begin(), indices.end(), readVertex);
 | 
			
		||||
    mesh.setVertices(qMove(meshVertices));
 | 
			
		||||
 | 
			
		||||
@@ -2075,7 +2073,7 @@ PDFMesh PDFTensorProductPatchShading::createMesh(const PDFMeshQualitySettings& s
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fillMesh(mesh, settings, patches);
 | 
			
		||||
    fillMesh(mesh, patternSpaceToDeviceSpaceMatrix, settings, patches);
 | 
			
		||||
    return mesh;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -2298,6 +2296,7 @@ void PDFTensorProductPatchShadingBase::fillMesh(PDFMesh& mesh, const PDFMeshQual
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PDFTensorProductPatchShadingBase::fillMesh(PDFMesh& mesh,
 | 
			
		||||
                                                const QMatrix& patternSpaceToDeviceSpaceMatrix,
 | 
			
		||||
                                                const PDFMeshQualitySettings& settings,
 | 
			
		||||
                                                const PDFTensorPatches& patches) const
 | 
			
		||||
{
 | 
			
		||||
@@ -2305,6 +2304,22 @@ void PDFTensorProductPatchShadingBase::fillMesh(PDFMesh& mesh,
 | 
			
		||||
    {
 | 
			
		||||
        fillMesh(mesh, settings, patch);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Create bounding path
 | 
			
		||||
    if (m_boundingBox.isValid())
 | 
			
		||||
    {
 | 
			
		||||
        QPainterPath boundingPath;
 | 
			
		||||
        boundingPath.addPolygon(patternSpaceToDeviceSpaceMatrix.map(m_boundingBox));
 | 
			
		||||
        mesh.setBoundingPath(boundingPath);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (m_backgroundColor.isValid())
 | 
			
		||||
    {
 | 
			
		||||
        QPainterPath path;
 | 
			
		||||
        path.addRect(settings.deviceSpaceMeshingArea);
 | 
			
		||||
        mesh.setBackgroundPath(path);
 | 
			
		||||
        mesh.setBackgroundColor(m_backgroundColor);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PDFTensorProductPatchShadingBase::addTriangle(std::vector<Triangle>& triangles, const PDFTensorPatch& patch, std::array<QPointF, 3> uvCoordinates)
 | 
			
		||||
@@ -2320,6 +2335,5 @@ void PDFTensorProductPatchShadingBase::addTriangle(std::vector<Triangle>& triang
 | 
			
		||||
 | 
			
		||||
// TODO: Apply graphic state of the pattern
 | 
			
		||||
// TODO: Implement settings of meshing in the settings dialog
 | 
			
		||||
// TODO: iota - replace for PDFIntegerRange
 | 
			
		||||
 | 
			
		||||
}   // namespace pdf
 | 
			
		||||
 
 | 
			
		||||
@@ -511,7 +511,7 @@ protected:
 | 
			
		||||
    struct Triangle;
 | 
			
		||||
 | 
			
		||||
    void fillMesh(PDFMesh& mesh, const PDFMeshQualitySettings& settings, const PDFTensorPatch& patch) const;
 | 
			
		||||
    void fillMesh(PDFMesh& mesh, const PDFMeshQualitySettings& settings, const PDFTensorPatches& patches) const;
 | 
			
		||||
    void fillMesh(PDFMesh& mesh, const QMatrix& patternSpaceToDeviceSpaceMatrix, const PDFMeshQualitySettings& settings, const PDFTensorPatches& patches) const;
 | 
			
		||||
    static void addTriangle(std::vector<Triangle>& triangles, const PDFTensorPatch& patch, std::array<QPointF, 3> uvCoordinates);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user