[pointclouds] add basic structure for PDAL layer

This commit is contained in:
Peter Petrik 2020-11-03 14:05:57 +01:00 committed by Martin Dobias
parent b725a044ae
commit 3dec432cb6
31 changed files with 1889 additions and 32 deletions

View File

@ -237,6 +237,11 @@ IF(WITH_CORE)
SET(ORACLE_LIBDIR "" CACHE STRING "Path to OCI libraries")
ENDIF(WITH_ORACLE)
SET (WITH_PDAL FALSE CACHE BOOL "Determines whether PDAL support should be built")
IF(WITH_PDAL)
SET(HAVE_PDAL TRUE)
ENDIF(WITH_PDAL)
#BUILD WITH QtMobility by default on android only. Other platform can force it
IF (ANDROID)
SET (DEFAULT_WITH_QTMOBILITY TRUE)
@ -390,6 +395,10 @@ IF(WITH_CORE)
MESSAGE(STATUS "Qt WebKit support DISABLED.")
ENDIF(WITH_QTWEBKIT)
IF (WITH_PDAL)
FIND_PACKAGE(PDAL) # PDAL provider
ENDIF (WITH_PDAL)
#############################################################
# search for Qt5
SET(QT_MIN_VERSION 5.9.0)

62
cmake/FindPDAL.cmake Normal file
View File

@ -0,0 +1,62 @@
# Find PDAL
# ~~~~~~~~~~
# Copyright (c) 2020, Peter Petrik <zilolv at gmail.com>
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
# CMake module to search for PDAL library
#
# If it's found it sets PDAL_FOUND to TRUE
# and following variables are set:
# PDAL_INCLUDE_DIR
# PDAL_LIBRARIES
# FIND_PATH and FIND_LIBRARY normally search standard locations
# before the specified paths. To search non-standard paths first,
# FIND_* is invoked first with specified paths and NO_DEFAULT_PATH
# and then again with no specified paths to search the default
# locations. When an earlier FIND_* succeeds, subsequent FIND_*s
# searching for the same item do nothing.
FIND_PATH(PDAL_INCLUDE_DIR pdal.hpp
"$ENV{LIB_DIR}/include/"
"$ENV{LIB_DIR}/include/pdal"
c:/msys/local/include
NO_DEFAULT_PATH
)
FIND_PATH(PDAL_INCLUDE_DIR pdal.hpp)
FIND_LIBRARY(PDAL_CPP_LIBRARY NAMES pdalccpp libpdalcpp PATHS
"$ENV{LIB_DIR}/lib"
c:/msys/local/lib
NO_DEFAULT_PATH
)
FIND_LIBRARY(PDAL_CPP_LIBRARY NAMES pdalcpp libpdalcpp)
FIND_LIBRARY(PDAL_UTIL_LIBRARY NAMES pdal_util libpdal_util PATHS
"$ENV{LIB_DIR}/lib"
c:/msys/local/lib
NO_DEFAULT_PATH
)
FIND_LIBRARY(PDAL_UTIL_LIBRARY NAMES pdal_util libpdal_util)
IF (PDAL_INCLUDE_DIR AND PDAL_CPP_LIBRARY AND PDAL_UTIL_LIBRARY)
SET(PDAL_FOUND TRUE)
SET(PDAL_LIBRARIES ${PDAL_CPP_LIBRARY} ${PDAL_UTIL_LIBRARY})
ENDIF (PDAL_INCLUDE_DIR AND PDAL_CPP_LIBRARY AND PDAL_UTIL_LIBRARY)
IF (PDAL_FOUND)
IF (NOT PDAL_FIND_QUIETLY)
MESSAGE(STATUS "Found PDAL: ${PDAL_LIBRARIES}")
ENDIF (NOT PDAL_FIND_QUIETLY)
ELSE (PDAL_FOUND)
IF (PDAL_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find PDAL")
ELSE (PDAL_FIND_REQUIRED)
IF (NOT PDAL_FIND_QUIETLY)
MESSAGE(STATUS "Could not find PDAL")
ENDIF (NOT PDAL_FIND_QUIETLY)
ENDIF (PDAL_FIND_REQUIRED)
ENDIF (PDAL_FOUND)

View File

@ -240,6 +240,8 @@
<file>themes/default/mActionAddXyzLayer.svg</file>
<file>themes/default/mActionAddVectorTileLayer.svg</file>
<file>themes/default/mActionAddPointCloudLayer.svg</file>
<file>themes/default/mActionAddPdalLayer.svg</file>
<file>themes/default/mActionAddEntwineLayer.svg</file>
<file>themes/default/mActionAddGeonodeLayer.svg</file>
<file>themes/default/mActionAddDelimitedTextLayer.svg</file>
<file>themes/default/mActionAddVirtualLayer.svg</file>
@ -538,6 +540,8 @@
<file>themes/default/mIconVector.svg</file>
<file>themes/default/mIconVectorTileLayer.svg</file>
<file>themes/default/mIconPointCloudLayer.svg</file>
<file>themes/default/mIconEntwineLayer.svg</file>
<file>themes/default/mIconPdalLayer.svg</file>
<file>themes/default/mIconVirtualLayer.svg</file>
<file>themes/default/mIconWcs.svg</file>
<file>themes/default/mIconWfs.svg</file>

View File

@ -0,0 +1,221 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:i="&amp;ns_ai;"
xmlns:x="adobe:ns:meta/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0beta2 (2b71d25, 2019-12-03)"
height="23"
width="23"
sodipodi:docname="mActionAddEntwineLayer.svg"
xml:space="preserve"
viewBox="0 0 23 23"
y="0px"
x="0px"
id="Layer_1"
version="1.1"><defs
id="defs881" /><sodipodi:namedview
inkscape:current-layer="g857"
inkscape:window-maximized="0"
inkscape:window-y="23"
inkscape:window-x="0"
inkscape:cy="12.188549"
inkscape:cx="10.660205"
inkscape:zoom="18.9168"
showgrid="false"
id="namedview879"
inkscape:window-height="737"
inkscape:window-width="1415"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
inkscape:document-rotation="0"
bordercolor="#666666"
pagecolor="#ffffff" />
<metadata
id="metadata833"><?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta
x:xmptk="Adobe XMP Core 5.6-c067 79.157747, 2015/03/30-23:40:42 ">
<metadata><rdf:RDF>
<rdf:Description
rdf:about="" />
<cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata></x:xmpmeta>
<?xpacket end="w"?></metadata>
<style
id="style835"
type="text/css">
.st0{clip-path:url(#SVGID_2_);fill:#39B54A;}
.st1{clip-path:url(#SVGID_2_);fill:none;stroke:#FFFFFF;stroke-width:6.2024;stroke-miterlimit:10;}
.st2{clip-path:url(#SVGID_2_);}
.st3{fill:#FFFFFF;}
.st4{fill:#39B44A;}
.st5{fill:#192854;}
</style>
<switch
transform="translate(-198.69999,-262.09999)"
id="switch876">
<foreignObject
height="1"
width="1"
y="0"
x="0"
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
</foreignObject>
<g
id="g874"
i:extraneous="self">
<g
id="g865">
<g
id="g857">
<defs
id="defs838">
<circle
r="41.700001"
cy="303.79999"
cx="240.39999"
id="SVGID_1_" />
</defs>
<clipPath
id="SVGID_2_">
<use
height="100%"
width="100%"
y="0"
x="0"
id="use840"
style="overflow:visible"
xlink:href="#SVGID_1_" />
</clipPath>
<circle
transform="matrix(0.27577937,0,0,0.27577937,143.90263,189.81822)"
id="circle843"
clip-path="url(#SVGID_2_)"
r="41.900002"
cy="303.79999"
cx="240.39999"
class="st0" />
<circle
transform="matrix(0.27577937,0,0,0.27577937,143.90263,189.81822)"
id="circle845"
clip-path="url(#SVGID_2_)"
r="24.700001"
cy="303.79999"
cx="240.5"
class="st1" />
<g
transform="matrix(0.27577937,0,0,0.27577937,143.90263,189.81822)"
id="g851"
clip-path="url(#SVGID_2_)"
class="st2">
<path
inkscape:connector-curvature="0"
id="path847"
d="m 233.9,346.3 c 5.9,-28.3 -4.4,-36.5 -4.5,-36.6 l -13.2,-9.9 15.5,5.9 c 0.4,0.1 7.3,2.9 10.5,10.6 1.6,-1.9 4,-3.7 7.6,-4.2 l 11.8,-1.6 -10.4,5.9 c 0,0 -8,5.4 -3.3,29.5 l 0.5,2.7 -15.1,0.6 z"
class="st3" />
<path
inkscape:connector-curvature="0"
id="path849"
d="m 230.8,307.9 c 0,0 9.6,3.7 10.5,15.1 0,0 1.5,-7.6 8.7,-8.6 0,0 -9.6,5.5 -4.4,32 l -9.4,0.4 c 6.3,-30.2 -5.4,-38.9 -5.4,-38.9 m -36.6,-18.9 33.7,22.6 c 0.3,0.3 2.4,2.3 3.8,6.9 1.5,4.8 2.8,13.5 -0.1,27.3 l -1.2,5.9 6,-0.3 9.4,-0.4 5.4,-0.2 -1,-5.3 c -4.2,-21.5 2.1,-27 2.2,-27.1 l 20.8,-11.8 -23.7,3.2 c -2.7,0.4 -4.9,1.4 -6.6,2.7 -3.9,-6.4 -10,-8.8 -10.3,-8.9 z"
class="st4" />
</g>
<path
transform="matrix(0.27577937,0,0,0.27577937,143.90263,189.81822)"
inkscape:connector-curvature="0"
id="path853"
clip-path="url(#SVGID_2_)"
d="m 216,306.7 c -1.6,-13.5 8,-25.8 21.6,-27.4 13.5,-1.6 25.8,8 27.4,21.6"
class="st1" />
<path
transform="matrix(0.27577937,0,0,0.27577937,143.90263,189.81822)"
inkscape:connector-curvature="0"
id="path855"
clip-path="url(#SVGID_2_)"
d="m 223,286.3 c 9.6,-9.6 25.3,-9.6 34.9,0 9.6,9.6 9.6,25.3 0,34.9"
class="st1" />
<g
transform="matrix(0.6923,0,0,0.6923,199.42945,262.68233)"
id="g2197"><rect
fill="#5a8c5a"
height="13"
rx="2.615"
width="13"
x="19"
y="19"
id="rect2189" /><g
fill-rule="evenodd"
id="g2195"><path
inkscape:connector-curvature="0"
d="m 21.6,25.5 h 7.8 m -3.9,3.9 v -7.8"
fill="#fff"
stroke="#fff"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2.6"
id="path2191" /><path
inkscape:connector-curvature="0"
d="m 20.3,25.5 h 10.4 v -2.6 c 0,-2.6 -0.65,-2.6 -5.2,-2.6 -4.55,0 -5.2,0 -5.2,2.6 z"
fill="#fcffff"
opacity=".3"
id="path2193" /></g></g></g>
<g
transform="matrix(0.27577937,0,0,0.27577937,143.90263,189.81822)"
id="g863">
<circle
id="circle859"
r="10.9"
cy="290.89999"
cx="258.10001"
class="st4" />
<path
inkscape:connector-curvature="0"
id="path861"
d="m 258.1,304.1 c -7.3,0 -13.2,-5.9 -13.2,-13.2 0,-7.3 5.9,-13.2 13.2,-13.2 7.3,0 13.2,5.9 13.2,13.2 0,7.3 -6,13.2 -13.2,13.2 z m 0,-21.8 c -4.7,0 -8.6,3.8 -8.6,8.6 0,4.8 3.8,8.6 8.6,8.6 4.8,0 8.6,-3.8 8.6,-8.6 0,-4.8 -3.9,-8.6 -8.6,-8.6 z"
class="st3" />
</g>
</g>
</g>
</switch>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -0,0 +1,294 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="250"
inkscape:export-xdpi="250"
inkscape:export-filename="/Users/hobu/Desktop/pdal_logo.png"
width="23.105442"
height="22.752747"
id="svg2"
version="1.1"
inkscape:version="1.0beta2 (2b71d25, 2019-12-03)"
sodipodi:docname="mActionAddPdalLayer.svg">
<defs
id="defs4" />
<sodipodi:namedview
inkscape:document-rotation="0"
inkscape:guide-bbox="true"
showguides="false"
inkscape:window-maximized="0"
inkscape:window-y="228"
inkscape:window-x="56"
inkscape:window-height="939"
inkscape:window-width="1680"
showgrid="false"
inkscape:current-layer="layer3"
inkscape:document-units="px"
inkscape:cy="14.378892"
inkscape:cx="13.403946"
inkscape:zoom="25.43759"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base">
<inkscape:grid
originy="-66.101765"
originx="-106.10363"
snapvisiblegridlinesonly="true"
enabled="true"
visible="true"
empspacing="5"
id="grid3113"
type="xygrid" />
<sodipodi:guide
id="guide3818"
position="58.041494,22.052723"
orientation="0,1" />
<sodipodi:guide
id="guide3820"
position="-1.5013465,-26.22525"
orientation="1,0" />
<sodipodi:guide
id="guide3822"
position="54.593064,-108.52771"
orientation="0,1" />
<sodipodi:guide
id="guide3824"
position="128.61929,-60.01984"
orientation="1,0" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(-106.10363,-66.101765)"
style="display:inline"
inkscape:label="PDAL text"
id="layer4"
inkscape:groupmode="layer" />
<g
transform="translate(-106.10363,-66.101765)"
style="display:inline"
inkscape:label="Color Dots"
id="layer2"
inkscape:groupmode="layer" />
<g
transform="translate(-106.10363,-66.101765)"
style="display:inline"
inkscape:label="Gray Dots"
id="layer3"
inkscape:groupmode="layer">
<g
transform="matrix(0.17964694,0,0,0.17399869,87.055159,54.570728)"
id="g3107">
<circle
r="15.528928"
cy="141.33174"
cx="181.81787"
style="display:inline;fill:#b6f2fb;fill-opacity:1;fill-rule:evenodd;stroke:#323232;stroke-width:0.962704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3003"
transform="matrix(-1.0387412,0,0,1.0387412,393.22524,-63.905737)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="15.528928"
cy="141.33174"
cx="181.81787"
style="display:inline;fill:#55a9f6;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.854881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3073"
transform="matrix(-1.169753,0,0,1.169753,342.92204,-33.895972)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
style="display:inline;fill:#b6f2fb;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3075"
transform="matrix(-1,0,0,1,384.26161,-62.333932)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
id="path3079"
style="display:inline;fill:#b6f2fb;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.927382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(-1.0783049,0,0,1.0783049,327.70526,-161.79578)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="11.970215"
cy="188.88908"
cx="257.19788"
style="display:inline;fill:#2c7fb8;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.905983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3081"
transform="matrix(-1.1037735,0,0,1.1037735,480.8321,-26.231392)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="24.910988"
cy="212.18248"
cx="218.37555"
style="display:inline;fill:#55a9f6;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.918172;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3083"
transform="matrix(-1.0891203,0,0,1.0891203,430.57541,-102.27246)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="11.970215"
cy="188.88908"
cx="257.19788"
transform="matrix(-1.1037735,0,0,1.1037735,405.30333,-25.168442)"
id="path3111"
style="display:inline;fill:#2c7fb8;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.905983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1,0,0,1,277.86199,9.564221)"
id="path3838"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3840"
transform="matrix(-1,0,0,1,312.59339,-4.689847)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
id="path3844"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.850241;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(-0.94090967,0,0,0.94090967,342.27869,-120.03231)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1.0783049,0,0,1.0783049,433.52077,-103.18489)"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.741905;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3846" />
<circle
r="15.528928"
cy="141.33174"
cx="181.81787"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1.0605504,0,0,1.0605504,350.60249,22.364694)"
id="path3850"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.754325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3828"
transform="matrix(-1,0,0,1,327.34063,-65.939185)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1.2827378,0,0,1.2827378,395.72688,-226.15381)"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.623666;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3830" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
id="path3961"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:1.05002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(-0.76189307,0,0,0.76189307,266.73335,-110.25136)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1,0,0,1,379.84063,37.810815)"
id="path3963"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
transform="matrix(0.6923,0,0,0.6923,107.08664,66.677564)"
id="g2197">
<rect
fill="#5a8c5a"
height="13"
rx="2.615"
width="13"
x="19"
y="19"
id="rect2189" />
<g
fill-rule="evenodd"
id="g2195">
<path
inkscape:connector-curvature="0"
d="m 21.6,25.5 h 7.8 m -3.9,3.9 v -7.8"
fill="#fff"
stroke="#fff"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2.6"
id="path2191" />
<path
inkscape:connector-curvature="0"
d="m 20.3,25.5 h 10.4 v -2.6 c 0,-2.6 -0.65,-2.6 -5.2,-2.6 -4.55,0 -5.2,0 -5.2,2.6 z"
fill="#fcffff"
opacity=".3"
id="path2193" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,191 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:i="&amp;ns_ai;"
xmlns:x="adobe:ns:meta/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0beta2 (2b71d25, 2019-12-03)"
height="83.400002"
width="83.400002"
sodipodi:docname="mEntwineLogo.svg"
xml:space="preserve"
viewBox="0 0 83.400002 83.400002"
y="0px"
x="0px"
id="Layer_1"
version="1.1"><defs
id="defs881" /><sodipodi:namedview
inkscape:current-layer="g857"
inkscape:window-maximized="0"
inkscape:window-y="23"
inkscape:window-x="0"
inkscape:cy="43.900013"
inkscape:cx="197.30001"
inkscape:zoom="1.2614379"
showgrid="false"
id="namedview879"
inkscape:window-height="737"
inkscape:window-width="1415"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
inkscape:document-rotation="0"
bordercolor="#666666"
pagecolor="#ffffff" />
<metadata
id="metadata833"><?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta
x:xmptk="Adobe XMP Core 5.6-c067 79.157747, 2015/03/30-23:40:42 ">
<metadata><rdf:RDF>
<rdf:Description
rdf:about="" />
<cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata></x:xmpmeta>
<?xpacket end="w"?></metadata>
<style
id="style835"
type="text/css">
.st0{clip-path:url(#SVGID_2_);fill:#39B54A;}
.st1{clip-path:url(#SVGID_2_);fill:none;stroke:#FFFFFF;stroke-width:6.2024;stroke-miterlimit:10;}
.st2{clip-path:url(#SVGID_2_);}
.st3{fill:#FFFFFF;}
.st4{fill:#39B44A;}
.st5{fill:#192854;}
</style>
<switch
transform="translate(-198.69999,-262.09999)"
id="switch876">
<foreignObject
height="1"
width="1"
y="0"
x="0"
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
</foreignObject>
<g
id="g874"
i:extraneous="self">
<g
id="g865">
<g
id="g857">
<defs
id="defs838">
<circle
r="41.700001"
cy="303.79999"
cx="240.39999"
id="SVGID_1_" />
</defs>
<clipPath
id="SVGID_2_">
<use
height="100%"
width="100%"
y="0"
x="0"
id="use840"
style="overflow:visible"
xlink:href="#SVGID_1_" />
</clipPath>
<circle
id="circle843"
clip-path="url(#SVGID_2_)"
r="41.900002"
cy="303.79999"
cx="240.39999"
class="st0" />
<circle
id="circle845"
clip-path="url(#SVGID_2_)"
r="24.700001"
cy="303.79999"
cx="240.5"
class="st1" />
<g
id="g851"
clip-path="url(#SVGID_2_)"
class="st2">
<path
inkscape:connector-curvature="0"
id="path847"
d="m 233.9,346.3 c 5.9,-28.3 -4.4,-36.5 -4.5,-36.6 l -13.2,-9.9 15.5,5.9 c 0.4,0.1 7.3,2.9 10.5,10.6 1.6,-1.9 4,-3.7 7.6,-4.2 l 11.8,-1.6 -10.4,5.9 c 0,0 -8,5.4 -3.3,29.5 l 0.5,2.7 -15.1,0.6 z"
class="st3" />
<path
inkscape:connector-curvature="0"
id="path849"
d="m 230.8,307.9 c 0,0 9.6,3.7 10.5,15.1 0,0 1.5,-7.6 8.7,-8.6 0,0 -9.6,5.5 -4.4,32 l -9.4,0.4 c 6.3,-30.2 -5.4,-38.9 -5.4,-38.9 m -36.6,-18.9 33.7,22.6 c 0.3,0.3 2.4,2.3 3.8,6.9 1.5,4.8 2.8,13.5 -0.1,27.3 l -1.2,5.9 6,-0.3 9.4,-0.4 5.4,-0.2 -1,-5.3 c -4.2,-21.5 2.1,-27 2.2,-27.1 l 20.8,-11.8 -23.7,3.2 c -2.7,0.4 -4.9,1.4 -6.6,2.7 -3.9,-6.4 -10,-8.8 -10.3,-8.9 z"
class="st4" />
</g>
<path
inkscape:connector-curvature="0"
id="path853"
clip-path="url(#SVGID_2_)"
d="m 216,306.7 c -1.6,-13.5 8,-25.8 21.6,-27.4 13.5,-1.6 25.8,8 27.4,21.6"
class="st1" />
<path
inkscape:connector-curvature="0"
id="path855"
clip-path="url(#SVGID_2_)"
d="m 223,286.3 c 9.6,-9.6 25.3,-9.6 34.9,0 9.6,9.6 9.6,25.3 0,34.9"
class="st1" />
</g>
<g
id="g863">
<circle
id="circle859"
r="10.9"
cy="290.89999"
cx="258.10001"
class="st4" />
<path
inkscape:connector-curvature="0"
id="path861"
d="m 258.1,304.1 c -7.3,0 -13.2,-5.9 -13.2,-13.2 0,-7.3 5.9,-13.2 13.2,-13.2 7.3,0 13.2,5.9 13.2,13.2 0,7.3 -6,13.2 -13.2,13.2 z m 0,-21.8 c -4.7,0 -8.6,3.8 -8.6,8.6 0,4.8 3.8,8.6 8.6,8.6 4.8,0 8.6,-3.8 8.6,-8.6 0,-4.8 -3.9,-8.6 -8.6,-8.6 z"
class="st3" />
</g>
</g>
</g>
</switch>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -0,0 +1,262 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="250"
inkscape:export-xdpi="250"
inkscape:export-filename="/Users/hobu/Desktop/pdal_logo.png"
width="128.61584"
height="130.7639"
id="svg2"
version="1.1"
inkscape:version="1.0beta2 (2b71d25, 2019-12-03)"
sodipodi:docname="mPdalLogo.svg">
<defs
id="defs4" />
<sodipodi:namedview
inkscape:document-rotation="0"
inkscape:guide-bbox="true"
showguides="false"
inkscape:window-maximized="0"
inkscape:window-y="23"
inkscape:window-x="0"
inkscape:window-height="939"
inkscape:window-width="1680"
showgrid="false"
inkscape:current-layer="layer3"
inkscape:document-units="px"
inkscape:cy="37.049332"
inkscape:cx="42.117816"
inkscape:zoom="2"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base">
<inkscape:grid
originy="-66.270828"
originx="-106.03279"
snapvisiblegridlinesonly="true"
enabled="true"
visible="true"
empspacing="5"
id="grid3113"
type="xygrid" />
<sodipodi:guide
id="guide3818"
position="58.112329,130.23294"
orientation="0,1" />
<sodipodi:guide
id="guide3820"
position="-1.4305111,81.954967"
orientation="1,0" />
<sodipodi:guide
id="guide3822"
position="54.663899,-0.34749337"
orientation="0,1" />
<sodipodi:guide
id="guide3824"
position="128.69013,48.160377"
orientation="1,0" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(-106.03279,-66.270828)"
style="display:inline"
inkscape:label="PDAL text"
id="layer4"
inkscape:groupmode="layer" />
<g
transform="translate(-106.03279,-66.270828)"
style="display:inline"
inkscape:label="Color Dots"
id="layer2"
inkscape:groupmode="layer" />
<g
transform="translate(-106.03279,-66.270828)"
style="display:inline"
inkscape:label="Gray Dots"
id="layer3"
inkscape:groupmode="layer">
<g
id="g3107">
<circle
r="15.528928"
cy="141.33174"
cx="181.81787"
style="display:inline;fill:#b6f2fb;fill-opacity:1;fill-rule:evenodd;stroke:#323232;stroke-width:0.962704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3003"
transform="matrix(-1.0387412,0,0,1.0387412,393.22524,-63.905737)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="15.528928"
cy="141.33174"
cx="181.81787"
style="display:inline;fill:#55a9f6;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.854881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3073"
transform="matrix(-1.169753,0,0,1.169753,342.92204,-33.895972)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
style="display:inline;fill:#b6f2fb;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3075"
transform="matrix(-1,0,0,1,384.26161,-62.333932)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
id="path3079"
style="display:inline;fill:#b6f2fb;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.927382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(-1.0783049,0,0,1.0783049,327.70526,-161.79578)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="11.970215"
cy="188.88908"
cx="257.19788"
style="display:inline;fill:#2c7fb8;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.905983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3081"
transform="matrix(-1.1037735,0,0,1.1037735,480.8321,-26.231392)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="24.910988"
cy="212.18248"
cx="218.37555"
style="display:inline;fill:#55a9f6;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.918172;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3083"
transform="matrix(-1.0891203,0,0,1.0891203,430.57541,-102.27246)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="11.970215"
cy="188.88908"
cx="257.19788"
transform="matrix(-1.1037735,0,0,1.1037735,405.30333,-25.168442)"
id="path3111"
style="display:inline;fill:#2c7fb8;fill-opacity:1;fill-rule:evenodd;stroke:#232323;stroke-width:0.905983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1,0,0,1,277.86199,9.564221)"
id="path3838"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3840"
transform="matrix(-1,0,0,1,312.59339,-4.689847)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
id="path3844"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.850241;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(-0.94090967,0,0,0.94090967,342.27869,-120.03231)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1.0783049,0,0,1.0783049,433.52077,-103.18489)"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.741905;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3846" />
<circle
r="15.528928"
cy="141.33174"
cx="181.81787"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1.0605504,0,0,1.0605504,350.60249,22.364694)"
id="path3850"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.754325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3828"
transform="matrix(-1,0,0,1,327.34063,-65.939185)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1.2827378,0,0,1.2827378,395.72688,-226.15381)"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.623666;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3830" />
<circle
r="8.0879831"
cy="243.88737"
cx="197.02327"
id="path3961"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:1.05002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(-0.76189307,0,0,0.76189307,266.73335,-110.25136)"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<circle
r="4.2057514"
cy="148.77269"
cx="154.31873"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/patrick/Documents/Consulting/Hobu/pdal/pdal_v2b.png"
transform="matrix(-1,0,0,1,379.84063,37.810815)"
id="path3963"
style="display:inline;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -36,11 +36,6 @@ Ctor
%End
~QgsPointCloudDataProvider();
virtual QgsRectangle extent() const;
virtual bool isValid() const;
};

View File

@ -29,13 +29,3 @@ QgsPointCloudDataProvider::QgsPointCloudDataProvider(
QgsPointCloudDataProvider::~QgsPointCloudDataProvider() = default;
QgsRectangle QgsPointCloudDataProvider::extent() const
{
return index()->extent();
}
bool QgsPointCloudDataProvider::isValid() const
{
return mIsValid;
}

View File

@ -44,18 +44,15 @@ class CORE_EXPORT QgsPointCloudDataProvider: public QgsDataProvider
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
~QgsPointCloudDataProvider() override;
QgsRectangle extent() const override;
bool isValid() const override;
/**
* Returns the point cloud index associated with the provider.
*
* Can be nullptr (e.g. the index is being created)
*
* \note Not available in Python bindings
*/
virtual QgsPointCloudIndex *index() const SIP_SKIP {return nullptr;}
private:
bool mIsValid = false;
};
#endif // QGSMESHDATAPROVIDER_H

View File

@ -56,7 +56,7 @@ QgsRectangle QgsPointCloudLayer::extent() const
if ( !mDataProvider )
return QgsRectangle();
return mDataProvider->index()->extent();
return mDataProvider->extent();
}
QgsMapLayerRenderer *QgsPointCloudLayer::createMapRenderer( QgsRenderContext &rendererContext )

View File

@ -113,6 +113,8 @@ bool QgsPointCloudLayerRenderer::render()
{
// TODO cache!?
QgsPointCloudIndex *pc = mLayer->dataProvider()->index();
if ( !pc )
return false;
QgsRenderContext &context = *renderContext();
@ -162,6 +164,9 @@ QgsPointCloudLayerRenderer::~QgsPointCloudLayerRenderer() = default;
void QgsPointCloudLayerRenderer::drawData( QPainter *painter, const QgsPointCloudBlock *data, const QgsPointCloudRendererConfig &config )
{
Q_ASSERT( mLayer->dataProvider() );
Q_ASSERT( mLayer->dataProvider()->index() );
if ( !data )
return;

View File

@ -32,6 +32,7 @@ QgsEptLayerItem::QgsEptLayerItem( QgsDataItem *parent,
: QgsLayerItem( parent, name, path, uri, QgsLayerItem::PointCloud, QStringLiteral( "ept" ) )
{
mToolTip = uri;
mIconName = QStringLiteral( "mIconEntwineLayer.svg" );
setState( Populated );
}

View File

@ -29,7 +29,7 @@ class QgsEptDataItemGuiProvider : public QObject, public QgsDataItemGuiProvider
Q_OBJECT
public:
QString name() override { return QStringLiteral( "Point Cloud" ); }
QString name() override { return QStringLiteral( "ept" ); }
void populateContextMenu( QgsDataItem *item, QMenu *menu,
const QList<QgsDataItem *> &selectedItems, QgsDataItemGuiContext context ) override;

View File

@ -27,10 +27,10 @@ class QgsEptSourceSelectProvider : public QgsSourceSelectProvider
{
public:
QString providerKey() const override { return QStringLiteral( "pointcloud" ); }
QString text() const override { return QObject::tr( "Point Cloud" ); }
QString providerKey() const override { return QStringLiteral( "ept" ); }
QString text() const override { return QObject::tr( "EPT Point Cloud" ); }
int ordering() const override { return QgsSourceSelectProvider::OrderLocalProvider + 25; }
QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddPointCloudLayer.svg" ) ); }
QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddEntwineLayer.svg" ) ); }
QgsAbstractDataSourceWidget *createDataSourceWidget( QWidget *parent = nullptr, Qt::WindowFlags fl = Qt::Widget, QgsProviderRegistry::WidgetMode widgetMode = QgsProviderRegistry::WidgetMode::Embedded ) const override
{
return new QgsEptSourceSelect( parent, fl, widgetMode );
@ -38,7 +38,7 @@ class QgsEptSourceSelectProvider : public QgsSourceSelectProvider
};
QgsEptProviderGuiMetadata::QgsEptProviderGuiMetadata()
: QgsProviderGuiMetadata( QStringLiteral( "etp" ) )
: QgsProviderGuiMetadata( QStringLiteral( "ept" ) )
{
}

View File

@ -21,7 +21,7 @@
#include "qgis_sip.h"
#define SIP_NO_FILE
#include "ui_qgspointcloudsourceselectbase.h"
#include "ui_qgseptsourceselectbase.h"
#include "qgsabstractdatasourcewidget.h"
#include "qgis_gui.h"
@ -30,7 +30,7 @@
* \class QgsEptSourceSelect
* \brief Dialog to select EPT point cloud supported sources
*/
class QgsEptSourceSelect : public QgsAbstractDataSourceWidget, private Ui::QgsPointCloudSourceSelectBase
class QgsEptSourceSelect : public QgsAbstractDataSourceWidget, private Ui::QgsEptSourceSelectBase
{
Q_OBJECT

View File

@ -26,6 +26,10 @@ IF (NOT FORCE_STATIC_PROVIDERS)
ADD_SUBDIRECTORY(oracle)
ENDIF(WITH_ORACLE)
IF (WITH_PDAL)
ADD_SUBDIRECTORY(pdal)
ENDIF(WITH_PDAL)
IF (WITH_GRASS OR WITH_GRASS7)
ADD_SUBDIRECTORY(grass)
ENDIF (WITH_GRASS OR WITH_GRASS7)

View File

@ -0,0 +1,73 @@
########################################################
# Files
SET(PDAL_SRCS
qgspdaldataitems.cpp
qgspdalprovider.cpp
)
SET(PDAL_HDRS
qgspdaldataitems.h
qgspdalprovider.h
)
IF (WITH_GUI)
SET(PDAL_SRCS
${PDAL_SRCS}
qgspdalprovidergui.cpp
qgspdaldataitemguiprovider.cpp
qgspdalsourceselect.cpp
)
SET(PDAL_HDRS
${PDAL_HDRS}
qgspdalprovidergui.h
qgspdaldataitemguiprovider.h
qgspdalsourceselect.h
)
ENDIF ()
########################################################
# Build
INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/src/core
${CMAKE_SOURCE_DIR}/src/core/auth
${CMAKE_SOURCE_DIR}/src/core/expression
${CMAKE_SOURCE_DIR}/src/core/geometry
${CMAKE_SOURCE_DIR}/src/core/metadata
${CMAKE_SOURCE_DIR}/src/core/symbology
${CMAKE_SOURCE_DIR}/src/core/raster
${CMAKE_SOURCE_DIR}/src/core/pointcloud
${CMAKE_SOURCE_DIR}/src/core/providers/ept
${CMAKE_SOURCE_DIR}/src/gui
${CMAKE_SOURCE_DIR}/src/gui/auth
${CMAKE_SOURCE_DIR}/src/gui/codeeditors
${CMAKE_SOURCE_DIR}/external
${CMAKE_SOURCE_DIR}/external/nlohmann
${CMAKE_BINARY_DIR}/src/core
${CMAKE_BINARY_DIR}/src/gui
${CMAKE_BINARY_DIR}/src/ui
)
INCLUDE_DIRECTORIES(SYSTEM
${PDAL_INCLUDE_DIR}
)
# static library
ADD_LIBRARY (pdalprovider MODULE ${PDAL_SRCS} ${PDAL_HDRS})
TARGET_LINK_LIBRARIES (pdalprovider
${PDAL_LIBRARIES}
)
IF (WITH_GUI)
TARGET_LINK_LIBRARIES(pdalprovider
qgis_gui
)
ADD_DEPENDENCIES(pdalprovider ui)
ENDIF (WITH_GUI)
INSTALL(TARGETS pdalprovider
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})

View File

@ -0,0 +1,33 @@
/***************************************************************************
qgspdaldataitemguiprovider.cpp
--------------------------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgspdaldataitemguiprovider.h"
#include "qgsmanageconnectionsdialog.h"
#include "qgspdaldataitems.h"
#include "qgspdalprovider.h"
#include "qgspdalsourceselect.h"
#include <QFileDialog>
#include <QInputDialog>
#include <QMessageBox>
void QgsPdalDataItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *menu, const QList<QgsDataItem *> &, QgsDataItemGuiContext context )
{
Q_UNUSED( item )
Q_UNUSED( menu )
Q_UNUSED( context )
}

View File

@ -0,0 +1,33 @@
/***************************************************************************
qgspdaldataitemguiprovider.h
--------------------------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSPDALDATAITEMGUIPROVIDER_H
#define QGSPDALDATAITEMGUIPROVIDER_H
#include "qgsdataitemguiprovider.h"
class QgsPdalDataItemGuiProvider : public QObject, public QgsDataItemGuiProvider
{
Q_OBJECT
public:
QString name() override { return QStringLiteral( "pdal" ); }
void populateContextMenu( QgsDataItem *item, QMenu *menu,
const QList<QgsDataItem *> &selectedItems, QgsDataItemGuiContext context ) override;
};
#endif // QGSPDALDATAITEMGUIPROVIDER_H

View File

@ -0,0 +1,79 @@
/***************************************************************************
qgspdaldataitems.cpp
--------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgspdaldataitems.h"
#include "qgslogger.h"
#include "qgssettings.h"
#include <QFileInfo>
#include <mutex>
QgsPdalLayerItem::QgsPdalLayerItem( QgsDataItem *parent,
const QString &name, const QString &path, const QString &uri )
: QgsLayerItem( parent, name, path, uri, QgsLayerItem::PointCloud, QStringLiteral( "pdal" ) )
{
mToolTip = uri;
mIconName = QStringLiteral( "mIconPdalLayer.svg" );
setState( Populated );
}
QString QgsPdalLayerItem::layerName() const
{
QFileInfo info( name() );
return info.completeBaseName();
}
// ---------------------------------------------------------------------------
QgsPdalDataItemProvider::QgsPdalDataItemProvider():
QgsDataItemProvider()
{
}
QString QgsPdalDataItemProvider::name()
{
return QStringLiteral( "pdal" );
}
int QgsPdalDataItemProvider::capabilities() const
{
return QgsDataProvider::File;
}
QgsDataItem *QgsPdalDataItemProvider::createDataItem( const QString &path, QgsDataItem *parentItem )
{
if ( path.isEmpty() )
return nullptr;
QgsDebugMsgLevel( "thePath = " + path, 2 );
// get suffix, removing .gz if present
QFileInfo info( path );
info.setFile( path );
// allow only normal files
if ( !info.isFile() )
return nullptr;
// Filter files by extension
// TODO get file filter list from PDAL library
if ( !path.endsWith( QStringLiteral( "laz" ) ) )
return nullptr;
QString name = info.baseName() + QStringLiteral( ".laz" );
return new QgsPdalLayerItem( parentItem, name, path, path );
}

View File

@ -0,0 +1,49 @@
/***************************************************************************
qgspdaldataitems.h
--------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSPDALDATAITEMS_H
#define QGSPDALDATAITEMS_H
#include "qgsdataitem.h"
#include "qgsdataitemprovider.h"
#include "qgsprovidermetadata.h"
class CORE_EXPORT QgsPdalLayerItem : public QgsLayerItem
{
Q_OBJECT
public:
QgsPdalLayerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &uri );
QString layerName() const override;
};
//! Provider for PDAL data items
class QgsPdalDataItemProvider : public QgsDataItemProvider
{
public:
QgsPdalDataItemProvider();
QString name() override;
int capabilities() const override;
QgsDataItem *createDataItem( const QString &pathIn, QgsDataItem *parentItem ) override;
};
#endif // QGSPDALDATAITEMS_H

View File

@ -0,0 +1,35 @@
/***************************************************************************
qgspostgresprovidergui.h
------------------------
Date : October 2019
Copyright : (C) 2019 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSPOSTGRESPROVIDERGUI_H
#define QGSPOSTGRESPROVIDERGUI_H
#include <QList>
#include <QMainWindow>
#include "qgsproviderguimetadata.h"
class QgsPostgresProviderGuiMetadata: public QgsProviderGuiMetadata
{
public:
QgsPostgresProviderGuiMetadata();
QList<QgsSourceSelectProvider *> sourceSelectProviders() override;
QList<QgsDataItemGuiProvider *> dataItemGuiProviders() override;
QList<QgsProjectStorageGuiProvider *> projectStorageGuiProviders() override;
void registerGui( QMainWindow *mainWindow ) override;
};
#endif // QGSPOSTGRESPROVIDERGUI_H

View File

@ -0,0 +1,151 @@
/***************************************************************************
qgspdaldataprovider.cpp
-----------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgis.h"
#include "qgspdalprovider.h"
#include "qgspdaldataitems.h"
#include "qgsruntimeprofiler.h"
#include "qgsapplication.h"
#include <pdal/io/LasReader.hpp>
#include <pdal/io/LasHeader.hpp>
#include <pdal/Options.hpp>
#define PROVIDER_KEY QStringLiteral( "pdal" )
#define PROVIDER_DESCRIPTION QStringLiteral( "PDAL point cloud data provider" )
QgsPdalProvider::QgsPdalProvider(
const QString &uri,
const QgsDataProvider::ProviderOptions &options,
QgsDataProvider::ReadFlags flags )
: QgsPointCloudDataProvider( uri, options, flags )
{
std::unique_ptr< QgsScopedRuntimeProfile > profile;
if ( QgsApplication::profiler()->groupIsActive( QStringLiteral( "projectload" ) ) )
profile = qgis::make_unique< QgsScopedRuntimeProfile >( tr( "Open data source" ), QStringLiteral( "projectload" ) );
mIsValid = load( uri );
}
QgsPdalProvider::~QgsPdalProvider() = default;
QgsCoordinateReferenceSystem QgsPdalProvider::crs() const
{
return mCrs;
}
QgsRectangle QgsPdalProvider::extent() const
{
return mExtent;
}
bool QgsPdalProvider::isValid() const
{
return mIsValid;
}
QString QgsPdalProvider::name() const
{
return QStringLiteral( "pdal" );
}
QString QgsPdalProvider::description() const
{
return QStringLiteral( "Point Clouds PDAL" );
}
QgsPointCloudIndex *QgsPdalProvider::index() const
{
// TODO automatically generate EPT index
return nullptr;
}
bool QgsPdalProvider::load( const QString &uri )
{
pdal::Option las_opt( "filename", uri.toStdString() );
pdal::Options las_opts;
las_opts.add( las_opt );
pdal::PointTable table;
pdal::LasReader las_reader;
las_reader.setOptions( las_opts );
las_reader.prepare( table );
pdal::PointViewSet point_view_set = las_reader.execute( table );
pdal::PointViewPtr point_view = *point_view_set.begin();
pdal::Dimension::IdList dims = point_view->dims();
pdal::LasHeader las_header = las_reader.header();
// extent
/*
double scale_x = las_header.scaleX();
double scale_y = las_header.scaleY();
double scale_z = las_header.scaleZ();
double offset_x = las_header.offsetX();
double offset_y = las_header.offsetY();
double offset_z = las_header.offsetZ();
*/
double xmin = las_header.minX();
double xmax = las_header.maxX();
double ymin = las_header.minY();
double ymax = las_header.maxY();
mExtent = QgsRectangle( xmin, ymin, xmax, ymax );
// unsigned int nFeatures = las_header.pointCount();
// projection
QString wkt = QString::fromStdString( las_reader.getSpatialReference().getWKT() );
mCrs = QgsCoordinateReferenceSystem::fromWkt( wkt );
return true;
}
QgsPdalProviderMetadata::QgsPdalProviderMetadata():
QgsProviderMetadata( PROVIDER_KEY, PROVIDER_DESCRIPTION )
{
}
QgsPdalProvider *QgsPdalProviderMetadata::createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags )
{
return new QgsPdalProvider( uri, options, flags );
}
QList<QgsDataItemProvider *> QgsPdalProviderMetadata::dataItemProviders() const
{
QList< QgsDataItemProvider * > providers;
providers << new QgsPdalDataItemProvider;
return providers;
}
QVariantMap QgsPdalProviderMetadata::decodeUri( const QString &uri )
{
const QString path = uri;
QVariantMap uriComponents;
uriComponents.insert( QStringLiteral( "path" ), path );
return uriComponents;
}
QString QgsPdalProviderMetadata::encodeUri( const QVariantMap &parts )
{
const QString path = parts.value( QStringLiteral( "path" ) ).toString();
return path;
}
QGISEXTERN QgsProviderMetadata *providerMetadataFactory()
{
return new QgsPdalProviderMetadata();
}

View File

@ -0,0 +1,65 @@
/***************************************************************************
qgspdaldataprovider.h
---------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSPDALPROVIDER_H
#define QGSPDALPROVIDER_H
#include "qgis_core.h"
#include "qgspointclouddataprovider.h"
#include "qgsprovidermetadata.h"
#include <memory>
class QgsPdalProvider: public QgsPointCloudDataProvider
{
Q_OBJECT
public:
QgsPdalProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
~QgsPdalProvider();
QgsCoordinateReferenceSystem crs() const override;
QgsRectangle extent() const override;
bool isValid() const override;
QString name() const override;
QString description() const override;
QgsPointCloudIndex *index() const override;
private:
bool load( const QString &uri );
QgsCoordinateReferenceSystem mCrs;
QgsRectangle mExtent;
bool mIsValid = false;
};
class QgsPdalProviderMetadata : public QgsProviderMetadata
{
public:
QgsPdalProviderMetadata();
QgsPdalProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) override;
QList< QgsDataItemProvider * > dataItemProviders() const override;
QString encodeUri( const QVariantMap &parts ) override;
QVariantMap decodeUri( const QString &uri ) override;
};
#endif // QGSPDALPROVIDER_H

View File

@ -0,0 +1,61 @@
/***************************************************************************
qgspdalprovidergui.cpp
--------------------------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgsapplication.h"
#include "qgsproviderguimetadata.h"
#include "qgssourceselectprovider.h"
#include "qgspdalprovider.h"
#include "qgspdalsourceselect.h"
//! Provider for pdal source select
class QgsPdalSourceSelectProvider : public QgsSourceSelectProvider
{
public:
QString providerKey() const override { return QStringLiteral( "pdal" ); }
QString text() const override { return QObject::tr( "PDAL Point Clouds" ); }
int ordering() const override { return QgsSourceSelectProvider::OrderLocalProvider + 22; }
QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddPdalLayer.svg" ) ); }
QgsAbstractDataSourceWidget *createDataSourceWidget( QWidget *parent = nullptr, Qt::WindowFlags fl = Qt::Widget,
QgsProviderRegistry::WidgetMode widgetMode = QgsProviderRegistry::WidgetMode::Embedded ) const override
{
return new QgsPdalSourceSelect( parent, fl, widgetMode );
}
};
class QgsPdalProviderGuiMetadata: public QgsProviderGuiMetadata
{
public:
QgsPdalProviderGuiMetadata()
: QgsProviderGuiMetadata( QStringLiteral( "pdal" ) )
{
}
QList<QgsSourceSelectProvider *> sourceSelectProviders() override
{
QList<QgsSourceSelectProvider *> providers;
providers << new QgsPdalSourceSelectProvider;
return providers;
}
};
QGISEXTERN QgsProviderGuiMetadata *providerGuiMetadataFactory()
{
return new QgsPdalProviderGuiMetadata();
}

View File

@ -0,0 +1,35 @@
/***************************************************************************
qgspdalprovidergui.h
------------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSPDALPROVIDERGUI_H
#define QGSPDALPROVIDERGUI_H
#include <QList>
#include <QMainWindow>
#include "qgsproviderguimetadata.h"
class QgsPdalProviderGuiMetadata: public QgsProviderGuiMetadata
{
public:
QgsPdalProviderGuiMetadata();
QList<QgsSourceSelectProvider *> sourceSelectProviders() override;
QList<QgsDataItemGuiProvider *> dataItemGuiProviders() override;
QList<QgsProjectStorageGuiProvider *> projectStorageGuiProviders() override;
void registerGui( QMainWindow *mainWindow ) override;
};
#endif // QGSPDALPROVIDERGUI_H

View File

@ -0,0 +1,54 @@
/***************************************************************************
qgspdalsourceselect.cpp
-----------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include <QMessageBox>
#include "qgspdalsourceselect.h"
#include "qgsproviderregistry.h"
#include "ogr/qgsogrhelperfunctions.h"
QgsPdalSourceSelect::QgsPdalSourceSelect( QWidget *parent, Qt::WindowFlags fl, QgsProviderRegistry::WidgetMode widgetMode ):
QgsAbstractDataSourceWidget( parent, fl, widgetMode )
{
setupUi( this );
setupButtons( buttonBox );
mFileWidget->setDialogTitle( tr( "Open PDAL Supported Point Cloud Dataset(s)" ) );
mFileWidget->setFilter( QgsProviderRegistry::instance()->fileMeshFilters() );
mFileWidget->setStorageMode( QgsFileWidget::GetMultipleFiles );
connect( mFileWidget, &QgsFileWidget::fileChanged, this, [ = ]( const QString & path )
{
mPath = path;
emit enableButtons( ! mPath.isEmpty() );
} );
}
void QgsPdalSourceSelect::addButtonClicked()
{
if ( mPath.isEmpty() )
{
QMessageBox::information( this,
tr( "Add mesh layer" ),
tr( "No layers selected." ) );
return;
}
for ( const QString &path : QgsFileWidget::splitFilePaths( mPath ) )
{
emit addMeshLayer( path, QFileInfo( path ).baseName(), QStringLiteral( "mdal" ) );
}
}

View File

@ -0,0 +1,46 @@
/***************************************************************************
qgspdalsourceselect.h
-------------------
Date : November 2020
Copyright : (C) 2020 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSPDALSOURCESELECT_H
#define QGSPDALSOURCESELECT_H
#include "ui_qgspdalsourceselectbase.h"
#include "qgsabstractdatasourcewidget.h"
#include "qgis_gui.h"
/**
* Dialog to select PDAL supported point cloud sources
*/
class QgsPdalSourceSelect : public QgsAbstractDataSourceWidget, private Ui::QgsPdalSourceSelectBase
{
Q_OBJECT
public:
//! Constructor
QgsPdalSourceSelect( QWidget *parent = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags,
QgsProviderRegistry::WidgetMode widgetMode = QgsProviderRegistry::WidgetMode::None );
public slots:
//! Determines the tables the user selected and closes the dialog
void addButtonClicked() override;
private:
QString mPath;
};
#endif // QGSPDALSOURCESELECT_H

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsPointCloudSourceSelectBase</class>
<widget class="QDialog" name="QgsPointCloudSourceSelectBase">
<class>QgsEptSourceSelectBase</class>
<widget class="QDialog" name="QgsEptSourceSelectBase">
<property name="geometry">
<rect>
<x>0</x>
@ -41,7 +41,7 @@
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Point cloud dataset</string>
<string>EPT Point cloud dataset</string>
</property>
</widget>
</item>
@ -91,7 +91,7 @@
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>QgsPointCloudSourceSelectBase</receiver>
<receiver>QgsEptSourceSelectBase</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">

View File

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsPdalSourceSelectBase</class>
<widget class="QDialog" name="QgsPdalSourceSelectBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>351</width>
<height>119</height>
</rect>
</property>
<property name="windowTitle">
<string>Add Point Cloud Layer(s)</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>.</normaloff>.</iconset>
</property>
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="fileGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Source</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>PDAL Point cloud dataset</string>
</property>
</widget>
</item>
<item>
<widget class="QgsFileWidget" name="mFileWidget" native="true"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::NoButton</set>
</property>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>QgsFileWidget</class>
<extends>QWidget</extends>
<header>qgsfilewidget.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>QgsPdalSourceSelectBase</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>518</x>
<y>510</y>
</hint>
<hint type="destinationlabel">
<x>551</x>
<y>370</y>
</hint>
</hints>
</connection>
</connections>
</ui>