summaryrefslogtreecommitdiffstats
path: root/src/demos/nurbs/surfaceapp/Surface.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/demos/nurbs/surfaceapp/Surface.java')
-rwxr-xr-xsrc/demos/nurbs/surfaceapp/Surface.java472
1 files changed, 0 insertions, 472 deletions
diff --git a/src/demos/nurbs/surfaceapp/Surface.java b/src/demos/nurbs/surfaceapp/Surface.java
deleted file mode 100755
index b96ff72..0000000
--- a/src/demos/nurbs/surfaceapp/Surface.java
+++ /dev/null
@@ -1,472 +0,0 @@
-package demos.nurbs.surfaceapp;
-
-import java.io.File;
-import java.util.Vector;
-
-import simple.xml.Element;
-import simple.xml.ElementList;
-import simple.xml.Root;
-import simple.xml.Serializer;
-import simple.xml.load.Persister;
-
-/**
- * Třída definice NURBS plochy, vystavěna podle návrhového vzoru Singleton
- * @author Tomáš Hráský
- *
- */
-@Root(name="surface")
-public class Surface {
- /**
- * Odkaz na instanci třídy
- */
- private static Surface singleton;
- /**
- * Indikuje, zda je zadání plochy kompletní
- */
- @Element(name="finished")
- private boolean isSurfaceFinished=false;
-
- /**
- * Index aktuálního vybraného řídícího bodu
- */
- private int bodIndex = -1;
-
- /**
- * Stupeň plocy ve směru parametru U
- */
- @Element(name="orderU")
- private int orderU=3;
-
- /**
- * Stupeň plochy ve směru parametru V
- */
- @Element(name="orderV")
- private int orderV=3;
-
- /**
- * Počet řídících bodů ve směru parametru V
- */
- @Element(name="pointsInV")
- private int pointsInV=4;
-
- /**
- * Počet řídících bodů ve směru parametru U
- */
- @Element(name="pointsInU")
- private int pointsInU=4;
-
-
- /**
- * Pole souřadnic řídícíh bodů
- *
- */
- private float[] ctrlPoints
- // ={
- // -150f,-150f, 400f,1f,
- // -50f,-150f, 200f, 1f,
- // 50f,-150f,-100f, 1f,
- // 150f,-150f, 200f,1f,
- // -150f,-50f, 100f, 1f,
- // -50f,-50f, 300f, 1f,
- // 50f,-50f, 0f, 1f,
- // 150f,-50f,-100f,1f,
- // -150f, 50f, 400f, 1f,
- // -50f, 50f, 0f, 1f,
- // 50f, 50f, 300f, 1f,
- // 150f, 50f, 400f,1f,
- // -150f, 150f,-200f, 1f,
- // -50f, 150f,-200f, 1f,
- // 50f, 150f, 0f, 1f,
- // 150f, 150f,-100f,1f}
- ;
- /**
- * Pole hodnot uzlového vektoru ve směru parametru U
- */
- private float knotsU[]
- // ={0.0f, 0.0f, 0.0f, 0.0f,
- // 1f, 1f, 1.0f, 1.0f}
- ;
-
- /**
- * Pole hodnot uzlového vektoru ve směru parametru V
- */
- private float knotsV[]
- // ={0.0f, 0.0f, 0.0f, 0.0f,
- // 1f, 1f, 1.0f, 1.0f}
- ;
-
- /**
- * Kolekce vektor pro persistenci souřadnic řídících bodů
- */
- @ElementList(name="ctrlpoints",type=MyFloat.class)
- private Vector<MyFloat> ctrlVector;
-
- /**
- * Kolekce vektor pro persistenci uzlového vektoru ve směru parametru U
- */
- @ElementList(name="knotsU",type=MyFloat.class)
- private Vector<MyFloat> knotVectorU;
-
- /**
- * Kolekce vektor pro persistenci uzlového vektoru ve směru parametru V
- */
- @ElementList(name="knotsV",type=MyFloat.class)
- private Vector<MyFloat> knotVectorV;
-
- /**
- * Vytvoří prázdnou definici plochy
- */
- public void clear(){
- isSurfaceFinished=false;
- ctrlPoints=new float[0];
- knotsU=new float[0];
- knotsV=new float[0];
- orderU=3;
- orderV=3;
- pointsInU=0;
- pointsInV=0;
- }
-
- /**
- * Pomocí framweorku Simple serializuje definici křivky do XML souboru
- * @param f soubor pro uložení
- */
- public void persist(File f){
- ctrlVector=new Vector<MyFloat>(ctrlPoints.length);
- knotVectorU=new Vector<MyFloat>(knotsU.length);
- knotVectorV=new Vector<MyFloat>(knotsV.length);
-
- for(Float ff:ctrlPoints)
- ctrlVector.add(new MyFloat(ff));
-
- for(Float ff:knotsU)
- knotVectorU.add(new MyFloat(ff));
-
- for(Float ff:knotsV)
- knotVectorV.add(new MyFloat(ff));
-
- Serializer s=new Persister();
- try {
- System.out.println("ukládám");
- s.write(Surface.getInstance(),f);
- } catch (Exception e1) {
- e1.printStackTrace();
- }
-
-
- }
-
- /**
- * Vytvoří pomocí frameworku Simple křivku z definice uložené v XML souboru
- * @param f soubor,z něhož se má definice načíst
- * @throws Exception chyba při čtení ze souboru
- */
- public void unPersist(File f) throws Exception{
- Serializer s=new Persister();
- Surface c=s.read(Surface.class,f);
- initFromSurface(c);
- }
-
- /**
- * Inicializuje objekt podle jiného objektu typu Curve
- * @param c referenční objekt - křivka
- */
- private void initFromSurface(Surface c) {
- this.orderU=c.getOrderU();
- this.orderV=c.getOrderV();
- this.ctrlPoints=new float[c.getCtrlVector().size()];
- this.knotsU=new float[c.getKnotVectorU().size()];
- this.knotsV=new float[c.getKnotVectorV().size()];
- int i=0;
- for(MyFloat f:c.getCtrlVector())
- ctrlPoints[i++]=f.getValue();
- i=0;
- for(MyFloat f:c.getKnotVectorU())
- knotsU[i++]=f.getValue();
- i=0;
- for(MyFloat f:c.getKnotVectorV())
- knotsV[i++]=f.getValue();
-
- this.pointsInU=c.getPointsInU();
- this.pointsInV=c.getPointsInV();
-
- this.isSurfaceFinished=c.isSurfaceFinished();
- }
-
- /**
- * Konstruktor, nastaví prázdné hodnoty polí definujících NURBS plochu
- */
- private Surface(){
- // ctrlPoints=new float[0];
- // knotsU=new float[0];
- // knotsV=new float[0];
- // isSurfaceFinished=false;
- clear();
- }
-
- /**
- * Vrací instanci třídy (podle návrhového vzoru Singleton)
- * @return instance třídy Curve
- */
- public static Surface getInstance() {
- if (singleton == null)
- singleton = new Surface();
- return singleton;
-
- }
-
- /**
- * Vrací pole uzlového vektoru ve směru parametru U
- * @return pole hodnot uzlového vektoru ve směru parametru U
- */
- public float[] getKnotsU() {
- return this.knotsU;
- }
-
- /**
- * Vrací pole s hodnotami souřadnic řídících bodů
- * @return pole souřadnic řídících bodů
- */
- public float[] getCtrlPoints() {
- return this.ctrlPoints;
- }
-
- /**
- * Vrací stupeň NURBS plochy ve směru parametru U
- * @return stupeň NURBS plochy ve směru parametru U
- */
- public int getOrderU() {
- return this.orderU;
- }
-
- /**
- * Vrací index aktuálně vybraného řídícího bodu
- * @return index aktuálně vybraného řídícího bodu
- */
- public int getBodIndex() {
- return bodIndex;
- }
-
- /**
- * Nastavuje index požadovaného aktuálně vybraného řídícího bodu
- * @param bodIndex index požadovaného aktuálně vybraného řídícího bodu
- */
- public void setBodIndex(int bodIndex) {
- this.bodIndex = bodIndex;
- }
-
- /**
- * Vrací X-ovou souadnici aktuálně vybraného řídícího bodu, přepočítává hodnotu z homogenních souřadnic
- * @return X-ová souadnice aktuálně vybraného řídícího bodu
- */
- public float getActiveX(){
- if(bodIndex>=0){
- return ctrlPoints[bodIndex*4]/ctrlPoints[bodIndex*4+3];
- }
- else return 0;
- }
- /**
- * Vrací Y-ovou souadnici aktuálně vybraného řídícího bodu, přepočítává hodnotu z homogenních souřadnic
- * @return Y-ová souadnice aktuálně vybraného řídícího bodu
- */
- public float getActiveY(){
- if(bodIndex>=0){
- return ctrlPoints[bodIndex*4+1]/ctrlPoints[bodIndex*4+3];
- }
- else return 0;
- }
- /**
- * Vrací Z-ovou souadnici aktuálně vybraného řídícího bodu, přepočítává hodnotu z homogenních souřadnic
- * @return Z-ová souadnice aktuálně vybraného řídícího bodu
- */
- public float getActiveZ(){
- if(bodIndex>=0){
- return ctrlPoints[bodIndex*4+2]/ctrlPoints[bodIndex*4+3];
- }
- else return 0;
- }
-
- /**
- * Vrací váhu aktuálně vybraného řídícího bodu
- * @return váha aktuálně vybraného řídícího bodu
- */
- public float getActiveW(){
- if(bodIndex>=0){
- return ctrlPoints[bodIndex*4+3];
- }
- else return 0;
- }
-
- /**
- * Nastavuje X-ovou souadnici aktuálně vybraného řídícího bodu, přepočítává hodnotu do homogenních souřadnic
- * @param x X-ová souřadnice aktuálně vybraného řídícího bodu
- */
- public void setActiveX(float x){
- if(bodIndex>=0){
- ctrlPoints[bodIndex*4]=x*ctrlPoints[bodIndex*4+3];
- }
- }
- /**
- * Nastavuje Y-ovou souadnici aktuálně vybraného řídícího bodu, přepočítává hodnotu do homogenních souřadnic
- * @param y Y-ová souřadnice aktuálně vybraného řídícího bodu
- */
-
- public void setActiveY(float y){
- if(bodIndex>=0){
- ctrlPoints[bodIndex*4+1]=y*ctrlPoints[bodIndex*4+3];
- }
- }
- /**
- * Nastavuje Z-ovou souadnici aktuálně vybraného řídícího bodu, přepočítává hodnotu do homogenních souřadnic
- * @param z Z-ová souřadnice aktuálně vybraného řídícího bodu
- */
-
- public void setActiveZ(float z){
- if(bodIndex>=0){
- ctrlPoints[bodIndex*4+2]=z*ctrlPoints[bodIndex*4+3];
- }
- }
-
- /**
- *Nastavuje váhu aktuálně vybraného řídícího bodu, upravuje hodnoty stávajícíh souřadic vzhledem k váze a použití homogenních souřadnic
- * @param w váha aktuálně vybraného řídícího bodu
- */
- public void setActiveW(float w){
- if(bodIndex>=0){
- float oldW=ctrlPoints[bodIndex*4+3];
- if(w>0){
- ctrlPoints[bodIndex*4+3]=w;
- //úprava souřadnic
- ctrlPoints[bodIndex*4]=ctrlPoints[bodIndex*4]/oldW*w;
- ctrlPoints[bodIndex*4+1]=ctrlPoints[bodIndex*4+1]/oldW*w;
- ctrlPoints[bodIndex*4+2]=ctrlPoints[bodIndex*4+2]/oldW*w;
- }
-
- }
- }
-
- /**
- * Nastavuje uzlový vektor ve směru parametru U
- * @param knots nový uzlový vektor ve směru parametru U
- */
- public void setKnotsU(float[] knots) {
- this.knotsU = knots;
- }
-
- /**
- * Vrací informaci o stavu dokončení definice křvky
- * @return true pokud je definice křivky kompletní, jinak false
- */
- public boolean isSurfaceFinished() {
- return isSurfaceFinished;
- }
-
- /**
- * Nastavuje řídící body
- * @param ctrlPoints pole souřadnic řídících bodů
- */
- public void setCtrlPoints(float[] ctrlPoints) {
- this.ctrlPoints = ctrlPoints;
- }
-
- /**
- * Nastavuje stav dokončení definice křivky
- * @param b stav dokončení definice křivky
- *
- */
- public void setIsSurfaceFinished(boolean b) {
- isSurfaceFinished=b;
- }
-
- /**
- * Vrací vektor souřadnic řídích bodů pro serializaci
- * @return vektor souřadnic řídících bodů
- */
- private Vector<MyFloat> getCtrlVector() {
- return ctrlVector;
- }
-
- /**
- * Vrací vektor prvků uzlového vektoru ve směru parametru U pro serializaci
- * @return vektor prvků uzlového vektoru ve směru parametru U
- */
- private Vector<MyFloat> getKnotVectorU() {
- return knotVectorU;
- }
-
- /**
- * Vrací stupeň plochy ve směru parametru U
- * @param order stupeň plochy ve směru parametru U
- */
- public void setOrderU(int order) {
- this.orderU = order;
- }
- /**
- * Vrací pole uzlového vektoru ve směru parametru V
- * @return pole hodnot uzlového vektoru ve směru parametru V
- */
- public float[] getKnotsV() {
- return knotsV;
- }
- /**
- * Nastavuje uzlový vektor ve směru parametru V
- * @param knotsV nový uzlový vektor ve směru parametru V
- */
- public void setKnotsV(float[] knotsV) {
- this.knotsV = knotsV;
- }
- /**
- * Vrací stupeň plochy ve směru parametru V
- * @return stupeň plochy ve směru parametru V
- */
- public int getOrderV() {
- return orderV;
- }
- /**
- * Nastavuje stupeň NURBS plochy ve směru parametru V
- * @param orderV stupeň plochy ve směru parametru V
- */
- public void setOrderV(int orderV) {
- this.orderV = orderV;
- }
- /**
- * Vrací vektor prvků uzlového vektoru ve směru parametru V pro serializaci
- * @return vektor prvků uzlového vektoru ve směru parametru V
- */
- private Vector<MyFloat> getKnotVectorV() {
- return knotVectorV;
- }
-
- /**
- * Vrací počet řídících bodů ve směru parametru V (tj. počet sloupců)
- * @return počet řídících bodů ve směru parametru V
- */
- public int getPointsInV() {
- return pointsInV;
- }
-
- /**
- * Nastavuje počet řídících bodů ve směru parametru V
- * @param pointsInV počet řídících bodů ve směru parametru V
- */
- public void setPointsInV(int pointsInV) {
- this.pointsInV = pointsInV;
- }
-
- /**
- * Vrací počet řídících bodů ve směru parametru U (tj. počet řádků)
- * @return počet řídících bodů ve směru parametru U
-
- */
- public int getPointsInU() {
- return pointsInU;
- }
-
- /**
- * Nastavuje počet řídících bodů ve směru parametru U
- * @param pointsInU počet řídících bodů ve směru parametru U
- */
- public void setPointsInU(int pointsInU) {
- this.pointsInU = pointsInU;
- }
-}