1a38107941725211e7c3f051f7a8f5e12199f03acmaeder{-# LANGUAGE DeriveDataTypeable #-}
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu{- |
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens ElknerModule : ./FreeCAD/As.hs
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 Savu
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuMaintainer : Robert.Savu@dfki.de
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuStability : experimental
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuPortability : portable
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert SavuDeclaration of the abstract datatypes of FreeCAD terms
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu-}
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu
69b1e90bbb27ce2dd365628c07c0f03a3ae97b26Robert Savumodule FreeCAD.As where
ad2e68e571352b6759441733df697e075ceed341Robert Savu
1a38107941725211e7c3f051f7a8f5e12199f03acmaederimport Data.Data
0a03acf9fa28e6ff00f4d7c9c6acbae64cf09c56Ewaryst Schulzimport qualified Data.Set as Set
0a03acf9fa28e6ff00f4d7c9c6acbae64cf09c56Ewaryst Schulz
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savudata Vector3 =
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder Vector3 { x :: Double, y :: Double, z :: Double }
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
37dd4c99dbe470cce3fe0d89a011186f080e8910Robert Savu
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
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu
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
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdata Placement = Placement { position :: Vector3, orientation :: Vector4 }
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
ad2e68e571352b6759441733df697e075ceed341Robert Savu
ad2e68e571352b6759441733df697e075ceed341Robert Savu{-
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
ad2e68e571352b6759441733df697e075ceed341Robert Savu
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu reference from compound objects to 'building-blocks'
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu objects made through strings or containment of the other
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu objects
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu-}
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..
ad2e68e571352b6759441733df697e075ceed341Robert Savu
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)
ec95eebae395ed8858ba5b51d992d6b4c50cec86Robert Savu
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
ec95eebae395ed8858ba5b51d992d6b4c50cec86Robert Savu-}
ad2e68e571352b6759441733df697e075ceed341Robert Savu
1a38107941725211e7c3f051f7a8f5e12199f03acmaederdata ExtendedObject = Placed PlacedObject | Ref String
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savudata PlacedObject =
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder PlacedObject {p :: Placement, o :: Object}
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)
ad2e68e571352b6759441733df697e075ceed341Robert Savu
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)
ad2e68e571352b6759441733df697e075ceed341Robert Savu
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 Savu
ad2e68e571352b6759441733df697e075ceed341Robert Savutype Document = [NamedObject]
a9c461443a740732a62d58c1c465b88cba3c606bRobert Savu
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder{- | Datatype for FreeCAD Signatures
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederSignatures are just sets of named objects -}
0a03acf9fa28e6ff00f4d7c9c6acbae64cf09c56Ewaryst Schulz
1a38107941725211e7c3f051f7a8f5e12199f03acmaederdata Sign = Sign { objects :: Set.Set NamedObject }
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder deriving (Show, Eq, Ord, Typeable, Data)