blob: 47453475af903175d3066ac121bdd40ae2012b66 [file] [log] [blame]
/*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.apache.poi.sl.draw.geom;
import java.awt.geom.Rectangle2D;
import java.util.HashMap;
import java.util.Map;
/**
* A guide formula in DrawingML.
* This is a base class for adjust values, geometric guides and bilt-in guides
*
* @author Yegor Kozlov
*/
public abstract class Formula {
String getName(){
return null;
}
abstract double evaluate(Context ctx);
static Map<String, Formula> builtInFormulas = new HashMap<String, Formula>();
static {
// 3 x 360 / 4 = 270
builtInFormulas.put("3cd4", new Formula(){
@Override
double evaluate(Context ctx){
return 270 * 60000;
}
});
// 3 x 360 / 8 = 135
builtInFormulas.put("3cd8", new Formula(){
@Override
double evaluate(Context ctx){
return 135 * 60000;
}
});
// 5 x 360 / 8 = 225
builtInFormulas.put("5cd8", new Formula(){
@Override
double evaluate(Context ctx){
return 270 * 60000;
}
});
// 7 x 360 / 8 = 315
builtInFormulas.put("7cd8", new Formula(){
@Override
double evaluate(Context ctx){
return 270 * 60000;
}
});
// bottom
builtInFormulas.put("b", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getY() + anchor.getHeight();
}
});
// 360 / 2 = 180
builtInFormulas.put("cd2", new Formula(){
@Override
double evaluate(Context ctx){
return 180 * 60000;
}
});
// 360 / 4 = 90
builtInFormulas.put("cd4", new Formula(){
@Override
double evaluate(Context ctx){
return 90 * 60000;
}
});
// 360 / 8 = 45
builtInFormulas.put("cd8", new Formula(){
@Override
double evaluate(Context ctx){
return 45 * 60000;
}
});
// horizontal center
builtInFormulas.put("hc", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getX() + anchor.getWidth()/2;
}
});
// height
builtInFormulas.put("h", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getHeight();
}
});
// height / 2
builtInFormulas.put("hd2", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getHeight()/2;
}
});
// height / 3
builtInFormulas.put("hd3", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getHeight()/3;
}
});
// height / 4
builtInFormulas.put("hd4", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getHeight()/4;
}
});
// height / 5
builtInFormulas.put("hd5", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getHeight()/5;
}
});
// height / 6
builtInFormulas.put("hd6", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getHeight()/6;
}
});
// height / 8
builtInFormulas.put("hd8", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getHeight()/8;
}
});
// left
builtInFormulas.put("l", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getX();
}
});
// long side
builtInFormulas.put("ls", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return Math.max(anchor.getWidth(), anchor.getHeight());
}
});
// right
builtInFormulas.put("r", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getX() + anchor.getWidth();
}
});
// short side
builtInFormulas.put("ss", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return Math.min(anchor.getWidth(), anchor.getHeight());
}
});
// short side / 2
builtInFormulas.put("ssd2", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
double ss = Math.min(anchor.getWidth(), anchor.getHeight());
return ss / 2;
}
});
// short side / 4
builtInFormulas.put("ssd4", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
double ss = Math.min(anchor.getWidth(), anchor.getHeight());
return ss / 4;
}
});
// short side / 6
builtInFormulas.put("ssd6", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
double ss = Math.min(anchor.getWidth(), anchor.getHeight());
return ss / 6;
}
});
// short side / 8
builtInFormulas.put("ssd8", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
double ss = Math.min(anchor.getWidth(), anchor.getHeight());
return ss / 8;
}
});
// short side / 16
builtInFormulas.put("ssd16", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
double ss = Math.min(anchor.getWidth(), anchor.getHeight());
return ss / 16;
}
});
// short side / 32
builtInFormulas.put("ssd32", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
double ss = Math.min(anchor.getWidth(), anchor.getHeight());
return ss / 32;
}
});
// top
builtInFormulas.put("t", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getY();
}
});
// vertical center
builtInFormulas.put("vc", new Formula(){
@Override
double evaluate(Context ctx){
Rectangle2D anchor = ctx.getShapeAnchor();
return anchor.getY() + anchor.getHeight()/2;
}
});
// width
builtInFormulas.put("w", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getWidth();
}
});
// width / 2
builtInFormulas.put("wd2", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getWidth()/2;
}
});
// width / 3
builtInFormulas.put("wd3", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getWidth()/3;
}
});
// width / 4
builtInFormulas.put("wd4", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getWidth()/4;
}
});
// width / 5
builtInFormulas.put("wd5", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getWidth()/5;
}
});
// width / 6
builtInFormulas.put("wd6", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getWidth()/6;
}
});
// width / 8
builtInFormulas.put("wd8", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getWidth()/8;
}
});
// width / 10
builtInFormulas.put("wd10", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getWidth()/10;
}
});
// width / 32
builtInFormulas.put("wd32", new Formula(){
@Override
double evaluate(Context ctx){
return ctx.getShapeAnchor().getWidth()/32;
}
});
}
}