qml Surface3D рисует случайные линии в исходной точке - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу нарисовать трехмерную поверхность, используя некоторые точки, я использую Surface3D, чтобы нарисовать эту поверхность. Проблема в том, что Surface3D всегда создает случайные линии от начала и конца поверхности до исходной точки (0,0,0), однако исходная точка не существует в моих точках облаков.

Например, я запускаюэтот код main.qml

import QtQuick 2.1
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.0
import QtDataVisualization 1.3

Rectangle {
id: mainview
width: 1024
height: 768
color: surfacePlot.theme.windowColor

Data {
    id: surfaceData
}

Item {
    id: surfaceView
    width: mainview.width
    height: mainview.height
    anchors.top: mainview.top
    anchors.left: mainview.left

    ColorGradient {
        id: surfaceGradient
        ColorGradientStop { position: 0.0; color: "darkslategray" }
        ColorGradientStop { id: middleGradient; position: 0.25; color: "peru" }
        ColorGradientStop { position: 1.0; color: "red" }
    }

    Surface3D {
        id: surfacePlot
        width: surfaceView.width
        height: surfaceView.height
        //! [7]
        theme: Theme3D {
            type: Theme3D.ThemeStoneMoss
            font.family: "STCaiyun"
            font.pointSize: 35
            colorStyle: Theme3D.ColorStyleRangeGradient
            baseGradients: [surfaceGradient]
        }
        //! [7]
        shadowQuality: AbstractGraph3D.ShadowQualityNone
        selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
        scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
        axisX.min: 0
        axisX.max: 500
        axisY.min: 20
        axisY.max: 300
        axisZ.min: 0
        axisZ.max: 500
        axisX.segmentCount: 10
        axisX.subSegmentCount: 2
        axisX.labelFormat: "%i"
        axisZ.segmentCount: 10
        axisZ.subSegmentCount: 2
        axisZ.labelFormat: "%i"
        axisY.segmentCount: 5
        axisY.subSegmentCount: 2
        axisY.labelFormat: "%i"
        axisY.title: "Height"
        axisX.title: "Latitude"
        axisZ.title: "Longitude"

        //! [5]
        Surface3DSeries {
            id: surfaceSeries
            flatShadingEnabled: false
            drawMode: Surface3DSeries.DrawSurface

            ItemModelSurfaceDataProxy {
                itemModel: surfaceData.model
                rowRole: "longitude"
                columnRole: "latitude"
                yPosRole: "height"
            }
        }
    }
}

}

Data.qml

import QtQuick 2.1

Item {
property alias model: dataModel

//! [0]
ListModel {
    id: dataModel
    ListElement{ longitude: 50; latitude: 200; height: 50; }
    ListElement{ longitude: 50; latitude: 210; height: 53; }
    ListElement{ longitude: 50; latitude: 220; height: 50; }
    ListElement{ longitude: 50; latitude: 230; height: 51; }
    ListElement{ longitude: 50; latitude: 240; height: 52; }
    ListElement{ longitude: 50; latitude: 250; height: 54; }
    ListElement{ longitude: 50; latitude: 260; height: 54; }
    ListElement{ longitude: 50; latitude: 270; height: 51; }
    ListElement{ longitude: 50; latitude: 280; height: 51; }
    ListElement{ longitude: 50; latitude: 290; height: 51; }
    ListElement{ longitude: 50; latitude: 300; height: 52; }
    ListElement{ longitude: 50; latitude: 310; height: 50; }
    ListElement{ longitude: 50; latitude: 320; height: 54; }
    ListElement{ longitude: 50; latitude: 330; height: 54; }
    ListElement{ longitude: 50; latitude: 340; height: 50; }
    ListElement{ longitude: 50; latitude: 350; height: 54; }
    ListElement{ longitude: 50; latitude: 360; height: 52; }
    ListElement{ longitude: 50; latitude: 370; height: 50; }
    ListElement{ longitude: 50; latitude: 380; height: 53; }
    ListElement{ longitude: 50; latitude: 390; height: 54; }
    ListElement{ longitude: 60; latitude: 400; height: 50; }
    ListElement{ longitude: 60; latitude: 390; height: 50; }
    ListElement{ longitude: 60; latitude: 380; height: 50; }
    ListElement{ longitude: 60; latitude: 370; height: 51; }
    ListElement{ longitude: 60; latitude: 360; height: 53; }
    ListElement{ longitude: 60; latitude: 350; height: 52; }
    ListElement{ longitude: 60; latitude: 340; height: 51; }
    ListElement{ longitude: 60; latitude: 330; height: 53; }
    ListElement{ longitude: 60; latitude: 320; height: 54; }
    ListElement{ longitude: 60; latitude: 310; height: 51; }
    ListElement{ longitude: 60; latitude: 300; height: 54; }
    ListElement{ longitude: 60; latitude: 290; height: 53; }
    ListElement{ longitude: 60; latitude: 280; height: 53; }
    ListElement{ longitude: 60; latitude: 270; height: 52; }
    ListElement{ longitude: 60; latitude: 260; height: 51; }
    ListElement{ longitude: 60; latitude: 250; height: 54; }
    ListElement{ longitude: 60; latitude: 240; height: 53; }
    ListElement{ longitude: 60; latitude: 230; height: 51; }
    ListElement{ longitude: 60; latitude: 220; height: 51; }
    ListElement{ longitude: 60; latitude: 210; height: 54; }
    ListElement{ longitude: 60; latitude: 200; height: 54; }
    ListElement{ longitude: 60; latitude: 190; height: 50; }
    ListElement{ longitude: 60; latitude: 180; height: 54; }
    ListElement{ longitude: 60; latitude: 170; height: 50; }
    ListElement{ longitude: 60; latitude: 160; height: 54; }
    ListElement{ longitude: 60; latitude: 150; height: 53; }
    ListElement{ longitude: 60; latitude: 140; height: 54; }
    ListElement{ longitude: 60; latitude: 130; height: 50; }
    ListElement{ longitude: 60; latitude: 120; height: 52; }
    ListElement{ longitude: 60; latitude: 110; height: 50; }
    ListElement{ longitude: 60; latitude: 100; height: 52; }
    ListElement{ longitude: 60; latitude: 90; height: 50; }
    ListElement{ longitude: 60; latitude: 80; height: 50; }
    ListElement{ longitude: 60; latitude: 70; height: 51; }
    ListElement{ longitude: 60; latitude: 60; height: 54; }
    ListElement{ longitude: 60; latitude: 50; height: 52; }
    ListElement{ longitude: 60; latitude: 40; height: 53; }
    ListElement{ longitude: 60; latitude: 30; height: 54; }
    ListElement{ longitude: 60; latitude: 20; height: 50; }
    ListElement{ longitude: 60; latitude: 10; height: 50; }
    ListElement{ longitude: 70; latitude: 0; height: 51; }
    ListElement{ longitude: 70; latitude: 10; height: 52; }
    ListElement{ longitude: 70; latitude: 20; height: 54; }
    ListElement{ longitude: 70; latitude: 30; height: 52; }
    ListElement{ longitude: 70; latitude: 40; height: 54; }
    ListElement{ longitude: 70; latitude: 50; height: 51; }
    ListElement{ longitude: 70; latitude: 60; height: 53; }
    ListElement{ longitude: 70; latitude: 70; height: 50; }
    ListElement{ longitude: 70; latitude: 80; height: 53; }
    ListElement{ longitude: 70; latitude: 90; height: 54; }
    ListElement{ longitude: 70; latitude: 100; height: 54; }
    ListElement{ longitude: 70; latitude: 110; height: 54; }
    ListElement{ longitude: 70; latitude: 120; height: 53; }
    ListElement{ longitude: 70; latitude: 130; height: 53; }
    ListElement{ longitude: 70; latitude: 140; height: 52; }
    ListElement{ longitude: 70; latitude: 150; height: 52; }
    ListElement{ longitude: 70; latitude: 160; height: 53; }
    ListElement{ longitude: 70; latitude: 170; height: 52; }
    ListElement{ longitude: 70; latitude: 180; height: 50; }
    ListElement{ longitude: 70; latitude: 190; height: 51; }
    ListElement{ longitude: 70; latitude: 200; height: 53; }
    ListElement{ longitude: 70; latitude: 210; height: 54; }
    ListElement{ longitude: 70; latitude: 220; height: 50; }
    ListElement{ longitude: 70; latitude: 230; height: 51; }
    ListElement{ longitude: 70; latitude: 240; height: 50; }
    ListElement{ longitude: 70; latitude: 250; height: 54; }
    ListElement{ longitude: 70; latitude: 260; height: 50; }
    ListElement{ longitude: 70; latitude: 270; height: 50; }
    ListElement{ longitude: 70; latitude: 280; height: 51; }
    ListElement{ longitude: 70; latitude: 290; height: 53; }
    ListElement{ longitude: 70; latitude: 300; height: 50; }
    ListElement{ longitude: 70; latitude: 310; height: 53; }
    ListElement{ longitude: 70; latitude: 320; height: 52; }
    ListElement{ longitude: 70; latitude: 330; height: 51; }
    ListElement{ longitude: 70; latitude: 340; height: 53; }
    ListElement{ longitude: 70; latitude: 350; height: 51; }
    ListElement{ longitude: 70; latitude: 360; height: 52; }
    ListElement{ longitude: 70; latitude: 370; height: 51; }
    ListElement{ longitude: 70; latitude: 380; height: 53; }
    ListElement{ longitude: 70; latitude: 390; height: 54; }
    ListElement{ longitude: 80; latitude: 400; height: 54; }
    ListElement{ longitude: 80; latitude: 390; height: 52; }
    ListElement{ longitude: 80; latitude: 380; height: 53; }
    ListElement{ longitude: 80; latitude: 370; height: 51; }
    ListElement{ longitude: 80; latitude: 360; height: 50; }
    ListElement{ longitude: 80; latitude: 350; height: 52; }
    ListElement{ longitude: 80; latitude: 340; height: 53; }
    ListElement{ longitude: 80; latitude: 330; height: 52; }
    ListElement{ longitude: 80; latitude: 320; height: 51; }
    ListElement{ longitude: 80; latitude: 310; height: 53; }
    ListElement{ longitude: 80; latitude: 300; height: 54; }
    ListElement{ longitude: 80; latitude: 290; height: 53; }
    ListElement{ longitude: 80; latitude: 280; height: 52; }
    ListElement{ longitude: 80; latitude: 270; height: 54; }
    ListElement{ longitude: 80; latitude: 260; height: 53; }
    ListElement{ longitude: 80; latitude: 250; height: 50; }
    ListElement{ longitude: 80; latitude: 240; height: 54; }
    ListElement{ longitude: 80; latitude: 230; height: 50; }
    ListElement{ longitude: 80; latitude: 220; height: 50; }
    ListElement{ longitude: 80; latitude: 210; height: 52; }
    ListElement{ longitude: 80; latitude: 200; height: 50; }
    ListElement{ longitude: 80; latitude: 190; height: 50; }
    ListElement{ longitude: 80; latitude: 180; height: 50; }
    ListElement{ longitude: 80; latitude: 170; height: 51; }
    ListElement{ longitude: 80; latitude: 160; height: 52; }
    ListElement{ longitude: 80; latitude: 150; height: 53; }
    ListElement{ longitude: 80; latitude: 140; height: 50; }
    ListElement{ longitude: 80; latitude: 130; height: 51; }
    ListElement{ longitude: 80; latitude: 120; height: 50; }
    ListElement{ longitude: 80; latitude: 110; height: 52; }
    ListElement{ longitude: 80; latitude: 100; height: 53; }
    ListElement{ longitude: 80; latitude: 90; height: 54; }
    ListElement{ longitude: 80; latitude: 80; height: 53; }
    ListElement{ longitude: 80; latitude: 70; height: 50; }
    ListElement{ longitude: 80; latitude: 60; height: 54; }
    ListElement{ longitude: 80; latitude: 50; height: 53; }
    ListElement{ longitude: 80; latitude: 40; height: 52; }
    ListElement{ longitude: 80; latitude: 30; height: 50; }
    ListElement{ longitude: 80; latitude: 20; height: 54; }
    ListElement{ longitude: 80; latitude: 10; height: 50; }
    ListElement{ longitude: 90; latitude: 0; height: 53; }
    ListElement{ longitude: 90; latitude: 10; height: 52; }
    ListElement{ longitude: 90; latitude: 20; height: 52; }
    ListElement{ longitude: 90; latitude: 30; height: 53; }
    ListElement{ longitude: 90; latitude: 40; height: 54; }
    ListElement{ longitude: 90; latitude: 50; height: 52; }
    ListElement{ longitude: 90; latitude: 60; height: 52; }
    ListElement{ longitude: 90; latitude: 70; height: 54; }
    ListElement{ longitude: 90; latitude: 80; height: 50; }
}
}

Я полагаю, что тонкая поверхность должна быть визуализирована, но следующая поверхность визуализируется Результат выполнения приведенного выше кода. Есть случайные линии к исходной точке

Кто-нибудь может объяснить, почему существуют линии между краями поверхности и исходной точкой и как их устранить?

Спасибо!

...