<<>> <> <> <> DIRECTORY Commander, Controls, Draw2d, FileNames, G3dDraw, G3dMatrix, G3dTool, G3dTube, ImplicitDefs, ImplicitSlice, ImplicitTube, IO, Menus, Rope; ImplicitSliceCmdsImpl: CEDAR PROGRAM IMPORTS Controls, FileNames, ImplicitSlice, ImplicitTube, IO, G3dDraw, G3dTool, G3dTube, Rope ~ BEGIN <> Button: TYPE ~ Controls.Button; DrawProc: TYPE ~ Draw2d.DrawProc; ClickProc: TYPE ~ Menus.ClickProc; DiagramProc: TYPE ~ ImplicitDefs.DiagramProc; ValueProc: TYPE ~ ImplicitDefs.ValueProc; Tool: TYPE ~ ImplicitSlice.Tool; Function: TYPE ~ ImplicitSlice.Function; Tube: TYPE ~ G3dTube.Tube; ROPE: TYPE ~ Rope.ROPE; <> TubeData: TYPE ~ REF TubeDataRep; TubeDataRep: TYPE ~ RECORD [ tool: Tool ¬ NIL, tube: Tube ¬ NIL, drawLines: BOOL ¬ FALSE ]; TubeSlice: Commander.CommandProc ~ { t: TubeData ¬ NEW[TubeDataRep]; f: LIST OF Function ¬ LIST[["segment", ValueSegment, DrawSegment]]; b: LIST OF Button ¬ LIST[ Controls.ClickButton["GetTube", GetTube, t], Controls.ClickButton["Lines: Off", ToggleDrawLines, t]]; t.tool ¬ ImplicitSlice.MakeTool["ImplicitSlice Tube", f, DrawTube, t,, b]; }; DrawTube: DrawProc ~ { t: TubeData ¬ NARROW[data]; v: G3dMTool.View ¬ G3dTool.GetView[viewer, t.tool.renderTool]; G3dTube.DrawSplines[context, t.tube, xform]; IF t.drawLines THEN { G3dTube.DrawContours[context, t.tube, v.camera.matrix, v.viewport]; G3dTube.DrawLines[context, t.tube, v.camera.matrix, v.viewport]; }; }; DrawSegment: DiagramProc ~ { t: TubeData ¬ NARROW[clientData]; xform: Matrix ¬ G3dTool.GetView[viewer, t.tool.renderTool].camera.matrix; vp: G3dMatrix.Viewport ¬ G3dView.GetViewport[viewer]; ImplicitTube.DiagramTube[context, xform, vp, point, t.tube, $Segment, inverseSqrd, 0.0, 0.75]; G3dDraw.Mark[context, t.tool.point, xform, vp, IO.PutFR[" %6.3f", IO.real[t.tool.value]]]; }; ValueSegment: ValueProc ~ { t: TubeData ¬ NARROW[clientData]; value ¬ ImplicitTube.SampleTube[point, t.tube, $Segment, inverseSqrd, 0.0, 0.75].value; }; ToggleDrawLines: ClickProc ~ { t: TubeData ¬ NARROW[clientData]; t.drawLines ¬ NOT t.drawLines; Controls.ButtonToggle[t.tool.renderTool.outerData, t.drawLines, "Lines: On", "Lines: Off"]; ImplicitSlice.Repaint[t.tool]; }; GetTube: ClickProc ~ { t: TubeData ¬ NARROW[clientData]; t.tube ¬ G3dTube.LastTubePicked[TRUE]; IF t.tube = NIL THEN { r: ROPE ¬FileNames.ResolveRelativePath[Controls.TypescriptReadFileName[t.tool.typescript]]; IF (t.tube ¬ G3dTube.TubeFromFile[r]) = NIL THEN { Controls.TypescriptWrite[t.tool.typescript, Rope.Cat["Bad file: ", r, "\n"]]; RETURN; }; }; G3dTube.SelectAll[t.tube]; IF t.tube.xSections = NIL THEN G3dTube.MakeXSections[t.tube, TRUE, TRUE]; ImplicitSlice.Repaint[t.tool]; }; <> ImplicitSlice.Register["Tube", TubeSlice, "Explore various tube designs."]; END. .. <> <> <> <> <> <> <> <> <> <<};>> <> <> <> <> <<};>> <<>> <> <> <> <> <> <> <> <> <> <