Sketcher: Edges pattern and width by type.

This commit is contained in:
Paddle
2024-01-15 18:38:59 +01:00
committed by Chris Hennes
parent 9b14a56198
commit a5d980ff59
13 changed files with 1565 additions and 1102 deletions

View File

@@ -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();
}
}
}