[TD]use UUID for CosmeticEdges instead of indices
This commit is contained in:
@@ -63,6 +63,10 @@
|
||||
using namespace TechDraw;
|
||||
using namespace std;
|
||||
|
||||
#define GEOMETRYEDGE 0
|
||||
#define COSMETICEDGE 1
|
||||
#define CENTERLINE 2
|
||||
|
||||
LineFormat::LineFormat()
|
||||
{
|
||||
m_style = getDefEdgeStyle();
|
||||
@@ -147,7 +151,7 @@ CosmeticVertex::CosmeticVertex() : TechDraw::Vertex()
|
||||
style = 1;
|
||||
visible = true;
|
||||
//TODO: sort out 2x visible variables
|
||||
Vertex::visible = true; //yuck
|
||||
hlrVisible = true; //yuck
|
||||
cosmetic = true;
|
||||
|
||||
createNewTag();
|
||||
@@ -161,7 +165,7 @@ CosmeticVertex::CosmeticVertex(const TechDraw::CosmeticVertex* cv) : TechDraw::V
|
||||
size = cv->size;
|
||||
style = cv->style;
|
||||
visible = cv->visible;
|
||||
Vertex::visible = true; //yuck
|
||||
hlrVisible = true; //yuck
|
||||
cosmetic = true;
|
||||
|
||||
createNewTag();
|
||||
@@ -181,7 +185,7 @@ CosmeticVertex::CosmeticVertex(Base::Vector3d loc) : TechDraw::Vertex(loc)
|
||||
size = 30.0;
|
||||
style = 1; //TODO: implement styled vertexes
|
||||
visible = true;
|
||||
Vertex::visible = true; //yuck
|
||||
hlrVisible = true;
|
||||
cosmetic = true;
|
||||
|
||||
createNewTag();
|
||||
@@ -336,16 +340,16 @@ CosmeticEdge::CosmeticEdge()
|
||||
// Base::Console().Message("CE::CE()\n");
|
||||
m_geometry = new TechDraw::BaseGeom();
|
||||
initialize();
|
||||
|
||||
}
|
||||
|
||||
CosmeticEdge::CosmeticEdge(CosmeticEdge* ce)
|
||||
{
|
||||
// Base::Console().Message("CE::CE(ce)\n");
|
||||
//if ce gets deleted later, this CE will have an invalid pointer to geometry!
|
||||
//need to make our own copy of the geometry
|
||||
TechDraw::BaseGeom* newGeom = ce->m_geometry->copy();
|
||||
m_geometry = newGeom;
|
||||
m_format = ce->m_format;
|
||||
initialize();
|
||||
}
|
||||
|
||||
CosmeticEdge::CosmeticEdge(Base::Vector3d pt1, Base::Vector3d pt2)
|
||||
@@ -384,11 +388,12 @@ CosmeticEdge::~CosmeticEdge(void)
|
||||
void CosmeticEdge::initialize(void)
|
||||
{
|
||||
m_geometry->classOfEdge = ecHARD;
|
||||
m_geometry->visible = true;
|
||||
m_geometry->hlrVisible = true;
|
||||
m_geometry->cosmetic = true;
|
||||
m_geometry->source(COSMETICEDGE);
|
||||
|
||||
createNewTag();
|
||||
|
||||
m_geometry->setCosmeticTag(getTagAsString());
|
||||
}
|
||||
|
||||
TechDraw::BaseGeom* CosmeticEdge::scaledGeometry(double scale)
|
||||
@@ -399,8 +404,10 @@ TechDraw::BaseGeom* CosmeticEdge::scaledGeometry(double scale)
|
||||
TopoDS_Edge newEdge = TopoDS::Edge(s);
|
||||
newGeom = TechDraw::BaseGeom::baseFactory(newEdge);
|
||||
newGeom->classOfEdge = ecHARD;
|
||||
newGeom->visible = true;
|
||||
newGeom->hlrVisible = true;
|
||||
newGeom->cosmetic = true;
|
||||
newGeom->source(COSMETICEDGE);
|
||||
newGeom->setCosmeticTag(getTagAsString());
|
||||
return newGeom;
|
||||
}
|
||||
|
||||
@@ -492,6 +499,12 @@ boost::uuids::uuid CosmeticEdge::getTag() const
|
||||
return tag;
|
||||
}
|
||||
|
||||
std::string CosmeticEdge::getTagAsString(void) const
|
||||
{
|
||||
std::string tmp = boost::uuids::to_string(getTag());
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void CosmeticEdge::createNewTag()
|
||||
{
|
||||
// Initialize a random number generator, to avoid Valgrind false positives.
|
||||
@@ -554,6 +567,8 @@ CenterLine::CenterLine(void)
|
||||
m_type = CLTYPE::FACE;
|
||||
m_flip2Line = false;
|
||||
|
||||
m_geometry = new TechDraw::BaseGeom();
|
||||
|
||||
createNewTag();
|
||||
}
|
||||
|
||||
@@ -573,13 +588,17 @@ CenterLine::CenterLine(CenterLine* cl)
|
||||
m_edges = cl->m_edges;
|
||||
m_verts = cl->m_verts;
|
||||
|
||||
TechDraw::BaseGeom* newGeom = cl->m_geometry->copy();
|
||||
m_geometry = newGeom;
|
||||
m_format = cl->m_format;
|
||||
|
||||
createNewTag();
|
||||
}
|
||||
|
||||
CenterLine::CenterLine(Base::Vector3d p1, Base::Vector3d p2)
|
||||
CenterLine::CenterLine(Base::Vector3d pt1, Base::Vector3d pt2)
|
||||
{
|
||||
m_start = p1;
|
||||
m_end = p2;
|
||||
m_start = pt1;
|
||||
m_end = pt2;
|
||||
m_mode = CLMODE::VERTICAL;
|
||||
m_hShift = 0.0;
|
||||
m_vShift = 0.0;
|
||||
@@ -588,18 +607,25 @@ CenterLine::CenterLine(Base::Vector3d p1, Base::Vector3d p2)
|
||||
m_type = CLTYPE::FACE;
|
||||
m_flip2Line = false;
|
||||
|
||||
Base::Vector3d p1 = DrawUtil::invertY(pt1);
|
||||
Base::Vector3d p2 = DrawUtil::invertY(pt2);
|
||||
gp_Pnt gp1(p1.x,p1.y,p1.z);
|
||||
gp_Pnt gp2(p2.x,p2.y,p2.z);
|
||||
TopoDS_Edge e = BRepBuilderAPI_MakeEdge(gp1, gp2);
|
||||
m_geometry = TechDraw::BaseGeom::baseFactory(e);
|
||||
|
||||
createNewTag();
|
||||
}
|
||||
|
||||
CenterLine::CenterLine(Base::Vector3d p1, Base::Vector3d p2,
|
||||
CenterLine::CenterLine(Base::Vector3d pt1, Base::Vector3d pt2,
|
||||
int m,
|
||||
double h,
|
||||
double v,
|
||||
double r,
|
||||
double x)
|
||||
{
|
||||
m_start = p1;
|
||||
m_end = p2;
|
||||
m_start = pt1;
|
||||
m_end = pt2;
|
||||
m_mode = m;
|
||||
m_hShift = h;
|
||||
m_vShift = v;
|
||||
@@ -608,6 +634,14 @@ CenterLine::CenterLine(Base::Vector3d p1, Base::Vector3d p2,
|
||||
m_type = CLTYPE::FACE;
|
||||
m_flip2Line = false;
|
||||
|
||||
//not sure this is right?
|
||||
Base::Vector3d p1 = DrawUtil::invertY(pt1);
|
||||
Base::Vector3d p2 = DrawUtil::invertY(pt2);
|
||||
gp_Pnt gp1(p1.x,p1.y,p1.z);
|
||||
gp_Pnt gp2(p2.x,p2.y,p2.z);
|
||||
TopoDS_Edge e = BRepBuilderAPI_MakeEdge(gp1, gp2);
|
||||
m_geometry = TechDraw::BaseGeom::baseFactory(e);
|
||||
|
||||
createNewTag();
|
||||
}
|
||||
|
||||
@@ -712,7 +746,7 @@ TechDraw::BaseGeom* CenterLine::scaledGeometry(TechDraw::DrawViewPart* partFeat)
|
||||
TopoDS_Edge newEdge = TopoDS::Edge(s);
|
||||
newGeom = TechDraw::BaseGeom::baseFactory(newEdge);
|
||||
newGeom->classOfEdge = ecHARD;
|
||||
newGeom->visible = true;
|
||||
newGeom->hlrVisible = true;
|
||||
newGeom->cosmetic = true;
|
||||
return newGeom;
|
||||
}
|
||||
@@ -760,6 +794,7 @@ std::pair<Base::Vector3d, Base::Vector3d> CenterLine::calcEndPoints(DrawViewPart
|
||||
double hShift, double vShift,
|
||||
double rotate)
|
||||
{
|
||||
Base::Console().Message("CL::calcEndPoints()\n");
|
||||
std::pair<Base::Vector3d, Base::Vector3d> result;
|
||||
if (faceNames.empty()) {
|
||||
Base::Console().Message("CL::calcEndPoints - no faces!\n");
|
||||
@@ -862,7 +897,7 @@ std::pair<Base::Vector3d, Base::Vector3d> CenterLine::calcEndPoints2Lines(DrawVi
|
||||
double rotate, bool flip)
|
||||
|
||||
{
|
||||
// Base::Console().Message("CL::calc2Lines() - mode: %d flip: %d\n", mode, flip);
|
||||
Base::Console().Message("CL::calc2Lines() - mode: %d flip: %d\n", mode, flip);
|
||||
std::pair<Base::Vector3d, Base::Vector3d> result;
|
||||
if (edgeNames.empty()) {
|
||||
Base::Console().Message("CL::calcEndPoints2Lines - no edges!\n");
|
||||
@@ -957,7 +992,7 @@ std::pair<Base::Vector3d, Base::Vector3d> CenterLine::calcEndPoints2Points(DrawV
|
||||
double rotate, bool flip)
|
||||
|
||||
{
|
||||
// Base::Console().Message("CL::calc2Points()\n");
|
||||
Base::Console().Message("CL::calc2Points()\n");
|
||||
std::pair<Base::Vector3d, Base::Vector3d> result;
|
||||
if (vertNames.empty()) {
|
||||
Base::Console().Message("CL::calcEndPoints2Points - no points!\n");
|
||||
@@ -1123,6 +1158,22 @@ void CenterLine::Save(Base::Writer &writer) const
|
||||
writer.Stream() << writer.ind() << "<Color value=\"" << m_format.m_color.asHexString() << "\"/>" << endl;
|
||||
const char v = m_format.m_visible?'1':'0';
|
||||
writer.Stream() << writer.ind() << "<Visible value=\"" << v << "\"/>" << endl;
|
||||
|
||||
//stored geometry
|
||||
writer.Stream() << writer.ind() << "<GeometryType value=\"" << m_geometry->geomType <<"\"/>" << endl;
|
||||
if (m_geometry->geomType == TechDraw::GeomType::GENERIC) {
|
||||
Generic* gen = static_cast<Generic*>(m_geometry);
|
||||
gen->Save(writer);
|
||||
} else if (m_geometry->geomType == TechDraw::GeomType::CIRCLE) {
|
||||
TechDraw::Circle* circ = static_cast<TechDraw::Circle*>(m_geometry);
|
||||
circ->Save(writer);
|
||||
} else if (m_geometry->geomType == TechDraw::GeomType::ARCOFCIRCLE) {
|
||||
TechDraw::AOC* aoc = static_cast<TechDraw::AOC*>(m_geometry);
|
||||
aoc->Save(writer);
|
||||
} else {
|
||||
Base::Console().Message("CE::Save - unimplemented geomType: %d\n", m_geometry->geomType);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void CenterLine::Restore(Base::XMLReader &reader)
|
||||
@@ -1197,6 +1248,30 @@ void CenterLine::Restore(Base::XMLReader &reader)
|
||||
m_format.m_color.fromHexString(temp);
|
||||
reader.readElement("Visible");
|
||||
m_format.m_visible = (int)reader.getAttributeAsInteger("value")==0?false:true;
|
||||
|
||||
//stored geometry
|
||||
reader.readElement("GeometryType");
|
||||
TechDraw::GeomType gType = (TechDraw::GeomType)reader.getAttributeAsInteger("value");
|
||||
if (gType == TechDraw::GeomType::GENERIC) {
|
||||
TechDraw::Generic* gen = new TechDraw::Generic();
|
||||
gen->Restore(reader);
|
||||
gen->occEdge = GeometryUtils::edgeFromGeneric(gen);
|
||||
m_geometry = (TechDraw::BaseGeom*) gen;
|
||||
|
||||
} else if (gType == TechDraw::GeomType::CIRCLE) {
|
||||
TechDraw::Circle* circ = new TechDraw::Circle();
|
||||
circ->Restore(reader);
|
||||
circ->occEdge = GeometryUtils::edgeFromCircle(circ);
|
||||
m_geometry = (TechDraw::BaseGeom*) circ;
|
||||
} else if (gType == TechDraw::GeomType::ARCOFCIRCLE) {
|
||||
TechDraw::AOC* aoc = new TechDraw::AOC();
|
||||
aoc->Restore(reader);
|
||||
aoc->occEdge = GeometryUtils::edgeFromCircleArc(aoc);
|
||||
m_geometry = (TechDraw::BaseGeom*) aoc;
|
||||
} else {
|
||||
Base::Console().Message("CE::Restore - unimplemented geomType: %d\n", gType);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
CenterLine* CenterLine::copy(void) const
|
||||
@@ -1228,6 +1303,12 @@ boost::uuids::uuid CenterLine::getTag() const
|
||||
return tag;
|
||||
}
|
||||
|
||||
std::string CenterLine::getTagAsString(void) const
|
||||
{
|
||||
std::string tmp = boost::uuids::to_string(getTag());
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void CenterLine::createNewTag()
|
||||
{
|
||||
// Initialize a random number generator, to avoid Valgrind false positives.
|
||||
|
||||
@@ -107,7 +107,7 @@ protected:
|
||||
|
||||
};
|
||||
|
||||
class TechDrawExport CosmeticEdge : public Base::Persistence
|
||||
class TechDrawExport CosmeticEdge : public Base::Persistence, public TechDraw::BaseGeom
|
||||
{
|
||||
TYPESYSTEM_HEADER();
|
||||
public:
|
||||
@@ -138,6 +138,7 @@ public:
|
||||
LineFormat m_format;
|
||||
|
||||
boost::uuids::uuid getTag() const;
|
||||
virtual std::string getTagAsString(void) const;
|
||||
|
||||
protected:
|
||||
//Uniqueness
|
||||
@@ -236,8 +237,12 @@ public:
|
||||
LineFormat m_format;
|
||||
bool m_flip2Line;
|
||||
|
||||
TechDraw::BaseGeom* m_geometry;
|
||||
|
||||
//Uniqueness
|
||||
boost::uuids::uuid getTag() const;
|
||||
virtual std::string getTagAsString(void) const;
|
||||
|
||||
protected:
|
||||
void createNewTag();
|
||||
void assignTag(const TechDraw::CenterLine* cl);
|
||||
|
||||
@@ -1110,6 +1110,7 @@ int DrawViewPart::add1CVToGV(std::string tag)
|
||||
|
||||
//CosmeticEdges -------------------------------------------------------------------
|
||||
|
||||
//for completeness. not actually used anywhere
|
||||
void DrawViewPart::clearCosmeticEdges(void)
|
||||
{
|
||||
std::vector<CosmeticEdge*> noEdges;
|
||||
@@ -1120,7 +1121,8 @@ void DrawViewPart::clearCosmeticEdges(void)
|
||||
}
|
||||
}
|
||||
|
||||
// adds a cosmetic edge to CEdgeTable and CosmeticEdgeList
|
||||
// adds a cosmetic edge to CosmeticEdges property
|
||||
// this should probably return tag instead of index
|
||||
int DrawViewPart::addCosmeticEdge(Base::Vector3d p1, Base::Vector3d p2)
|
||||
{
|
||||
// Base::Console().Message("DVP::addCosmeticEdge(p1,p2)\n");
|
||||
@@ -1133,9 +1135,11 @@ int DrawViewPart::addCosmeticEdge(Base::Vector3d p1, Base::Vector3d p2)
|
||||
return newIdx;
|
||||
}
|
||||
|
||||
// adds a cosmetic edge to CosmeticEdges property
|
||||
// this should probably return tag instead of index
|
||||
int DrawViewPart::addCosmeticEdge(TopoDS_Edge e)
|
||||
{
|
||||
// Base::Console().Message("DVP::addCosmeticEdge(p1,p2)\n");
|
||||
// Base::Console().Message("DVP::addCosmeticEdge(occ edge)\n");
|
||||
TechDraw::CosmeticEdge* ce = new TechDraw::CosmeticEdge(e);
|
||||
std::vector<CosmeticEdge*> edges = CosmeticEdges.getValues();
|
||||
int newIdx = (int) (edges.size());
|
||||
@@ -1145,8 +1149,11 @@ int DrawViewPart::addCosmeticEdge(TopoDS_Edge e)
|
||||
return newIdx;
|
||||
}
|
||||
|
||||
// adds a cosmetic edge to CosmeticEdges property
|
||||
// this should probably return tag instead of index
|
||||
int DrawViewPart::addCosmeticEdge(CosmeticEdge* ce)
|
||||
{
|
||||
// Base::Console().Message("DVP::addCosmeticEdge(%X)\n", ce);
|
||||
std::vector<CosmeticEdge*> edges = CosmeticEdges.getValues();
|
||||
int newIdx = (int) (edges.size());
|
||||
edges.push_back(ce);
|
||||
@@ -1157,25 +1164,16 @@ int DrawViewPart::addCosmeticEdge(CosmeticEdge* ce)
|
||||
|
||||
void DrawViewPart::removeCosmeticEdge(TechDraw::CosmeticEdge* ce)
|
||||
{
|
||||
bool found = false;
|
||||
int i = 0;
|
||||
std::vector<CosmeticEdge*> edges = CosmeticEdges.getValues();
|
||||
int stop = edges.size();
|
||||
for ( ; i < stop; i++) {
|
||||
TechDraw::CosmeticEdge* e = edges.at(i);
|
||||
if (ce == e) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( (ce != nullptr) &&
|
||||
(found) ) {
|
||||
removeCosmeticEdge(i);
|
||||
// Base::Console().Message("DVP::removeCosmeticEdge(%X)\n", ce);
|
||||
if (ce != nullptr) {
|
||||
std::string ceTag = ce->getTagAsString();
|
||||
removeCosmeticEdge(ceTag);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawViewPart::removeCosmeticEdge(int idx)
|
||||
{
|
||||
// Base::Console().Message("DVP::removeCosmeticEdge(%d) - deprecated. use by tag.\n", idx);
|
||||
std::vector<CosmeticEdge*> edges = CosmeticEdges.getValues();
|
||||
if (idx < (int) edges.size()) {
|
||||
edges.erase(edges.begin() + idx);
|
||||
@@ -1184,25 +1182,50 @@ void DrawViewPart::removeCosmeticEdge(int idx)
|
||||
}
|
||||
}
|
||||
|
||||
void DrawViewPart::replaceCosmeticEdge(int idx, TechDraw::CosmeticEdge* ce)
|
||||
void DrawViewPart::removeCosmeticEdge(std::string delTag)
|
||||
{
|
||||
// Base::Console().Message("DVP::replaceCosmeticEdge(%d, ce)\n", idx);
|
||||
std::vector<CosmeticEdge*> edges = CosmeticEdges.getValues();
|
||||
if (idx < (int) edges.size()) {
|
||||
edges.at(idx) = ce;
|
||||
CosmeticEdges.setValues(edges);
|
||||
recomputeFeature();
|
||||
// Base::Console().Message("DVP::removeCE(%s)\n", delTag.c_str());
|
||||
std::vector<CosmeticEdge*> cEdges = CosmeticEdges.getValues();
|
||||
std::vector<CosmeticEdge*> newEdges;
|
||||
for (auto& ce: cEdges) {
|
||||
if (ce->getTagAsString() != delTag) {
|
||||
newEdges.push_back(ce);
|
||||
}
|
||||
}
|
||||
CosmeticEdges.setValues(newEdges);
|
||||
}
|
||||
|
||||
void DrawViewPart::replaceCosmeticEdgeByGeom(int geomIndex, TechDraw::CosmeticEdge* ce)
|
||||
void DrawViewPart::removeCosmeticEdge(std::vector<std::string> delTags)
|
||||
{
|
||||
const std::vector<TechDraw::BaseGeom*> &geoms = getEdgeGeometry();
|
||||
int source = geoms.at(geomIndex)->source();
|
||||
if (source == 1) { //CosmeticEdge
|
||||
int sourceIndex = geoms.at(geomIndex)->sourceIndex();
|
||||
replaceCosmeticEdge(sourceIndex, ce);
|
||||
std::vector<CosmeticEdge*> cEdges = CosmeticEdges.getValues();
|
||||
std::vector<CosmeticEdge*> newEdges;
|
||||
for (auto& ce: cEdges) {
|
||||
bool found = false;
|
||||
for (auto& dt: delTags) {
|
||||
if (ce->getTagAsString() == dt) {
|
||||
found = true; //this ce is in delete list
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
newEdges.push_back(ce);
|
||||
}
|
||||
}
|
||||
CosmeticEdges.setValues(newEdges);
|
||||
}
|
||||
|
||||
TechDraw::CosmeticEdge* DrawViewPart::getCosmeticEdge(std::string tagString) const
|
||||
{
|
||||
// Base::Console().Message("DVP::getCosmeticEdge(%s)\n", tagString.c_str());
|
||||
TechDraw::CosmeticEdge* result = nullptr;
|
||||
const std::vector<TechDraw::CosmeticEdge*> cEdges = CosmeticEdges.getValues();
|
||||
for (auto& ce: cEdges) {
|
||||
if (ce->getTagAsString() == tagString) {
|
||||
result = ce;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
TechDraw::CosmeticEdge* DrawViewPart::getCosmeticEdgeByIndex(int idx) const
|
||||
@@ -1219,17 +1242,22 @@ TechDraw::CosmeticEdge* DrawViewPart::getCosmeticEdgeByIndex(int idx) const
|
||||
//find the cosmetic edge corresponding to geometry edge idx
|
||||
TechDraw::CosmeticEdge* DrawViewPart::getCosmeticEdgeByGeom(int idx) const
|
||||
{
|
||||
const std::vector<TechDraw::BaseGeom*> &geoms = getEdgeGeometry();
|
||||
int sourceIndex = geoms.at(idx)->sourceIndex();
|
||||
// Base::Console().Message("DVP::getCosmeticEdgeByGeom(%d)\n",idx);
|
||||
CosmeticEdge* result = nullptr;
|
||||
const std::vector<TechDraw::CosmeticEdge*> edges = CosmeticEdges.getValues();
|
||||
result = edges.at(sourceIndex);
|
||||
BaseGeom* geom = getGeomByIndex(idx);
|
||||
if (geom == nullptr) {
|
||||
return result;
|
||||
}
|
||||
if (!geom->getCosmeticTag().empty()) {
|
||||
result = getCosmeticEdge(geom->getCosmeticTag());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//find the index of a cosmetic edge
|
||||
int DrawViewPart::getCosmeticEdgeIndex(TechDraw::CosmeticEdge* ce) const
|
||||
{
|
||||
// Base::Console().Message("DVP::getCosmeticEdgeIndex(%X) - deprec?\n",ce);
|
||||
int result = -1;
|
||||
const std::vector<TechDraw::CosmeticEdge*> edges = CosmeticEdges.getValues();
|
||||
int i = 0;
|
||||
@@ -1243,20 +1271,18 @@ int DrawViewPart::getCosmeticEdgeIndex(TechDraw::CosmeticEdge* ce) const
|
||||
return result;
|
||||
}
|
||||
|
||||
//add the cosmetic edges to geometry Edges list
|
||||
//add the cosmetic edges to geometryObject edges list
|
||||
void DrawViewPart::addCosmeticEdgesToGeom(void)
|
||||
{
|
||||
int i = 0;
|
||||
const std::vector<TechDraw::CosmeticEdge*> edges = CosmeticEdges.getValues();
|
||||
int stop = (int) edges.size();
|
||||
for ( ; i < stop; i++) {
|
||||
TechDraw::BaseGeom* scaledGeom = edges.at(i)->scaledGeometry(getScale());
|
||||
for (auto& ce: edges) {
|
||||
TechDraw::BaseGeom* scaledGeom = ce->scaledGeometry(getScale());
|
||||
if (scaledGeom == nullptr) {
|
||||
Base::Console().Error("DVP::addCosmeticEdgesToGeom - scaledGeometry is null\n");
|
||||
continue;
|
||||
}
|
||||
// int idx =
|
||||
(void) geometryObject->addCosmeticEdge(scaledGeom, 1, i);
|
||||
(void) geometryObject->addCosmeticEdge(scaledGeom, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -188,17 +188,17 @@ public:
|
||||
int add1CVToGV(int iCV);
|
||||
int add1CVToGV(std::string tag);
|
||||
|
||||
|
||||
virtual int addCosmeticEdge(Base::Vector3d start, Base::Vector3d end);
|
||||
virtual int addCosmeticEdge(TopoDS_Edge e);
|
||||
virtual int addCosmeticEdge(TechDraw::CosmeticEdge*);
|
||||
virtual void removeCosmeticEdge(TechDraw::CosmeticEdge* ce);
|
||||
virtual void removeCosmeticEdge(int idx);
|
||||
virtual void removeCosmeticEdge(std::string delTag);
|
||||
virtual void removeCosmeticEdge(std::vector<std::string> delTags);
|
||||
TechDraw::CosmeticEdge* getCosmeticEdge(std::string tagString) const;
|
||||
TechDraw::CosmeticEdge* getCosmeticEdgeByIndex(int idx) const;
|
||||
TechDraw::CosmeticEdge* getCosmeticEdgeByGeom(int idx) const;
|
||||
int getCosmeticEdgeIndex(TechDraw::CosmeticEdge* ce) const;
|
||||
void replaceCosmeticEdge(int idx, TechDraw::CosmeticEdge* ce);
|
||||
void replaceCosmeticEdgeByGeom(int geomIndex, TechDraw::CosmeticEdge* ce);
|
||||
void clearCosmeticEdges(void);
|
||||
void addCosmeticEdgesToGeom(void);
|
||||
|
||||
|
||||
@@ -58,11 +58,6 @@
|
||||
<UserDocu>getCosmeticEdgeByGeom(idx) - returns CosmeticEdge using geometry index.</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="replaceCosmeticEdge">
|
||||
<Documentation>
|
||||
<UserDocu>replaceCosmeticEdge(idx, ce) - replaces CosmeticEdge[idx] with ce.</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="removeCosmeticEdge">
|
||||
<Documentation>
|
||||
<UserDocu>removeCosmeticEdge(idx) - remove CosmeticEdge[idx] from View. Returns None.</UserDocu>
|
||||
|
||||
@@ -333,21 +333,21 @@ PyObject* DrawViewPartPy::getCosmeticEdgeByGeom(PyObject *args)
|
||||
return result;
|
||||
}
|
||||
|
||||
PyObject* DrawViewPartPy::replaceCosmeticEdge(PyObject *args)
|
||||
{
|
||||
// Base::Console().Message("DVPPI::replaceCosmeticEdge()\n");
|
||||
int idx = 0;
|
||||
PyObject* result = Py_None;
|
||||
PyObject* pCE;
|
||||
if (!PyArg_ParseTuple(args, "iO!", &idx, &(TechDraw::CosmeticEdgePy::Type), &pCE)) {
|
||||
throw Py::TypeError("expected (index, CosmeticEdge)");
|
||||
}
|
||||
TechDraw::CosmeticEdge* ce = static_cast<CosmeticEdgePy*>(pCE)->getCosmeticEdgePtr();
|
||||
DrawViewPart* dvp = getDrawViewPartPtr();
|
||||
dvp->replaceCosmeticEdge(idx, ce);
|
||||
//PyObject* DrawViewPartPy::replaceCosmeticEdge(PyObject *args)
|
||||
//{
|
||||
//// Base::Console().Message("DVPPI::replaceCosmeticEdge()\n");
|
||||
// int idx = 0;
|
||||
// PyObject* result = Py_None;
|
||||
// PyObject* pCE;
|
||||
// if (!PyArg_ParseTuple(args, "iO!", &idx, &(TechDraw::CosmeticEdgePy::Type), &pCE)) {
|
||||
// throw Py::TypeError("expected (index, CosmeticEdge)");
|
||||
// }
|
||||
// TechDraw::CosmeticEdge* ce = static_cast<CosmeticEdgePy*>(pCE)->getCosmeticEdgePtr();
|
||||
// DrawViewPart* dvp = getDrawViewPartPtr();
|
||||
// dvp->replaceCosmeticEdge(idx, ce);
|
||||
|
||||
return result;
|
||||
}
|
||||
// return result;
|
||||
//}
|
||||
|
||||
PyObject* DrawViewPartPy::removeCosmeticEdge(PyObject *args)
|
||||
{
|
||||
|
||||
@@ -82,6 +82,10 @@
|
||||
using namespace TechDraw;
|
||||
using namespace std;
|
||||
|
||||
#define GEOMETRYEDGE 0
|
||||
#define COSMETICEDGE 1
|
||||
#define CENTERLINE 2
|
||||
|
||||
// Collection of Geometric Features
|
||||
Wire::Wire()
|
||||
{
|
||||
@@ -116,13 +120,14 @@ BaseGeom::BaseGeom() :
|
||||
geomType(NOTDEF),
|
||||
extractType(Plain), //obs
|
||||
classOfEdge(ecNONE),
|
||||
visible(true),
|
||||
hlrVisible(true),
|
||||
reversed(false),
|
||||
ref3D(-1), //obs?
|
||||
cosmetic(false),
|
||||
m_source(0),
|
||||
m_sourceIndex(-1)
|
||||
{
|
||||
cosmeticTag = std::string();
|
||||
}
|
||||
|
||||
BaseGeom* BaseGeom::copy()
|
||||
@@ -133,12 +138,13 @@ BaseGeom* BaseGeom::copy()
|
||||
if (result != nullptr) {
|
||||
result->extractType = extractType;
|
||||
result->classOfEdge = classOfEdge;
|
||||
result->visible = visible;
|
||||
result->hlrVisible = hlrVisible;
|
||||
result->reversed = reversed;
|
||||
result->ref3D = ref3D;
|
||||
result->cosmetic = cosmetic;
|
||||
result->source(m_source);
|
||||
result->sourceIndex(m_sourceIndex);
|
||||
result->cosmeticTag = cosmeticTag;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,7 +157,7 @@ std::string BaseGeom::toString(void) const
|
||||
ss << geomType << "," <<
|
||||
extractType << "," <<
|
||||
classOfEdge << "," <<
|
||||
visible << "," <<
|
||||
hlrVisible << "," <<
|
||||
reversed << "," <<
|
||||
ref3D << "," <<
|
||||
cosmetic << "," <<
|
||||
@@ -160,38 +166,24 @@ std::string BaseGeom::toString(void) const
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
//bool BaseGeom::fromCSV(std::string lineSpec)
|
||||
//{
|
||||
// unsigned int maxCells = 9;
|
||||
// if (lineSpec.length() == 0) {
|
||||
// Base::Console().Message( "BG::fromCSV - lineSpec empty\n");
|
||||
// return false;
|
||||
// }
|
||||
// std::vector<std::string> values = DrawUtil::split(lineSpec);
|
||||
// if (values.size() < maxCells) {
|
||||
// Base::Console().Message( "BG::fromCSV(%s) invalid CSV entry\n",lineSpec.c_str() );
|
||||
// return false;
|
||||
// }
|
||||
boost::uuids::uuid BaseGeom::getTag() const
|
||||
{
|
||||
return tag;
|
||||
}
|
||||
|
||||
// geomType = (TechDraw::GeomType) atoi(values[0].c_str());
|
||||
// extractType = (TechDraw::ExtractionType) atoi(values[1].c_str());
|
||||
// classOfEdge = (TechDraw::edgeClass) atoi(values[2].c_str());
|
||||
// visible = (bool) atoi(values[3].c_str());
|
||||
// reversed = (bool) atoi(values[4].c_str());
|
||||
// ref3D = atoi(values[5].c_str());
|
||||
// cosmetic = (bool) atoi(values[6].c_str());
|
||||
// m_source = atoi(values[7].c_str());
|
||||
// m_sourceIndex = atoi(values[8].c_str());
|
||||
// return true;
|
||||
//}
|
||||
std::string BaseGeom::getTagAsString(void) const
|
||||
{
|
||||
std::string tmp = boost::uuids::to_string(getTag());
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void BaseGeom::Save(Base::Writer &writer) const
|
||||
{
|
||||
writer.Stream() << writer.ind() << "<GeomType value=\"" << geomType << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<ExtractType value=\"" << extractType << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<EdgeClass value=\"" << classOfEdge << "\"/>" << endl;
|
||||
const char v = visible?'1':'0';
|
||||
writer.Stream() << writer.ind() << "<Visible value=\"" << v << "\"/>" << endl;
|
||||
const char v = hlrVisible?'1':'0';
|
||||
writer.Stream() << writer.ind() << "<HLRVisible value=\"" << v << "\"/>" << endl;
|
||||
const char r = reversed?'1':'0';
|
||||
writer.Stream() << writer.ind() << "<Reversed value=\"" << r << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<Ref3D value=\"" << ref3D << "\"/>" << endl;
|
||||
@@ -199,6 +191,8 @@ void BaseGeom::Save(Base::Writer &writer) const
|
||||
writer.Stream() << writer.ind() << "<Cosmetic value=\"" << c << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<Source value=\"" << m_source << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<SourceIndex value=\"" << m_sourceIndex << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<CosmeticTag value=\"" << cosmeticTag << "\"/>" << endl;
|
||||
// writer.Stream() << writer.ind() << "<Tag value=\"" << getTagAsString() << "\"/>" << endl;
|
||||
}
|
||||
|
||||
void BaseGeom::Restore(Base::XMLReader &reader)
|
||||
@@ -209,8 +203,8 @@ void BaseGeom::Restore(Base::XMLReader &reader)
|
||||
extractType = (TechDraw::ExtractionType) reader.getAttributeAsInteger("value");
|
||||
reader.readElement("EdgeClass");
|
||||
classOfEdge = (TechDraw::edgeClass) reader.getAttributeAsInteger("value");
|
||||
reader.readElement("Visible");
|
||||
visible = (int)reader.getAttributeAsInteger("value")==0?false:true;
|
||||
reader.readElement("HLRVisible");
|
||||
hlrVisible = (int)reader.getAttributeAsInteger("value")==0?false:true;
|
||||
reader.readElement("Reversed");
|
||||
reversed = (int)reader.getAttributeAsInteger("value")==0?false:true;
|
||||
reader.readElement("Ref3D");
|
||||
@@ -221,6 +215,13 @@ void BaseGeom::Restore(Base::XMLReader &reader)
|
||||
m_source = reader.getAttributeAsInteger("value");
|
||||
reader.readElement("SourceIndex");
|
||||
m_sourceIndex = reader.getAttributeAsInteger("value");
|
||||
reader.readElement("CosmeticTag");
|
||||
cosmeticTag = reader.getAttribute("value");
|
||||
// reader.readElement("Tag");
|
||||
// std::string temp = reader.getAttribute("value");
|
||||
// boost::uuids::string_generator gen;
|
||||
// boost::uuids::uuid u1 = gen(temp);
|
||||
// tag = u1;
|
||||
}
|
||||
|
||||
std::vector<Base::Vector3d> BaseGeom::findEndPoints()
|
||||
@@ -352,7 +353,7 @@ std::string BaseGeom::dump()
|
||||
Base::Vector3d end = getEndPoint();
|
||||
std::stringstream ss;
|
||||
ss << "BaseGeom: s:(" << start.x << "," << start.y << ") e:(" << end.x << "," << end.y << ") ";
|
||||
ss << "type: " << geomType << " class: " << classOfEdge << " viz: " << visible << " rev: " << reversed;
|
||||
ss << "type: " << geomType << " class: " << classOfEdge << " viz: " << hlrVisible << " rev: " << reversed;
|
||||
ss << "cosmetic: " << cosmetic << " source: " << source() << " iSource: " << sourceIndex();
|
||||
return ss.str();
|
||||
}
|
||||
@@ -1303,7 +1304,7 @@ Vertex::Vertex()
|
||||
{
|
||||
pnt = Base::Vector3d(0.0, 0.0, 0.0);
|
||||
extractType = ExtractionType::Plain; //obs?
|
||||
visible = false;
|
||||
hlrVisible = false;
|
||||
ref3D = -1; //obs. never used.
|
||||
isCenter = false;
|
||||
BRepBuilderAPI_MakeVertex mkVert(gp_Pnt(0.0, 0.0, 0.0));
|
||||
@@ -1311,26 +1312,28 @@ Vertex::Vertex()
|
||||
cosmetic = false;
|
||||
cosmeticLink = -1;
|
||||
cosmeticTag = std::string();
|
||||
createNewTag();
|
||||
}
|
||||
|
||||
Vertex::Vertex(const Vertex* v)
|
||||
{
|
||||
pnt = v->pnt;
|
||||
extractType = v->extractType; //obs?
|
||||
visible = v->visible;
|
||||
hlrVisible = v->hlrVisible;
|
||||
ref3D = v->ref3D; //obs. never used.
|
||||
isCenter = v->isCenter;
|
||||
occVertex = v->occVertex;
|
||||
cosmetic = v->cosmetic;
|
||||
cosmeticLink = v->cosmeticLink;
|
||||
cosmeticTag = v->cosmeticTag;
|
||||
createNewTag();
|
||||
}
|
||||
|
||||
Vertex::Vertex(double x, double y)
|
||||
{
|
||||
pnt = Base::Vector3d(x, y, 0.0);
|
||||
extractType = ExtractionType::Plain; //obs?
|
||||
visible = false;
|
||||
hlrVisible = false;
|
||||
ref3D = -1; //obs. never used.
|
||||
isCenter = false;
|
||||
BRepBuilderAPI_MakeVertex mkVert(gp_Pnt(x,y,0.0));
|
||||
@@ -1338,6 +1341,7 @@ Vertex::Vertex(double x, double y)
|
||||
cosmetic = false;
|
||||
cosmeticLink = -1;
|
||||
cosmeticTag = std::string();
|
||||
createNewTag();
|
||||
}
|
||||
|
||||
Vertex::Vertex(Base::Vector3d v) : Vertex(v.x,v.y)
|
||||
@@ -1366,8 +1370,8 @@ void Vertex::Save(Base::Writer &writer) const
|
||||
"\"/>" << endl;
|
||||
|
||||
writer.Stream() << writer.ind() << "<Extract value=\"" << extractType << "\"/>" << endl;
|
||||
const char v = visible?'1':'0';
|
||||
writer.Stream() << writer.ind() << "<Visible value=\"" << v << "\"/>" << endl;
|
||||
const char v = hlrVisible?'1':'0';
|
||||
writer.Stream() << writer.ind() << "<HLRVisible value=\"" << v << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<Ref3D value=\"" << ref3D << "\"/>" << endl;
|
||||
const char c = isCenter?'1':'0';
|
||||
writer.Stream() << writer.ind() << "<IsCenter value=\"" << c << "\"/>" << endl;
|
||||
@@ -1375,7 +1379,7 @@ void Vertex::Save(Base::Writer &writer) const
|
||||
writer.Stream() << writer.ind() << "<Cosmetic value=\"" << c2 << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<CosmeticLink value=\"" << cosmeticLink << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<CosmeticTag value=\"" << cosmeticTag << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<Tag value=\"" << getTagAsString() << "\"/>" << endl;
|
||||
writer.Stream() << writer.ind() << "<VertexTag value=\"" << getTagAsString() << "\"/>" << endl;
|
||||
}
|
||||
|
||||
void Vertex::Restore(Base::XMLReader &reader)
|
||||
@@ -1387,19 +1391,19 @@ void Vertex::Restore(Base::XMLReader &reader)
|
||||
|
||||
reader.readElement("Extract");
|
||||
extractType = (ExtractionType) reader.getAttributeAsInteger("value");
|
||||
reader.readElement("Visible");
|
||||
visible = (bool)reader.getAttributeAsInteger("value")==0?false:true;
|
||||
// reader.readElement("Visible");
|
||||
// hlrVisible = (bool)reader.getAttributeAsInteger("value")==0?false:true;
|
||||
reader.readElement("Ref3D");
|
||||
ref3D = reader.getAttributeAsInteger("value");
|
||||
reader.readElement("IsCenter");
|
||||
visible = (bool)reader.getAttributeAsInteger("value")==0?false:true;
|
||||
hlrVisible = (bool)reader.getAttributeAsInteger("value")==0?false:true;
|
||||
reader.readElement("Cosmetic");
|
||||
cosmetic = (bool)reader.getAttributeAsInteger("value")==0?false:true;
|
||||
reader.readElement("CosmeticLink");
|
||||
cosmeticLink = reader.getAttributeAsInteger("value");
|
||||
reader.readElement("CosmeticTag");
|
||||
cosmeticTag = reader.getAttribute("value");
|
||||
reader.readElement("Tag");
|
||||
reader.readElement("VertexTag");
|
||||
std::string temp = reader.getAttribute("value");
|
||||
boost::uuids::string_generator gen;
|
||||
boost::uuids::uuid u1 = gen(temp);
|
||||
@@ -1409,6 +1413,22 @@ void Vertex::Restore(Base::XMLReader &reader)
|
||||
occVertex = mkVert.Vertex();
|
||||
}
|
||||
|
||||
void Vertex::createNewTag()
|
||||
{
|
||||
// Initialize a random number generator, to avoid Valgrind false positives.
|
||||
static boost::mt19937 ran;
|
||||
static bool seeded = false;
|
||||
|
||||
if (!seeded) {
|
||||
ran.seed(static_cast<unsigned int>(std::time(0)));
|
||||
seeded = true;
|
||||
}
|
||||
static boost::uuids::basic_random_generator<boost::mt19937> gen(&ran);
|
||||
|
||||
tag = gen();
|
||||
}
|
||||
|
||||
|
||||
boost::uuids::uuid Vertex::getTag() const
|
||||
{
|
||||
return tag;
|
||||
@@ -1420,10 +1440,18 @@ std::string Vertex::getTagAsString(void) const
|
||||
return tmp;
|
||||
}
|
||||
|
||||
//void Vertex::assignTag(const TechDraw::Vertex* v)
|
||||
//{
|
||||
// if(v->getTypeId() == this->getTypeId())
|
||||
// this->tag = v->tag;
|
||||
// else
|
||||
// throw Base::TypeError("Vertex tag can not be assigned as types do not match.");
|
||||
//}
|
||||
|
||||
void Vertex::dump()
|
||||
{
|
||||
Base::Console().Message("TD::Vertex point: %s vis: %d cosmetic: %d cosLink: %d cosTag: %s\n",
|
||||
DrawUtil::formatVector(pnt).c_str(), visible, cosmetic, cosmeticLink,
|
||||
DrawUtil::formatVector(pnt).c_str(), hlrVisible, cosmetic, cosmeticLink,
|
||||
cosmeticTag.c_str());
|
||||
}
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ class TechDrawExport BaseGeom
|
||||
GeomType geomType;
|
||||
ExtractionType extractType; //obs
|
||||
edgeClass classOfEdge;
|
||||
bool visible;
|
||||
bool hlrVisible;
|
||||
bool reversed;
|
||||
int ref3D; //obs?
|
||||
TopoDS_Edge occEdge; //projected Edge
|
||||
@@ -90,6 +90,8 @@ class TechDrawExport BaseGeom
|
||||
void source(int s) { m_source = s; }
|
||||
int sourceIndex(void) { return m_sourceIndex; }
|
||||
void sourceIndex(int si) { m_sourceIndex = si; }
|
||||
std::string getCosmeticTag(void) { return cosmeticTag; }
|
||||
void setCosmeticTag(std::string t) { cosmeticTag = t; }
|
||||
|
||||
virtual std::string toString(void) const;
|
||||
/* virtual bool fromCSV(std::string s);*/
|
||||
@@ -108,10 +110,19 @@ class TechDrawExport BaseGeom
|
||||
BaseGeom* copy();
|
||||
std::string dump();
|
||||
|
||||
protected:
|
||||
//Uniqueness
|
||||
boost::uuids::uuid getTag() const;
|
||||
virtual std::string getTagAsString(void) const;
|
||||
|
||||
protected:
|
||||
int m_source; //0 - geom, 1 - cosmetic edge, 2 - centerline
|
||||
int m_sourceIndex;
|
||||
std::string cosmeticTag;
|
||||
|
||||
void createNewTag();
|
||||
/* void assignTag(const TechDraw::BaseGeom* bg);*/
|
||||
|
||||
boost::uuids::uuid tag;
|
||||
};
|
||||
|
||||
typedef std::vector<BaseGeom *> BaseGeomPtrVector; //obs?
|
||||
@@ -294,7 +305,7 @@ class TechDrawExport Vertex
|
||||
|
||||
Base::Vector3d pnt;
|
||||
ExtractionType extractType; //obs?
|
||||
bool visible;
|
||||
bool hlrVisible; //visible according to HLR
|
||||
int ref3D; //obs. never used.
|
||||
bool isCenter;
|
||||
TopoDS_Vertex occVertex;
|
||||
|
||||
@@ -109,7 +109,7 @@ const std::vector<BaseGeom *> GeometryObject::getVisibleFaceEdges(const bool smo
|
||||
bool seamOK = seam;
|
||||
|
||||
for (auto& e:edgeGeom) {
|
||||
if (e->visible) {
|
||||
if (e->hlrVisible) {
|
||||
switch (e->classOfEdge) {
|
||||
case ecHARD:
|
||||
case ecOUTLINE:
|
||||
@@ -334,11 +334,11 @@ void GeometryObject::projectShapeWithPolygonAlgo(const TopoDS_Shape& input,
|
||||
}
|
||||
|
||||
//!add edges meeting filter criteria for category, visibility
|
||||
void GeometryObject::extractGeometry(edgeClass category, bool visible)
|
||||
void GeometryObject::extractGeometry(edgeClass category, bool hlrVisible)
|
||||
{
|
||||
// Base::Console().Message("GO::extractGeometry(%d, %d)\n",category, visible);
|
||||
// Base::Console().Message("GO::extractGeometry(%d, %d)\n",category, hlrVisible);
|
||||
TopoDS_Shape filtEdges;
|
||||
if (visible) {
|
||||
if (hlrVisible) {
|
||||
switch (category) {
|
||||
case ecHARD:
|
||||
filtEdges = visHard;
|
||||
@@ -356,7 +356,7 @@ void GeometryObject::extractGeometry(edgeClass category, bool visible)
|
||||
filtEdges = visIso;
|
||||
break;
|
||||
default:
|
||||
Base::Console().Warning("GeometryObject::ExtractGeometry - unsupported visible edgeClass: %d\n",category);
|
||||
Base::Console().Warning("GeometryObject::ExtractGeometry - unsupported hlrVisible edgeClass: %d\n",category);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
@@ -382,11 +382,11 @@ void GeometryObject::extractGeometry(edgeClass category, bool visible)
|
||||
}
|
||||
}
|
||||
|
||||
addGeomFromCompound(filtEdges, category, visible);
|
||||
addGeomFromCompound(filtEdges, category, hlrVisible);
|
||||
}
|
||||
|
||||
//! update edgeGeom and vertexGeom from Compound of edges
|
||||
void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass category, bool visible)
|
||||
void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass category, bool hlrVisible)
|
||||
{
|
||||
// Base::Console().Message("GO::addGeomFromCompound()\n");
|
||||
if(edgeCompound.IsNull()) {
|
||||
@@ -416,11 +416,11 @@ void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass ca
|
||||
base->source(0); //object geometry
|
||||
base->sourceIndex(i-1);
|
||||
base->classOfEdge = category;
|
||||
base->visible = visible;
|
||||
base->hlrVisible = hlrVisible;
|
||||
edgeGeom.push_back(base);
|
||||
|
||||
//add vertices of new edge if not already in list
|
||||
if (visible) {
|
||||
if (hlrVisible) {
|
||||
BaseGeom* lastAdded = edgeGeom.back();
|
||||
bool v1Add = true, v2Add = true;
|
||||
bool c1Add = true;
|
||||
@@ -431,7 +431,7 @@ void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass ca
|
||||
if (circle) {
|
||||
c1 = new TechDraw::Vertex(circle->center);
|
||||
c1->isCenter = true;
|
||||
c1->visible = true;
|
||||
c1->hlrVisible = true;
|
||||
}
|
||||
|
||||
std::vector<Vertex *>::iterator itVertex = vertexGeom.begin();
|
||||
@@ -451,13 +451,13 @@ void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass ca
|
||||
}
|
||||
if (v1Add) {
|
||||
vertexGeom.push_back(v1);
|
||||
v1->visible = true;
|
||||
v1->hlrVisible = true;
|
||||
} else {
|
||||
delete v1;
|
||||
}
|
||||
if (v2Add) {
|
||||
vertexGeom.push_back(v2);
|
||||
v2->visible = true;
|
||||
v2->hlrVisible = true;
|
||||
} else {
|
||||
delete v2;
|
||||
}
|
||||
@@ -465,7 +465,7 @@ void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass ca
|
||||
if (circle) {
|
||||
if (c1Add) {
|
||||
vertexGeom.push_back(c1);
|
||||
c1->visible = true;
|
||||
c1->hlrVisible = true;
|
||||
} else {
|
||||
delete c1;
|
||||
}
|
||||
@@ -482,7 +482,7 @@ int GeometryObject::addCosmeticVertex(Base::Vector3d pos, int link)
|
||||
v->cosmetic = true;
|
||||
v->cosmeticLink = link;
|
||||
v->cosmeticTag = "tbi";
|
||||
v->visible = true;
|
||||
v->hlrVisible = true;
|
||||
int idx = vertexGeom.size();
|
||||
vertexGeom.push_back(v);
|
||||
return idx;
|
||||
@@ -495,18 +495,18 @@ int GeometryObject::addCosmeticVertex(Base::Vector3d pos, std::string tagString,
|
||||
v->cosmetic = true;
|
||||
v->cosmeticLink = link;
|
||||
v->cosmeticTag = tagString;
|
||||
v->visible = true;
|
||||
v->hlrVisible = true;
|
||||
int idx = vertexGeom.size();
|
||||
vertexGeom.push_back(v);
|
||||
return idx;
|
||||
}
|
||||
|
||||
//do not need source index anymore. base has CosmeticTag
|
||||
int GeometryObject::addCosmeticEdge(TechDraw::BaseGeom* base,
|
||||
int s, int si)
|
||||
int s)
|
||||
{
|
||||
base->cosmetic = true;
|
||||
base->source(s); //1-CosmeticEdge, 2-CenterLine
|
||||
base->sourceIndex(si); //index into source;
|
||||
|
||||
edgeGeom.push_back(base);
|
||||
int idx = edgeGeom.size() - 1;
|
||||
|
||||
@@ -136,7 +136,7 @@ public:
|
||||
//Are removeXXXXX functions really needed for GO?
|
||||
int addCosmeticVertex(Base::Vector3d pos, int link = -1);
|
||||
int addCosmeticVertex(Base::Vector3d pos, std::string tagString, int link = -1);
|
||||
int addCosmeticEdge(TechDraw::BaseGeom* bg, int s = 0, int si = -1);
|
||||
int addCosmeticEdge(TechDraw::BaseGeom* bg, int s = 0);
|
||||
int addCenterLine(TechDraw::BaseGeom* bg, int s = 0, int si = -1);
|
||||
|
||||
protected:
|
||||
|
||||
@@ -1015,20 +1015,27 @@ void CmdTechDrawCosmeticEraser::activated(int iMsg)
|
||||
objFeat = static_cast<TechDraw::DrawViewPart*> ((*itSel).getObject());
|
||||
subNames = (*itSel).getSubNames();
|
||||
}
|
||||
if (objFeat == nullptr) {
|
||||
break;
|
||||
}
|
||||
std::vector<std::string> cv2Delete;
|
||||
std::vector<int> ce2Delete;
|
||||
std::vector<std::string> ce2Delete;
|
||||
std::vector<int> cl2Delete;
|
||||
for (auto& s: subNames) {
|
||||
int idx = TechDraw::DrawUtil::getIndexFromName(s);
|
||||
std::string geomType = TechDraw::DrawUtil::getGeomTypeFromName(s);
|
||||
if (geomType == "Edge") {
|
||||
TechDraw::BaseGeom* bg = objFeat->getGeomByIndex(idx);
|
||||
Base::Console().Message("CMD::Eraser - have an edge: %s - bg: %X\n", s.c_str(), bg);
|
||||
if ((bg != nullptr) &&
|
||||
(bg->cosmetic) ) {
|
||||
Base::Console().Message("CMD::Eraser - cos: %d source: %d tag: %s\n",
|
||||
bg->cosmetic, bg->sourceIndex(), bg->getCosmeticTag().c_str());
|
||||
int source = bg->source();
|
||||
int sourceIndex = bg->sourceIndex();
|
||||
std::string tag = bg->getCosmeticTag();
|
||||
if (source == 1) { //this is a "CosmeticEdge"
|
||||
ce2Delete.push_back(sourceIndex);
|
||||
ce2Delete.push_back(tag);
|
||||
} else if (source == 2) { //this is a "CenterLine"
|
||||
cl2Delete.push_back(sourceIndex);
|
||||
} else {
|
||||
@@ -1037,15 +1044,13 @@ void CmdTechDrawCosmeticEraser::activated(int iMsg)
|
||||
}
|
||||
}
|
||||
} else if (geomType == "Vertex") {
|
||||
//TODO: delete by tag
|
||||
TechDraw::Vertex* tdv = objFeat->getProjVertexByIndex(idx);
|
||||
if (tdv != nullptr) {
|
||||
// int delIndex = tdv->cosmeticLink;
|
||||
std::string delTag = tdv->cosmeticTag;
|
||||
if (!delTag.empty()) {
|
||||
cv2Delete.push_back(delTag);
|
||||
} else {
|
||||
Base::Console().Message("CMD::eraser - geom: %d has no cv\n", idx);
|
||||
Base::Console().Warning("Vertex%d is not cosmetic! Can not erase.\n", idx);
|
||||
}
|
||||
} else {
|
||||
Base::Console().Message("CMD::eraser - geom: %d not found!\n", idx);
|
||||
@@ -1058,18 +1063,11 @@ void CmdTechDrawCosmeticEraser::activated(int iMsg)
|
||||
|
||||
}
|
||||
if (!cv2Delete.empty()) {
|
||||
for (auto& cvTag: cv2Delete) {
|
||||
objFeat->removeCosmeticVertex(cvTag);
|
||||
}
|
||||
objFeat->enforceRecompute();
|
||||
objFeat->removeCosmeticVertex(cv2Delete);
|
||||
}
|
||||
|
||||
if (!ce2Delete.empty()) {
|
||||
std::sort(ce2Delete.begin(), ce2Delete.end());
|
||||
auto itce = ce2Delete.rbegin();
|
||||
for ( ; itce != ce2Delete.rend(); itce++) {
|
||||
objFeat->removeCosmeticEdge((*itce));
|
||||
}
|
||||
objFeat->removeCosmeticEdge(ce2Delete);
|
||||
}
|
||||
if (!cl2Delete.empty()) {
|
||||
std::sort(cl2Delete.begin(), cl2Delete.end());
|
||||
@@ -1078,6 +1076,7 @@ void CmdTechDrawCosmeticEraser::activated(int iMsg)
|
||||
objFeat->removeCenterLine((*itcl));
|
||||
}
|
||||
}
|
||||
objFeat->recomputeFeature();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -83,6 +83,11 @@
|
||||
using namespace TechDraw;
|
||||
using namespace TechDrawGui;
|
||||
|
||||
#define GEOMETRYEDGE 0
|
||||
#define COSMETICEDGE 1
|
||||
#define CENTERLINE 2
|
||||
|
||||
|
||||
const float lineScaleFactor = Rez::guiX(1.); // temp fiddle for devel
|
||||
|
||||
QGIViewPart::QGIViewPart()
|
||||
@@ -437,7 +442,7 @@ void QGIViewPart::drawViewPart()
|
||||
QGIEdge* item;
|
||||
for(int i = 0 ; itGeom != geoms.end(); itGeom++, i++) {
|
||||
bool showEdge = false;
|
||||
if ((*itGeom)->visible) {
|
||||
if ((*itGeom)->hlrVisible) {
|
||||
if (((*itGeom)->classOfEdge == ecHARD) ||
|
||||
((*itGeom)->classOfEdge == ecOUTLINE) ||
|
||||
(((*itGeom)->classOfEdge == ecSMOOTH) && viewPart->SmoothVisible.getValue()) ||
|
||||
@@ -463,9 +468,11 @@ void QGIViewPart::drawViewPart()
|
||||
if ((*itGeom)->cosmetic == true) {
|
||||
int source = (*itGeom)->source();
|
||||
int sourceIndex = (*itGeom)->sourceIndex();
|
||||
if (source == 1) { //this is a "CosmeticEdge"
|
||||
showItem = formatGeomFromCosmetic(sourceIndex, item);
|
||||
} else if (source == 2) { //this is a "CenterLine"
|
||||
if (source == COSMETICEDGE) {
|
||||
// showItem = formatGeomFromCosmetic(sourceIndex, item);
|
||||
std::string cTag = (*itGeom)->getCosmeticTag();
|
||||
showItem = formatGeomFromCosmetic(cTag, item);
|
||||
} else if (source == CENTERLINE) {
|
||||
showItem = formatGeomFromCenterLine(sourceIndex, item);
|
||||
} else {
|
||||
Base::Console().Message("QGIVP::drawVP - edge: %d is confused - source: %d\n",i,source);
|
||||
@@ -484,7 +491,7 @@ void QGIViewPart::drawViewPart()
|
||||
item->setPos(0.0,0.0); //now at group(0,0)
|
||||
item->setPath(drawPainterPath(*itGeom));
|
||||
item->setZValue(ZVALUE::EDGE);
|
||||
if(!(*itGeom)->visible) {
|
||||
if(!(*itGeom)->hlrVisible) {
|
||||
item->setWidth(lineWidthHid);
|
||||
item->setHiddenEdge(true);
|
||||
item->setZValue(ZVALUE::HIDEDGE);
|
||||
@@ -593,6 +600,22 @@ bool QGIViewPart::formatGeomFromCosmetic(int sourceIndex, QGIEdge* item)
|
||||
return result;
|
||||
}
|
||||
|
||||
bool QGIViewPart::formatGeomFromCosmetic(std::string cTag, QGIEdge* item)
|
||||
{
|
||||
// Base::Console().Message("QGIVP::formatGeomFromCosmetic(%s)\n", cTag.c_str());
|
||||
bool result = true;
|
||||
auto partFeat( dynamic_cast<TechDraw::DrawViewPart *>(getViewObject()) );
|
||||
TechDraw::CosmeticEdge* ce = partFeat->getCosmeticEdge(cTag);
|
||||
if (ce != nullptr) {
|
||||
item->setNormalColor(ce->m_format.m_color.asValue<QColor>());
|
||||
item->setWidth(ce->m_format.m_weight * lineScaleFactor);
|
||||
item->setStyle(ce->m_format.m_style);
|
||||
result = ce->m_format.m_visible;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
bool QGIViewPart::formatGeomFromCenterLine(int sourceIndex, QGIEdge* item)
|
||||
{
|
||||
// Base::Console().Message("QGIVP::formatGeomFromCenterLine(%d)\n",sourceIndex);
|
||||
|
||||
@@ -106,11 +106,10 @@ protected:
|
||||
bool prefFaceEdges(void);
|
||||
bool prefPrintCenters(void);
|
||||
|
||||
|
||||
bool formatGeomFromCosmetic(int sourceIndex, QGIEdge* item);
|
||||
bool formatGeomFromCosmetic(std::string cTag, QGIEdge* item);
|
||||
bool formatGeomFromCenterLine(int sourceIndex, QGIEdge* item);
|
||||
|
||||
|
||||
private:
|
||||
QList<QGraphicsItem*> deleteItems;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user