use of com.ramussoft.pb.idef.elements.Ordinate in project ramus by Vitaliy-Yakovchuk.
the class AbstractClassicTemplate method createOutPoint.
private void createOutPoint(final MovingArea movingArea, final Function f) {
SectorRefactor.PerspectivePoint pp;
final Ordinate x = new Ordinate(Ordinate.TYPE_X);
final Ordinate y = new Ordinate(Ordinate.TYPE_Y);
final Point p = new Point(x, y);
pp = new SectorRefactor.PerspectivePoint();
pp.point = p;
pp.setFunction(f, RIGHT);
pp.type = SectorRefactor.TYPE_START;
x.setPosition(f.getBounds().getRight());
y.setPosition(getY(f));
movingArea.getRefactor().setPoint(pp);
movingArea.doSector();
}
use of com.ramussoft.pb.idef.elements.Ordinate in project ramus by Vitaliy-Yakovchuk.
the class MovingArea method addLevel.
/**
* Метод, який додає рівень до активного функціонального блоку на моделі,
* контекст функціонального блоку заміняється на новий функціональний блок з
* контекстом, який мав активний функціональний блок.
*/
public synchronized void addLevel() {
final Function f = ((MovingFunction) getActiveObject()).getFunction();
if (f.isLocked()) {
JOptionPane.showMessageDialog(this, ResourceLoader.getString("MovingArea.functionIsLocked"));
return;
}
if (JOptionPane.showConfirmDialog(this, ResourceLoader.getString("MovingArea.addingLevelWarning"), ResourceLoader.getString("warning"), JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION)
return;
f.lock();
final Vector<Row> childs = dataPlugin.getChilds(f, true);
final Function n = (Function) dataPlugin.createRow(f, true);
n.setSectorData(f.getSectorData());
n.setBounds(f.getBounds());
n.setBackground(f.getBackground());
n.setForeground(f.getForeground());
n.setName(f.getName());
n.setDecompositionType(f.getDecompositionType());
n.setType(f.getType());
f.setName(f.getName() + " (" + ResourceLoader.getString("MovingArea.context") + ")");
n.setFont(f.getFont());
f.setSectorData(new byte[0]);
final SectorRefactor r = new SectorRefactor(this);
// .getBounds().getHeight()));
for (int i = 0; i < childs.size(); i++) {
final Function c = (Function) childs.get(i);
c.setParentRow(n);
}
Vector srs = new Vector(f.getSectors());
for (int i = 0; i < srs.size(); i++) {
final Sector sector = (Sector) srs.get(i);
sector.setFunction(n);
// System.out.println(sector.getFunction());
}
final Function p = (Function) f.getParent();
srs = p.getSectors();
final int[] cnts = new int[4];
final double[] poses = new double[4];
final double[] hs = new double[4];
for (int i = 0; i < cnts.length; i++) cnts[i] = 0;
for (int i = 0; i < srs.size(); i++) {
final Sector sector = (Sector) srs.get(i);
if (f.equals(sector.getStart().getFunction())) {
cnts[MovingPanel.RIGHT]++;
}
if (f.equals(sector.getEnd().getFunction())) {
cnts[sector.getEnd().getFunctionType()]++;
}
}
for (int i = 0; i < cnts.length; i++) {
if (cnts[i] > 0) {
if (i == MovingPanel.LEFT || i == MovingPanel.RIGHT)
hs[i] = n.getBounds().getHeight() / cnts[i];
else
hs[i] = n.getBounds().getWidth() / cnts[i];
}
poses[i] = hs[i] / 2.0d;
}
for (int i = 0; i < srs.size(); i++) {
final Sector sector = (Sector) srs.get(i);
if (f.equals(sector.getStart().getFunction())) {
final Crosspoint c = sector.getStart().getCrosspoint();
final Sector[] ss = c.getOppozite(sector);
Sector so = null;
for (final Sector element : ss) {
so = element;
}
final Sector s = dataPlugin.createSector();
((AbstractSector) s).setThisStream(SectorRefactor.cloneStream(sector.getStream(), dataPlugin, s));
s.setVisualAttributes(sector.getVisualAttributes());
s.setFunction(f);
final Ordinate x1 = new Ordinate(Ordinate.TYPE_X);
final Ordinate x2 = new Ordinate(Ordinate.TYPE_X);
x1.setPosition(n.getBounds().getX() + n.getBounds().getWidth());
x2.setPosition(getDoubleWidth() - PART_SPACE);
final Ordinate y = new Ordinate(Ordinate.TYPE_Y);
y.setPosition(n.getBounds().getY() + poses[MovingPanel.RIGHT]);
poses[MovingPanel.RIGHT] += hs[MovingPanel.RIGHT];
final Point p1 = new Point(x1, y);
final Point p2 = new Point(x2, y);
final PaintSector ps = new PaintSector(s, p1, p2, this);
r.addSector(ps);
final Crosspoint cp = dataPlugin.createCrosspoint();
if (so != null) {
so.getEnd().setCrosspointA(cp);
so.getEnd().commit();
}
s.getEnd().setCrosspointA(c);
s.getStart().setCrosspointA(cp);
s.getStart().setFunctionA(n);
s.getStart().setFunctionTypeA(MovingPanel.RIGHT);
s.getEnd().setBorderTypeA(MovingPanel.RIGHT);
s.getStart().commit();
s.getEnd().commit();
}
if (f.equals(sector.getEnd().getFunction())) {
final int et = sector.getEnd().getFunctionType();
final Crosspoint c = sector.getEnd().getCrosspoint();
final Sector[] ss = c.getOppozite(sector);
Sector so = null;
for (final Sector element : ss) {
so = element;
so.setFunction(n);
}
final Sector s = dataPlugin.createSector();
((AbstractSector) s).setThisStream(SectorRefactor.cloneStream(sector.getStream(), dataPlugin, s));
s.setVisualAttributes(sector.getVisualAttributes());
s.setFunction(f);
if (et == MovingPanel.LEFT) {
final Ordinate x1 = new Ordinate(Ordinate.TYPE_X);
final Ordinate x2 = new Ordinate(Ordinate.TYPE_X);
x2.setPosition(n.getBounds().getX());
x1.setPosition(PART_SPACE);
final Ordinate y = new Ordinate(Ordinate.TYPE_Y);
y.setPosition(n.getBounds().getY() + poses[et]);
final Point p1 = new Point(x1, y);
final Point p2 = new Point(x2, y);
final PaintSector ps = new PaintSector(s, p1, p2, this);
r.addSector(ps);
} else if (et == MovingPanel.TOP) {
final Ordinate y1 = new Ordinate(Ordinate.TYPE_Y);
final Ordinate y2 = new Ordinate(Ordinate.TYPE_Y);
y2.setPosition(n.getBounds().getY());
y1.setPosition(PART_SPACE);
final Ordinate x = new Ordinate(Ordinate.TYPE_X);
x.setPosition(n.getBounds().getX() + poses[et]);
final Point p1 = new Point(x, y1);
final Point p2 = new Point(x, y2);
final PaintSector ps = new PaintSector(s, p1, p2, this);
r.addSector(ps);
} else if (et == MovingPanel.BOTTOM) {
final Ordinate y1 = new Ordinate(Ordinate.TYPE_Y);
final Ordinate y2 = new Ordinate(Ordinate.TYPE_Y);
y2.setPosition(n.getBounds().getY() + n.getBounds().getHeight());
y1.setPosition(PART_SPACE + getDoubleHeight());
final Ordinate x = new Ordinate(Ordinate.TYPE_X);
x.setPosition(n.getBounds().getX() + poses[et]);
final Point p1 = new Point(x, y1);
final Point p2 = new Point(x, y2);
final PaintSector ps = new PaintSector(s, p1, p2, this);
r.addSector(ps);
}
poses[et] += hs[et];
final Crosspoint cp = dataPlugin.createCrosspoint();
if (so != null) {
so.getStart().setCrosspointA(cp);
so.setFunction(n);
so.getStart().commit();
}
s.getStart().setCrosspointA(c);
s.getEnd().setCrosspointA(cp);
s.getEnd().setFunctionA(n);
s.getEnd().setFunctionTypeA(et);
s.getStart().setBorderTypeA(et);
s.getStart().commit();
s.getEnd().commit();
}
}
r.saveToFunction(f);
if (panel != null)
panel.getFrame().propertyChange(MChangeListener.RELOAD_FUNCTION_IN_TREE, dataPlugin.getBaseFunction());
((NFunction) f).clearSectorsBuffer();
f.unlock();
}
use of com.ramussoft.pb.idef.elements.Ordinate in project ramus by Vitaliy-Yakovchuk.
the class IDEF0Object method mouseClicked.
/**
* @see com.ramussoft.pb.idef.visual.MovingPanel#mouseClicked(com.dsoft.pb.types.FloatPoint)
*/
@Override
public void mouseClicked(final FloatPoint point) {
super.mouseClicked(point);
if (movingArea.getChangingState() == MovingArea.ARROW_CHANGING_STATE) {
if (movingArea.getPointChangingType() == SectorRefactor.TYPE_START) {
if (getTriangle(point) == RIGHT) {
final Ordinate x = new Ordinate(Ordinate.TYPE_X);
final Ordinate y = new Ordinate(Ordinate.TYPE_Y);
final Point p = new Point(x, y);
x.setPosition(getBounds().getRight());
y.setPosition(getBounds().getY() + point.getY());
final SectorRefactor.PerspectivePoint pp = new SectorRefactor.PerspectivePoint();
pp.point = p;
pp.x = p.getX();
pp.y = p.getY();
pp.setFunction(getFunction(), RIGHT);
pp.type = SectorRefactor.TYPE_START;
movingArea.getRefactor().setPoint(pp);
movingArea.doSector();
}
} else {
final int type = getTriangle(point);
if (type == -1 || type == RIGHT)
return;
final Ordinate x = new Ordinate(Ordinate.TYPE_X);
final Ordinate y = new Ordinate(Ordinate.TYPE_Y);
final Point p = new Point(x, y);
final SectorRefactor.PerspectivePoint pp = new SectorRefactor.PerspectivePoint();
pp.point = p;
switch(type) {
case LEFT:
{
pp.setFunction(getFunction(), LEFT);
x.setPosition(getBounds().getLeft());
y.setPosition(getBounds().getY() + point.getY());
}
break;
case TOP:
{
pp.setFunction(getFunction(), TOP);
x.setPosition(getBounds().getX() + point.getX());
y.setPosition(getBounds().getTop());
}
break;
case BOTTOM:
{
pp.setFunction(getFunction(), BOTTOM);
x.setPosition(getBounds().getX() + point.getX());
y.setPosition(getBounds().getBottom());
}
break;
}
pp.x = x.getPosition();
pp.y = y.getPosition();
pp.type = SectorRefactor.TYPE_END;
movingArea.getRefactor().setPoint(pp);
movingArea.doSector();
}
}
}
use of com.ramussoft.pb.idef.elements.Ordinate in project ramus by Vitaliy-Yakovchuk.
the class MouseSelection method onProcessEndBoundsChange.
public void onProcessEndBoundsChange(MovingArea movingArea, MovingText[] panels, FloatPoint diff) {
for (MovingText text : panels) if (text instanceof DFDSRole) {
IDEF0Object idef = (IDEF0Object) text;
if (contains(text))
idef.onProcessEndBoundsChange(sectors);
}
for (MovingText text : panels) {
if (!(text instanceof DFDSRole))
if (contains(text)) {
if (text instanceof IDEF0Object) {
IDEF0Object idef = (IDEF0Object) text;
idef.onProcessEndBoundsChange(sectors);
}
}
}
List<Ordinate> xOrdinates = new ArrayList<Ordinate>();
List<Ordinate> yOrdinates = new ArrayList<Ordinate>();
for (PaintSector ps : sectors) {
for (Point point : ps.getPoints()) {
boolean has;
has = false;
for (Ordinate o : xOrdinates) if (o.getOrdinateId() == point.getXOrdinate().getOrdinateId()) {
has = true;
break;
}
if (!has)
xOrdinates.add(point.getXOrdinate());
has = false;
for (Ordinate o : yOrdinates) if (o.getOrdinateId() == point.getYOrdinate().getOrdinateId()) {
has = true;
break;
}
if (!has)
yOrdinates.add(point.getYOrdinate());
}
}
List<PaintSector> psrs = new ArrayList<PaintSector>();
psrs.addAll(sectors);
for (Ordinate xOrdinate : xOrdinates) {
xOrdinate.setPosition(xOrdinate.getPosition() + diff.getX());
for (Point point : xOrdinate.getPoints()) if (!psrs.contains(point.getSector()))
psrs.add(point.getSector());
}
for (Ordinate yOrdinate : yOrdinates) {
yOrdinate.setPosition(yOrdinate.getPosition() + diff.getY());
for (Point point : yOrdinate.getPoints()) if (!psrs.contains(point.getSector()))
psrs.add(point.getSector());
}
MemoryData data = new MemoryData();
for (PaintSector paintSector : sectors) {
Function sFunction = paintSector.getSector().getStart().getFunction();
if (sFunction != null) {
switch(paintSector.getSector().getStart().getFunctionType()) {
case MovingFunction.LEFT:
paintSector.getStartPoint().setX(sFunction.getBounds().getLeft());
break;
case MovingFunction.RIGHT:
paintSector.getStartPoint().setX(sFunction.getBounds().getRight());
break;
case MovingFunction.TOP:
paintSector.getStartPoint().setY(sFunction.getBounds().getTop());
break;
case MovingFunction.BOTTOM:
paintSector.getStartPoint().setY(sFunction.getBounds().getBottom());
break;
}
}
sFunction = paintSector.getSector().getEnd().getFunction();
if (sFunction != null) {
switch(paintSector.getSector().getEnd().getFunctionType()) {
case MovingFunction.LEFT:
paintSector.getEndPoint().setX(sFunction.getBounds().getLeft());
break;
case MovingFunction.RIGHT:
paintSector.getEndPoint().setX(sFunction.getBounds().getRight());
break;
case MovingFunction.TOP:
paintSector.getEndPoint().setY(sFunction.getBounds().getTop());
break;
case MovingFunction.BOTTOM:
paintSector.getEndPoint().setY(sFunction.getBounds().getBottom());
break;
}
}
}
for (MovingText text : panels) {
if (!(text instanceof DFDSRole))
if (contains(text)) {
if (!(text instanceof IDEF0Object)) {
text.onProcessEndBoundsChange();
if (text instanceof MovingLabel)
((MovingLabel) text).boundsCopy = text.getBounds();
}
}
}
for (PaintSector ps : psrs) PaintSector.save(ps, data, movingArea.getDataPlugin().getEngine());
}
Aggregations