TTocka = class(Tobject)
        Constructor Create(aparent:tobject);
        Procedure Kopiraj(source:TTocka;all:boolean);
        Procedure Rebuild;
		Property Parent:tobject; read;
        Property X:double; read; Write;
		Property Z:double; read; Write;
		Property Depth:double; read; Write;
        Property S:integer; read; Write;
        Property PrevControlpoint:TVector3f; read; Write;
        Property NextControlpoint:TVector3f; read; Write;	
		Property Segments:integer read FSegments Write SetSegments;
        Property AStyle:TALineStyle read FStyle Write SetStyle;
        Property TangentMode:TtangentMode read FTangentMode Write SeTtangentMode;
        Property OrgCoord:TVector3f read GetOrg write SetOrg;
        Property OrgCoord1:TVector3f read GetOrg1 write SetOrg1;
        Property ArcStyle:TarcStyle read FarcStyle write SeTarcStyle;
        Property ArcRadius:single read FArcRadius Write SetArcRadius;
        Property XF:string index 0 read FXF write SetFormulaString;
        Property YF:string index 1 read FYF write SetFormulaString;
        Property ZF:string index 2 read FZF write SetFormulaString;
        Property FiF:string index 3 read FFiF write SetFormulaString;
        Property ArcCentar:boolean read FarcCentar write setArcCentar;
	end;

    TSegmentList = class(tlist)
        Property Tocka[Index:integer]:TTocka read geTTocka;
    end;

    TrubneTocke = class    //čuva točke       
        Constructor Create(aparent:TDaska;Aowner:TtockeSystem);        
        Procedure BildOutList;        
        Procedure Kopiraj(source:TrubneTocke);        
        Procedure MakeKocka(first:TVector3f);
        Procedure MakeTriangle(first:TVector3f);
        Procedure MakeCircle(first:TVector3f);        
        Procedure  ObrisiTocku(index:integer);
        Procedure  Strech(sType:TstrechType;strength:tvector3f;Propor:boolean);
        Procedure  Rotate(Plane:integer;Kut:single);
        Function   AddNewTocka(Index:integer;Value:tvector3f):TTocka;
		Property Parentd:TDaska; Read;
        Property Mainlist:tlist;  Read;        
        Property   MainTocke[Index:integer]:TTocka read GetMainTocka;
		Property   Name: String read Fname Write SetName;
        Property   Owner:TtockeSystem read Fowner write Fowner;
        Property   Mode : TmodeRubneTocke read Fmode Write SetMode;
		Property   Centar: TVector3f Read FCentar write FCentar;
        Property   CentarMode:TcentarMode Read FCentarMode write SetcntarMode;
		Property   Otvorena:boolean read Fotvorena write SetOtvorena;
		Property   Count:integer Read GetMainCount;
        Property   SegCount:integer Read GetSegcnt;
        Property   TockaCount :integer Read GetTockaCnt;
		Property   Segment[index:Integer]:TSegmentList  read GetSegment;
		Property   Tocka[Index:integer]:TTocka read GeTTocka;
        Property   DoCNC:boolean read FdoCNC write FdoCNC;
        
    end;
    
    TtockeSystem = class       
        Constructor Create(aparent:TDaska);         
        Procedure Clear;
        Procedure Kopiraj(source:TtockeSystem);
        Procedure Resize(x,z:single);
        Procedure DodajKocku(first:TVector3f);
        Procedure DodajTriangle(first:TVector3f);
        Procedure DodajCircle(first:TVector3f);
        Procedure RemoveCurve(index:integer);
        Procedure AddLine(line:TrubneTocke);
        Procedure InitRubneTocke;
        Property Parent:TDaska read Parentd write Parentd;
        Property Count:integer read GetCount;
        Property Rubne:TrubneTocke read GetRubne;
        Property Rupa[Index:integer]:TrubneTocke read GetRupa;
                 
        Property   Mode : TmodeRubneTocke read Fmode Write SetMode;
        Property SideType:TSideType read FSideType write SeTSideType;
        Property Varijable   :Tvarijable Read Fvarijable;
        Property EditModes:TEditModesSet read FEditModes write FEditModes;
        Property SpeenSeg:integer read FSpeenSeg write FSpeenSeg;
        Property BasePoint:TBasePoint read FBasePoint write FBasePoint;
        Property SpeenStart:integer read FspeenStart write FspeenStart;
        Property SpeenEnd:Integer read FspeenEnd write FspeenEnd;
        Property TxXtile:single read FTxXtile write FTxXtile;
        Property TxYtile:single read FTxYtile write FTxYtile;
        Property SphereMap:boolean read FSphereMap write FSphereMap;
    end;

	TSideType= (TSFront,TSBack,TSBoth,TSBothOut,TSOpen,TsSpeen,TSPath,TSFree);
    TmodeRubneTocke=(RTDisable,RTRadius,RTCurve,RTSurface);
    TcentarMode=(TCFix,TcAuto,TcFree);
    TstrechType= (TSCentar,TsNula,TsFirstPoint);
    TALineStyle=(RLine,Rcurve,Rarc);
    TarcStyle=(ARplus,Arminus);
    TtangentMode=(TAtangentFree,TaTangentNotEqual,TaTangentEqual,TaRadius);
	THomogeneousFltVector = array[0..3] of Single;
	Tvector4I = array[0..3] of Integer;
	TVector4f = THomogeneousFltVector;
	TVector = THomogeneousFltVector
	TAffineFltVector = array[0..2] of single;
	TVector3f = TAffineFltVector;    
    TBasePoint = (TBPMinimum,TBPNula,TBPCentar);