public void Init() { string filename = "TopView"; //Encoding encode = Encoding.GetEncoding(936); byte[] byteArr = EditorLayer.Encode936.GetBytes(filename); m_pEditor.AddOutputWindow(byteArr, (int)this.Handle, OUTPUTWND_SCENEEDITOR_TOPVIEW, 0, ref m_OutputWindowID); m_pEditor.GetScene(ref m_pScene); m_pScene.OnResizeWindow(0); _AtlVector3 vCameraPos = m_pEditor.GetCameraMainPos(); m_pEditor.SetCameraTopPos(vCameraPos.x, vCameraPos.z); }
private void MoveCameraToRepresentObj(int representObjPtr) { _AtlVector3 objPos = new _AtlVector3(); EngineLayer.ATLBase.GetRepresentObjTranslation(representObjPtr, ref objPos); MoveCameraToPosition(objPos); //_AtlVector3 oldpos = new _AtlVector3(), oldlookat = new _AtlVector3(); //SceneSceneEditor.GetCameraPosLookat(ref oldpos, ref oldlookat); //_AtlVector3 delta = new _AtlVector3(); //delta.x = oldlookat.x - oldpos.x; delta.y = oldlookat.y - oldpos.y; delta.z = oldlookat.z - oldpos.z; //_AtlVector3 newpos = new _AtlVector3(); //newpos.x = objPos.x - delta.x; newpos.y = objPos.y - delta.y; newpos.z = objPos.z - delta.z; //SceneSceneEditor.SetCameraPosLookat(ref newpos, ref objPos); SceneSceneEditor.UpdateSelectableEntityList(5); }
/// <summary> /// 设置相机坐标 ahpho suntao /// </summary> /// <param name="x">x坐标</param> /// <param name="y">y坐标</param> /// <param name="z">z坐标</param> public void SetCameraFocus(int x, int y, int z) { _AtlVector3 cameraLocation = new _AtlVector3(); _AtlVector3 cameraLookAt = new _AtlVector3(); _AtlVector3 delta = new _AtlVector3(); SceneSceneEditor.GetCameraPosLookat(ref cameraLocation, ref cameraLookAt); delta.x = cameraLookAt.x - cameraLocation.x; delta.y = cameraLookAt.y - cameraLocation.y; delta.z = cameraLookAt.z - cameraLocation.z; cameraLookAt.x = x; cameraLookAt.y = y; cameraLookAt.z = z; cameraLocation.x = x - delta.x; cameraLocation.y = y - delta.y; cameraLocation.z = z - delta.z; SceneSceneEditor.SetCameraPosLookat(ref cameraLocation, ref cameraLookAt); }
private void panel1_MouseDoubleClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) // 右双击切换scale { this.m_panel1.scale = 1.0f; this.m_panel1.start_adjust_x = 0.0f; this.m_panel1.start_adjust_y = 0.0f; this.Refresh(); } else if (e.Button == MouseButtons.Left) // 左双击飞镜头到鼠标处 { _AtlVector3 vecOldPos = new _AtlVector3(), vecOldLookAt = new _AtlVector3(), delta = new _AtlVector3(); SceneSceneEditor.GetCameraPosLookat(ref vecOldPos, ref vecOldLookAt); delta.x = vecOldLookAt.x - vecOldPos.x; delta.y = vecOldLookAt.y - vecOldPos.y; delta.z = vecOldLookAt.z - vecOldPos.z; _AtlVector3 vecNewPos = this.m_panel1.LogicToScene(new Point((int)mouse_map_x, (int)mouse_map_y)); vecNewPos.y = vecOldPos.y; _AtlVector3 vecNewLookAt = new _AtlVector3(); vecNewLookAt.x = vecNewPos.x + delta.x; vecNewLookAt.y = vecNewPos.y + delta.y; vecNewLookAt.z = vecNewPos.z + delta.z; SceneSceneEditor.SetCameraPosLookat(ref vecNewPos, ref vecNewLookAt); } }
/// <summary> /// 获取摄像机坐标 ahpho suntao /// </summary> /// <returns>摄像机坐标字符串</returns> private string GetCameraLookAt() { _AtlVector3 cameraLocation = new _AtlVector3(); _AtlVector3 cameraLookAt = new _AtlVector3(); SceneSceneEditor.GetCameraPosLookat(ref cameraLocation, ref cameraLookAt); string cameraLookAtString = string.Format("{0},{1},{2}", (int)cameraLookAt.x, (int)cameraLookAt.y, (int)cameraLookAt.z); return cameraLookAtString; }
/// <summary> /// 将摄像机移动到对象所在的位置 /// </summary> /// <param name="objectInfo">对象信息</param> private void MoveCameraToObject(_AtlObjInfo objectInfo) { // 移动镜头 Hashtable infoTable = Helper.GetInfoTable(objectInfo); string positionStr = infoTable["vPosition"] as string; if (positionStr != null) // 有效的坐标 { string[] positionData = positionStr.Split(new char[] { ',' }); float positionX = float.Parse(positionData[0]); float positionY = float.Parse(positionData[1]); float positionZ = float.Parse(positionData[2]); _AtlVector3 objPos = new _AtlVector3(); objPos.x = positionX; objPos.y = positionY; objPos.z = positionZ; _AtlVector3 oldpos = new _AtlVector3(), oldlookat = new _AtlVector3(); SceneSceneEditor.GetCameraPosLookat(ref oldpos, ref oldlookat); _AtlVector3 delta = new _AtlVector3(); delta.x = oldlookat.x - oldpos.x; delta.y = oldlookat.y - oldpos.y; delta.z = oldlookat.z - oldpos.z; _AtlVector3 newpos = new _AtlVector3(); newpos.x = objPos.x - delta.x; newpos.y = objPos.y - delta.y; newpos.z = objPos.z - delta.z; SceneSceneEditor.SetCameraLocation(newpos.x, newpos.y, newpos.z, objPos.x, objPos.y, objPos.z); } }
private void panel1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { switch (m_editState) { case STATE_SELECTING: break; case STATE_ADDPOLYVERTEX: break; case STATE_SELECTLOGICREGION: { _AtlVector3 vPos = new _AtlVector3(); vPos.x = e.Location.X; vPos.y = 0; vPos.z = e.Location.Y; MousePosToScene(ref vPos); int nX_End, nZ_End; int nX = 0, nZ = 0; SceneSceneEditor.GetAppointLogicalRegion(ref m_nRegionXStart, ref m_nRegionZStart, ref m_nCountRegionX, ref m_nCountRegionZ); nX = (int)(vPos.x / 3200.0f); nZ = (int)(vPos.z / 3200.0f); nX_End = m_nRegionXStart > nX ? m_nRegionXStart : nX; nZ_End = m_nRegionZStart > nZ ? m_nRegionZStart : nZ; m_nRegionXStart = m_nRegionXStart < nX ? m_nRegionXStart : nX; m_nRegionZStart = m_nRegionZStart < nZ ? m_nRegionZStart : nZ; m_nCountRegionX = nX_End - m_nRegionXStart + 1; m_nCountRegionZ = nZ_End - m_nRegionZStart + 1; SceneSceneEditor.SetAppointLogicalRegion(m_nRegionXStart, m_nRegionZStart, m_nCountRegionX, m_nCountRegionZ); // update UI m_bAutoFillParam = true; this.textXStart.Text = m_nRegionXStart.ToString(); this.textZStart.Text = m_nRegionZStart.ToString(); this.textXCount.Text = m_nCountRegionX.ToString(); this.textZCount.Text = m_nCountRegionZ.ToString(); m_bAutoFillParam = false; break; } default: break; } } else if (e.Button == MouseButtons.Middle) { } else if (e.Button == MouseButtons.Right) { } }
private void MousePosToScene(ref _AtlVector3 vPos) { float CX = 0.5f * (this.ClientRectangle.Right + this.ClientRectangle.Left); float CZ = 0.5f * (this.ClientRectangle.Bottom + this.ClientRectangle.Top); m_CameraPos = m_pEditor.GetCameraTopPos(); vPos.x = m_CameraPos.x + (vPos.x - CX) * EngineLayer.ATLBase.GetSceneEditorCameraTopScale(); vPos.z = m_CameraPos.z - (vPos.z - CZ) * EngineLayer.ATLBase.GetSceneEditorCameraTopScale(); }
private void TopViewForm_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { _AtlVector3 vPos = new _AtlVector3(); vPos.x = e.Location.X; vPos.y = 0; vPos.z = e.Location.Y; MousePosToScene(ref vPos); if (m_bSelecting) { //m_pEditor.AddSelectRegionPoint(1, vPos); if ((GetAsyncKeyState(VK_CONTROL) & 0x8000) != 0) { //m_pEditor.EndSelectRegion(1, 1); } else { //m_pEditor.EndSelectRegion(0, 1); } } } else if (e.Button == MouseButtons.Middle) { } else if (e.Button == MouseButtons.Right) { } }
private void NodeMouseDbClick(object sender, TreeNodeMouseClickEventArgs e) { m_SceneEditor.ClearSelectedEntityList(); int i = -1; if (e.Node.Tag != null) { i = Int32.Parse(e.Node.Tag.ToString()); } int nCount = 0; m_DocLogical.GetObjCount("Doodad", -1, ref nCount); string name = string.Empty; string nickname = string.Empty; int hasscript = 0; int representObjPtr = 0; int logicObjPtr = 0; int templateID = 0; if (i > 0 && i < nCount) { m_DocLogical.GetObjDisplayInfo("Doodad", i, -1, ref name, ref nickname, ref hasscript, ref representObjPtr, ref logicObjPtr, ref templateID); //LogicObj Obj = new LogicObj(name, i, -1, name, nickname, hasscrtpt != 0 ? 1 : 0, representObjPtr, logicObjPtr, templateID); m_SceneEditor.AddSelectedRepresentObject(representObjPtr, 1); _AtlVector3 objPos = new _AtlVector3(); EngineLayer.ATLBase.GetRepresentObjTranslation(representObjPtr, ref objPos); MoveCameraToPosition(objPos); //_AtlVector3 oldpos = new _AtlVector3(), oldlookat = new _AtlVector3(); //SceneSceneEditor.GetCameraPosLookat(ref oldpos, ref oldlookat); //_AtlVector3 delta = new _AtlVector3(); //delta.x = oldlookat.x - oldpos.x; delta.y = oldlookat.y - oldpos.y; delta.z = oldlookat.z - oldpos.z; //_AtlVector3 newpos = new _AtlVector3(); //newpos.x = objPos.x - delta.x; newpos.y = objPos.y - delta.y; newpos.z = objPos.z - delta.z; //SceneSceneEditor.SetCameraPosLookat(ref newpos, ref objPos); m_SceneEditor.UpdateSelectableEntityList(5); //float x = 0; //float y = 0; //float z = 0; //m_DocLogical.GetDoodadPos(logicObjPtr, ref x, ref y, ref z); } //e.Node.Tag; }
private void advTreePoly_AfterNodeSelect(object sender, AdvTreeNodeEventArgs e) { Node selectedNode = this.advTreePoly.SelectedNode; if (selectedNode == null) return; if (selectedNode.Level == 0) { if (selectedNode.Text == "笔刷") SceneSceneEditor.SetEditState(SCENESTATE_CELLLOGICAL); else if (selectedNode.Text == "多边形") SceneSceneEditor.SetEditState(SCENESTATE_SELECT); } else if (selectedNode.Level == 1) { if (selectedNode.Parent.Text == "多边形") { //SceneSceneEditor.SetEditState(SCENESTATE_SELECT); _AtlObjInfo atlobj = (_AtlObjInfo)selectedNode.Tag; ShowPolyInfoUI(atlobj); this.buttonOK.Enabled = false; if (atlobj.iRepresentObjPtr != 0) { if (SceneSceneEditor.GetEditState() != SCENESTATE_PLACEOBJ) MoveCameraToRepresentObj(atlobj.iRepresentObjPtr); SelectOnlyRepresentObj(atlobj.iRepresentObjPtr); } } else if (selectedNode.Parent.Text == "笔刷") { _AtlObjInfo atlobj = (_AtlObjInfo)selectedNode.Tag; ShowBrushInfoUI(atlobj); this.buttonOK.Enabled = false; //set camera string strPos = atlobj.strValues[5]; if (strPos != "0.000000,0.000000,0.000000") { string[] strPoses = strPos.Split(new char[] {','},StringSplitOptions.RemoveEmptyEntries); float x = 0.0f, y = 0.0f, z = 0.0f; if (Single.TryParse(strPoses[0], out x) && Single.TryParse(strPoses[1], out y) && Single.TryParse(strPoses[2], out z)) { _AtlVector3 brushPos = new _AtlVector3(); brushPos.x = x; brushPos.y = y; brushPos.z = z; MoveCameraToPosition(brushPos); } } SetLogicSceneEditorBrushState(atlobj); } } }
public Point SceneToLogic(_AtlVector3 _3DPos) { return(new Point((int)((_3DPos.x - logicXStart) / 50.0f * 32), (int)((_3DPos.z - logicZStart) / 50.0f * 32))); }
private void advTreePoly_AfterNodeSelect(object sender, AdvTreeNodeEventArgs e) { Node selectedNode = this.advTreePoly.SelectedNode; if (selectedNode == null) { return; } if (selectedNode.Level == 0) { if (selectedNode.Text == "笔刷") { SceneSceneEditor.SetEditState(SCENESTATE_CELLLOGICAL); } else if (selectedNode.Text == "多边形") { SceneSceneEditor.SetEditState(SCENESTATE_SELECT); } } else if (selectedNode.Level == 1) { if (selectedNode.Parent.Text == "多边形") { //SceneSceneEditor.SetEditState(SCENESTATE_SELECT); _AtlObjInfo atlobj = (_AtlObjInfo)selectedNode.Tag; ShowPolyInfoUI(atlobj); this.buttonOK.Enabled = false; if (atlobj.iRepresentObjPtr != 0) { if (SceneSceneEditor.GetEditState() != SCENESTATE_PLACEOBJ) { MoveCameraToRepresentObj(atlobj.iRepresentObjPtr); } SelectOnlyRepresentObj(atlobj.iRepresentObjPtr); } } else if (selectedNode.Parent.Text == "笔刷") { _AtlObjInfo atlobj = (_AtlObjInfo)selectedNode.Tag; ShowBrushInfoUI(atlobj); this.buttonOK.Enabled = false; //set camera string strPos = atlobj.strValues[5]; if (strPos != "0.000000,0.000000,0.000000") { string[] strPoses = strPos.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); float x = 0.0f, y = 0.0f, z = 0.0f; if (Single.TryParse(strPoses[0], out x) && Single.TryParse(strPoses[1], out y) && Single.TryParse(strPoses[2], out z)) { _AtlVector3 brushPos = new _AtlVector3(); brushPos.x = x; brushPos.y = y; brushPos.z = z; MoveCameraToPosition(brushPos); } } SetLogicSceneEditorBrushState(atlobj); } } }
private void panel1_MouseDown(object sender, MouseEventArgs e) { SetMyCurrentWindow(); if (e.Button == MouseButtons.Left) { switch (m_editState) { case STATE_SELECTING: { //_AtlVector3 vPos = new _AtlVector3(); //vPos.x = e.Location.X; //vPos.y = 0; //vPos.z = e.Location.Y; //MousePosToScene(ref vPos); //SceneSceneEditor.AddSelectSceneBlockPoint break; } case STATE_ADDPOLYVERTEX: { //float X, Z; //D3DXVECTOR3 vPos; //MousePosToScene(X, Z, point); //vPos.x = X; vPos.z = Z; vPos.y = 0; //m_lpSceneEditor->AddPolyVetexInTopView(vPos); break; } case STATE_SELECTLOGICREGION: { _AtlVector3 vPos = new _AtlVector3(); vPos.x = e.Location.X; vPos.y = 0; vPos.z = e.Location.Y; MousePosToScene(ref vPos); int nX_Start, nZ_Start, nX_Count = 0, nZ_Count = 0; nX_Start = (int)(vPos.x / 3200.0f) > 0 ? (int)(vPos.x / 3200.0f) : 0; nZ_Start = (int)(vPos.z / 3200.0f) > 0 ? (int)(vPos.z / 3200.0f) : 0; SceneSceneEditor.SetAppointLogicalRegion(nX_Start, nZ_Start, nX_Count, nZ_Count); break; } default: break; } } else if (e.Button == MouseButtons.Middle) { m_MouseLDown = e.Location; SceneSceneEditor.GetCameraTopPos(ref m_CameraPos); } else if (e.Button == MouseButtons.Right) { //if (m_bAddPolyVertex) //{ // m_pEditor.EndAddPolyVertex(0); //} } }
public Point SceneToLogic(_AtlVector3 _3DPos) { return new Point((int)((_3DPos.x - logicXStart) / 50.0f * 32), (int)((_3DPos.z - logicZStart) / 50.0f * 32)); }
public _AtlVector3 LogicToScene(Point logicPos) { _AtlVector3 vec3 = new _AtlVector3(); vec3.x = (float)(((double)logicPos.X) * 50.0f / 32 + logicXStart); vec3.y = 0; vec3.z = (float)(((double)logicPos.Y) * 50.0f / 32 + logicZStart); return vec3; }
private void MoveCameraToPosition(_AtlVector3 newPos) { _AtlVector3 oldpos = new _AtlVector3(), oldlookat = new _AtlVector3(); m_SceneEditor.GetCameraPosLookat(ref oldpos, ref oldlookat); _AtlVector3 delta = new _AtlVector3(); delta.x = oldlookat.x - oldpos.x; delta.y = oldlookat.y - oldpos.y; delta.z = oldlookat.z - oldpos.z; _AtlVector3 newpos = new _AtlVector3(); newpos.x = newPos.x - delta.x; newpos.y = newPos.y - delta.y; newpos.z = newPos.z - delta.z; m_SceneEditor.SetCameraPosLookat(ref newpos, ref newPos); }
/// <summary> /// 重写的绘图方法 /// </summary> /// <param name="e">绘图事件参数</param> protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics dc = e.Graphics; if (canvasWidth == 0 || canvasHeight == 0) return; Bitmap bufferBMP = new Bitmap(canvasWidth, canvasHeight); // 绘图的缓冲 Graphics g = Graphics.FromImage(bufferBMP); g.Clear(this.BackColor); g.SmoothingMode = SmoothingMode.HighQuality; //高质量 g.PixelOffsetMode = PixelOffsetMode.HighQuality; //高像素偏移质量 if (image != null) // 绘制图片 { RectangleF destRect = new RectangleF(0, 0, canvasWidth, canvasHeight); RectangleF srcRect = new RectangleF((1.0f - scale) * image.Width / 2 + start_adjust_x, (1.0f - scale) * image.Height / 2 + start_adjust_y, image.Width * scale, image.Height * scale); g.DrawImage(image, destRect, srcRect, GraphicsUnit.Pixel); // 画镜头的位置和朝向 _AtlVector3 cameraLocation = new _AtlVector3(); _AtlVector3 cameraLookAt = new _AtlVector3(); SceneSceneEditor.GetCameraPosLookat(ref cameraLocation, ref cameraLookAt); Point ptLogic = SceneToLogic(cameraLocation); ObjDrawInfo odi = new ObjDrawInfo(new PointF((ptLogic.X - middlemapStartX) / logicWidth, 1.0f - ((ptLogic.Y - middlemapStartY) / logicHeight)), 0, null); PointF ptDraw = GetODIClientPos(odi); g.DrawEllipse(redPen, ptDraw.X - 3, ptDraw.Y - 3, 7, 7); // foreach (DictionaryEntry entry in m_ODIs) // { // ObjDrawInfo odi = entry.Value as ObjDrawInfo; // PointF pointf = GetODIClientPos(odi); // g.DrawEllipse(redPen, pointf.X - 3, pointf.Y - 3, 7, 7); // int nDir = (int)(odi.nDir); // if ((this.Parent as Preview).m_ShowDir && nDir != -1) // { // PointF adjustment = GetDirEndAdjustment(nDir); // g.DrawLine(redPen, pointf.X, pointf.Y, pointf.X + adjustment.X, pointf.Y + adjustment.Y); // } // if ((this.Parent as Preview).m_ShowObjName) // { // LogicObj curObj = odi.lObj; // string strODI = string.Format("{0}[{1}]", curObj.tyPe.ToLower().EndsWith("point") ? "Point" : (curObj.tyPe.ToLower().EndsWith("vertex") ? "Vertex" : curObj.values[0]), curObj.inDex); // g.DrawString(strODI, timesFont, yellowBrush, pointf.X + 3, pointf.Y + 7); // } // } } // 从缓冲中绘制最终图像 dc.DrawImage(bufferBMP, 0, 0); // g.DrawLine(greenPen, p, p + littileSize); }
private void TopViewForm_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { if (e.Location.Y < m_LastMousePos.Y) { m_pEditor.SetCameraTopScale(EngineLayer.ATLBase.GetSceneEditorCameraTopScale() * 1.05f); } else { float fScale = EngineLayer.ATLBase.GetSceneEditorCameraTopScale() * 0.95f; if (fScale < 0.01f) fScale = 0.01f; m_pEditor.SetCameraTopScale(fScale); } } else if (e.Button == MouseButtons.Middle) { m_pEditor.SetCameraTopPos(m_CameraPos.x - (e.Location.X - m_MouseLDown.X) * EngineLayer.ATLBase.GetSceneEditorCameraTopScale(), m_CameraPos.z + (e.Location.Y - m_MouseLDown.Y) * EngineLayer.ATLBase.GetSceneEditorCameraTopScale()); } else if (e.Button == MouseButtons.Left) { if (m_bSelecting) { _AtlVector3 vPos = new _AtlVector3(); vPos.x = e.Location.X; vPos.y = 0; vPos.z = e.Location.Y; MousePosToScene(ref vPos); //m_pEditor.AddSelectRegionPoint(1, vPos); // if ((GetAsyncKeyState(VK_CONTROL) & 0x8000) != 0) // { // m_pEditor.EndSelectRegion(1, 0); // } // else // { // m_pEditor.EndSelectRegion(0, 0); // } } } m_LastMousePos = e.Location; }
private void TopViewForm_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { _AtlVector3 vPos = new _AtlVector3(); vPos.x = e.Location.X; vPos.y = 0; vPos.z = e.Location.Y; MousePosToScene(ref vPos); if (m_bSelecting) { //m_pEditor.AddSelectRegionPoint(0, vPos); } if (m_bAddPolyVertex) { m_pEditor.AddPolyVetexInTopView(ref vPos); } } else if (e.Button == MouseButtons.Middle) { m_MouseLDown = e.Location; m_CameraPos = m_pEditor.GetCameraTopPos(); } else if (e.Button == MouseButtons.Right) { if (m_bAddPolyVertex) { m_pEditor.EndAddPolyVertex(0); } } }