File: JaMSolidviewsImpl.mesa
Last edited by: Bier on March 1, 1987 8:20:41 pm PST
Copyright © 1984 by Xerox Corporation. All rights reserved.
Contents: Someday this may be a way to call Solidviews procedures from a JaM typescript. For now, it is a set of procedures to be called from the Cedar Language Interpreter.
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;
State: TYPE = JaM.State;
editToolData: EditToolData;
RegisterThisEditTool: PUBLIC PROC [etd: EditToolData] ~ {
editToolData ← etd;
};
Init: PROC [] ~ {
JaM.RegisterInit[name: "Solidviews", init: JamSolidviewsInit];
};
JamSolidviewsInit: PROC[state: State] ~ {
state.Register["RotX", RotX];
state.Register["EvenScaleChildren", EvenScaleChildren];
};
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.