/******************************************************************************* * Copyright 2010 Simon Mieth * * Licensed 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.kabeja.entities; import org.kabeja.common.Type; import org.kabeja.math.Bounds; import org.kabeja.math.Point3D; import org.kabeja.math.TransformContext; /** * @author <a href="mailto:simon.mieth@gmx.de>Simon Mieth</a> * */ public class Vertex extends Entity{ protected static final int LAZY_INDEX_STARTWIDTH=15; protected static final int LAZY_INDEX_ENDWIDTH=16; protected static final int LAZY_INDEX_BULGE=17; protected static final int LAZY_INDEX_POLYFACEMESHVERTEX_0=18; protected static final int LAZY_INDEX_POLYFACEMESHVERTEX_1=19; protected static final int LAZY_INDEX_POLYFACEMESHVERTEX_2=20; protected static final int LAZY_INDEX_POLYFACEMESHVERTEX_3=21; private Point3D p = null; public Vertex(Point3D p) { super(); this.p = p; } public Vertex() { this(new Point3D()); } /** * @return Returns the endWidth. */ public double getEndWidth() { if (this.lazyContainer.contains(LAZY_INDEX_ENDWIDTH)) { return ((Double)this.lazyContainer.get(LAZY_INDEX_ENDWIDTH)).doubleValue(); } return 0.0; } /** * @param endWidth * The endWidth to set. */ public void setEndWidth(double endWidth) { if(this.lazyContainer.contains(LAZY_INDEX_ENDWIDTH) || endWidth != 0.0){ this.lazyContainer.set(new Double(endWidth),LAZY_INDEX_ENDWIDTH); } } /** * @return Returns the startWidth. */ public double getStartWidth() { if (this.lazyContainer.contains(LAZY_INDEX_STARTWIDTH)) { return ((Double)this.lazyContainer.get(LAZY_INDEX_STARTWIDTH)).doubleValue(); } return 0.0; } /** * @param startWidth * The startWidth to set. */ public void setStartWidth(double startWidth) { if(this.lazyContainer.contains(LAZY_INDEX_STARTWIDTH) || startWidth != 0.0){ this.lazyContainer.set(new Double(startWidth),LAZY_INDEX_STARTWIDTH); } } public Bounds getBounds() { Bounds bounds = new Bounds(); bounds.addToBounds(this.p); return bounds; } /** * @return Returns the bulge. */ public double getBulge() { if (this.lazyContainer.contains(LAZY_INDEX_BULGE)) { return ((Double)this.lazyContainer.get(LAZY_INDEX_BULGE)).doubleValue(); } return 0.0; } /** * @param bulge * The bulge to set. */ public void setBulge(double bulge) { if(this.lazyContainer.contains(LAZY_INDEX_BULGE) || bulge != 0.0){ this.lazyContainer.set(new Double(bulge),LAZY_INDEX_BULGE); } } public Type<Vertex> getType() { return Type.TYPE_VERTEX; } public boolean isConstantWidth() { if (this.lazyContainer.contains(LAZY_INDEX_STARTWIDTH) && this.lazyContainer.contains(LAZY_INDEX_ENDWIDTH)) { return ((Double)this.lazyContainer.get(LAZY_INDEX_STARTWIDTH)).doubleValue() == ((Double)this.lazyContainer.get(LAZY_INDEX_ENDWIDTH)).doubleValue(); } else { return true; } } public boolean isCurveFitVertex() { return (this.flags & 1) == 1; } public boolean isTagentUsed() { return (this.flags & 2) == 2; } public boolean is2DSplineControlVertex() { return (this.flags & 16) == 16; } public boolean is2DSplineApproximationVertex() { return (this.flags & 8) == 8; } public boolean isPolyFaceMeshVertex() { // bit 7 and 8 are set return (((this.flags & 64) == 64) && ((this.flags & 128) == 128)); } public boolean isFaceRecord() { return this.flags == 128; } public boolean isMeshApproximationVertex() { return ((this.flags & 64) == 64) && ((this.flags & 8) == 8); } /** * @return Returns the polyFaceMeshVertex0. */ public int getPolyFaceMeshVertex0() { if (this.lazyContainer.contains(LAZY_INDEX_POLYFACEMESHVERTEX_0)) { return Math.abs(((Integer)this.lazyContainer.get(LAZY_INDEX_POLYFACEMESHVERTEX_0)).intValue()); } else { return 0; } } /** * @param polyFaceMeshVertex0 * The polyFaceMeshVertex0 to set. */ public void setPolyFaceMeshVertex0(int polyFaceMeshVertex0) { this.lazyContainer.set(new Integer(polyFaceMeshVertex0),LAZY_INDEX_POLYFACEMESHVERTEX_0); } /** * @return Returns the polyFaceMeshVertex1. */ public int getPolyFaceMeshVertex1() { if (this.lazyContainer.contains(LAZY_INDEX_POLYFACEMESHVERTEX_1)) { return Math.abs(((Integer)this.lazyContainer.get(LAZY_INDEX_POLYFACEMESHVERTEX_1)).intValue()); } else { return 0; } } /** * @param polyFaceMeshVertex1 * The polyFaceMeshVertex1 to set. */ public void setPolyFaceMeshVertex1(int polyFaceMeshVertex1) { this.lazyContainer.set(new Integer(polyFaceMeshVertex1),LAZY_INDEX_POLYFACEMESHVERTEX_1); } /** * @return Returns the polyFaceMeshVertex2. */ public int getPolyFaceMeshVertex2() { if (this.lazyContainer.contains(LAZY_INDEX_POLYFACEMESHVERTEX_2)) { return Math.abs(((Integer)this.lazyContainer.get(LAZY_INDEX_POLYFACEMESHVERTEX_2)).intValue()); } else { return 0; } } /** * @param polyFaceMeshVertex2 * The polyFaceMeshVertex2 to set. */ public void setPolyFaceMeshVertex2(int polyFaceMeshVertex2) { this.lazyContainer.set(new Integer(polyFaceMeshVertex2),LAZY_INDEX_POLYFACEMESHVERTEX_2); } /** * @return Returns the polyFaceMeshVertex3. */ public int getPolyFaceMeshVertex3() { if (this.lazyContainer.contains(LAZY_INDEX_POLYFACEMESHVERTEX_3)) { return Math.abs(((Integer)this.lazyContainer.get(LAZY_INDEX_POLYFACEMESHVERTEX_3)).intValue()); } else { return 0; } } /** * @param polyFaceMeshVertex3 * The polyFaceMeshVertex3 to set. */ public void setPolyFaceMeshVertex3(int polyFaceMeshVertex3) { this.lazyContainer.set(new Integer(polyFaceMeshVertex3),LAZY_INDEX_POLYFACEMESHVERTEX_3); } public boolean isPolyFaceEdge0Visible() { if (this.lazyContainer.contains(LAZY_INDEX_POLYFACEMESHVERTEX_0)) { return ((Integer)this.lazyContainer.get(LAZY_INDEX_POLYFACEMESHVERTEX_0)).intValue()>0; } else { return false; } } public boolean isPolyFaceEdge1Visible() { if (this.lazyContainer.contains(LAZY_INDEX_POLYFACEMESHVERTEX_1)) { return ((Integer)this.lazyContainer.get(LAZY_INDEX_POLYFACEMESHVERTEX_1)).intValue()>0; } else { return false; } } public boolean isPolyFaceEdge2Visible() { if (this.lazyContainer.contains(LAZY_INDEX_POLYFACEMESHVERTEX_2)) { return ((Integer)this.lazyContainer.get(LAZY_INDEX_POLYFACEMESHVERTEX_2)).intValue()>0; } else { return false; } } public boolean isPolyFaceEdge3Visible() { if (this.lazyContainer.contains(LAZY_INDEX_POLYFACEMESHVERTEX_3)) { return ((Integer)this.lazyContainer.get(LAZY_INDEX_POLYFACEMESHVERTEX_3)).intValue()>0; } else { return false; } } public double getLength(){ return 0.0; } public Point3D getPoint(){ return this.p; } /** * Not implemented yet */ public void transform(TransformContext context) { this.p = context.transform(this.p); } }