X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModuleBase%2FModuleBase_Tools.cpp;h=1d87b4ae22475427772f15b6eefe99eb075f9f67;hb=5fd2e5839ff05612b8258e55f1eaa8f1bf0d92ae;hp=d3dd6f7ee16f288558d95a371f384d3100181d92;hpb=7210ed3a44c73d261bb5abb28fae1489c5a35b30;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Tools.cpp b/src/ModuleBase/ModuleBase_Tools.cpp index d3dd6f7ee..1d87b4ae2 100644 --- a/src/ModuleBase/ModuleBase_Tools.cpp +++ b/src/ModuleBase/ModuleBase_Tools.cpp @@ -1,38 +1,185 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + // File: ModuleBase_Tools.cpp // Created: 11 July 2014 // Author: Vitaly Smetannikov #include "ModuleBase_Tools.h" -#include -#include -#include -namespace ModuleBase_Tools -{ +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +namespace ModuleBase_Tools { + +//****************************************************************** //****************************************************************** -boost::shared_ptr shape(ResultPtr theResult) + +void adjustMargins(QWidget* theWidget) { - ResultBodyPtr aBody = boost::dynamic_pointer_cast(theResult); - if (aBody) return aBody->shape(); - ResultConstructionPtr aConstruct = boost::dynamic_pointer_cast(theResult); - if (aConstruct) return aConstruct->shape(); - return boost::shared_ptr(); + if(!theWidget) + return; + adjustMargins(theWidget->layout()); } -//****************************************************************** -FeaturePtr feature(ObjectPtr theObject) -{ - FeaturePtr aFeature = boost::dynamic_pointer_cast(theObject); - if (!aFeature) { - ResultPtr aResult = boost::dynamic_pointer_cast(theObject); - if (aResult) { - PluginManagerPtr aMgr = ModelAPI_PluginManager::get(); - DocumentPtr aDoc = aMgr->rootDocument(); - return aDoc->feature(aResult); +void adjustMargins(QLayout* theLayout) +{ + if(!theLayout) + return; + theLayout->setContentsMargins(2, 5, 2, 5); + theLayout->setSpacing(4); +} + +void zeroMargins(QWidget* theWidget) +{ + if(!theWidget) + return; + zeroMargins(theWidget->layout()); +} + +void zeroMargins(QLayout* theLayout) +{ + if(!theLayout) + return; + theLayout->setContentsMargins(0, 0, 0, 0); + theLayout->setSpacing(5); +} + +QPixmap composite(const QString& theAdditionalIcon, const QString& theIcon) +{ + QImage anIcon(theIcon); + QImage anAditional(theAdditionalIcon); + + if (anIcon.isNull()) + return QPixmap(); + + int anAddWidth = anAditional.width(); + int anAddHeight = anAditional.height(); + + int aWidth = anIcon.width(); + int aHeight = anIcon.height(); + + int aStartWidthPos = aWidth - anAddWidth - 1; + int aStartHeightPos = aHeight - anAddHeight - 1; + + for (int i = 0; i < anAddWidth && i + aStartWidthPos < aWidth; i++) + { + for (int j = 0; j < anAddHeight && j + aStartHeightPos < aHeight; j++) + { + if (qAlpha(anAditional.pixel(i, j)) > 0) + anIcon.setPixel(i + aStartWidthPos, j + aStartHeightPos, anAditional.pixel(i, j)); + } + } + return QPixmap::fromImage(anIcon); +} + +QPixmap lighter(const QString& theIcon, const int theLighterValue) +{ + QImage anIcon(theIcon); + if (anIcon.isNull()) + return QPixmap(); + + QImage aResult(theIcon); + for ( int i = 0; i < anIcon.width(); i++ ) + { + for ( int j = 0; j < anIcon.height(); j++ ) + { + QRgb anRgb = anIcon.pixel( i, j ); + QColor aPixelColor(qRed(anRgb), qGreen(anRgb), qBlue(anRgb), + qAlpha( aResult.pixel( i, j ) )); + + QColor aLighterColor = aPixelColor.lighter(theLighterValue); + aResult.setPixel(i, j, qRgba( aLighterColor.red(), aLighterColor.green(), + aLighterColor.blue(), aLighterColor.alpha() ) ); } } - return aFeature; + return QPixmap::fromImage(aResult); } +void setSpinValue(QDoubleSpinBox* theSpin, double theValue) +{ + bool isBlocked = theSpin->blockSignals(true); + theSpin->setValue(theValue); + theSpin->blockSignals(isBlocked); } + +QString objectInfo(const ObjectPtr& theObj, const bool isUseAttributesInfo) +{ + ResultPtr aRes = std::dynamic_pointer_cast(theObj); + FeaturePtr aFeature = std::dynamic_pointer_cast(theObj); + QString aFeatureStr = "feature"; + if(aRes.get()) { + aFeatureStr.append("(Result)"); + aFeature = ModelAPI_Feature::feature(aRes); + } + if (aFeature.get()) { + aFeatureStr.append(QString(": %1").arg(aFeature->getKind().c_str()).toStdString().c_str()); + if (aFeature->data().get() && aFeature->data()->isValid()) + aFeatureStr.append(QString(", name=%1").arg(aFeature->data()->name().c_str()).toStdString() + .c_str()); + if (isUseAttributesInfo) { + std::list anAttrs = aFeature->data()->attributes(""); + std::list::const_iterator anIt = anAttrs.begin(), aLast = anAttrs.end(); + QStringList aValues; + for(; anIt != aLast; anIt++) { + AttributePtr anAttr = *anIt; + QString aValue = "not defined"; + std::string aType = anAttr->attributeType(); + if (aType == GeomDataAPI_Point2D::typeId()) { + std::shared_ptr aPoint = std::dynamic_pointer_cast( + anAttr); + if (aPoint.get()) + aValue = QString("(%1, %2)").arg(aPoint->x()).arg(aPoint->y()); + } + else if (aType == ModelAPI_AttributeRefAttr::typeId()) { + } + + aValues.push_back(QString("%1: %2").arg(anAttr->id().c_str()).arg(aValue).toStdString().c_str()); + } + if (!aValues.empty()) + aFeatureStr.append(QString(", attributes: %1").arg(aValues.join(", ").toStdString().c_str())); + } + } + + return aFeatureStr; +} + +typedef QMap ShapeTypes; +static ShapeTypes MyShapeTypes; + +TopAbs_ShapeEnum shapeType(const QString& theType) +{ + if (MyShapeTypes.count() == 0) { + MyShapeTypes["face"] = TopAbs_FACE; + MyShapeTypes["faces"] = TopAbs_FACE; + MyShapeTypes["vertex"] = TopAbs_VERTEX; + MyShapeTypes["vertices"] = TopAbs_VERTEX; + MyShapeTypes["wire"] = TopAbs_WIRE; + MyShapeTypes["edge"] = TopAbs_EDGE; + MyShapeTypes["edges"] = TopAbs_EDGE; + MyShapeTypes["shell"] = TopAbs_SHELL; + MyShapeTypes["solid"] = TopAbs_SOLID; + MyShapeTypes["solids"] = TopAbs_SOLID; + } + QString aType = theType.toLower(); + if (MyShapeTypes.contains(aType)) + return MyShapeTypes[aType]; + Events_Error::send("Shape type defined in XML is not implemented!"); + return TopAbs_SHAPE; +} + + +} + +