Java 类org.w3c.dom.svg.SVGPoint 实例源码
项目:Push2Display
文件:SVGTextContentSupport.java
/**
* To implement {@link
* org.w3c.dom.svg.SVGTextContentElement#getStartPositionOfChar(int charnum)}.
*/
public static SVGPoint getStartPositionOfChar
(Element elt, final int charnum) throws DOMException {
final SVGOMElement svgelt = (SVGOMElement)elt;
if ( (charnum < 0) ||
(charnum >= getNumberOfChars(elt)) ){
throw svgelt.createDOMException
(DOMException.INDEX_SIZE_ERR,
"",null);
}
final SVGTextContent context = (SVGTextContent)svgelt.getSVGContext();
return new SVGTextPoint(svgelt){
public float getX(){
return (float)SVGTextContentSupport.getStartPos
(this.svgelt, context, charnum).getX();
}
public float getY(){
return (float)SVGTextContentSupport.getStartPos
(this.svgelt, context, charnum).getY();
}
};
}
项目:Push2Display
文件:SVGTextContentSupport.java
/**
* To implement {@link
* org.w3c.dom.svg.SVGTextContentElement#getEndPositionOfChar(int charnum)}.
*/
public static SVGPoint getEndPositionOfChar
(Element elt,final int charnum) throws DOMException {
final SVGOMElement svgelt = (SVGOMElement)elt;
if ( (charnum < 0) ||
(charnum >= getNumberOfChars(elt)) ){
throw svgelt.createDOMException
(DOMException.INDEX_SIZE_ERR,
"",null);
}
final SVGTextContent context = (SVGTextContent)svgelt.getSVGContext();
return new SVGTextPoint(svgelt){
public float getX(){
return (float)SVGTextContentSupport.getEndPos
(this.svgelt, context, charnum).getX();
}
public float getY(){
return (float)SVGTextContentSupport.getEndPos
(this.svgelt, context, charnum).getY();
}
};
}
项目:elki
文件:BatikUtil.java
/**
* Get the relative coordinates of a point within the coordinate system of a
* particular SVG Element.
*
* @param evt Event, needs to be a DOMMouseEvent
* @param reference SVG Element the coordinate system is used of
* @return Array containing the X and Y values
*/
public static double[] getRelativeCoordinates(Event evt, Element reference) {
if(evt instanceof DOMMouseEvent && reference instanceof SVGLocatable && reference instanceof SVGElement) {
// Get the screen (pixel!) coordinates
DOMMouseEvent gnme = (DOMMouseEvent) evt;
SVGMatrix mat = ((SVGLocatable) reference).getScreenCTM();
SVGMatrix imat = mat.inverse();
SVGPoint cPt = ((SVGElement) reference).getOwnerSVGElement().createSVGPoint();
cPt.setX(gnme.getClientX());
cPt.setY(gnme.getClientY());
// Have Batik transform the screen (pixel!) coordinates into SVG element
// coordinates
cPt = cPt.matrixTransform(imat);
return new double[] { cPt.getX(), cPt.getY() };
}
return null;
}
项目:elki
文件:SVGUtil.java
/**
* Convert the coordinates of an DOM Event from screen into element
* coordinates.
*
* @param doc Document context
* @param tag Element containing the coordinate system
* @param evt Event to interpret
* @return coordinates
*/
public static SVGPoint elementCoordinatesFromEvent(Document doc, Element tag, Event evt) {
try {
DOMMouseEvent gnme = (DOMMouseEvent) evt;
SVGMatrix mat = ((SVGLocatable) tag).getScreenCTM();
SVGMatrix imat = mat.inverse();
SVGPoint cPt = ((SVGDocument) doc).getRootElement().createSVGPoint();
cPt.setX(gnme.getClientX());
cPt.setY(gnme.getClientY());
return cPt.matrixTransform(imat);
}
catch(Exception e) {
LoggingUtil.warning("Error getting coordinates from SVG event.", e);
return null;
}
}
项目:elki
文件:OPTICSPlotSelectionVisualization.java
@Override
public boolean duringDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
ClusterOrder order = getClusterOrder();
int mouseDownIndex = getSelectedIndex(order, startPoint);
int mouseActIndex = getSelectedIndex(order, dragPoint);
final int begin = Math.max(Math.min(mouseDownIndex, mouseActIndex), 0);
final int end = Math.min(Math.max(mouseDownIndex, mouseActIndex), order.size());
double width = plotwidth / order.size();
double x1 = begin * width;
double x2 = (end * width) + width;
mtag.removeChild(mtag.getLastChild());
Element marker = addMarkerRect(x1, x2 - x1);
SVGUtil.setCSSClass(marker, CSS_RANGEMARKER);
mtag.appendChild(marker);
return true;
}
项目:Push2Display
文件:SVGTextContentSupport.java
/**
* To implement {@link
* org.w3c.dom.svg.SVGTextContentElement#getStartPositionOfChar(int charnum)}.
*/
public static SVGPoint getStartPositionOfChar
(Element elt, final int charnum) throws DOMException {
final SVGOMElement svgelt = (SVGOMElement)elt;
if ( (charnum < 0) ||
(charnum >= getNumberOfChars(elt)) ){
throw svgelt.createDOMException
(DOMException.INDEX_SIZE_ERR,
"",null);
}
final SVGTextContent context = (SVGTextContent)svgelt.getSVGContext();
return new SVGTextPoint(svgelt){
public float getX(){
return (float)SVGTextContentSupport.getStartPos
(this.svgelt, context, charnum).getX();
}
public float getY(){
return (float)SVGTextContentSupport.getStartPos
(this.svgelt, context, charnum).getY();
}
};
}
项目:Push2Display
文件:SVGTextContentSupport.java
/**
* To implement {@link
* org.w3c.dom.svg.SVGTextContentElement#getEndPositionOfChar(int charnum)}.
*/
public static SVGPoint getEndPositionOfChar
(Element elt,final int charnum) throws DOMException {
final SVGOMElement svgelt = (SVGOMElement)elt;
if ( (charnum < 0) ||
(charnum >= getNumberOfChars(elt)) ){
throw svgelt.createDOMException
(DOMException.INDEX_SIZE_ERR,
"",null);
}
final SVGTextContent context = (SVGTextContent)svgelt.getSVGContext();
return new SVGTextPoint(svgelt){
public float getX(){
return (float)SVGTextContentSupport.getEndPos
(this.svgelt, context, charnum).getX();
}
public float getY(){
return (float)SVGTextContentSupport.getEndPos
(this.svgelt, context, charnum).getY();
}
};
}
项目:incubator-taverna-workbench
文件:SVGGraphController.java
@Override
public boolean startEdgeCreation(GraphElement graphElement, Point point) {
boolean alreadyStarted = edgeCreationFromSource || edgeCreationFromSink;
boolean started = super.startEdgeCreation(graphElement, point);
if (!alreadyStarted && started) {
if (edgeMoveElement instanceof SVGGraphEdge) {
SVGGraphEdge svgGraphEdge = (SVGGraphEdge) edgeMoveElement;
SVGPoint sourcePoint = svgGraphEdge.getPathElement()
.getPointAtLength(0f);
edgeLine.setSourcePoint(new Point((int) sourcePoint.getX(),
(int) sourcePoint.getY()));
} else
edgeLine.setSourcePoint(point);
edgeLine.setTargetPoint(point);
edgeLine.setColour(Color.BLACK);
// edgeLine.setVisible(true);
}
return started;
}
项目:feathers-sdk
文件:SVGTextContentSupport.java
/**
* To implement {@link
* org.w3c.dom.svg.SVGTextContentElement#getStartPositionOfChar(int charnum)}.
*/
public static SVGPoint getStartPositionOfChar
(Element elt, final int charnum) throws DOMException {
final SVGOMElement svgelt = (SVGOMElement)elt;
if ( (charnum < 0) ||
(charnum >= getNumberOfChars(elt)) ){
throw svgelt.createDOMException
(DOMException.INDEX_SIZE_ERR,
"",null);
}
final SVGTextContent context = (SVGTextContent)svgelt.getSVGContext();
return new SVGTextPoint(svgelt){
public float getX(){
return (float)SVGTextContentSupport.getStartPos
(this.svgelt, context, charnum).getX();
}
public float getY(){
return (float)SVGTextContentSupport.getStartPos
(this.svgelt, context, charnum).getY();
}
};
}
项目:feathers-sdk
文件:SVGTextContentSupport.java
/**
* To implement {@link
* org.w3c.dom.svg.SVGTextContentElement#getEndPositionOfChar(int charnum)}.
*/
public static SVGPoint getEndPositionOfChar
(Element elt,final int charnum) throws DOMException {
final SVGOMElement svgelt = (SVGOMElement)elt;
if ( (charnum < 0) ||
(charnum >= getNumberOfChars(elt)) ){
throw svgelt.createDOMException
(DOMException.INDEX_SIZE_ERR,
"",null);
}
final SVGTextContent context = (SVGTextContent)svgelt.getSVGContext();
return new SVGTextPoint(svgelt){
public float getX(){
return (float)SVGTextContentSupport.getEndPos
(this.svgelt, context, charnum).getX();
}
public float getY(){
return (float)SVGTextContentSupport.getEndPos
(this.svgelt, context, charnum).getY();
}
};
}
项目:visual-programming
文件:SvgObject.java
public Rectangle2D.Float getBorderScreenPosition() {
Rectangle2D.Float rect = getBorder();
SVGElement eleBorder = getElement(SvgElementType.Border);
SVGMatrix matrix = ((SVGLocatable) eleBorder).getScreenCTM();
SVGPoint leftTopCoordinatePoint = new SVGOMPoint(rect.x, rect.y);
SVGPoint leftTopScreenPoint = leftTopCoordinatePoint
.matrixTransform(matrix);
SVGPoint rightBottomCoordinatePoint = new SVGOMPoint(rect.x
+ rect.width, rect.y + rect.height);
SVGPoint rightBottomScreenPoint = rightBottomCoordinatePoint
.matrixTransform(matrix);
Rectangle2D.Float result = new Rectangle2D.Float(
leftTopScreenPoint.getX(), leftTopScreenPoint.getY(),
rightBottomScreenPoint.getX() - leftTopScreenPoint.getX(),
rightBottomScreenPoint.getY() - leftTopScreenPoint.getY());
return result;
}
项目:visual-programming
文件:SvgTransformBox.java
public void setScreenRect(Rectangle2D.Float rect) {
this.screenRect = rect;
SVGMatrix matrix = objectElement.getScreenCTM();
SVGPoint leftTopScreenPoint = new SVGOMPoint(rect.x, rect.y);
SVGPoint leftTopCoorindatePoint = leftTopScreenPoint
.matrixTransform(matrix.inverse());
SVGPoint rightBottomScreenPoint = new SVGOMPoint(rect.x + rect.width,
rect.y + rect.height);
SVGPoint rightBottomCoorindatePoint = rightBottomScreenPoint
.matrixTransform(matrix.inverse());
Rectangle2D.Float coordinateRect = new Rectangle2D.Float(
leftTopCoorindatePoint.getX(), leftTopCoorindatePoint.getY(),
rightBottomCoorindatePoint.getX()
- leftTopCoorindatePoint.getX(),
rightBottomCoorindatePoint.getY()
- leftTopCoorindatePoint.getY());
setCoordinateRectangle("", coordinateRect);
}
项目:Push2Display
文件:SVGPolygonElementBridge.java
/**
* Constructs a polygon according to the specified parameters.
*
* @param ctx the bridge context to use
* @param e the element that describes a rect element
* @param shapeNode the shape node to initialize
*/
protected void buildShape(BridgeContext ctx,
Element e,
ShapeNode shapeNode) {
SVGOMPolygonElement pe = (SVGOMPolygonElement) e;
try {
SVGOMAnimatedPoints _points = pe.getSVGOMAnimatedPoints();
_points.check();
SVGPointList pl = _points.getAnimatedPoints();
int size = pl.getNumberOfItems();
if (size == 0) {
shapeNode.setShape(DEFAULT_SHAPE);
} else {
AWTPolygonProducer app = new AWTPolygonProducer();
app.setWindingRule(CSSUtilities.convertFillRule(e));
app.startPoints();
for (int i = 0; i < size; i++) {
SVGPoint p = pl.getItem(i);
app.point(p.getX(), p.getY());
}
app.endPoints();
shapeNode.setShape(app.getShape());
}
} catch (LiveAttributeException ex) {
throw new BridgeException(ctx, ex);
}
}
项目:Push2Display
文件:SVGPolylineElementBridge.java
/**
* Constructs a polyline according to the specified parameters.
*
* @param ctx the bridge context to use
* @param e the element that describes a rect element
* @param shapeNode the shape node to initialize
*/
protected void buildShape(BridgeContext ctx,
Element e,
ShapeNode shapeNode) {
SVGOMPolylineElement pe = (SVGOMPolylineElement) e;
try {
SVGOMAnimatedPoints _points = pe.getSVGOMAnimatedPoints();
_points.check();
SVGPointList pl = _points.getAnimatedPoints();
int size = pl.getNumberOfItems();
if (size == 0) {
shapeNode.setShape(DEFAULT_SHAPE);
} else {
AWTPolylineProducer app = new AWTPolylineProducer();
app.setWindingRule(CSSUtilities.convertFillRule(e));
app.startPoints();
for (int i = 0; i < size; i++) {
SVGPoint p = pl.getItem(i);
app.point(p.getX(), p.getY());
}
app.endPoints();
shapeNode.setShape(app.getShape());
}
} catch (LiveAttributeException ex) {
throw new BridgeException(ctx, ex);
}
}
项目:Push2Display
文件:SVGOMPoint.java
/**
* Transforms an {@link SVGPoint} by an {@link SVGMatrix} and returns
* the new point.
*/
public static SVGPoint matrixTransform(SVGPoint point, SVGMatrix matrix) {
float newX = matrix.getA() * point.getX() + matrix.getC() * point.getY()
+ matrix.getE();
float newY = matrix.getB() * point.getX() + matrix.getD() * point.getY()
+ matrix.getF();
return new SVGOMPoint(newX, newY);
}
项目:Push2Display
文件:AbstractSVGPointList.java
/**
* Asserts that the given item is an {@link SVGPoint}.
*/
protected void checkItemType(Object newItem) throws SVGException {
if (!(newItem instanceof SVGPoint)) {
createSVGException(SVGException.SVG_WRONG_TYPE_ERR,
"expected.point", null);
}
}
项目:Push2Display
文件:SVGOMAnimatedPoints.java
/**
* Returns the base value of the attribute as an {@link AnimatableValue}.
*/
public AnimatableValue getUnderlyingValue(AnimationTarget target) {
SVGPointList pl = getPoints();
int n = pl.getNumberOfItems();
float[] points = new float[n * 2];
for (int i = 0; i < n; i++) {
SVGPoint p = pl.getItem(i);
points[i * 2] = p.getX();
points[i * 2 + 1] = p.getY();
}
return new AnimatablePointListValue(target, points);
}
项目:Push2Display
文件:SVGOMAnimatedPoints.java
/**
* <b>DOM</b>: Implements {@link SVGPointList#getItem(int)}.
*/
public SVGPoint getItem(int index) throws DOMException {
if (hasAnimVal) {
return super.getItem(index);
}
return getPoints().getItem(index);
}
项目:Push2Display
文件:SVGOMAnimatedPoints.java
/**
* <b>DOM</b>: Implements {@link SVGPointList#initialize(SVGPoint)}.
*/
public SVGPoint initialize(SVGPoint newItem)
throws DOMException, SVGException {
throw element.createDOMException
(DOMException.NO_MODIFICATION_ALLOWED_ERR,
"readonly.point.list", null);
}
项目:Push2Display
文件:SVGOMAnimatedPoints.java
/**
* <b>DOM</b>: Implements {@link
* SVGPointList#insertItemBefore(SVGPoint, int)}.
*/
public SVGPoint insertItemBefore(SVGPoint newItem, int index)
throws DOMException, SVGException {
throw element.createDOMException
(DOMException.NO_MODIFICATION_ALLOWED_ERR,
"readonly.point.list", null);
}
项目:Push2Display
文件:SVGOMAnimatedPoints.java
/**
* <b>DOM</b>: Implements {@link
* SVGPointList#replaceItem(SVGPoint, int)}.
*/
public SVGPoint replaceItem(SVGPoint newItem, int index)
throws DOMException, SVGException {
throw element.createDOMException
(DOMException.NO_MODIFICATION_ALLOWED_ERR,
"readonly.point.list", null);
}
项目:elki
文件:SelectionToolLineVisualization.java
@Override
public boolean duringDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
deleteChildren(rtag);
double x = Math.min(startPoint.getX(), dragPoint.getX());
double y = Math.min(startPoint.getY(), dragPoint.getY());
double width = Math.abs(startPoint.getX() - dragPoint.getX());
double height = Math.abs(startPoint.getY() - dragPoint.getY());
rtag.appendChild(svgp.svgRect(x, y, width, height));
return true;
}
项目:elki
文件:SelectionToolLineVisualization.java
@Override
public boolean endDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
Mode mode = getInputMode(evt);
deleteChildren(rtag);
if(startPoint.getX() != dragPoint.getX() || startPoint.getY() != dragPoint.getY()) {
updateSelection(mode, startPoint, dragPoint);
}
return true;
}
项目:elki
文件:SelectionToolLineVisualization.java
/**
* Updates the selection in the context.<br>
*
* @param mode Input mode
* @param p1 first point of the selected rectangle
* @param p2 second point of the selected rectangle
*/
private void updateSelection(Mode mode, SVGPoint p1, SVGPoint p2) {
DBIDSelection selContext = context.getSelection();
// Note: we rely on SET semantics below!
final HashSetModifiableDBIDs selection;
if(selContext == null || mode == Mode.REPLACE) {
selection = DBIDUtil.newHashSet();
}
else {
selection = DBIDUtil.newHashSet(selContext.getSelectedIds());
}
int[] axisrange = getAxisRange(Math.min(p1.getX(), p2.getX()), Math.max(p1.getX(), p2.getX()));
DBIDs ids = SamplingResult.getSamplingResult(relation).getSample();
for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
double[] yPos = proj.fastProjectDataToRenderSpace(relation.get(iter));
if(checkSelected(axisrange, yPos, Math.max(p1.getX(), p2.getX()), Math.min(p1.getX(), p2.getX()), Math.max(p1.getY(), p2.getY()), Math.min(p1.getY(), p2.getY()))) {
if(mode == Mode.INVERT) {
if(!selection.contains(iter)) {
selection.add(iter);
}
else {
selection.remove(iter);
}
}
else {
// In REPLACE and ADD, add objects.
// The difference was done before by not re-using the selection.
// Since we are using a set, we can just add in any case.
selection.add(iter);
}
}
}
context.setSelection(new DBIDSelection(selection));
}
项目:elki
文件:SelectionToolAxisRangeVisualization.java
@Override
public boolean duringDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
deleteChildren(rtag);
double x = Math.min(startPoint.getX(), dragPoint.getX());
double y = Math.min(startPoint.getY(), dragPoint.getY());
double width = Math.abs(startPoint.getX() - dragPoint.getX());
double height = Math.abs(startPoint.getY() - dragPoint.getY());
rtag.appendChild(svgp.svgRect(x, y, width, height));
return true;
}
项目:elki
文件:SelectionToolAxisRangeVisualization.java
@Override
public boolean endDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
deleteChildren(rtag);
if(startPoint.getX() != dragPoint.getX() || startPoint.getY() != dragPoint.getY()) {
updateSelection(proj, startPoint, dragPoint);
}
return true;
}
项目:elki
文件:OPTICSPlotSelectionVisualization.java
@Override
public boolean startDrag(SVGPoint startPoint, Event evt) {
ClusterOrder order = getClusterOrder();
int mouseActIndex = getSelectedIndex(order, startPoint);
if(mouseActIndex >= 0 && mouseActIndex < order.size()) {
double width = plotwidth / order.size();
double x1 = mouseActIndex * width;
Element marker = addMarkerRect(x1, width);
SVGUtil.setCSSClass(marker, CSS_RANGEMARKER);
mtag.appendChild(marker);
return true;
}
return false;
}
项目:elki
文件:OPTICSPlotSelectionVisualization.java
@Override
public boolean endDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
ClusterOrder order = getClusterOrder();
int mouseDownIndex = getSelectedIndex(order, startPoint);
int mouseActIndex = getSelectedIndex(order, dragPoint);
Mode mode = getInputMode(evt);
final int begin = Math.max(Math.min(mouseDownIndex, mouseActIndex), 0);
final int end = Math.min(Math.max(mouseDownIndex, mouseActIndex), order.size());
updateSelection(mode, begin, end);
return true;
}
项目:elki
文件:OPTICSPlotCutVisualization.java
@Override
public boolean startDrag(SVGPoint start, Event evt) {
epsilon = getEpsilonFromY(plotheight - start.getY());
// opvis.unsetEpsilonExcept(this);
svgp.requestRedraw(this.task, this);
return true;
}
项目:elki
文件:OPTICSPlotCutVisualization.java
@Override
public boolean duringDrag(SVGPoint start, SVGPoint end, Event evt, boolean inside) {
if(inside) {
epsilon = getEpsilonFromY(plotheight - end.getY());
}
// opvis.unsetEpsilonExcept(this);
svgp.requestRedraw(this.task, this);
return true;
}
项目:elki
文件:OPTICSPlotCutVisualization.java
@Override
public boolean endDrag(SVGPoint start, SVGPoint end, Event evt, boolean inside) {
if(inside) {
epsilon = getEpsilonFromY(plotheight - end.getY());
// opvis.unsetEpsilonExcept(this);
// FIXME: replace an existing optics cut result!
final ClusterOrder order = optics.getResult();
Clustering<Model> cl = OPTICSCut.makeOPTICSCut(order, epsilon);
order.addChildResult(cl);
}
svgp.requestRedraw(this.task, this);
return true;
}
项目:elki
文件:SelectionToolCubeVisualization.java
@Override
public boolean duringDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
deleteChildren(rtag);
double x = Math.min(startPoint.getX(), dragPoint.getX());
double y = Math.min(startPoint.getY(), dragPoint.getY());
double width = Math.abs(startPoint.getX() - dragPoint.getX());
double height = Math.abs(startPoint.getY() - dragPoint.getY());
rtag.appendChild(svgp.svgRect(x, y, width, height));
return true;
}
项目:elki
文件:SelectionToolCubeVisualization.java
@Override
public boolean endDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
deleteChildren(rtag);
if(startPoint.getX() != dragPoint.getX() || startPoint.getY() != dragPoint.getY()) {
updateSelection(startPoint, dragPoint);
}
return true;
}
项目:elki
文件:MoveObjectsToolVisualization.java
@Override
public boolean endDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
double[] movingVector = new double[] { //
dragPoint.getX() - startPoint.getX(), //
dragPoint.getY() - startPoint.getY() };
if(context.getSelection() != null) {
updateDB(context.getSelection().getSelectedIds(), movingVector);
}
deleteChildren(rtag);
return true;
}
项目:elki
文件:SelectionToolDotVisualization.java
@Override
public boolean duringDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
deleteChildren(rtag);
double x = Math.min(startPoint.getX(), dragPoint.getX());
double y = Math.min(startPoint.getY(), dragPoint.getY());
double width = Math.abs(startPoint.getX() - dragPoint.getX());
double height = Math.abs(startPoint.getY() - dragPoint.getY());
rtag.appendChild(svgp.svgRect(x, y, width, height));
return true;
}
项目:elki
文件:SelectionToolDotVisualization.java
@Override
public boolean endDrag(SVGPoint startPoint, SVGPoint dragPoint, Event evt, boolean inside) {
Mode mode = getInputMode(evt);
deleteChildren(rtag);
if(startPoint.getX() != dragPoint.getX() || startPoint.getY() != dragPoint.getY()) {
updateSelection(mode, proj, startPoint, dragPoint);
}
return true;
}
项目:elki
文件:SelectionToolDotVisualization.java
/**
* Updates the selection in the context.<br>
*
* @param mode Input mode
* @param proj
* @param p1 first point of the selected rectangle
* @param p2 second point of the selected rectangle
*/
private void updateSelection(Mode mode, Projection2D proj, SVGPoint p1, SVGPoint p2) {
DBIDSelection selContext = context.getSelection();
// Note: we rely on SET semantics below!
HashSetModifiableDBIDs selection;
if(selContext == null || mode == Mode.REPLACE) {
selection = DBIDUtil.newHashSet();
}
else {
selection = DBIDUtil.newHashSet(selContext.getSelectedIds());
}
for(DBIDIter iditer = rel.iterDBIDs(); iditer.valid(); iditer.advance()) {
double[] vec = proj.fastProjectDataToRenderSpace(rel.get(iditer));
if(vec[0] >= Math.min(p1.getX(), p2.getX()) && vec[0] <= Math.max(p1.getX(), p2.getX()) && vec[1] >= Math.min(p1.getY(), p2.getY()) && vec[1] <= Math.max(p1.getY(), p2.getY())) {
if(mode == Mode.INVERT) {
if(!selection.contains(iditer)) {
selection.add(iditer);
}
else {
selection.remove(iditer);
}
}
else {
// In REPLACE and ADD, add objects.
// The difference was done before by not re-using the selection.
// Since we are using a set, we can just add in any case.
selection.add(iditer);
}
}
}
context.setSelection(new DBIDSelection(selection));
}
项目:Push2Display
文件:SVGPolygonElementBridge.java
/**
* Constructs a polygon according to the specified parameters.
*
* @param ctx the bridge context to use
* @param e the element that describes a rect element
* @param shapeNode the shape node to initialize
*/
protected void buildShape(BridgeContext ctx,
Element e,
ShapeNode shapeNode) {
SVGOMPolygonElement pe = (SVGOMPolygonElement) e;
try {
SVGOMAnimatedPoints _points = pe.getSVGOMAnimatedPoints();
_points.check();
SVGPointList pl = _points.getAnimatedPoints();
int size = pl.getNumberOfItems();
if (size == 0) {
shapeNode.setShape(DEFAULT_SHAPE);
} else {
AWTPolygonProducer app = new AWTPolygonProducer();
app.setWindingRule(CSSUtilities.convertFillRule(e));
app.startPoints();
for (int i = 0; i < size; i++) {
SVGPoint p = pl.getItem(i);
app.point(p.getX(), p.getY());
}
app.endPoints();
shapeNode.setShape(app.getShape());
}
} catch (LiveAttributeException ex) {
throw new BridgeException(ctx, ex);
}
}
项目:Push2Display
文件:SVGPolylineElementBridge.java
/**
* Constructs a polyline according to the specified parameters.
*
* @param ctx the bridge context to use
* @param e the element that describes a rect element
* @param shapeNode the shape node to initialize
*/
protected void buildShape(BridgeContext ctx,
Element e,
ShapeNode shapeNode) {
SVGOMPolylineElement pe = (SVGOMPolylineElement) e;
try {
SVGOMAnimatedPoints _points = pe.getSVGOMAnimatedPoints();
_points.check();
SVGPointList pl = _points.getAnimatedPoints();
int size = pl.getNumberOfItems();
if (size == 0) {
shapeNode.setShape(DEFAULT_SHAPE);
} else {
AWTPolylineProducer app = new AWTPolylineProducer();
app.setWindingRule(CSSUtilities.convertFillRule(e));
app.startPoints();
for (int i = 0; i < size; i++) {
SVGPoint p = pl.getItem(i);
app.point(p.getX(), p.getY());
}
app.endPoints();
shapeNode.setShape(app.getShape());
}
} catch (LiveAttributeException ex) {
throw new BridgeException(ctx, ex);
}
}
项目:Push2Display
文件:SVGOMPoint.java
/**
* Transforms an {@link SVGPoint} by an {@link SVGMatrix} and returns
* the new point.
*/
public static SVGPoint matrixTransform(SVGPoint point, SVGMatrix matrix) {
float newX = matrix.getA() * point.getX() + matrix.getC() * point.getY()
+ matrix.getE();
float newY = matrix.getB() * point.getX() + matrix.getD() * point.getY()
+ matrix.getF();
return new SVGOMPoint(newX, newY);
}