summaryrefslogtreecommitdiffstats
path: root/src/demos/nurbs/curveapp/Curve.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/demos/nurbs/curveapp/Curve.java')
-rwxr-xr-xsrc/demos/nurbs/curveapp/Curve.java313
1 files changed, 0 insertions, 313 deletions
diff --git a/src/demos/nurbs/curveapp/Curve.java b/src/demos/nurbs/curveapp/Curve.java
deleted file mode 100755
index b772973..0000000
--- a/src/demos/nurbs/curveapp/Curve.java
+++ /dev/null
@@ -1,313 +0,0 @@
-package demos.nurbs.curveapp;
-
-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 křivky, vystavěna podle návrhového vzoru Singleton
- * @author Tomáš Hráský
- *
- */
-@Root(name="curve")
-public class Curve
-{
- /**
- * Odkaz na instanci třídy
- */
- private static Curve singleton;
- /**
- * Indikuje, zda je zadání křivky kompletní
- */
- @Element(name="finished")
- private boolean isCurveFinished;
-
- /**
- * Index aktuálního vybraného řídícího bodu
- */
- private int bodIndex = -1;
-
- /**
- * Stupeň křivky
- */
- @Element(name="order")
- private int order=3;
-
- /**
- * Pole souřadnic řídícíh bodů
- *
- */
- private float[] ctrlPoints;
-
- /**
- * Pole hodnot uzlového vektoru
- */
- private float knots[];
-
- /**
- * 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
- */
- @ElementList(name="knots",type=MyFloat.class)
- private Vector<MyFloat> knotVector;
-
- /**
- * Vytvoří prázdnou definici křivky
- */
- public void clear(){
- isCurveFinished=false;
- ctrlPoints=new float[0];
- knots=new float[0];
- order=3;
- }
-
- /**
- * 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);
- knotVector=new Vector<MyFloat>(knots.length);
-
- for(Float ff:ctrlPoints)
- ctrlVector.add(new MyFloat(ff));
-
- for(Float ff:knots)
- knotVector.add(new MyFloat(ff));
-
- Serializer s=new Persister();
- try {
- System.out.println("ukládám");
- s.write(Curve.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();
- Curve c=s.read(Curve.class,f);
- initFromCurve(c);
- }
-
- /**
- * Inicializuje objekt podle jiného objektu typu Curve
- * @param c referenční objekt - křivka
- */
- private void initFromCurve(Curve c) {
- this.order=c.getOrder();
- this.ctrlPoints=new float[c.getCtrlVector().size()];
- this.knots=new float[c.getKnotVector().size()];
- int i=0;
- for(MyFloat f:c.getCtrlVector())
- ctrlPoints[i++]=f.getValue();
- i=0;
- for(MyFloat f:c.getKnotVector())
- knots[i++]=f.getValue();
-
- this.isCurveFinished=c.isCurveFinished();
- }
-
- /**
- * Konstruktor, nastaví prázdné hodnoty polí definujících NURBS křivku
- */
- private Curve(){
- ctrlPoints=new float[0];
- knots=new float[0];
- isCurveFinished=false;
- }
-
- /**
- * Vrací instanci třídy (podle návrhového vzoru Singleton)
- * @return instance třídy Curve
- */
- public static Curve getInstance() {
- if (singleton == null)
- singleton = new Curve();
- return singleton;
-
- }
-
- /**
- * Vrací pole uzlového vektoru
- * @return pole hodnot uzlového vektoru
- */
- public float[] getKnots() {
- return this.knots;
- }
-
- /**
- * 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 křivky
- * @return stupeň NURBS křivky
- */
- public int getOrder() {
- return this.order;
- }
-
- /**
- * 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í 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 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;
- }
-
- }
- }
-
- /**
- * Nastavuje uzlový vektor
- * @param knots nový uzlový vektor
- */
- public void setKnots(float[] knots) {
- this.knots = knots;
- }
-
- /**
- * Vrací informaci o stavu dokončení definice křvky
- * @return true pokud je definice křivky kompletní, jinak false
- */
- public boolean isCurveFinished() {
- return isCurveFinished;
- }
-
- /**
- * 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 setIsCurveFinished(boolean b) {
- isCurveFinished=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 pro serializaci
- * @return vektor prvků uzlového vektoru
- */
- private Vector<MyFloat> getKnotVector() {
- return knotVector;
- }
-
- /**
- * Nastaví stupeň křivky
- * @param order požadovaný stupeň
- */
- public void setOrder(int order) {
- this.order = order;
- }
-}