All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.poi.sl.draw.geom.Guide Maven / Gradle / Ivy

Go to download

The Apache Commons Codec package contains simple encoder and decoders for various formats such as Base64 and Hexadecimal. In addition to these widely used encoders and decoders, the codec package also maintains a collection of phonetic encoding utilities.

There is a newer version: 62
Show newest version
/*
 *  ====================================================================
 *    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 static java.lang.Math.*;

import java.util.Objects;
import java.util.regex.Pattern;

/**
 * 

Java class for CT_GeomGuide complex type. * *

The following schema fragment specifies the expected content contained within this class. * *

 * <complexType name="CT_GeomGuide">
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <attribute name="name" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_GeomGuideName" />
 *       <attribute name="fmla" use="required" type="{http://schemas.openxmlformats.org/drawingml/2006/main}ST_GeomGuideFormula" />
 *     </restriction>
 *   </complexContent>
 * </complexType>
 * 
* * */ // @XmlAccessorType(XmlAccessType.FIELD) // @XmlType(name = "CT_GeomGuide") public class Guide implements Formula { enum Op { muldiv,addsub,adddiv,ifelse,val,abs,sqrt,max,min,at2,sin,cos,tan,cat2,sat2,pin,mod } private static final Pattern WHITESPACE = Pattern.compile("\\s+"); // @XmlAttribute(name = "name", required = true) // @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String name; // @XmlAttribute(name = "fmla", required = true) private String fmla; private Op op; private String[] operands; public String getName(){ return name; } public void setName(String name) { this.name = name; } public String getFmla() { return fmla; } public void setFmla(String fmla) { this.fmla = fmla; operands = WHITESPACE.split(fmla); switch (operands[0]) { case "*/": op = Op.muldiv; break; case "+-": op = Op.addsub; break; case "+/": op = Op.adddiv; break; case "?:": op = Op.ifelse; break; default: op = Op.valueOf(operands[0]); break; } } @Override public double evaluate(Context ctx) { double x = (operands.length > 1) ? ctx.getValue(operands[1]) : 0; double y = (operands.length > 2) ? ctx.getValue(operands[2]) : 0; double z = (operands.length > 3) ? ctx.getValue(operands[3]) : 0; switch (op) { case abs: // Absolute Value Formula return abs(x); case adddiv: // Add Divide Formula return (z == 0) ? 0 : (x + y) / z; case addsub: // Add Subtract Formula return (x + y) - z; case at2: // ArcTan Formula: "at2 x y" = arctan( y / z ) = value of this guide return toDegrees(atan2(y, x)) * OOXML_DEGREE; case cos: // Cosine Formula: "cos x y" = (x * cos( y )) = value of this guide return x * cos(toRadians(y / OOXML_DEGREE)); case cat2: // Cosine ArcTan Formula: "cat2 x y z" = (x * cos(arctan(z / y) )) = value of this guide return x * cos(atan2(z, y)); case ifelse: // If Else Formula: "?: x y z" = if (x > 0), then y = value of this guide, // else z = value of this guide return x > 0 ? y : z; case val: // Literal Value Expression return x; case max: // Maximum Value Formula return max(x, y); case min: // Minimum Value Formula return min(x, y); case mod: // Modulo Formula: "mod x y z" = sqrt(x^2 + b^2 + c^2) = value of this guide return sqrt(x*x + y*y + z*z); case muldiv: // Multiply Divide Formula return (z == 0) ? 0 : (x * y) / z; case pin: // Pin To Formula: "pin x y z" = if (y < x), then x = value of this guide // else if (y > z), then z = value of this guide // else y = value of this guide return max(x, min(y, z)); case sat2: // Sine ArcTan Formula: "sat2 x y z" = (x*sin(arctan(z / y))) = value of this guide return x * sin(atan2(z, y)); case sin: // Sine Formula: "sin x y" = (x * sin( y )) = value of this guide return x * sin(toRadians(y / OOXML_DEGREE)); case sqrt: // Square Root Formula: "sqrt x" = sqrt(x) = value of this guide return sqrt(x); case tan: // Tangent Formula: "tan x y" = (x * tan( y )) = value of this guide return x * tan(toRadians(y / OOXML_DEGREE)); default: return 0; } } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Guide guide = (Guide) o; return Objects.equals(name, guide.name) && Objects.equals(fmla, guide.fmla); } @Override public int hashCode() { return Objects.hash(name, fmla); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy