<> <> <> <> <> DIRECTORY DisplayList3d, FileNames, Graphics, IO, Labels, Menus, Rope, SVEditUser, SVFiles, SV2d, SV3d, SVError, SVInterfaceTypes, SVModelTypes, SVRayTypes, SVSceneTypes, SVToolObject, SVTransforms, SVViewer, SVViewerInput, SVViewerUser, TFI3d, ViewerClasses, ViewerIO, ViewerOps, ViewerTools; SVEditUserImplA: CEDAR PROGRAM IMPORTS DisplayList3d, FileNames, IO, Labels, Rope, SVError, SVFiles, SVViewer, SVViewerUser, TFI3d, ViewerIO, ViewerOps, ViewerTools EXPORTS SVEditUser = BEGIN ArtworkToolData: TYPE = SVInterfaceTypes.ArtworkToolData; Assembly: TYPE = REF AssemblyObj; AssemblyObj: TYPE = SVSceneTypes.AssemblyObj; AssemblyList: TYPE = SVSceneTypes.AssemblyList; Camera: TYPE = SVModelTypes.Camera; CoordSystem: TYPE = SVModelTypes.CoordSystem; DCProc: TYPE = SVInterfaceTypes.DCProc; EditToolData: TYPE = SVInterfaceTypes.EditToolData; MasterObject: TYPE = SVSceneTypes.MasterObject; Matrix4by4: TYPE = SV3d.Matrix4by4; MouseButton: TYPE = Menus.MouseButton; Point2d: TYPE = SV2d.Point2d; Point3d: TYPE = SV3d.Point3d; PointSetOp: TYPE = SVRayTypes.PointSetOp; Primitive: TYPE = SVRayTypes.Primitive; Scene: TYPE = SVSceneTypes.Scene; ScratchpadData: TYPE = SVInterfaceTypes.ScratchpadData; Selection: TYPE = SVInterfaceTypes.Selection; ToolData: TYPE = SVSceneTypes.ToolData; Viewer: TYPE = ViewerClasses.Viewer; ViewerCell: TYPE = REF ViewerCellObj; ViewerCellObj: TYPE = SVInterfaceTypes.ViewerCellObj; ViewerProc: TYPE = SVEditUser.ViewerProc; ViewerAssemblyProc: TYPE = SVEditUser.ViewerAssemblyProc; ViewerToolData: TYPE = SVInterfaceTypes.ViewerToolData; <> PaintSceneAllViewers: PUBLIC PROC [proc: ViewerProc, editToolData: EditToolData, scene: Scene] = TRUSTED { viewerToolData: ViewerToolData; success: BOOL; viewerCell: ViewerCell; drawProc: PROC [dc: Graphics.Context] = TRUSTED { proc[dc, viewerToolData]; }; [viewerCell, success] _ FindSceneInAllViewers[scene, editToolData.allViewers]; IF NOT success THEN ERROR; <> IF viewerCell.viewersOnScene = NIL THEN RETURN; viewerToolData _ NARROW[viewerCell.viewersOnScene.data]; SVViewerUser.Painter[drawProc, viewerToolData]; <> IF viewerCell.viewersOnScene.link = NIL THEN RETURN; FOR list: Viewer _ viewerCell.viewersOnScene.link, list.link UNTIL list = viewerCell.viewersOnScene DO viewerToolData _ NARROW[list.data]; SVViewerUser.Painter[drawProc, viewerToolData]; ENDLOOP; }; PaintAssemblyAllViewers: PUBLIC PROC [proc: ViewerAssemblyProc, editToolData: EditToolData, scene: Scene, assembly: Assembly] = { viewerToolData: ViewerToolData; success: BOOL; viewerCell: ViewerCell; drawProc: PROC [dc: Graphics.Context] = TRUSTED { proc[dc, viewerToolData, assembly]; }; [viewerCell, success] _ FindSceneInAllViewers[scene, editToolData.allViewers]; IF NOT success THEN ERROR; <> IF viewerCell.viewersOnScene = NIL THEN RETURN; viewerToolData _ NARROW[viewerCell.viewersOnScene.data]; SVViewerUser.Painter[drawProc, viewerToolData]; <> IF viewerCell.viewersOnScene.link = NIL THEN RETURN; FOR list: Viewer _ viewerCell.viewersOnScene.link, list.link UNTIL list = viewerCell.viewersOnScene DO viewerToolData _ NARROW[list.data]; SVViewerUser.Painter[drawProc, viewerToolData]; ENDLOOP; }; <> <> <> <> <> <> <<};>> <> <> <> <> <<};>> <<};>> <> <> <> <> <> <> <> <> <<};>> <> <> <> <> <> <<};>> <> <> <> <> <> <> <> <> <> <<};>> <> <> <> <> <<};>> <> <> <> <> <> <> <> <> <> <> <> <<};>> <> <> <<};>> <> <> <> <> <> <> <> <> <> <> <> <<};>> <> <> <<};>> NewOutput: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; newViewer: Viewer; inHandle, outHandle: IO.STREAM; [inHandle, outHandle, newViewer] _ MakeNewViewerAndHandle[]; SVError.SetErrorStream[outHandle]; editToolData.messages _ newViewer; }; MakeNewViewerAndHandle: PRIVATE PROC [] RETURNS [in, out: IO.STREAM, newViewer: Viewer] = TRUSTED { newViewer _ ViewerOps.CreateViewer[ flavor: $TypeScript, info: [ name: "SolidViews Typescript", menu: NIL, data: NIL, iconic: TRUE, column: right, scrollable: TRUE, icon: unInit ], paint: FALSE]; ViewerOps.SetOpenHeight[newViewer, 120]; ViewerOps.OpenIcon[icon: newViewer, closeOthers: FALSE, bottom: TRUE, paint: TRUE]; [in, out] _ ViewerIO.CreateViewerStreams["solidviews output", newViewer, NIL, TRUE]; }; NewViewer: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { <> editToolData: EditToolData _ NARROW[clientData]; viewerCell: ViewerCell; currentViewerToolData: ViewerToolData; wdir: Rope.ROPE; scene: Scene; wdir _ editToolData.originalWorkingDirectory; scene _ DisplayList3d.CreateScene[Rope.Concat[wdir, "NoName.pic"]]; [currentViewerToolData, ----] _ SVViewer.CreateViewerTool[editToolData, scene, FALSE, TRUE, editToolData.originalWorkingDirectory]; [viewerCell, editToolData.allViewers] _ AddSceneToAllViewers[scene, editToolData.allViewers]; AddViewerToViewerCell[currentViewerToolData.outer, viewerCell]; SVViewerUser.Selected[NIL, currentViewerToolData, red, FALSE, FALSE]; <> SVViewerUser.UpdateHeader[scene.name, currentViewerToolData]; }; FindSceneInAllViewers: PUBLIC PROC [scene: Scene, allViewers: LIST OF ViewerCell] RETURNS [viewerCell: ViewerCell, success: BOOL] = TRUSTED { success _ FALSE; FOR list: LIST OF ViewerCell _ allViewers, list.rest UNTIL list = NIL OR success DO IF list.first.scene = scene THEN { viewerCell _ list.first; success _ TRUE; RETURN; }; ENDLOOP; }; AddSceneToAllViewers: PUBLIC PROC [scene: Scene, allViewers: LIST OF ViewerCell] RETURNS [viewerCell: ViewerCell, newAllViewers: LIST OF ViewerCell] = TRUSTED { viewerCell _ NEW[ViewerCellObj _ [scene, NIL]]; newAllViewers _ CONS[viewerCell, allViewers]; }; FindViewerInAllViewers: PUBLIC PROC [viewer: Viewer, allViewers: LIST OF ViewerCell] RETURNS [viewerCell: ViewerCell, before, listCell, after: Viewer, success: BOOL] = TRUSTED { <> firstViewer: Viewer; success _ FALSE; FOR allList: LIST OF ViewerCell _ allViewers, allList.rest UNTIL allList = NIL OR success DO before _ NIL; firstViewer _ allList.first.viewersOnScene; IF firstViewer = NIL THEN LOOP; <> IF firstViewer = viewer THEN { listCell _ firstViewer; after _ firstViewer.link; viewerCell _ allList.first; success _ TRUE; RETURN}; before _ firstViewer; IF firstViewer.link = NIL THEN LOOP; FOR viewerList: Viewer _ firstViewer.link, viewerList.link UNTIL viewerList = firstViewer OR success DO IF viewerList = viewer THEN { listCell _ viewerList; after _ viewerList.link; viewerCell _ allList.first; success _ TRUE; RETURN}; before _ viewerList; ENDLOOP; ENDLOOP; }; FindViewerInViewerCell: PUBLIC PROC [viewer: Viewer, viewerCell: ViewerCell] RETURNS [before, listCell, after: Viewer, success: BOOL] = TRUSTED { <> firstViewer: Viewer; success _ FALSE; firstViewer _ viewerCell.viewersOnScene; IF firstViewer = NIL THEN {success _ FALSE; RETURN}; <> IF firstViewer = viewer THEN { before _ NIL;-- this tells delete proc that it needs a new firstViewer listCell _ firstViewer; after _ firstViewer.link; success _ TRUE; RETURN}; before _ firstViewer; FOR viewerList: Viewer _ viewerCell.viewersOnScene.link, viewerList.link UNTIL viewerList = firstViewer OR viewerList = NIL DO IF viewerList = viewer THEN { listCell _ viewerList; after _ viewerList.link; success _ TRUE; RETURN}; before _ viewerList; ENDLOOP; success _ FALSE; }; DeleteViewerFromAllViewers: PUBLIC PROC [viewerCell: ViewerCell, before, listCell, after: Viewer] = TRUSTED { viewerToolData: ViewerToolData; IF before = NIL OR viewerCell.viewersOnScene = listCell THEN { <> IF after = NIL THEN {viewerCell.viewersOnScene _ NIL; RETURN}; FOR v: Viewer _ after, v.link UNTIL v.link = listCell DO REPEAT FINISHED => IF v = after THEN { after.link _ NIL; viewerToolData _ NARROW[after.data]; SVViewerUser.UpdateHeader[NIL, viewerToolData]} ELSE v.link _ after; ENDLOOP; viewerCell.viewersOnScene _ after; } ELSE { IF before = after THEN { after.link _ NIL; viewerToolData _ NARROW[after.data]; SVViewerUser.UpdateHeader[NIL, viewerToolData]} ELSE before.link _ after; }; }; AddViewerToViewerCell: PUBLIC PROC [viewer: Viewer, viewerCell: ViewerCell] = TRUSTED { IF viewerCell.viewersOnScene = NIL THEN { viewer.link _ NIL; viewerCell.viewersOnScene _ viewer; RETURN}; viewer.link _ viewerCell.viewersOnScene; IF viewerCell.viewersOnScene.link = NIL THEN viewerCell.viewersOnScene.link _ viewer ELSE FOR v: Viewer _ viewerCell.viewersOnScene.link, v.link UNTIL v.link=viewerCell.viewersOnScene DO REPEAT FINISHED => v.link _ viewer; ENDLOOP; viewerCell.viewersOnScene _ viewer; }; LoadScene: PUBLIC PROC [viewerToolData: ViewerToolData, picName: Rope.ROPE, wdir: Rope.ROPE] RETURNS [scene: Scene, success: BOOL] = TRUSTED { <> editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; oldViewerCell, newViewerCell: ViewerCell; before, listCell, after: Viewer; sceneName: Rope.ROPE; [scene, success] _ SVFiles.OpenScene[picName, wdir]; IF NOT success THEN RETURN; [newViewerCell, editToolData.allViewers] _ AddSceneToAllViewers[scene, editToolData.allViewers]; [oldViewerCell, before, listCell, after, success] _ FindViewerInAllViewers[viewerToolData.outer, editToolData.allViewers]; IF success THEN { DeleteViewerFromAllViewers[oldViewerCell, before, listCell, after]; AddViewerToViewerCell[viewerToolData.outer, newViewerCell]; editToolData.sceneSection.currentScene _ scene; sceneName _ FileNames.GetShortName[scene.name]; Labels.Set[editToolData.sceneSection.sceneName, sceneName]; } ELSE ERROR; }; SaveScene: PUBLIC PROC [viewerToolData: ViewerToolData, picName: Rope.ROPE] RETURNS [success: BOOL] = TRUSTED { <> scene: Scene _ viewerToolData.scene; success _ SVFiles.SaveScene[scene, picName]; }; StoreScene: PUBLIC PROC [viewerToolData: ViewerToolData, scene: Scene, picName: Rope.ROPE] RETURNS [success: BOOL] = TRUSTED { <> editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; oldViewerCell, newViewerCell: ViewerCell; before, listCell, after: Viewer; sceneAlreadyExists, viewerThere: BOOL _ FALSE; success _ SVFiles.StoreScene[scene, picName]; SVViewerUser.SceneOldVersion[viewerToolData]; IF NOT success THEN RETURN; [oldViewerCell, before, listCell, after, viewerThere] _ FindViewerInAllViewers[viewerToolData.outer, editToolData.allViewers]; IF viewerThere THEN {-- if viewer was there delete it. IF oldViewerCell.scene = scene THEN RETURN; -- user is storing old file. DeleteViewerFromAllViewers[oldViewerCell, before, listCell, after]; }; <> [newViewerCell, sceneAlreadyExists] _ FindSceneInAllViewers[scene, editToolData.allViewers]; IF NOT sceneAlreadyExists THEN [newViewerCell, editToolData.allViewers] _ AddSceneToAllViewers[scene, editToolData.allViewers]; <> AddViewerToViewerCell[viewerToolData.outer, newViewerCell]; }; NotifyOfEmpty: PUBLIC PROC [viewerToolData: ViewerToolData, from: Scene, to: Scene] = TRUSTED { editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; before, listCell, after: Viewer; success: BOOL; viewerCell, newViewerCell: ViewerCell; [viewerCell, success] _ FindSceneInAllViewers[from, editToolData.allViewers]; IF NOT success THEN ERROR; [before, listCell, after, success] _ FindViewerInViewerCell [viewerToolData.outer, viewerCell]; IF NOT success THEN ERROR; DeleteViewerFromAllViewers[viewerCell, before, listCell, after]; [newViewerCell, editToolData.allViewers] _ AddSceneToAllViewers[to, editToolData.allViewers]; AddViewerToViewerCell[viewerToolData.outer, newViewerCell]; }; NotifyDestroy: PUBLIC PROC [viewer: Viewer] = TRUSTED { <> viewerCell: ViewerCell; before, listCell, after: Viewer; success: BOOL; viewerToolData: ViewerToolData _ NARROW[viewer.data]; editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; [viewerCell, before, listCell, after, success] _ FindViewerInAllViewers[viewer, editToolData.allViewers]; IF NOT success THEN ERROR; IF viewerCell.viewersOnScene = viewer THEN viewerCell.viewersOnScene _ viewer.link; }; SceneNewVersion: PUBLIC PROC [viewerToolData: ViewerToolData] = TRUSTED { <> viewerCell: ViewerCell; scene: Scene _ viewerToolData.scene; firstViewer: Viewer; success: BOOL; editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; [viewerCell, success] _ FindSceneInAllViewers [scene, editToolData.allViewers]; IF NOT success THEN ERROR; firstViewer _ viewerCell.viewersOnScene; SVViewerUser.NewVersion[firstViewer]; FOR viewerList: Viewer _ firstViewer.link, viewerList.link UNTIL viewerList = NIL OR viewerList = firstViewer DO SVViewerUser.NewVersion[viewerList]; ENDLOOP; }; UpdateAllHeaders: PUBLIC PROC [viewerToolData: ViewerToolData, scene: Scene] = TRUSTED { <> viewerCell: ViewerCell; firstViewer: Viewer; success: BOOL; editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; [viewerCell, success] _ FindSceneInAllViewers [scene, editToolData.allViewers]; IF NOT success THEN ERROR; firstViewer _ viewerCell.viewersOnScene; SVViewerUser.UpdateHeader[scene.name, NARROW[firstViewer.data]]; FOR viewerList: Viewer _ firstViewer.link, viewerList.link UNTIL viewerList = NIL OR viewerList = firstViewer DO SVViewerUser.UpdateHeader[scene.name, NARROW[viewerList.data]]; ENDLOOP; }; SceneOldVersion: PUBLIC PROC [viewerToolData: ViewerToolData, scene: Scene] = TRUSTED { << Loops through split viewers updating headers.>> viewerCell: ViewerCell; firstViewer: Viewer; success: BOOL; editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; [viewerCell, success] _ FindSceneInAllViewers [scene, editToolData.allViewers]; IF NOT success THEN ERROR; firstViewer _ viewerCell.viewersOnScene; SVViewerUser.OldVersion[firstViewer]; FOR viewerList: Viewer _ firstViewer.link, viewerList.link UNTIL viewerList = NIL OR viewerList = firstViewer DO SVViewerUser.OldVersion[viewerList]; ENDLOOP; <> <> <> }; NewSelectedViewer: PUBLIC PROC [viewerToolData: ViewerToolData] = TRUSTED { editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; sceneName: Rope.ROPE; IF viewerToolData # editToolData.currentViewerToolData THEN { SVViewerUser.Deselected[editToolData.currentViewerToolData]; editToolData.currentViewerToolData _ viewerToolData; editToolData.sceneSection.currentScene _ viewerToolData.scene; viewerToolData.textSection.isSelected _ TRUE; Labels.SetDisplayStyle[viewerToolData.textSection.selected, $WhiteOnBlack, TRUE]; sceneName _ FileNames.GetShortName[viewerToolData.scene.name]; Labels.Set[editToolData.sceneSection.sceneName, sceneName]; }; }; ReSelectViewer: PUBLIC PROC [viewerToolData: ViewerToolData] = { editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; sceneName: Rope.ROPE; IF editToolData.currentViewerToolData # viewerToolData THEN { SVViewerUser.Deselected[editToolData.currentViewerToolData]; editToolData.currentViewerToolData _ viewerToolData; viewerToolData.textSection.isSelected _ TRUE; Labels.SetDisplayStyle[viewerToolData.textSection.selected, $WhiteOnBlack, TRUE]; sceneName _ FileNames.GetShortName[viewerToolData.scene.name]; Labels.Set[editToolData.sceneSection.sceneName, sceneName]; }; editToolData.sceneSection.currentScene _ viewerToolData.scene; <> }; SetSourceName: PUBLIC PROC [source: Assembly, editToolData: EditToolData] = { oldMoveeRope: Rope.ROPE _ ViewerTools.GetContents[editToolData.sceneSection.source]; IF source = NIL THEN ViewerTools.SetContents[editToolData.sceneSection.source, NIL] ELSE { IF NOT Rope.Equal[oldMoveeRope, source.name, TRUE] THEN ViewerTools.SetContents[editToolData.sceneSection.source, source.name]; }; }; SetTargetName: PUBLIC PROC [target: Assembly, editToolData: EditToolData] = { oldTargetRope: Rope.ROPE _ ViewerTools.GetContents[editToolData.sceneSection.target]; IF target = NIL THEN ViewerTools.SetContents[editToolData.sceneSection.target, NIL] ELSE { IF NOT Rope.Equal[oldTargetRope, target.name, TRUE] THEN ViewerTools.SetContents[editToolData.sceneSection.target, target.name]; }; }; SetPlaneName: PUBLIC PROC [plane: Assembly, editToolData: EditToolData] = { oldPlaneRope: Rope.ROPE _ ViewerTools.GetContents[editToolData.sceneSection.plane]; IF plane = NIL THEN ViewerTools.SetContents[editToolData.sceneSection.plane, NIL] ELSE { IF NOT Rope.Equal[oldPlaneRope, plane.name, TRUE] THEN ViewerTools.SetContents[editToolData.sceneSection.plane, plane.name]; }; }; SetCurrentAssemblyName: PUBLIC PROC [current: Assembly, editToolData: EditToolData] = { oldSkitterRope: Rope.ROPE _ ViewerTools.GetContents[editToolData.sceneSection.current]; IF current = NIL THEN ViewerTools.SetContents[editToolData.sceneSection.current, NIL] ELSE { IF NOT Rope.Equal[oldSkitterRope, current.name, TRUE] THEN ViewerTools.SetContents[editToolData.sceneSection.current, current.name]; }; }; Split: PUBLIC PROC [viewerToolData: ViewerToolData, scene: Scene] = TRUSTED { <> viewerCell: ViewerCell; oldViewer, newViewer: Viewer; success: BOOL; currentViewerToolData: ViewerToolData; editToolData: EditToolData _ NARROW[viewerToolData.editToolData]; [currentViewerToolData,----] _ SVViewer.CreateViewerTool[editToolData, scene, FALSE, FALSE, editToolData.originalWorkingDirectory]; newViewer _ currentViewerToolData.outer; oldViewer _ viewerToolData.outer; [viewerCell, success] _ FindSceneInAllViewers[scene, editToolData.allViewers]; AddViewerToViewerCell[newViewer, viewerCell]; newViewer.newVersion _ oldViewer.newVersion; newViewer.newFile _ oldViewer.newFile; newViewer.file _ oldViewer.file; SVViewerUser.UpdateHeader[scene.name, currentViewerToolData]; ViewerOps.ComputeColumn[column: newViewer.column, paint: TRUE]; -- now do the painting }; DestroyAllSolidviewsWindows: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = { <> editToolData: EditToolData _ NARROW[clientData]; allViewers: LIST OF ViewerCell _ editToolData.allViewers; viewerCell: ViewerCell; artworkTool: Viewer _ NARROW[editToolData.artworkTool.data, ArtworkToolData].outer; scratchpad: Viewer _ NARROW[editToolData.scratchpad.data, ScratchpadData].scratchViewerData.outer; messages: Viewer _ editToolData.messages; editTool: Viewer _ editToolData.outer; next: Viewer; FOR sceneCellList: LIST OF ViewerCell _ allViewers, sceneCellList.rest UNTIL sceneCellList = NIL DO viewerCell _ sceneCellList.first; IF viewerCell.viewersOnScene = NIL THEN {} ELSE{ IF viewerCell.viewersOnScene.link = NIL THEN {} ELSE { FOR list: Viewer _ viewerCell.viewersOnScene.link, next UNTIL list = viewerCell.viewersOnScene DO next _ list.link; ViewerOps.DestroyViewer[list]; ENDLOOP; }; ViewerOps.DestroyViewer[viewerCell.viewersOnScene]; }; ENDLOOP; ViewerOps.DestroyViewer[artworkTool]; ViewerOps.DestroyViewer[scratchpad]; ViewerOps.DestroyViewer[messages]; ViewerOps.DestroyViewer[editTool]; }; <> <> <> <> <> <> <> < {success _ FALSE; CONTINUE}];>> <> <> <> <> <> <<};>> <<}; -- end of GetCoordSys>> <> <> <> <> <> <<[as, ----] _ DisplayList3d.FindAssemblyFromName[asRope, scene>> < {>> <> <> <> <> <> <> <<}; -- end of GetAssembly>> <<>> FindAssemblyFromName: PUBLIC PROC [name: Rope.ROPE, scene: Scene] RETURNS [assembly: Assembly, superAssembly: Assembly, found: BOOL] = TRUSTED { found _ TRUE; [assembly, superAssembly] _ DisplayList3d.FindAssemblyFromName[name, scene !DisplayList3d.AssemblyNotFound => {found _ FALSE; CONTINUE}]; IF NOT found THEN { SVError.Append["Assembly ", TRUE]; SVError.Append[name]; SVError.Append[" not found", FALSE, TRUE]; SVError.Blink[]; }; }; GetParent: PUBLIC PROC [editToolData: EditToolData] RETURNS [super: Assembly, success: BOOL] = TRUSTED { superName: Rope.ROPE _ ViewerTools.GetContents[editToolData.sceneSection.parent]; scene: Scene _ editToolData.sceneSection.currentScene; success _ TRUE; super _ NIL; [super, ----] _ DisplayList3d.FindAssemblyFromName[superName, scene !DisplayList3d.AssemblyNotFound => {success _ FALSE; CONTINUE}]; IF NOT success THEN { SVError.Append["Assembly "]; SVError.Append[superName]; SVError.Append[" not found", FALSE, TRUE]; SVError.Blink[];}; }; -- end of GetParent GetPoint3d: PUBLIC PROC [textViewer: Viewer] RETURNS [pt: Point3d] = TRUSTED { wholeRope: Rope.ROPE _ ViewerTools.GetContents[textViewer]; wholeStream: IO.STREAM _ IO.RIS[wholeRope]; TFI3d.ReadBlank[wholeStream]; pt[1] _ TFI3d.ReadReal[wholeStream]; TFI3d.ReadBlankAndRope[wholeStream, ","]; TFI3d.ReadBlank[wholeStream]; pt[2] _ TFI3d.ReadReal[wholeStream]; TFI3d.ReadBlankAndRope[wholeStream, ","]; TFI3d.ReadBlank[wholeStream]; pt[3] _ TFI3d.ReadReal[wholeStream]; }; ScenePrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.sceneSection.sceneName]; }; CurrentAssemblyPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.sceneSection.current]; }; SourcePrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.sceneSection.source]; }; TargetPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.sceneSection.target]; }; NewPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.sceneSection.new]; }; ParentPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.sceneSection.parent]; }; RGBPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.artworkSection.rgb]; }; SphereRadiusPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.sphereSection.radius]; }; BlockXYZPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.blockSection.xyz]; }; CylinderRadiusPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cylinderSection.radius]; }; CylinderHeightPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cylinderSection.height]; }; ConeRadiusPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.coneSection.radius]; }; ConeHeightPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.coneSection.height]; }; BigRadiusPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.torusSection.bigRadius]; }; SectionRadiusPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.torusSection.sectionRadius]; }; LinDepthPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.linSection.depth]; }; StuffPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.utilitySection.stuffNum]; }; DegreesPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.transformSection.degrees]; }; TranslateXYZPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.transformSection.transXYZ]; }; ScaleXYZPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.transformSection.scaleXYZ]; }; EvenScaleXYZPrompt: PUBLIC PROC[parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.transformSection.scalar]; }; CameraNamePrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraSection.name]; }; FocusPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraSection.focusPoint]; }; ScanResolutionPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraSection.resolution]; }; CameraOriginPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraSection.origin]; }; SlantPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraSection.slant]; }; FocalLengthPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraSection.focalLength]; }; FramePrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraSection.frame]; }; ClippingPlanePrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraSection.clippingPlanes]; }; VisibleAssemblyPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraSection.visibleAssemblies]; }; CameraOrderPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.cameraOrderSection.order]; }; ResolutionPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.artworkSection.resolution]; }; TubeHeightPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.artworkSection.tubeHeight]; }; TubeRadiusPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.artworkSection.tubeRadius]; }; BoxXYZPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.artworkSection.boxXYZ]; }; ArtworkNamePrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.artworkSection.picName]; }; ArtworkDegreesPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.artworkTransformSection.degrees]; }; LightNamePrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.lightSection.name]; }; LightPositionPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.lightSection.position]; }; LightColorPrompt: PUBLIC PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL] = TRUSTED { editToolData: EditToolData _ NARROW[clientData]; ViewerTools.SetSelection[editToolData.lightSection.color]; }; Init: PRIVATE PROC = TRUSTED { }; Init[]; END.