Colored SVG Hatch patterns
This commit is contained in:
parent
731f76f52d
commit
05d94f31f8
|
@ -55,7 +55,7 @@ DrawHatch::DrawHatch(void)
|
|||
ADD_PROPERTY_TYPE(DirProjection ,(0,0,1.0) ,vgroup,App::Prop_None,"Projection direction when Hatch was defined"); //sb RO?
|
||||
ADD_PROPERTY_TYPE(Source,(0),vgroup,(App::PropertyType)(App::Prop_None),"The View + Face to be hatched");
|
||||
ADD_PROPERTY_TYPE(HatchPattern ,(""),vgroup,App::Prop_None,"The hatch pattern file for this area");
|
||||
ADD_PROPERTY_TYPE(HatchColor,(0.0f,0.0f,0.0f),vgroup,App::Prop_None,"The color of the hatch area");
|
||||
ADD_PROPERTY_TYPE(HatchColor,(0.0f,0.0f,0.0f),vgroup,App::Prop_None,"The color of the hatch pattern");
|
||||
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw");
|
||||
|
@ -90,7 +90,6 @@ void DrawHatch::onChanged(const App::Property* prop)
|
|||
|
||||
App::DocumentObjectExecReturn *DrawHatch::execute(void)
|
||||
{
|
||||
//TODO: need to refresh DrawViewPart to reflect change in hatch
|
||||
DrawViewPart* parent = getSourceView();
|
||||
if (parent) {
|
||||
parent->touch();
|
||||
|
|
|
@ -103,7 +103,6 @@ void DrawPage::onChanged(const App::Property* prop)
|
|||
if (prop == &Template) {
|
||||
if (!isRestoring()) {
|
||||
//TODO: reload if Template prop changes (ie different Template)
|
||||
Base::Console().Message("TODO: Unimplemented function DrawPage::onChanged(Template)\n");
|
||||
}
|
||||
} else if (prop == &Views) {
|
||||
if (!isRestoring()) {
|
||||
|
|
|
@ -94,6 +94,8 @@ QGIFace::QGIFace(int index) :
|
|||
|
||||
m_rect = new QGCustomRect();
|
||||
m_rect->setParentItem(this);
|
||||
|
||||
m_svgCol = SVGCOLDEFAULT;
|
||||
}
|
||||
|
||||
QGIFace::~QGIFace()
|
||||
|
@ -190,8 +192,8 @@ void QGIFace::setHatch(std::string fileSpec)
|
|||
Base::Console().Error("QGIFace could not read %s\n",fileSpec.c_str());
|
||||
return;
|
||||
}
|
||||
m_qba = f.readAll();
|
||||
if (!m_svg->load(&m_qba)) {
|
||||
m_svgXML = f.readAll();
|
||||
if (!m_svg->load(&m_svgXML)) {
|
||||
Base::Console().Error("Error - Could not load hatch into SVG renderer for %s\n", fileSpec.c_str());
|
||||
return;
|
||||
}
|
||||
|
@ -202,7 +204,7 @@ void QGIFace::setHatch(std::string fileSpec)
|
|||
void QGIFace::setPath(const QPainterPath & path)
|
||||
{
|
||||
QGraphicsPathItem::setPath(path);
|
||||
if (!m_qba.isEmpty()) {
|
||||
if (!m_svgXML.isEmpty()) {
|
||||
buildHatch();
|
||||
}
|
||||
}
|
||||
|
@ -220,12 +222,17 @@ void QGIFace::buildHatch()
|
|||
h = nh * SVGSIZEW;
|
||||
m_rect->setRect(0.,0.,w,-h);
|
||||
m_rect->centerAt(fCenter);
|
||||
QPointF rPos = m_rect->pos();
|
||||
//QPointF rPos = m_rect->pos();
|
||||
r = m_rect->rect();
|
||||
QByteArray before,after;
|
||||
before.append(QString::fromStdString(SVGCOLPREFIX + SVGCOLDEFAULT));
|
||||
after.append(QString::fromStdString(SVGCOLPREFIX + m_svgCol));
|
||||
QByteArray colorXML = m_svgXML.replace(before,after);
|
||||
for (int iw = 0; iw < int(nw); iw++) {
|
||||
for (int ih = 0; ih < int(nh); ih++) {
|
||||
QGCustomSvg* tile = new QGCustomSvg();
|
||||
if (tile->load(&m_qba)) {
|
||||
if (tile->load(&colorXML)) {
|
||||
//if (tile->load(&m_svgXML)) {
|
||||
tile->setParentItem(m_rect);
|
||||
tile->setPos(iw*SVGSIZEW,-h + ih*SVGSIZEH);
|
||||
}
|
||||
|
@ -234,6 +241,13 @@ void QGIFace::buildHatch()
|
|||
|
||||
}
|
||||
|
||||
//c is a CSS color ie "#000000"
|
||||
//set hatch color before building hatch
|
||||
void QGIFace::setHatchColor(std::string c)
|
||||
{
|
||||
m_svgCol = c;
|
||||
}
|
||||
|
||||
void QGIFace::resetFill() {
|
||||
m_colNormalFill = m_colDefFill;
|
||||
//m_styleCurr = m_styleDef;
|
||||
|
|
|
@ -45,6 +45,8 @@ namespace TechDrawGui
|
|||
|
||||
const double SVGSIZEW = 64.0; //width and height of standard FC SVG pattern
|
||||
const double SVGSIZEH = 64.0;
|
||||
const std::string SVGCOLPREFIX = "stroke:";
|
||||
const std::string SVGCOLDEFAULT = "#000000";
|
||||
|
||||
class QGIFace : public QGraphicsPathItem
|
||||
{
|
||||
|
@ -71,6 +73,7 @@ public:
|
|||
void resetFill(void);
|
||||
void setPath(const QPainterPath & path);
|
||||
void buildHatch(void);
|
||||
void setHatchColor(std::string c);
|
||||
|
||||
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * event);
|
||||
|
||||
|
@ -88,7 +91,8 @@ protected:
|
|||
bool isHighlighted;
|
||||
QGCustomRect *m_rect;
|
||||
QGCustomSvg *m_svg;
|
||||
QByteArray m_qba;
|
||||
QByteArray m_svgXML;
|
||||
std::string m_svgCol;
|
||||
|
||||
private:
|
||||
QPen m_pen;
|
||||
|
|
|
@ -313,6 +313,8 @@ void QGIViewPart::drawViewPart()
|
|||
TechDraw::DrawHatch* fHatch = faceIsHatched(i,hatchObjs);
|
||||
if (fHatch) {
|
||||
if (!fHatch->HatchPattern.isEmpty()) {
|
||||
App::Color hColor = fHatch->HatchColor.getValue();
|
||||
newFace->setHatchColor(hColor.asCSSString());
|
||||
newFace->setHatch(fHatch->HatchPattern.getValue());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user