DIRECTORY CSG, DisplayList3d, Matrix3d, SVBoundBox, SVPrimitive; SVPrimitiveImpl: PROGRAM IMPORTS Matrix3d EXPORTS SVPrimitive = BEGIN Assembly: TYPE = DisplayList3d.Assembly; BoundHedron: TYPE = SVBoundBox.BoundHedron; MasterObject: TYPE = DisplayList3d.MasterObject; Primitive: TYPE = REF PrimitiveObj; PrimitiveObj: TYPE = CSG.PrimitiveObj; RayCastProc: TYPE = CSG.RayCastProc; FromAssembly: PUBLIC PROC [assem: Assembly, inverted: BOOL] RETURNS [prim: Primitive] = { mo: MasterObject; prim _ NEW[PrimitiveObj]; IF NOT ISTYPE[assem.object, MasterObject] THEN ERROR PrimitiveAssemblyWithoutMO; mo _ NARROW[assem.object]; prim.name _ assem.name; prim.artwork _ assem.artwork; prim.assembly _ assem; prim.mo _ mo; prim.rayCast _ mo.class.rayCast; prim.rayCastNoBBoxes _ mo.class.rayCastNoBBoxes; prim.primWRTAssembly _ assem.coordSys; prim.scalars _ assem.scalars; prim.primWRTWorld _ assem.coordSys.wrtWorld; prim.worldWRTPrim _ Matrix3d.Inverse[prim.primWRTWorld]; prim.boundBox _ NIL; -- will be filled in at tree preprocess time prim.boundHedron _ mo.class.getHedron[mo]; prim.inverted _ inverted; prim.currentRay _ NIL; prim.rayStepX _ NIL; }; PrimitiveAssemblyWithoutMO: PUBLIC ERROR = CODE; END. VFile: SVPrimitiveImpl.mesa Last edited by Bier on August 18, 1983 11:42 am Contents: A simple function for copying most of the properties of an assembly to its corresponding csg primitive so the implementor of a master object doesn't have to do it all in his PrimitiveFromAssembly proc. prim.hints will be filled in at preprocess time ΚΪ˜Iheadšœ™Jšœ/™/JšœΣ™ΣJ˜šΟk ˜ Jšœ˜Jšœ˜Jšœ ˜ Jšœ ˜ Jšœ ˜ —J˜šœ˜Jšœ ˜Jšœ˜—Jš˜˜Jšœ œ˜(Jšœ œ˜+Jšœœ˜0Jšœ œœ˜#Jšœœœ˜&Jšœ œœ ˜$J˜š Οn œœœœœ˜YJšœ˜Jšœœ˜Jš œœœœœ˜PJšœœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ ˜ Jšœ0˜0J˜Jšœ&˜&Jšœ˜Jšœ,˜,Jšœ8˜8Jšœ/™/Jšœœ.˜AJšœ*˜*Jšœ˜Jšœœ˜Jšœœ˜Jšœ˜—J˜Jšœœœœ˜0—J˜Jšœ˜—…—Όμ