Sketcher: Edges pattern and width by type.
This commit is contained in:
@@ -73,19 +73,21 @@ void EditModeGeometryCoinManager::processGeometry(const GeoListFacade& geolistfa
|
||||
{
|
||||
// enable all layers
|
||||
editModeScenegraphNodes.PointsGroup->enable.setNum(geometryLayerParameters.getCoinLayerCount());
|
||||
editModeScenegraphNodes.CurvesGroup->enable.setNum(geometryLayerParameters.getCoinLayerCount());
|
||||
editModeScenegraphNodes.CurvesGroup->enable.setNum(
|
||||
geometryLayerParameters.getCoinLayerCount() * geometryLayerParameters.getSubLayerCount());
|
||||
SbBool* swsp = editModeScenegraphNodes.PointsGroup->enable.startEditing();
|
||||
SbBool* swsc = editModeScenegraphNodes.CurvesGroup->enable.startEditing();
|
||||
|
||||
auto setEnableLayer = [swsp, swsc](int l, bool enabled) {
|
||||
swsp[l] = enabled; // layer defaults to enabled
|
||||
swsc[l] = enabled; // layer defaults to enabled
|
||||
};
|
||||
|
||||
auto layersconfigurations = viewProvider.VisualLayerList.getValues();
|
||||
|
||||
for (auto l = 0; l < geometryLayerParameters.getCoinLayerCount(); l++) {
|
||||
setEnableLayer(l, layersconfigurations[l].isVisible());
|
||||
auto enabled = layersconfigurations[l].isVisible();
|
||||
|
||||
swsp[l] = enabled;
|
||||
int slCount = geometryLayerParameters.getSubLayerCount();
|
||||
for (int t = 0; t < slCount; t++) {
|
||||
swsc[l * slCount + t] = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
editModeScenegraphNodes.PointsGroup->enable.finishEditing();
|
||||
@@ -122,14 +124,6 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli
|
||||
bool issketchinvalid)
|
||||
{
|
||||
// Lambdas for convenience retrieval of geometry information
|
||||
auto isConstructionGeom = [&geolistfacade](int GeoId) {
|
||||
auto geom = geolistfacade.getGeometryFacadeFromGeoId(GeoId);
|
||||
if (geom) {
|
||||
return geom->getConstruction();
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
auto isDefinedGeomPoint = [&geolistfacade](int GeoId) {
|
||||
auto geom = geolistfacade.getGeometryFacadeFromGeoId(GeoId);
|
||||
if (geom) {
|
||||
@@ -162,6 +156,9 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli
|
||||
return false;
|
||||
};
|
||||
|
||||
bool sketchFullyConstrained =
|
||||
ViewProviderSketchCoinAttorney::isSketchFullyConstrained(viewProvider);
|
||||
|
||||
// Update Colors
|
||||
|
||||
SbColor* crosscolor = editModeScenegraphNodes.RootCrossMaterials->diffuseColor.startEditing();
|
||||
@@ -169,17 +166,11 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli
|
||||
ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider);
|
||||
|
||||
for (auto l = 0; l < geometryLayerParameters.getCoinLayerCount(); l++) {
|
||||
|
||||
float x, y, z;
|
||||
int PtNum = editModeScenegraphNodes.PointsMaterials[l]->diffuseColor.getNum();
|
||||
SbColor* pcolor = editModeScenegraphNodes.PointsMaterials[l]->diffuseColor.startEditing();
|
||||
int CurvNum = editModeScenegraphNodes.CurvesMaterials[l]->diffuseColor.getNum();
|
||||
SbColor* color = editModeScenegraphNodes.CurvesMaterials[l]->diffuseColor.startEditing();
|
||||
|
||||
SbVec3f* verts = editModeScenegraphNodes.CurvesCoordinate[l]->point.startEditing();
|
||||
SbVec3f* pverts = editModeScenegraphNodes.PointsCoordinate[l]->point.startEditing();
|
||||
|
||||
float x, y, z;
|
||||
|
||||
// colors of the point set
|
||||
if (issketchinvalid) {
|
||||
for (int i = 0; i < PtNum; i++) {
|
||||
@@ -189,9 +180,7 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli
|
||||
else {
|
||||
|
||||
for (int i = 0; i < PtNum; i++) {
|
||||
if (!(i == 0 && l == 0)
|
||||
&& ViewProviderSketchCoinAttorney::isSketchFullyConstrained(
|
||||
viewProvider)) { // root point is not coloured
|
||||
if (!(i == 0 && l == 0) && sketchFullyConstrained) { // root point is not coloured
|
||||
pcolor[i] = drawingParameters.FullyConstrainedColor;
|
||||
}
|
||||
else {
|
||||
@@ -345,98 +334,99 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli
|
||||
drawingParameters.zMidLines,
|
||||
drawingParameters.zLowLines);
|
||||
|
||||
int j = 0; // vertexindex
|
||||
for (auto t = 0; t < geometryLayerParameters.getSubLayerCount(); t++) {
|
||||
int CurvNum = editModeScenegraphNodes.CurvesMaterials[l][t]->diffuseColor.getNum();
|
||||
SbColor* color =
|
||||
editModeScenegraphNodes.CurvesMaterials[l][t]->diffuseColor.startEditing();
|
||||
SbVec3f* verts = editModeScenegraphNodes.CurvesCoordinate[l][t]->point.startEditing();
|
||||
|
||||
for (int i = 0; i < CurvNum; i++) {
|
||||
int GeoId = coinMapping.getCurveGeoId(i, l);
|
||||
// CurvId has several vertices associated to 1 material
|
||||
// edit->CurveSet->numVertices => [i] indicates number of vertex for line i.
|
||||
int indexes = (editModeScenegraphNodes.CurveSet[l]->numVertices[i]);
|
||||
int j = 0; // vertexindex
|
||||
for (int i = 0; i < CurvNum; i++) {
|
||||
int GeoId = coinMapping.getCurveGeoId(i, l, t);
|
||||
// CurvId has several vertices associated to 1 material
|
||||
// edit->CurveSet->numVertices => [i] indicates number of vertex for line i.
|
||||
int indexes = (editModeScenegraphNodes.CurveSet[l][t]->numVertices[i]);
|
||||
|
||||
bool selected = ViewProviderSketchCoinAttorney::isCurveSelected(viewProvider, GeoId);
|
||||
bool preselected = (preselectcurve == GeoId);
|
||||
bool selected =
|
||||
ViewProviderSketchCoinAttorney::isCurveSelected(viewProvider, GeoId);
|
||||
bool preselected = (preselectcurve == GeoId);
|
||||
bool constrainedElement = isFullyConstraintElement(GeoId);
|
||||
|
||||
bool constrainedElement = isFullyConstraintElement(GeoId);
|
||||
if (selected || preselected) {
|
||||
color[i] = selected ? (preselected ? drawingParameters.PreselectSelectedColor
|
||||
: drawingParameters.SelectColor)
|
||||
: drawingParameters.PreselectColor;
|
||||
|
||||
if (selected && preselected) {
|
||||
color[i] = drawingParameters.PreselectSelectedColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * drawingParameters.zHighLine);
|
||||
}
|
||||
}
|
||||
else if (selected) {
|
||||
color[i] = drawingParameters.SelectColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * drawingParameters.zHighLine);
|
||||
}
|
||||
}
|
||||
else if (preselected) {
|
||||
color[i] = drawingParameters.PreselectColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * drawingParameters.zHighLine);
|
||||
}
|
||||
}
|
||||
else if (GeoId <= Sketcher::GeoEnum::RefExt) { // external Geometry
|
||||
color[i] = drawingParameters.CurveExternalColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zExtLine);
|
||||
}
|
||||
}
|
||||
else if (issketchinvalid) {
|
||||
color[i] = drawingParameters.InvalidSketchColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zNormLine);
|
||||
}
|
||||
}
|
||||
else if (isConstructionGeom(GeoId)) {
|
||||
if (isInternalAlignedGeom(GeoId)) {
|
||||
if (constrainedElement) {
|
||||
color[i] = drawingParameters.FullyConstraintInternalAlignmentColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] =
|
||||
SbVec3f(x, y, viewOrientationFactor * drawingParameters.zHighLine);
|
||||
}
|
||||
else {
|
||||
color[i] = drawingParameters.InternalAlignedGeoColor;
|
||||
}
|
||||
else if (geometryLayerParameters.isExternalSubLayer(t)) {
|
||||
color[i] = drawingParameters.CurveExternalColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zExtLine);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (constrainedElement) {
|
||||
color[i] = drawingParameters.FullyConstraintConstructionElementColor;
|
||||
if (issketchinvalid) {
|
||||
color[i] = drawingParameters.InvalidSketchColor;
|
||||
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zNormLine);
|
||||
}
|
||||
}
|
||||
else if (geometryLayerParameters.isConstructionSubLayer(t)) {
|
||||
if (constrainedElement) {
|
||||
color[i] = drawingParameters.FullyConstraintConstructionElementColor;
|
||||
}
|
||||
else {
|
||||
color[i] = drawingParameters.CurveDraftColor;
|
||||
}
|
||||
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zConstrLine);
|
||||
}
|
||||
}
|
||||
else if (geometryLayerParameters.isInternalSubLayer(t)) {
|
||||
if (constrainedElement) {
|
||||
color[i] = drawingParameters.FullyConstraintInternalAlignmentColor;
|
||||
}
|
||||
else {
|
||||
color[i] = drawingParameters.InternalAlignedGeoColor;
|
||||
}
|
||||
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zConstrLine);
|
||||
}
|
||||
}
|
||||
else {
|
||||
color[i] = drawingParameters.CurveDraftColor;
|
||||
if (sketchFullyConstrained) {
|
||||
color[i] = drawingParameters.FullyConstrainedColor;
|
||||
}
|
||||
else if (constrainedElement) {
|
||||
color[i] = drawingParameters.FullyConstraintElementColor;
|
||||
}
|
||||
else {
|
||||
color[i] = drawingParameters.CurveColor;
|
||||
}
|
||||
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zNormLine);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zConstrLine);
|
||||
}
|
||||
}
|
||||
else if (ViewProviderSketchCoinAttorney::isSketchFullyConstrained(viewProvider)) {
|
||||
color[i] = drawingParameters.FullyConstrainedColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zNormLine);
|
||||
}
|
||||
}
|
||||
else if (isFullyConstraintElement(GeoId)) {
|
||||
color[i] = drawingParameters.FullyConstraintElementColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zNormLine);
|
||||
}
|
||||
}
|
||||
else {
|
||||
color[i] = drawingParameters.CurveColor;
|
||||
for (int k = j; j < k + indexes; j++) {
|
||||
verts[j].getValue(x, y, z);
|
||||
verts[j] = SbVec3f(x, y, viewOrientationFactor * zNormLine);
|
||||
}
|
||||
}
|
||||
editModeScenegraphNodes.CurvesMaterials[l][t]->diffuseColor.finishEditing();
|
||||
editModeScenegraphNodes.CurvesCoordinate[l][t]->point.finishEditing();
|
||||
editModeScenegraphNodes.CurveSet[l][t]->numVertices.finishEditing();
|
||||
}
|
||||
|
||||
// colors of the cross
|
||||
@@ -464,11 +454,7 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli
|
||||
}
|
||||
}
|
||||
|
||||
// end editing
|
||||
editModeScenegraphNodes.CurvesMaterials[l]->diffuseColor.finishEditing();
|
||||
editModeScenegraphNodes.PointsMaterials[l]->diffuseColor.finishEditing();
|
||||
editModeScenegraphNodes.CurvesCoordinate[l]->point.finishEditing();
|
||||
editModeScenegraphNodes.CurveSet[l]->numVertices.finishEditing();
|
||||
}
|
||||
|
||||
editModeScenegraphNodes.RootCrossMaterials->diffuseColor.finishEditing();
|
||||
@@ -565,45 +551,80 @@ void EditModeGeometryCoinManager::createEditModePointInventorNodes()
|
||||
|
||||
void EditModeGeometryCoinManager::createEditModeCurveInventorNodes()
|
||||
{
|
||||
auto layersconfigurations = viewProvider.VisualLayerList.getValue();
|
||||
editModeScenegraphNodes.CurvesDrawStyle = new SoDrawStyle;
|
||||
editModeScenegraphNodes.CurvesDrawStyle->setName("CurvesDrawStyle");
|
||||
editModeScenegraphNodes.CurvesDrawStyle->lineWidth =
|
||||
drawingParameters.CurveWidth * drawingParameters.pixelScalingFactor;
|
||||
editModeScenegraphNodes.CurvesDrawStyle->linePattern = drawingParameters.CurvePattern;
|
||||
editModeScenegraphNodes.CurvesDrawStyle->linePatternScaleFactor = 2;
|
||||
|
||||
editModeScenegraphNodes.CurvesConstructionDrawStyle = new SoDrawStyle;
|
||||
editModeScenegraphNodes.CurvesConstructionDrawStyle->setName("CurvesConstructionDrawStyle");
|
||||
editModeScenegraphNodes.CurvesConstructionDrawStyle->lineWidth =
|
||||
drawingParameters.ConstructionWidth * drawingParameters.pixelScalingFactor;
|
||||
editModeScenegraphNodes.CurvesConstructionDrawStyle->linePattern =
|
||||
drawingParameters.ConstructionPattern;
|
||||
editModeScenegraphNodes.CurvesConstructionDrawStyle->linePatternScaleFactor = 2;
|
||||
|
||||
editModeScenegraphNodes.CurvesInternalDrawStyle = new SoDrawStyle;
|
||||
editModeScenegraphNodes.CurvesInternalDrawStyle->setName("CurvesInternalDrawStyle");
|
||||
editModeScenegraphNodes.CurvesInternalDrawStyle->lineWidth =
|
||||
drawingParameters.InternalWidth * drawingParameters.pixelScalingFactor;
|
||||
editModeScenegraphNodes.CurvesInternalDrawStyle->linePattern =
|
||||
drawingParameters.InternalPattern;
|
||||
editModeScenegraphNodes.CurvesInternalDrawStyle->linePatternScaleFactor = 2;
|
||||
|
||||
editModeScenegraphNodes.CurvesExternalDrawStyle = new SoDrawStyle;
|
||||
editModeScenegraphNodes.CurvesExternalDrawStyle->setName("CurvesExternalDrawStyle");
|
||||
editModeScenegraphNodes.CurvesExternalDrawStyle->lineWidth =
|
||||
drawingParameters.ExternalWidth * drawingParameters.pixelScalingFactor;
|
||||
editModeScenegraphNodes.CurvesExternalDrawStyle->linePattern =
|
||||
drawingParameters.ExternalPattern;
|
||||
editModeScenegraphNodes.CurvesExternalDrawStyle->linePatternScaleFactor = 2;
|
||||
|
||||
for (int i = 0; i < geometryLayerParameters.getCoinLayerCount(); i++) {
|
||||
SoSeparator* sep = new SoSeparator;
|
||||
sep->ref();
|
||||
editModeScenegraphNodes.CurvesMaterials.emplace_back();
|
||||
editModeScenegraphNodes.CurvesCoordinate.emplace_back();
|
||||
editModeScenegraphNodes.CurveSet.emplace_back();
|
||||
for (int t = 0; t < geometryLayerParameters.getSubLayerCount(); t++) {
|
||||
SoSeparator* sep = new SoSeparator;
|
||||
sep->ref();
|
||||
|
||||
auto somaterial = new SoMaterial;
|
||||
editModeScenegraphNodes.CurvesMaterials.push_back(somaterial);
|
||||
editModeScenegraphNodes.CurvesMaterials[i]->setName(concat("CurvesMaterials", i).c_str());
|
||||
sep->addChild(editModeScenegraphNodes.CurvesMaterials[i]);
|
||||
auto somaterial = new SoMaterial;
|
||||
somaterial->setName(concat("CurvesMaterials", i * 10 + t).c_str());
|
||||
editModeScenegraphNodes.CurvesMaterials[i].push_back(somaterial);
|
||||
sep->addChild(editModeScenegraphNodes.CurvesMaterials[i][t]);
|
||||
|
||||
auto MtlBind = new SoMaterialBinding;
|
||||
MtlBind->setName(concat("CurvesMaterialsBinding", i).c_str());
|
||||
MtlBind->value = SoMaterialBinding::PER_FACE;
|
||||
sep->addChild(MtlBind);
|
||||
auto MtlBind = new SoMaterialBinding;
|
||||
MtlBind->setName(concat("CurvesMaterialsBinding", i * 10 + t).c_str());
|
||||
MtlBind->value = SoMaterialBinding::PER_FACE;
|
||||
sep->addChild(MtlBind);
|
||||
|
||||
auto coords = new SoCoordinate3;
|
||||
editModeScenegraphNodes.CurvesCoordinate.push_back(coords);
|
||||
editModeScenegraphNodes.CurvesCoordinate[i]->setName(concat("CurvesCoordinate", i).c_str());
|
||||
sep->addChild(editModeScenegraphNodes.CurvesCoordinate[i]);
|
||||
auto coords = new SoCoordinate3;
|
||||
coords->setName(concat("CurvesCoordinate", i * 10 + t).c_str());
|
||||
editModeScenegraphNodes.CurvesCoordinate[i].push_back(coords);
|
||||
sep->addChild(editModeScenegraphNodes.CurvesCoordinate[i][t]);
|
||||
|
||||
auto drawstyle = new SoDrawStyle;
|
||||
editModeScenegraphNodes.CurvesDrawStyle.push_back(drawstyle);
|
||||
editModeScenegraphNodes.CurvesDrawStyle[i]->setName(concat("CurvesDrawStyle", i).c_str());
|
||||
if (geometryLayerParameters.isConstructionSubLayer(t)) {
|
||||
sep->addChild(editModeScenegraphNodes.CurvesConstructionDrawStyle);
|
||||
}
|
||||
else if (geometryLayerParameters.isInternalSubLayer(t)) {
|
||||
sep->addChild(editModeScenegraphNodes.CurvesInternalDrawStyle);
|
||||
}
|
||||
else if (geometryLayerParameters.isExternalSubLayer(t)) {
|
||||
sep->addChild(editModeScenegraphNodes.CurvesExternalDrawStyle);
|
||||
}
|
||||
else {
|
||||
sep->addChild(editModeScenegraphNodes.CurvesDrawStyle);
|
||||
}
|
||||
|
||||
editModeScenegraphNodes.CurvesDrawStyle[i]->lineWidth =
|
||||
layersconfigurations[i].getLineWidth() * drawingParameters.pixelScalingFactor;
|
||||
editModeScenegraphNodes.CurvesDrawStyle[i]->linePattern =
|
||||
layersconfigurations[i].getLinePattern();
|
||||
editModeScenegraphNodes.CurvesDrawStyle[i]->linePatternScaleFactor = 5;
|
||||
auto solineset = new SoLineSet;
|
||||
solineset->setName(concat("CurvesLineSet", i * 10 + t).c_str());
|
||||
editModeScenegraphNodes.CurveSet[i].push_back(solineset);
|
||||
sep->addChild(editModeScenegraphNodes.CurveSet[i][t]);
|
||||
|
||||
sep->addChild(editModeScenegraphNodes.CurvesDrawStyle[i]);
|
||||
|
||||
auto solineset = new SoLineSet;
|
||||
editModeScenegraphNodes.CurveSet.push_back(solineset);
|
||||
editModeScenegraphNodes.CurveSet[i]->setName(concat("CurvesLineSet", i).c_str());
|
||||
sep->addChild(editModeScenegraphNodes.CurveSet[i]);
|
||||
|
||||
editModeScenegraphNodes.CurvesGroup->addChild(sep);
|
||||
sep->unref();
|
||||
editModeScenegraphNodes.CurvesGroup->addChild(sep);
|
||||
sep->unref();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user