; Two Canvas Editor View ; Requires Extended language mode. Const EVENT_GADGET_ACTION=$401 Const EVENT_WINDOW_CLOSE=$803 window=CreateWindow("Blitz3D Two-View World Editor",70,50,980,680,0,15) SetMinWindowSize window,700,480 sidebar=CreatePanel(8,8,210,624,window,1) CreateLabel "Scene hierarchy",10,10,185,22,sidebar,2 tree=CreateTreeView(10,38,190,510,sidebar) root=TreeViewRoot(tree) sceneNode=AddTreeViewNode("Editor world",root) cubeNode=AddTreeViewNode("Editor cube",sceneNode) perspectiveNode=AddTreeViewNode("Perspective camera",sceneNode) topNode=AddTreeViewNode("Top camera",sceneNode) ExpandTreeViewNode sceneNode SelectTreeViewNode cubeNode orbitLeftButton=CreateButton("Orbit left",10,520,92,28,sidebar) orbitRightButton=CreateButton("Orbit right",108,520,92,28,sidebar) resetButton=CreateButton("Reset cube",10,554,190,30,sidebar) status=CreateLabel("Select a scene item or move the perspective camera.",10,588,190,46,sidebar) perspectiveCanvas=CreateCanvas(228,8,724,300,window) topCanvas=CreateCanvas(228,316,724,316,window) Graphics3DCanvas perspectiveCanvas Graphics3DCanvas topCanvas editorWorld=GetWorld() AmbientLight 45,45,52 perspectiveCamera=CreateCamera() CameraClsColor perspectiveCamera,18,26,42 PositionEntity perspectiveCamera,4,3,-7 RotateEntity perspectiveCamera,15,-28,0 topCamera=CreateCamera() CameraProjMode topCamera,2 CameraZoom topCamera,.32 CameraClsColor topCamera,28,30,36 PositionEntity topCamera,0,8,0 RotateEntity topCamera,90,0,0 light=CreateLight():RotateEntity light,40,-35,0 cube=CreateCube():EntityColor cube,80,165,240 plane=CreatePlane(8):EntityColor plane,75,78,84:PositionEntity plane,0,-1,0 SetCanvasCamera perspectiveCanvas,perspectiveCamera SetCanvasCamera topCanvas,topCamera cameraAngle#=28 lastWidth=0:lastHeight=0 running=True While running eventID=WaitEvent(1) While eventID<>0 If eventID=EVENT_WINDOW_CLOSE And EventSource()=window Then running=False If eventID=EVENT_GADGET_ACTION And EventSource()=resetButton RotateEntity cube,0,0,0 SetGadgetText status,"Cube rotation reset." EndIf If eventID=EVENT_GADGET_ACTION And EventSource()=tree selectedNode=SelectedTreeViewNode(tree) If selectedNode=cubeNode EntityColor cube,255,190,70 Else EntityColor cube,80,165,240 EndIf SetGadgetText status,"Selected: "+TreeViewNodeText(selectedNode) EndIf If eventID=EVENT_GADGET_ACTION And (EventSource()=orbitLeftButton Or EventSource()=orbitRightButton) If EventSource()=orbitLeftButton Then cameraAngle=cameraAngle-10 Else cameraAngle=cameraAngle+10 PositionEntity perspectiveCamera,Sin(cameraAngle)*8,3,-Cos(cameraAngle)*8 PointEntity perspectiveCamera,cube SetGadgetText status,"Perspective camera orbit: "+cameraAngle+" degrees" EndIf eventID=PeekEvent() Wend If KeyHit(1) Then running=False clientWidth=ClientWidth(window):clientHeight=ClientHeight(window) If clientWidth<>lastWidth Or clientHeight<>lastHeight contentHeight=clientHeight-16 viewWidth=clientWidth-236 topHeight=(contentHeight-8)/2 SetGadgetShape sidebar,8,8,210,contentHeight SetGadgetShape tree,10,38,190,contentHeight-150 SetGadgetShape orbitLeftButton,10,contentHeight-106,92,28 SetGadgetShape orbitRightButton,108,contentHeight-106,92,28 SetGadgetShape resetButton,10,contentHeight-72,190,30 SetGadgetShape status,10,contentHeight-38,190,34 SetGadgetShape perspectiveCanvas,228,8,viewWidth,topHeight SetGadgetShape topCanvas,228,16+topHeight,viewWidth,contentHeight-topHeight-8 lastWidth=clientWidth:lastHeight=clientHeight EndIf TurnEntity cube,.12,.24,.04 RenderWorldToCanvas perspectiveCanvas,editorWorld RenderWorldToCanvas topCanvas,editorWorld SetBuffer CanvasBuffer(perspectiveCanvas) Color 235,242,255:Text 12,12,"PERSPECTIVE" SetBuffer CanvasBuffer(topCanvas) Color 235,242,255:Text 12,12,"TOP / ORTHOGRAPHIC" SetBuffer BackBuffer() FlipCanvas perspectiveCanvas,False FlipCanvas topCanvas,True Wend EndGraphics FreeGadget window End