As.hs revision 239330cd665aac95fcf9cf95449594c96667cbc2
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova{- |
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens ElknerModule : $Header$
228124cdf2560445e7f1b5312476935b51887463Kristina SojakovaDescription : definition of the datatype describing
228124cdf2560445e7f1b5312476935b51887463Kristina Sojakova the abstract FreeCAD terms and and a few tools describing simple
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu mathematical operations on those building-blocks (3d vectors,
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova rotation matrices, rotation quaternions)
228124cdf2560445e7f1b5312476935b51887463Kristina SojakovaCopyright : (c) Robert Savu and Uni Bremen 2011
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina SojakovaLicense : GPLv2 or higher, see LICENSE.txt
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina SojakovaMaintainer : Robert.Savu@dfki.de
b3bacd257ffcdd346b70ab690f03b28ad5f33fdcKristina SojakovaStability : experimental
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina SojakovaPortability : portable
228124cdf2560445e7f1b5312476935b51887463Kristina Sojakova
c208973c890b8f993297720fd0247bc7481d4304Christian MaederDeclaration of the abstract datatypes of FreeCAD terms
e7cedce0d43b62593b8d5d552bdc36eb5ba73409Kristina Sojakova-}
e7cedce0d43b62593b8d5d552bdc36eb5ba73409Kristina Sojakova
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakovamodule FreeCAD.As where
0737dd44f9a47bb91233ffdb7a03bc657dfc7c5eKristina Sojakova
b9e7c27252b02c6e444fb5555dcf191dfaf3065bKristina Sojakovaimport qualified Data.Set as Set
b9e7c27252b02c6e444fb5555dcf191dfaf3065bKristina Sojakova
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakovadata Vector3 =
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova Vector3 { x::Double, y::Double, z::Double } deriving (Show, Eq, Ord)
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova
e7cedce0d43b62593b8d5d552bdc36eb5ba73409Kristina Sojakovadata Matrix33 = Matrix33 { a11::Double ,a12::Double ,a13::Double
0737dd44f9a47bb91233ffdb7a03bc657dfc7c5eKristina Sojakova ,a21::Double ,a22::Double ,a23::Double
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova ,a31::Double ,a32::Double ,a33::Double
e7cedce0d43b62593b8d5d552bdc36eb5ba73409Kristina Sojakova } deriving (Show, Eq, Ord) --used as a rotation matrix
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakovadata Vector4 = Vector4 { q0::Double, q1::Double, q2::Double, q3::Double}
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova deriving (Show, Eq, Ord)
0737dd44f9a47bb91233ffdb7a03bc657dfc7c5eKristina Sojakova-- quaternion rotational representation
ea8e98e298f33f9362293f392c8fb192722b8904Eugen Kuksa
c35969f341eb137848e9c0874503bed8c419cbd2Kristina Sojakovadata Placement = Placement { position::Vector3, orientation::Vector4 }
e7cedce0d43b62593b8d5d552bdc36eb5ba73409Kristina Sojakova deriving (Show, Eq, Ord)
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova{-
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova-- the placement is determined by 2 vectors:
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova-- the first one points to the 'center' of the objet in the space
0737dd44f9a47bb91233ffdb7a03bc657dfc7c5eKristina Sojakova-- the second one determines the orientation of the object in the given space
e7cedce0d43b62593b8d5d552bdc36eb5ba73409Kristina Sojakovadata Edgelist = []
228124cdf2560445e7f1b5312476935b51887463Kristina Sojakova | 1:Edgelist
0737dd44f9a47bb91233ffdb7a03bc657dfc7c5eKristina Sojakova | 0:Edgelist
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova reference from compound objects to 'building-blocks'
22ade8eac560459be401bb34c010f0a981ec02bdKristina Sojakova objects made through strings or containment of the other
3c0bf20712a0f21aaedc0a9a9c8376bc1e90e799Kristina Sojakova objects
22ade8eac560459be401bb34c010f0a981ec02bdKristina Sojakova-}
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakovadata BaseObject = Box Double Double Double -- Height, Width, Length
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova | Cylinder Double Double Double -- Angle, Height, Radius
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova | Sphere Double Double Double Double --Angle1,Angle2,Angle3,Radius
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova | Cone Double Double Double Double --Angle,Radius1,Radius2,Height
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova | Torus Double Double Double Double Double
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder --Angle1, Angle2, Angle3, Radius1, Radius2
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder | Line Double -- length
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova | Circle Double Double Double --StartAngle, EndAngle, Radius
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova | Rectangle Double Double --Height, Length
99c3239092cab05eaca2f021e5edef2eab00ba01Christian Maeder deriving (Show, Eq, Ord)
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder --TODO: Plane, Vertex, etc..
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova
4f3a84cb1b7e55ce38df8f4ac71d06b574b23cb1mscodescudata Object = BaseObject BaseObject
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova | Cut ExtendedObject ExtendedObject
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder | Common ExtendedObject ExtendedObject
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder | Fusion ExtendedObject ExtendedObject
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova | Extrusion ExtendedObject Vector3
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova --| Section ExtendedObject ExtendedObject
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova --| Fillet, (Base::String, Edges::Edgelist, Radius::Double)),
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder --not enough data in the xml
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova --| Chamfer, (Base::String, Edges::Edgelist, Amount::Double)),
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova --not enough data in the xml
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder --| Mirror, (Base::String, Position2::Vector))
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder --mirroring of an object
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder deriving (Show, Eq, Ord)
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakovadata ExtendedObject = Placed PlacedObject | Ref String deriving (Show, Eq, Ord)
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maederdata PlacedObject =
e7cedce0d43b62593b8d5d552bdc36eb5ba73409Kristina Sojakova PlacedObject {p::Placement, o::Object} deriving (Show, Eq, Ord)
85ae7717e4102529f83a3e487d0a308a56dc8fc7Kristina Sojakova
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maederdata NamedObject = NamedObject { name::String
53d7a124a59889b9de5c6ffa856a5e697b043c90Kristina Sojakova , object:: PlacedObject}
85ae7717e4102529f83a3e487d0a308a56dc8fc7Kristina Sojakova | EmptyObject --for objects that are WIP
ea8e98e298f33f9362293f392c8fb192722b8904Eugen Kuksa deriving (Show, Eq, Ord)
b9e7c27252b02c6e444fb5555dcf191dfaf3065bKristina Sojakova
85ae7717e4102529f83a3e487d0a308a56dc8fc7Kristina Sojakova-- the first parameter is the name of the object as it is stored in the
85ae7717e4102529f83a3e487d0a308a56dc8fc7Kristina Sojakova-- FreeCAD document. the second parameter determines the placement of the object
85ae7717e4102529f83a3e487d0a308a56dc8fc7Kristina Sojakova-- (a pair of vectors) the third parameter contains the type of the object and
85ae7717e4102529f83a3e487d0a308a56dc8fc7Kristina Sojakova--a list of doubles (numbers) describing the characteristics
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder--of the object (e.g. dimensions, angles, etc)
f20841e0b3d9311fd39f2615e43538214f720dd5Kristina Sojakova
b3bacd257ffcdd346b70ab690f03b28ad5f33fdcKristina Sojakovatype Document = [NamedObject]
da16798d538221b43043890083523e5a04540f2eChristian Maeder
b3bacd257ffcdd346b70ab690f03b28ad5f33fdcKristina Sojakova-- | Datatype for FreeCAD Signatures
b9e7c27252b02c6e444fb5555dcf191dfaf3065bKristina Sojakova-- Signatures are just sets of named objects
66c6e29ddfa36396c7ebfc02d01d8d7e6c26976cChristian Maeder
85ae7717e4102529f83a3e487d0a308a56dc8fc7Kristina Sojakovadata Sign = Sign { objects :: Set.Set NamedObject } deriving (Eq, Ord, Show)
e7cedce0d43b62593b8d5d552bdc36eb5ba73409Kristina Sojakova