<> <> <> <> DIRECTORY AtomButtonsTypes, CoordSys, CSG, CSGGraphics, Feedback, SVScene, JaMSolidviews, Menus, Rope, SVInterfaceTypes, SVModelTypes, SVRayTypes, SVSceneTypes, SVSlices, SVViewersOnScene, SVTransforms, ViewerClasses; JaMSolidviewsImpl: CEDAR PROGRAM IMPORTS CoordSys, Feedback, SVScene, SVViewersOnScene, SVTransforms EXPORTS JaMSolidviews = BEGIN Assembly: TYPE = SVSceneTypes.Assembly; Camera: TYPE = SVModelTypes.Camera; CoordSysList: TYPE = SVModelTypes.CoordSysList; CoordSystem: TYPE = SVModelTypes.CoordSystem; CSGTree: TYPE = SVRayTypes.CSGTree; EditToolData: TYPE = SVInterfaceTypes.EditToolData; FeedbackData: TYPE = AtomButtonsTypes.FeedbackData; FrameBox: TYPE = REF FrameBoxObj; FrameBoxObj: TYPE = SVModelTypes.FrameBoxObj; Scene: TYPE = SVSceneTypes.Scene; ScratchpadData: TYPE = SVInterfaceTypes.ScratchpadData; ScratchViewerData: TYPE = SVInterfaceTypes.ScratchViewerData; Slice: TYPE = SVSlices.Slice; Viewer: TYPE = ViewerClasses.Viewer; ViewerToolData: TYPE = SVInterfaceTypes.ViewerToolData; <> editToolData: EditToolData; RegisterThisEditTool: PUBLIC PROC [etd: EditToolData] ~ { editToolData _ etd; }; Init: PROC [] ~ { <> }; <> <> <> <<}; >> GetCoordSys: PRIVATE PROC [csRope: Rope.ROPE, scene: Scene] RETURNS [cs: CoordSystem, success: BOOL] ~ TRUSTED { csList: CoordSysList; success _ TRUE; csList _ CoordSys.MakeListFromTree[scene.coordSysRoot]; cs _ CoordSys.FindCoordSysInList[csRope, csList ! CoordSys.CoordSysNotFound => {success _ FALSE; CONTINUE}]; IF NOT success THEN { Feedback.PutFRaw[$Solidviews, oneLiner, "Assembly %g not found", [rope[csRope]]]; Feedback.BlinkRaw[$Solidviews]; }; }; GetAssembly: PRIVATE PROC [asRope: Rope.ROPE, scene: Scene] RETURNS [as: Assembly, success: BOOL] = TRUSTED { success _ TRUE; [as, ----] _ SVScene.FindAssemblyFromName[asRope, scene !SVScene.AssemblyNotFound => { Feedback.PutFRaw[$Solidviews, oneLiner, "Assembly %g not found", [rope[asRope]]]; Feedback.BlinkRaw[$Solidviews]; success _ FALSE; CONTINUE}] }; RotX: PROC [asRope: Rope.ROPE, csRope: Rope.ROPE, degrees: REAL] ~ TRUSTED { scene: Scene _ editToolData.sceneSection.currentScene; wrt: CoordSystem; assembly: Assembly; found: BOOL; [wrt, found] _ GetCoordSys[csRope, scene]; IF NOT found THEN RETURN; [assembly, found] _ GetAssembly[asRope, scene]; IF NOT found THEN RETURN; SVTransforms.XRotate[assembly.coordSys, wrt, degrees]; SVViewersOnScene.SceneNewVersion[editToolData.currentViewerToolData]; SVViewersOnScene.PaintSceneAllViewers[$PaintEntireScene, editToolData, scene]; }; EvenScaleChildren: PROC [asRope: Rope.ROPE, scalar: REAL] ~ TRUSTED { scene: Scene _ editToolData.sceneSection.currentScene; assembly: Assembly; found: BOOL; [assembly, found] _ GetAssembly[asRope, scene]; IF NOT found THEN RETURN; SVTransforms.ScaleEvenChildren[assembly, NIL, scalar]; SVViewersOnScene.SceneNewVersion[editToolData.currentViewerToolData]; SVViewersOnScene.PaintSceneAllViewers[$PaintEntireScene, editToolData, scene]; }; SetBoundBox: PROC [boundBoxes: BOOL] ~ TRUSTED { camera: Camera; currentScene: Scene _ editToolData.sceneSection.currentScene; currentViewerToolData: ViewerToolData _ NARROW[editToolData.currentViewerToolData]; camera _ currentViewerToolData.camera; camera.useBoundBoxes _ boundBoxes; }; Init[]; END.