trackeditor: WIP start improving split segment for non-flat segments

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9049 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 6b8715936055acbd35ac0277c28644f39e047221
Former-commit-id: c82e94d66cd8d088e0b2ba0b4050ce4a690a1bdd
This commit is contained in:
iobyte 2023-06-26 17:57:47 +00:00
parent 27a0dc9609
commit c539a04ea0
2 changed files with 61 additions and 31 deletions

View file

@ -484,16 +484,7 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
newShape2.setArcDeg(arc - tmpAngle);
newShape2.setRadiusEnd(rEnd);
newShape2.setRadiusStart(tmpRadius);
double leftSide = oldShape.getLeft().getSideStartWidth() + (oldShape.getLeft().getSideEndWidth() - oldShape.getLeft().getSideStartWidth()) * splitPoint;
double rightSide = oldShape.getRight().getSideStartWidth() + (oldShape.getRight().getSideEndWidth() - oldShape.getRight().getSideStartWidth()) * splitPoint;
newShape2.getLeft().setBorderWidth(oldShape.getLeft().getBorderWidth());
newShape2.getRight().setBorderWidth(oldShape.getRight().getBorderWidth());
newShape2.getLeft().setSideStartWidth(leftSide);
newShape2.getRight().setSideStartWidth(rightSide);
newShape2.getLeft().setSideEndWidth(oldShape.getLeft().getSideEndWidth());
newShape2.getRight().setSideEndWidth(oldShape.getRight().getSideEndWidth());
oldShape.getRight().setSideEndWidth(rightSide);
oldShape.getLeft().setSideEndWidth(leftSide);
splitSegment(oldShape, newShape2, splitPoint);
newShape2.setProfilStepsLength(4.0);
int count2 = Editor.getProperties().getCurveNameCount() + 1;
Editor.getProperties().setCurveNameCount(count2);
@ -540,16 +531,7 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
newShape2.setArcDeg(arc - tmpAngle);
newShape2.setRadiusEnd(rEnd);
newShape2.setRadiusStart(tmpRadius);
double leftSide = oldShape.getLeft().getSideStartWidth() + (oldShape.getLeft().getSideEndWidth() - oldShape.getLeft().getSideStartWidth()) * splitPoint;
double rightSide = oldShape.getRight().getSideStartWidth() + (oldShape.getRight().getSideEndWidth() - oldShape.getRight().getSideStartWidth()) * splitPoint;
newShape2.getLeft().setBorderWidth(oldShape.getLeft().getBorderWidth());
newShape2.getRight().setBorderWidth(oldShape.getRight().getBorderWidth());
newShape2.getLeft().setSideStartWidth(leftSide);
newShape2.getRight().setSideStartWidth(rightSide);
newShape2.getLeft().setSideEndWidth(oldShape.getLeft().getSideEndWidth());
newShape2.getRight().setSideEndWidth(oldShape.getRight().getSideEndWidth());
oldShape.getRight().setSideEndWidth(rightSide);
oldShape.getLeft().setSideEndWidth(leftSide);
splitSegment(oldShape, newShape2, splitPoint);
newShape2.setProfilStepsLength(4.0);
int count2 = Editor.getProperties().getCurveNameCount() + 1;
Editor.getProperties().setCurveNameCount(count2);
@ -575,16 +557,7 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
break;
}
}
double leftSide2 = oldShape.getLeft().getSideStartWidth() + (oldShape.getLeft().getSideEndWidth() - oldShape.getLeft().getSideStartWidth()) * splitPoint;
double rightSide2 = oldShape.getRight().getSideStartWidth() + (oldShape.getRight().getSideEndWidth() - oldShape.getRight().getSideStartWidth()) * splitPoint;
newShape3.getLeft().setBorderWidth(oldShape.getLeft().getBorderWidth());
newShape3.getRight().setBorderWidth(oldShape.getRight().getBorderWidth());
newShape3.getLeft().setSideStartWidth(leftSide2);
newShape3.getRight().setSideStartWidth(rightSide2);
newShape3.getLeft().setSideEndWidth(oldShape.getLeft().getSideEndWidth());
newShape3.getRight().setSideEndWidth(oldShape.getRight().getSideEndWidth());
oldShape.getRight().setSideEndWidth(rightSide2);
oldShape.getLeft().setSideEndWidth(leftSide2);
splitSegment(oldShape, newShape3, splitPoint);
int count3 = Editor.getProperties().getStraightNameCount() + 1;
Editor.getProperties().setStraightNameCount(count3);
newShape3.setName("straight " + count3);
@ -635,6 +608,63 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
}
}
private void splitSegment(Segment oldShape, Segment newShape, double splitPoint)
{
double leftSide2 = oldShape.getLeft().getSideStartWidth() + (oldShape.getLeft().getSideEndWidth() - oldShape.getLeft().getSideStartWidth()) * splitPoint;
double rightSide2 = oldShape.getRight().getSideStartWidth() + (oldShape.getRight().getSideEndWidth() - oldShape.getRight().getSideStartWidth()) * splitPoint;
newShape.getLeft().setBorderWidth(oldShape.getLeft().getBorderWidth());
newShape.getRight().setBorderWidth(oldShape.getRight().getBorderWidth());
newShape.getLeft().setSideStartWidth(leftSide2);
newShape.getRight().setSideStartWidth(rightSide2);
newShape.getLeft().setSideEndWidth(oldShape.getLeft().getSideEndWidth());
newShape.getRight().setSideEndWidth(oldShape.getRight().getSideEndWidth());
oldShape.getRight().setSideEndWidth(rightSide2);
oldShape.getLeft().setSideEndWidth(leftSide2);
if (!Double.isNaN(oldShape.getHeightStartLeft()) && !Double.isNaN(oldShape.getHeightEndLeft()))
{
newShape.setHeightEndLeft(oldShape.getHeightEndLeft());
double leftHeight = oldShape.getHeightStartLeft() + (oldShape.getHeightEndLeft() - oldShape.getHeightStartLeft()) * splitPoint;
newShape.setHeightStartLeft(leftHeight);
oldShape.setHeightEndLeft(leftHeight);
}
if (!Double.isNaN(oldShape.getHeightStartRight()) && !Double.isNaN(oldShape.getHeightEndRight()))
{
newShape.setHeightEndRight(oldShape.getHeightEndRight());
double rightHeight = oldShape.getHeightStartRight() + (oldShape.getHeightEndRight() - oldShape.getHeightStartRight()) * splitPoint;
newShape.setHeightStartRight(rightHeight);
oldShape.setHeightEndRight(rightHeight);
}
if (!Double.isNaN(oldShape.getBankingStart()) && !Double.isNaN(oldShape.getBankingEnd()))
{
newShape.setBankingEnd(oldShape.getBankingEnd());
double banking = oldShape.getBankingStart() + (oldShape.getBankingEnd() - oldShape.getBankingStart()) * splitPoint;
newShape.setBankingStart(banking);
oldShape.setBankingEnd(banking);
}
if (!Double.isNaN(oldShape.getProfilStartTangent()) && !Double.isNaN(oldShape.getProfilEndTangent()))
{
newShape.setProfilEndTangent(oldShape.getProfilEndTangent());
// FIXME: calculate the slope at the split point
double tangent = oldShape.getProfilStartTangent() + (oldShape.getProfilEndTangent() - oldShape.getProfilStartTangent()) * splitPoint;
newShape.setProfilStartTangent(tangent);
oldShape.setProfilEndTangent(tangent);
}
if (!Double.isNaN(oldShape.getGrade()))
{
newShape.setGrade(oldShape.getGrade());
}
if (oldShape.getSurface() != null && !oldShape.getSurface().isEmpty())
{
newShape.setSurface(oldShape.getSurface());
}
}
private ObjectMap findObjectMap(ObjShapeObject object)
{
for (int i = 0; i < editorFrame.getObjectMaps().size(); i++)

View file

@ -34,7 +34,7 @@ public class Properties
private static Properties instance = new Properties();
private Vector<ActionListener> propertiesListeners = new Vector<ActionListener>();
public final String title = "sd2-trackeditor";
public final String version = "1.2.53";
public final String version = "1.2.54";
private String path;
private double imageScale = 1;