1a38107941725211e7c3f051f7a8f5e12199f03acmaeder{-# LANGUAGE DeriveDataTypeable #-}
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuDescription : definition of the datatype describing
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu the abstract FreeCAD terms and and a few tools describing simple
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu mathematical operations on those building-blocks (3d vectors,
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu rotation matrices, rotation quaternions)
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuCopyright : (c) Robert Savu and Uni Bremen 2011
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuLicense : GPLv2 or higher, see LICENSE.txt
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuMaintainer : Robert.Savu@dfki.de
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuStability : experimental
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuPortability : portable
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuDeclaration of the abstract datatypes of FreeCAD terms
0a03acf9fa28e6ff00f4d7c9c6acbae64cf09c56Ewaryst Schulzimport qualified Data.Set as Set
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savudata Vector3 =
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder Vector3 { x :: Double, y :: Double, z :: Double }
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdata Matrix33 = Matrix33 { a11 :: Double , a12 :: Double , a13 :: Double
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder , a21 :: Double , a22 :: Double , a23 :: Double
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder , a31 :: Double , a32 :: Double , a33 :: Double
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder } deriving (Show, Eq, Ord, Typeable, Data)
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder -- used as a rotation matrix
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdata Vector4 = Vector4 { q0 :: Double, q1 :: Double, q2 :: Double, q3 :: Double}
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
ad306df140215d8fb88d14bbb7d685011e0f770bRobert Savu-- quaternion rotational representation
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdata Placement = Placement { position :: Vector3, orientation :: Vector4 }
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu-- the placement is determined by 2 vectors:
ad2e68e571352b6759441733df697e075ceed341Robert Savu-- the first one points to the 'center' of the objet in the space
ad2e68e571352b6759441733df697e075ceed341Robert Savu-- the second one determines the orientation of the object in the given space
ad2e68e571352b6759441733df697e075ceed341Robert Savudata Edgelist = []
ad2e68e571352b6759441733df697e075ceed341Robert Savu | 1:Edgelist
ad2e68e571352b6759441733df697e075ceed341Robert Savu | 0:Edgelist
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu reference from compound objects to 'building-blocks'
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu objects made through strings or containment of the other
ad2e68e571352b6759441733df697e075ceed341Robert Savudata BaseObject = Box Double Double Double -- Height, Width, Length
ad2e68e571352b6759441733df697e075ceed341Robert Savu | Cylinder Double Double Double -- Angle, Height, Radius
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder | Sphere Double Double Double Double -- Angle1,Angle2,Angle3,Radius
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder | Cone Double Double Double Double -- Angle,Radius1,Radius2,Height
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu | Torus Double Double Double Double Double
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder -- Angle1, Angle2, Angle3, Radius1, Radius2
ad306df140215d8fb88d14bbb7d685011e0f770bRobert Savu | Line Double -- length
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder | Circle Double Double Double -- StartAngle, EndAngle, Radius
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder | Rectangle Double Double -- Height, Length
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder -- TODO: Plane, Vertex, etc..
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savudata Object = BaseObject BaseObject
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu | Cut ExtendedObject ExtendedObject
ad306df140215d8fb88d14bbb7d685011e0f770bRobert Savu | Common ExtendedObject ExtendedObject
ad306df140215d8fb88d14bbb7d685011e0f770bRobert Savu | Fusion ExtendedObject ExtendedObject
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu | Extrusion ExtendedObject Vector3
ec95eebae395ed8858ba5b51d992d6b4c50cec86Robert Savu | Section ExtendedObject ExtendedObject
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder{- --| Fillet, (Base::String, Edges::Edgelist, Radius::Double)),
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu --not enough data in the xml
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu --| Chamfer, (Base::String, Edges::Edgelist, Amount::Double)),
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu --not enough data in the xml
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu --| Mirror, (Base::String, Position2::Vector))
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu --mirroring of an object
1a38107941725211e7c3f051f7a8f5e12199f03acmaederdata ExtendedObject = Placed PlacedObject | Ref String
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savudata PlacedObject =
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder PlacedObject {p :: Placement, o :: Object}
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdata NamedObject = NamedObject { name :: String
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder , object :: PlacedObject}
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder | EmptyObject -- for objects that are WIP
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder{- the first parameter is the name of the object as it is stored in the
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederFreeCAD document. the second parameter determines the placement of the object
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder(a pair of vectors) the third parameter contains the type of the object and
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedera list of doubles (numbers) describing the characteristics
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederof the object (e.g. dimensions, angles, etc) -}
ad2e68e571352b6759441733df697e075ceed341Robert Savutype Document = [NamedObject]
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder{- | Datatype for FreeCAD Signatures
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederSignatures are just sets of named objects -}
1a38107941725211e7c3f051f7a8f5e12199f03acmaederdata Sign = Sign { objects :: Set.Set NamedObject }
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)