Commit 2f66a816 authored by Jan Möbius's avatar Jan Möbius
Browse files

Merge branch 'master' into poisson_disk_square

parents da4127b8 d2e0a012
...@@ -60,9 +60,7 @@ ...@@ -60,9 +60,7 @@
#include <OpenFlipper/common/GlobalOptions.hh> #include <OpenFlipper/common/GlobalOptions.hh>
//#include <QGLWidget> //#include <QGLWidget>
#include <../ObjectTypes/TriangleMesh/TriangleMesh.hh> #include "PluginFunctions.hh"
#include <../ObjectTypes/PolyMesh/PolyMesh.hh>
#include "PluginFunctionsCore.hh" #include "PluginFunctionsCore.hh"
namespace PluginFunctions { namespace PluginFunctions {
......
...@@ -351,6 +351,7 @@ void addGlobalNode(ACG::SceneGraph::BaseNode* _node); ...@@ -351,6 +351,7 @@ void addGlobalNode(ACG::SceneGraph::BaseNode* _node);
* The node will be added at the top of the scenegraph, before all other nodes except * The node will be added at the top of the scenegraph, before all other nodes except
* The scenegraphs real node. It will therefore influence all nodes in the scenegraph. * The scenegraphs real node. It will therefore influence all nodes in the scenegraph.
*/ */
DLLEXPORT
void addGlobalStatusNode(ACG::SceneGraph::BaseNode* _node); void addGlobalStatusNode(ACG::SceneGraph::BaseNode* _node);
/** \brief Add scenegraph node modifing object rendering /** \brief Add scenegraph node modifing object rendering
......
...@@ -84,6 +84,7 @@ ...@@ -84,6 +84,7 @@
#include <OpenFlipper/common/ViewerProperties.hh> #include <OpenFlipper/common/ViewerProperties.hh>
#include <ACG/QtWidgets/QtSceneGraphWidget.hh> #include <ACG/QtWidgets/QtSceneGraphWidget.hh>
#include <OpenFlipper/BasePlugin/PluginFunctionsSceneGraphWidget.hh>
namespace PluginFunctions { namespace PluginFunctions {
...@@ -169,10 +170,6 @@ void removeObjectFromMap(int _objectId); ...@@ -169,10 +170,6 @@ void removeObjectFromMap(int _objectId);
* @{ */ * @{ */
//======================================= //=======================================
/// Add a scenegraph generator ( the handled type will be extracted from the generator)
DLLEXPORT
void addSceneGraphGenerator(ACG::QtWidgets::SceneGraphWidgetGenerator* _generator);
DLLEXPORT DLLEXPORT
QMap< std::string ,ACG::QtWidgets::SceneGraphWidgetGenerator* > getSceneGraphGeneratorList(); QMap< std::string ,ACG::QtWidgets::SceneGraphWidgetGenerator* > getSceneGraphGeneratorList();
......
/*===========================================================================*\
* *
* OpenFlipper *
* Copyright (c) 2001-2015, RWTH-Aachen University *
* Department of Computer Graphics and Multimedia *
* All rights reserved. *
* www.openflipper.org *
* *
*---------------------------------------------------------------------------*
* This file is part of OpenFlipper. *
*---------------------------------------------------------------------------*
* *
* Redistribution and use in source and binary forms, with or without *
* modification, are permitted provided that the following conditions *
* are met: *
* *
* 1. Redistributions of source code must retain the above copyright notice, *
* this list of conditions and the following disclaimer. *
* *
* 2. Redistributions in binary form must reproduce the above copyright *
* notice, this list of conditions and the following disclaimer in the *
* documentation and/or other materials provided with the distribution. *
* *
* 3. Neither the name of the copyright holder nor the names of its *
* contributors may be used to endorse or promote products derived from *
* this software without specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
* *
\*===========================================================================*/
/*===========================================================================*\
* *
* $Revision$ *
* $LastChangedBy$ *
* $Date$ *
* *
\*===========================================================================*/
//=============================================================================
//
// Standard Functions
//
//=============================================================================
/**
* \file PluginFunctionsSceneGraphWidget.hh
* This file contains functions to add an additional widget to the SceneGraph Widget.
*/
#pragma once
#include <OpenFlipper/common/GlobalDefines.hh>
#include <ACG/QtWidgets/QtSceneGraphWidget.hh>
namespace PluginFunctions {
//=======================================
// SceneGraph Generator Map
/** @name Add scenegraph widget generators
* @{ */
//=======================================
/// Add a scenegraph generator ( the handled type will be extracted from the generator)
DLLEXPORT
void addSceneGraphGenerator(ACG::QtWidgets::SceneGraphWidgetGenerator* _generator);
/** @} */
}
...@@ -124,7 +124,7 @@ struct DLLEXPORT PostProcessorOutput ...@@ -124,7 +124,7 @@ struct DLLEXPORT PostProcessorOutput
// in/out format descriptor // in/out format descriptor
struct PostProcessorFormatDesc struct PostProcessorFormatDesc
{ {
PostProcessorFormatDesc(bool _multisampled = false) : supportMultisampling_(_multisampled),outputFormat_(PostProcessorFormat_DONTCARE) explicit PostProcessorFormatDesc(bool _multisampled = false) : supportMultisampling_(_multisampled),outputFormat_(PostProcessorFormat_DONTCARE)
{} {}
......
...@@ -78,7 +78,7 @@ class DLLEXPORT WhatsThisGenerator: public QObject { ...@@ -78,7 +78,7 @@ class DLLEXPORT WhatsThisGenerator: public QObject {
const QString plugin_name_; const QString plugin_name_;
public: public:
WhatsThisGenerator(const QString &_plugin_name); explicit WhatsThisGenerator(const QString &_plugin_name);
QString generateLink(const QString &_ref = "", const QString &_site = "index.html") const; QString generateLink(const QString &_ref = "", const QString &_site = "index.html") const;
......
rmdir libs_required\OpenMesh /s /q rmdir libs_required /s /q
git submodule init git submodule init
......
rmdir libs_required\OpenMesh /s /q rmdir libs_required /s /q
git submodule init git submodule init
......
rmdir libs_required\OpenMesh /s /q rmdir libs_required /s /q
git submodule init git submodule init
......
...@@ -22,7 +22,7 @@ echo "Please Wait ..." ...@@ -22,7 +22,7 @@ echo "Please Wait ..."
cppcheck --enable=all \ cppcheck --enable=all \
-j4 \ -j4 \
--quiet \ --quiet \
-i libs_required \ -i OpenFlipper/libs_required/OpenMesh \
-i build-release \ -i build-release \
-i build-debug \ -i build-debug \
-i .svn \ -i .svn \
...@@ -59,9 +59,11 @@ echo "CPPCHECK Summary" ...@@ -59,9 +59,11 @@ echo "CPPCHECK Summary"
echo "==============================================================================" echo "=============================================================================="
echo -e "${NC}" echo -e "${NC}"
if [ $COUNT -gt 25 ]; then MAX_ERROR=100
if [ $COUNT -gt $MAX_ERROR ]; then
echo -e ${WARNING} echo -e ${WARNING}
echo "Total CPPCHECK error Count is $COUNT, which is too High! CPPCHECK Run failed"; echo "Total CPPCHECK error Count is $COUNT, which is too High (Max is $MAX_ERROR)! CPPCHECK Run failed";
echo -e "${NC}" echo -e "${NC}"
exit 1; exit 1;
else else
......
...@@ -24,7 +24,7 @@ if [ "$COMPILER" == "gcc" ]; then ...@@ -24,7 +24,7 @@ if [ "$COMPILER" == "gcc" ]; then
elif [ "$COMPILER" == "clang" ]; then elif [ "$COMPILER" == "clang" ]; then
OPTIONS="$OPTIONS -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DGTEST_PREFIX=~/sw/gtest-1.7.0-clang/ " OPTIONS="$OPTIONS -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DGTEST_PREFIX=~/sw/gtest-1.8.0-clang/ "
# Build options with icecc /not working due to strange symbol errors # Build options with icecc /not working due to strange symbol errors
# OPTIONS="$OPTIONS -DCMAKE_CXX_COMPILER=/usr/lib/icecc/bin/g++ -DCMAKE_C_COMPILER=/usr/lib/icecc/bin/gcc -DGTEST_PREFIX=~/sw/gtest-1.7.0-clang/ " # OPTIONS="$OPTIONS -DCMAKE_CXX_COMPILER=/usr/lib/icecc/bin/g++ -DCMAKE_C_COMPILER=/usr/lib/icecc/bin/gcc -DGTEST_PREFIX=~/sw/gtest-1.7.0-clang/ "
...@@ -61,7 +61,7 @@ echo "Full cmake options: $OPTIONS " ...@@ -61,7 +61,7 @@ echo "Full cmake options: $OPTIONS "
######################################## ########################################
# Build daemon cleanup code # Build daemon cleanup code
######################################## ########################################
rm -rf libs_required/OpenMesh rm -rf libs_required
######################################## ########################################
# Fetch submodules # Fetch submodules
......
######################################## ########################################
# Build daemon cleanup code # Build daemon cleanup code
######################################## ########################################
rm -rf libs_required/OpenMesh rm -rf libs_required
######################################## ########################################
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
#include <OpenFlipper/common/RecentFiles.hh> #include <OpenFlipper/common/RecentFiles.hh>
#include <ObjectTypes/Light/Light.hh> //#include <ObjectTypes/Light/Light.hh>
#include <OpenFlipper/ACGHelper/DrawModeConverter.hh> #include <OpenFlipper/ACGHelper/DrawModeConverter.hh>
...@@ -594,12 +594,14 @@ void Core::writeIniFile(QString _filename, ...@@ -594,12 +594,14 @@ void Core::writeIniFile(QString _filename,
file = f->second; file = f->second;
} }
/* @Todo: This is broken when Light source Object type is not available!
// Don't save default light source objects // Don't save default light source objects
LightObject* light = 0; LightObject* light = 0;
PluginFunctions::getObject( o_it->id(), light ); PluginFunctions::getObject( o_it->id(), light );
if(light != 0) { if(light != 0) {
if(light->defaultLight()) continue; if(light->defaultLight()) continue;
} }
*/
if (QFile(file).exists()){ if (QFile(file).exists()){
// Add a section for this object // Add a section for this object
...@@ -626,12 +628,15 @@ void Core::writeIniFile(QString _filename, ...@@ -626,12 +628,15 @@ void Core::writeIniFile(QString _filename,
// Tell plugins to save their information for the given object // Tell plugins to save their information for the given object
for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ; for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
o_it != PluginFunctions::objectsEnd(); ++o_it) { o_it != PluginFunctions::objectsEnd(); ++o_it) {
/* @Todo: This is broken when Light source Object type is not available!
// Don't save default light source objects // Don't save default light source objects
LightObject* light = 0; LightObject* light = 0;
PluginFunctions::getObject( o_it->id(), light ); PluginFunctions::getObject( o_it->id(), light );
if(light != 0) { if(light != 0) {
if(light->defaultLight()) continue; if(light->defaultLight()) continue;
} }
*/
emit iniSave( ini , o_it->id() ); emit iniSave( ini , o_it->id() );
} }
......
...@@ -175,7 +175,7 @@ class PreloadThread : public QThread ...@@ -175,7 +175,7 @@ class PreloadThread : public QThread
* *
* @param aggregator aggregator managing the different threads * @param aggregator aggregator managing the different threads
*/ */
PreloadThread(PreloadAggregator *aggregator) : aggregator_(aggregator) { explicit PreloadThread(PreloadAggregator *aggregator) : aggregator_(aggregator) {
} }
public: public:
......
...@@ -65,7 +65,7 @@ class SpinBoxEventFilter : public QObject { ...@@ -65,7 +65,7 @@ class SpinBoxEventFilter : public QObject {
Q_OBJECT Q_OBJECT
public: public:
SpinBoxEventFilter(QObject *parent = 0); explicit SpinBoxEventFilter(QObject *parent = 0);
virtual ~SpinBoxEventFilter(); virtual ~SpinBoxEventFilter();
bool eventFilter(QObject *object, QEvent *event); bool eventFilter(QObject *object, QEvent *event);
......
...@@ -61,8 +61,6 @@ ...@@ -61,8 +61,6 @@
#include "OpenFlipper/widgets/loadWidget/loadWidget.hh" #include "OpenFlipper/widgets/loadWidget/loadWidget.hh"
#include "OpenFlipper/widgets/addEmptyWidget/addEmptyWidget.hh" #include "OpenFlipper/widgets/addEmptyWidget/addEmptyWidget.hh"
#include <ObjectTypes/PolyMesh/PolyMesh.hh>
#include "OpenFunctionThread.hh" #include "OpenFunctionThread.hh"
void Core::resetScenegraph( bool _resetTrackBall ) { void Core::resetScenegraph( bool _resetTrackBall ) {
...@@ -178,7 +176,7 @@ void Core::slotExecuteAfterStartup() { ...@@ -178,7 +176,7 @@ void Core::slotExecuteAfterStartup() {
// If the file was given with the polymesh option, open them as polymeshes. // If the file was given with the polymesh option, open them as polymeshes.
if (commandLineFileNames_[i].second) if (commandLineFileNames_[i].second)
loadObject(DATA_POLY_MESH, QString::fromStdString(commandLineFileNames_[i].first)); loadObject(typeId("PolyMesh"), QString::fromStdString(commandLineFileNames_[i].first));
else { else {
loadObject(QString::fromStdString(commandLineFileNames_[i].first)); loadObject(QString::fromStdString(commandLineFileNames_[i].first));
} }
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
#include "Core.hh" #include "Core.hh"
#include <ObjectTypes/Light/Light.hh> //#include <ObjectTypes/Light/Light.hh>
/// Save Settings (slot is called from CoreWidget's File-Menu) /// Save Settings (slot is called from CoreWidget's File-Menu)
void Core::saveSettings(){ void Core::saveSettings(){
...@@ -267,6 +267,7 @@ void Core::saveSettings(QString complete_name, bool is_saveObjectInfo, bool is_t ...@@ -267,6 +267,7 @@ void Core::saveSettings(QString complete_name, bool is_saveObjectInfo, bool is_t
} }
} }
/* @Todo: This is broken when Light source Object type is not available!
// Don't save default light source objects // Don't save default light source objects
LightObject* light = 0; LightObject* light = 0;
PluginFunctions::getObject( o_it->id(), light ); PluginFunctions::getObject( o_it->id(), light );
...@@ -274,6 +275,8 @@ void Core::saveSettings(QString complete_name, bool is_saveObjectInfo, bool is_t ...@@ -274,6 +275,8 @@ void Core::saveSettings(QString complete_name, bool is_saveObjectInfo, bool is_t
if(light->defaultLight()) continue; if(light->defaultLight()) continue;
} }
*/
// Store original file name // Store original file name
originalFiles.insert(filename); originalFiles.insert(filename);
......
<?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"
version="1.1"
id="svg2985"
height="48px"
width="48px">
<defs
id="defs2987">
<marker
style="overflow:visible;"
id="Arrow2Mend"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(0.6) rotate(180) translate(0,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
id="path3812" />
</marker>
<marker
style="overflow:visible;"
id="Arrow2Lend"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(1.1) rotate(180) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
id="path3806" />
</marker>
<marker
style="overflow:visible;"
id="Arrow1Lend"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(0.8) rotate(180) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path3788" />
</marker>
<marker
style="overflow:visible;"
id="Arrow2Mend2"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(0.6) rotate(180) translate(0,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="stroke-linejoin:round;stroke:#ffd5d5;stroke-width:0.62500000;fill:#ffd5d5;fill-rule:evenodd"
id="path5532" />
</marker>
<marker
style="overflow:visible"
id="Arrow2Mend2-3"
refX="0"
refY="0"
orient="auto">
<path
transform="scale(-0.6,-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:#ffd5d5;fill-rule:evenodd;stroke:#ffd5d5;stroke-width:0.625;stroke-linejoin:round"
id="path5532-6" />
</marker>
<marker
style="overflow:visible;"
id="Arrow2Mend2I"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(0.6) rotate(180) translate(0,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="stroke-linejoin:round;fill-rule:evenodd;stroke:#e5ffd5;stroke-width:0.62500000;fill:#e5ffd5"
id="path5592" />
</marker>
<marker
style="overflow:visible;"
id="Arrow2Mend2m"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(0.6) rotate(180) translate(0,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="stroke-linejoin:round;fill-rule:evenodd;stroke:#000000;stroke-width:0.62500000;fill:#000000"
id="path5695" />
</marker>
<marker
style="overflow:visible;"
id="Arrow2Mend2Ix"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(0.6) rotate(180) translate(0,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd"
id="path5742" />
</marker>
</defs>
<metadata
id="metadata2990">
<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
id="layer1">
<path
transform="matrix(0.94531827,-0.02406342,0.02406342,0.94531827,-11.481917,-8.31524)"
d="M 26.314475,10.472835 39.136835,34.081523 12.279931,33.381669 z"
id="path3003"
style="fill:#ffd5d5;stroke:#000000;stroke-width:1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="matrix(0.67118725,-8.6811777e-4,8.6811777e-4,0.67118725,32.29245,-10.176746)"
d="M 5.101271,16.07918 22.695438,28.935484 15.905264,49.641347 -5.8854624,49.581971 -12.562697,28.839411 z"
id="path3005"
style="fill:#ccffaa;stroke:#000000;stroke-width:1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
id="path3779"
d="M 2.8789347,31.231467 40.65864,31.281977"
style="stroke-linejoin:miter;marker-end:url(#Arrow2Mend2m);stroke-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" />
</g>
</svg>
<?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"
version="1.1"
id="svg2985"
height="48px"
width="48px">
<defs
id="defs2987">
<marker
style="overflow:visible;"
id="Arrow2Mend"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(0.6) rotate(180) translate(0,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
id="path3812" />
</marker>
<marker
style="overflow:visible;"
id="Arrow2Lend"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(1.1) rotate(180) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
id="path3806" />
</marker>
<marker
style="overflow:visible;"
id="Arrow1Lend"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(0.8) rotate(180) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
d=