private void ExportOrthoImage() { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Image Files(*.BMP)|*.BMP|Image Files(*.PNG)|*.PNG|Image Files(*.JPG)|*.JPG"; dlg.DefaultExt = ".bmp"; if (dlg.ShowDialog() == DialogResult.OK) { IPoint center = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); center.SpatialCRS = dataset.SpatialReference; center.SetCoords(env.Center.X, env.Center.Y, env.Center.Z, 0, 0); IVector3 position = new Vector3(); IEulerAngle angle = new EulerAngle(); this.axRenderControl1.Camera.GetCamera(out position, out angle); IEnvelope newEnv = new Envelope(); //newEnv表示相机出图范围 newEnv.MinX = env.MinX - env.Center.X; //偏移到原点处 newEnv.MaxX = env.MaxX - env.Center.X; newEnv.MinY = env.MinY - env.Center.Y; newEnv.MaxY = env.MaxY - env.Center.Y; newEnv.MinZ = -100; //相机出图深度 newEnv.MaxZ = 100; bool b = this.axRenderControl1.ExportManager.ExportOrthoImage(dlg.FileName, 1024, center, angle, newEnv, false, System.Drawing.Color.Blue); if (!b) { MessageBox.Show("错误码为:" + this.axRenderControl1.GetLastError().ToString()); } } }
private void CreateRenderModelPoint(IPoint point) { // 创建模型 if (gfactory == null) { gfactory = new GeometryFactory(); } string tmpOSGPath = Environment.CurrentDirectory + @"\TrashCar\GLJCHE01.osg"; //string tmpOSGPath = Environment.CurrentDirectory + @"\Apartment\Apartment.osg"; fde_modelpoint = gfactory.CreateGeometry(i3dGeometryType.i3dGeometryModelPoint, i3dVertexAttribute.i3dVertexAttributeZ) as IModelPoint; fde_modelpoint.SpatialCRS = crs; fde_modelpoint.SetCoords(point.X, point.Y, point.Z, 0, 0); fde_modelpoint.ModelName = tmpOSGPath; rmodelpoint = _axRenderControl.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null); rmodelpoint.MaxVisibleDistance = double.MaxValue; rmodelpoint.MinVisiblePixels = 0; IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); _axRenderControl.Camera.LookAt2(point, 100, angle); }
/// <summary> /// 单击表格记录进行变色和定位 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { foreach (string key in rowMap.Keys) { RowObject r = rowMap[key]; int fid = int.Parse(r.FID); IFeatureClass fc = r.FeatureClass as IFeatureClass; this.axRenderControl1.FeatureManager.HighlightFeature(fc, fid, System.Drawing.Color.Red); } DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex]; if (row != null) { string fid = row.Cells["FID"].Value.ToString(); IFeatureClass fc = row.Cells["FID"].Tag as IFeatureClass; this.axRenderControl1.FeatureManager.HighlightFeature(fc, int.Parse(fid), System.Drawing.Color.Blue); IEnvelope evn = rowMap[fid].Envelop; IEulerAngle angle = new EulerAngle(); angle.Set(0, -90, 0); if (geoFactory == null) { geoFactory = new GeometryFactory(); } IPoint pos = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pos.SpatialCRS = datasetCRS; pos.Position = evn.Center; this.axRenderControl1.Camera.LookAt2(pos, 1000, angle); } }
private void numSunDirection_ValueChanged(object sender, EventArgs e) { IEulerAngle angle = new EulerAngle(); angle.Set(double.Parse(numHeading.Value.ToString()), double.Parse(numTilt.Value.ToString()), 0); axRenderControl1.SunConfig.SetSunEuler(angle); }
private void dataGridView1_MouseDoubleClick(object sender, MouseEventArgs e) { int featureId = int.Parse((sender as DataGridView).CurrentRow.Cells[0].Value.ToString()); IFeatureClass curFeatureClass = null; foreach (IFeatureClass fc in fcMap.Keys) { curFeatureClass = fc; IRowBuffer fdeRow = curFeatureClass.GetRow(featureId); if (fdeRow != null) { int nPos = fdeRow.FieldIndex("Geometry"); if (nPos != -1 && !fdeRow.IsNull(nPos)) { IPOI mp = fdeRow.GetValue(nPos) as IPOI; // 从库中读取值 IPoint pos = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pos.Position = mp.Position; pos.SpatialCRS = mp.SpatialCRS; IEulerAngle angle = new EulerAngle(); angle.Heading = 0; angle.Tilt = -60; angle.Roll = 0; this.axRenderControl1.Camera.LookAt2(pos, 3000, angle); this.axRenderControl1.FeatureManager.UnhighlightAll(); this.axRenderControl1.FeatureManager.HighlightFeature(curFeatureClass, int.Parse(fdeRow.GetValue(0).ToString()), System.Drawing.Color.Yellow); mp.ImageName = (strMediaPath + @"\png\lan.png"); IRenderPOI rpoi = this.axRenderControl1.ObjectManager.CreateRenderPOI(mp); rpoi.Highlight(System.Drawing.Color.Red); this.axRenderControl1.ObjectManager.DelayDelete(rpoi.Guid, 60000); } } } }
private void SetAngle(EulerAngle angle) { transform.localRotation = Quaternion.Euler( (float)angle.XAngle, (float)angle.YAngle, (float)angle.ZAngle); }
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e) { try { if (this.listView1.SelectedItems.Count == 0) { return; } myListNode item = (myListNode)this.listView1.SelectedItems[0]; item.Checked = true; //this.axRenderControl1.Camera.LookAtEnvelope(item.layer.Envelope); IEnvelope env = item.layer.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { return; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 500, angle); } catch (System.Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } }
public BoneViewModel(RigEditorViewModel rig, IHaveBones parent, RigResource.RigResource.Bone bone, BoneManager manager) { if (rig == null) { throw new ArgumentNullException("rig"); } if (bone == null) { throw new ArgumentNullException("bone"); } if (manager == null) { throw new ArgumentNullException("manager"); } mRig = rig; mChildren = new ObservableCollection <BoneViewModel>(); mParent = parent; mBone = bone; mManager = manager; foreach (RigResource.RigResource.Bone b in manager.GetChildren(mBone)) { mChildren.Add(new BoneViewModel(mRig, this, b, mManager)); } mRotation = new EulerAngle(new Quaternion(bone.Orientation.A, bone.Orientation.B, bone.Orientation.C, bone.Orientation.D)); manager.BoneAdded += OnBoneAdded; manager.BoneRemoved += OnBoneRemoved; manager.BoneParentChanged += OnBoneParentChanged; mSetOppositeCommand = new UserCommand <BoneViewModel>(x => true, ExecuteSetOpposite); }
private IEulerAngle SetAngle(double heading, double tilt, double roll) { IEulerAngle angle = new EulerAngle(); angle.Set(heading, tilt, roll); return(angle); }
private void CreateFeautureLayer() { bool hasfly = false; foreach (FeatureClass fc in featureClassMapping.Keys) { List <string> geoNames = featureClassMapping[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = _axRenderControl.ObjectManager.CreateFeatureLayer(fc, geoName, null, null); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } EulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); _axRenderControl.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } }
private void MainForm_Load(object sender, EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; this.axRenderControl1.Camera.FlyTime = 1; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } string tmpTdbPath = (strMediaPath + @"\sdk.tdb"); I3DTileLayer tilelayer = this.axRenderControl1.ObjectManager.Create3DTileLayer(tmpTdbPath, "", rootId); if (tilelayer != null) { IVector3 pos = new Vector3(); pos.Set(15404.97, 35575.28, 59); IEulerAngle ang = new EulerAngle(); ang.Set(0, -30, 0); this.axRenderControl1.Camera.LookAt(pos, 10, ang); } else { this.Text = "tilelayer create failed!"; } this.comboBox1.SelectedIndex = 2; this.axRenderControl1.RcCameraFlyFinished += new _IRenderControlEvents_RcCameraFlyFinishedEventHandler(axRenderControl1_RcCameraFlyFinished); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "WalkGround.html"; } }
/// <summary> /// 姿态数据更新,roll水平移动,pitch竖直移动 /// </summary> /// <param name="upperArmOffsetThisTime">本次大臂偏移角度</param> /// <param name="foreArmOffsetThisTime">本次小臂偏移角度</param> private void OnGestureUpdated(EulerAngle upperArmOffsetThisTime, EulerAngle foreArmOffsetThisTime) { this.Invoke(new MethodInvoker(delegate() { this.lbroll1.Text = upperArmOffsetThisTime.Roll.ToString(); this.lbPitch1.Text = upperArmOffsetThisTime.Pitch.ToString(); this.lbYaw1.Text = upperArmOffsetThisTime.Yaw.ToString(); this.lbRoll2.Text = foreArmOffsetThisTime.Roll.ToString(); this.lbPitch2.Text = foreArmOffsetThisTime.Pitch.ToString(); this.lbYaw2.Text = foreArmOffsetThisTime.Yaw.ToString();//打印根据传感器角速度计算的偏移量 })); _robotHandler.MoveArm(upperArmOffsetThisTime.Pitch, upperArmOffsetThisTime.Yaw, upperArmOffsetThisTime.Roll, foreArmOffsetThisTime.Pitch, foreArmOffsetThisTime.Yaw, foreArmOffsetThisTime.Roll); }
public static string ToEuler(Quaternion q, bool flip) { var matrix = new Matrix(new s3piwrappers.RigEditor.Geometry.Quaternion(q.A, q.B, q.C, q.D)); var euler = new EulerAngle(matrix); if (flip) { euler = new EulerAngle(0, 0, Math.PI/2); } return String.Format("{0:F10} {1:F10} {2:F10}", euler.Roll, euler.Yaw, euler.Pitch); }
private void btnFlyToFeatureLayer_Click(object sender, EventArgs e) { IVector3 position = new Vector3(); position.Set(envX, envY, envZ); IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(position, 800, angle); }
private void seTilt_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e) { if (app == null || app.Current3DMapControl == null) { return; } IEulerAngle ang = new EulerAngle(); ang.Set(Convert.ToDouble(this.seHeading.EditValue), Convert.ToDouble(this.seTilt.EditValue), 0); app.Current3DMapControl.SunConfig.SetSunEuler(ang); }
public Node() { Children = new Dictionary <Node, Vector3>(); Position = new Vector3(); Limit = new Range <EulerAngle> { Min = new EulerAngle(-180, -180, -180), Max = new EulerAngle(180, 180, 180) }; Angle = new EulerAngle(); }
public static string ToEuler(Quaternion q, bool flip) { var matrix = new Matrix(new s3piwrappers.RigEditor.Geometry.Quaternion(q.A, q.B, q.C, q.D)); var euler = new EulerAngle(matrix); if (flip) { euler = new EulerAngle(0, 0, Math.PI / 2); } return(String.Format("{0:F10} {1:F10} {2:F10}", euler.Roll, euler.Yaw, euler.Pitch)); }
private void LoadData() { if (geoFactory == null) { geoFactory = new GeometryFactory(); } string modelName = (strMediaPath + @"\osg\Schemes\scheme-01.osg"); IModelPoint modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz + 15, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint1 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint1.VisibleMask = gviViewportMask.gviView0; IVector3 position = new Vector3(); position.Set(dx, dy, dz); IPoint point = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); point.SpatialCRS = _datasetCRS; point.SetCoords(position.X, position.Y, position.Z, 0, 0); IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); axRenderControl1.Camera.LookAt2(point, 300, angle); modelName = (strMediaPath + @"\osg\Schemes\scheme-02.osg"); modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz - 15, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint2 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint2.VisibleMask = gviViewportMask.gviView1; modelName = (strMediaPath + @"\osg\Schemes\scheme-03.osg"); modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz - 10, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint3 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint3.VisibleMask = gviViewportMask.gviView2; modelName = (strMediaPath + @"\osg\Schemes\scheme-04.osg"); modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz - 13, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint4 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint4.VisibleMask = gviViewportMask.gviView3; }
public Quaternion(EulerAngle e) { double c1 = Math.Cos(e.Yaw*0.5d); double c2 = Math.Cos(e.Pitch*0.5d); double c3 = Math.Cos(e.Roll*0.5d); double s1 = Math.Sin(e.Yaw*0.5d); double s2 = Math.Sin(e.Pitch*0.5d); double s3 = Math.Sin(e.Roll*0.5d); W = c1*c2*c3 - s1*s2*s3; X = s1*s2*c3 + c1*c2*s3; Y = s1*c2*c3 + c1*s2*s3; Z = c1*s2*c3 - s1*c2*s3; }
/// <summary> /// 飞入目标点 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnFlyToTargetPoint_Click(object sender, EventArgs e) { if (this.startX.Text != "" && this.startY.Text != "" && this.startZ.Text != "" && this.endX.Text != "" && this.endY.Text != "" && this.endZ.Text != "") { IVector3 position1 = new Vector3(); position1.Set(double.Parse(endX.Text), double.Parse(endY.Text), double.Parse(endZ.Text)); IVector3 position2 = new Vector3(); position2.Set(double.Parse(startX.Text), double.Parse(startY.Text), double.Parse(startZ.Text)); IEulerAngle angle = new EulerAngle(); angle = axRenderControl1.Camera.GetAimingAngles(position1, position2); axRenderControl1.Camera.LookAt(position1, 0, angle); } }
void Update() { if (this.isPositionChanging) { var point = this.currentPosition.Point; if (this.isMoving) { point = new Point( this.Approximate(point.X, this.targetPosition.Point.X, this.movementSpeed), this.Approximate(point.Y, this.targetPosition.Point.Y, this.movementSpeed), this.Approximate(point.Z, this.targetPosition.Point.Z, this.movementSpeed)); this.SetPoint(point); this.SetIsMoving(); } var angle = this.currentPosition.Angle; if (this.isTurning) { angle = new EulerAngle( this.Approximate(angle.XAngle, this.targetPosition.Angle.XAngle, this.rotationSpeed), this.Approximate(angle.YAngle, this.targetPosition.Angle.YAngle, this.rotationSpeed), this.Approximate(angle.ZAngle, this.targetPosition.Angle.ZAngle, this.rotationSpeed)); this.SetAngle(angle); this.SetIsTurning(); } var lenght = this.currentPosition.Lenght; if (this.isLenghtChanging) { lenght = this.Approximate(lenght, this.targetPosition.Lenght, this.lenghtChangingSpeed); this.SetLenght(lenght); this.SetIsLenghtChanging(); } this.currentPosition = new VectorPosition( this.currentPosition.IsVisible, point, angle, lenght); this.SetIsPositionChanging(); } }
private void FrmSunSimulation_Load(object sender, EventArgs e) { if (app == null || app.Current3DMapControl == null) { return; } app.Current3DMapControl.SunConfig.SunCalculateMode = gviSunCalculateMode.gviSunModeUserDefined; System.Drawing.Color color = this.colorPickEdit1.Color; System.Drawing.Color color1 = System.Drawing.Color.FromArgb(this.trackBarControl1.Value, color.R, color.G, color.B); app.Current3DMapControl.SunConfig.ShadowColor = (uint)color1.ToArgb(); IEulerAngle ang = new EulerAngle(); ang.Set(Convert.ToDouble(this.seHeading.EditValue), Convert.ToDouble(this.seTilt.EditValue), 0); app.Current3DMapControl.SunConfig.SetSunEuler(ang); app.Current3DMapControl.SunConfig.EnableShadow(0, true); }
public override void Run(object sender, EventArgs e) { DF3DApplication app = (DF3DApplication)this.Hook; if (app == null || app.Current3DMapControl == null) { return; } IVector3 v3 = new Vector3Class(); IEulerAngle ang = new EulerAngle(); app.Current3DMapControl.Camera.GetCamera(out v3, out ang); string str = v3.X + ";" + v3.Y + ";" + v3.Z + ";" + ang.Heading + ";" + ang.Tilt + ";" + ang.Roll; Config.SetConfigValue("InitView3D", str); }
private void btnCreateFeature_Click(object sender, EventArgs e) { _geoEditor.FinishEdit(); //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时 IVector3 position = new Vector3(); position.Set(envX, envY, envZ); IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(position, 800, angle); MessageBox.Show("请选择一个Feature"); this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectFeatureLayer; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; this.axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect_CreateFeature); this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect_CreateFeature); }
private void Export25D() { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Image Files(*.IMG)|*.IMG"; dlg.DefaultExt = ".img"; if (dlg.ShowDialog() == DialogResult.OK) { IVector3 position = new Vector3(); IEulerAngle angle = new EulerAngle(); this.axRenderControl1.Camera.GetCamera(out position, out angle); float meterPerPixel = (float)env.Width / 1024; bool b = this.axRenderControl1.ExportManager.Export25DEx(dlg.FileName, env, meterPerPixel, angle, fcGUIDs.ToArray(), false); if (!b) { MessageBox.Show("错误码为:" + this.axRenderControl1.GetLastError().ToString()); } } }
private void CreateFeautureLayer() { bool hasfly = false; foreach (FeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } EulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); if (geoFactory == null) { geoFactory = new GeometryFactory(); } IPoint pos = geoFactory.CreatePoint(i3dVertexAttribute.i3dVertexAttributeZ); pos.SpatialCRS = datasetCRS; pos.Position = env.Center; this.axRenderControl1.Camera.LookAt2(pos, 1000, angle); } hasfly = true; } } }
public BoneViewModel(RigEditorViewModel rig, IHaveBones parent, RigResource.RigResource.Bone bone, BoneManager manager) { if (rig == null) throw new ArgumentNullException("rig"); if (bone == null) throw new ArgumentNullException("bone"); if (manager == null) throw new ArgumentNullException("manager"); mRig = rig; mChildren = new ObservableCollection<BoneViewModel>(); mParent = parent; mBone = bone; mManager = manager; foreach (RigResource.RigResource.Bone b in manager.GetChildren(mBone)) { mChildren.Add(new BoneViewModel(mRig, this, b, mManager)); } mRotation = new EulerAngle(new Quaternion(bone.Orientation.A, bone.Orientation.B, bone.Orientation.C, bone.Orientation.D)); manager.BoneAdded += OnBoneAdded; manager.BoneRemoved += OnBoneRemoved; manager.BoneParentChanged += OnBoneParentChanged; mSetOppositeCommand = new UserCommand<BoneViewModel>(x => true, ExecuteSetOpposite); }
/// <summary> /// 飞入目标点 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnFlyToTargetPoint_Click(object sender, EventArgs e) { if (this.startX.Text != "" && this.startY.Text != "" && this.startZ.Text != "" && this.endX.Text != "" && this.endY.Text != "" && this.endZ.Text != "") { if (geoFactory == null) { geoFactory = new GeometryFactory(); } IPoint pos1 = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pos1.SpatialCRS = currentEnvCRS; pos1.SetCoords(double.Parse(endX.Text), double.Parse(endY.Text), double.Parse(endZ.Text), 0, 0); IPoint pos2 = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pos2.SpatialCRS = currentEnvCRS; pos2.SetCoords(double.Parse(startX.Text), double.Parse(startY.Text), double.Parse(startZ.Text), 0, 0); IEulerAngle angle = new EulerAngle(); angle = this.axRenderControl1.Camera.GetAimingAngles2(pos1, pos2); this.axRenderControl1.Camera.LookAt2(pos1, 0, angle); } }
private void toolStripExportPanorama_Click(object sender, EventArgs e) { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Image Files(*.BMP)|*.BMP|Image Files(*.PNG)|*.PNG|Image Files(*.JPG)|*.JPG"; dlg.DefaultExt = ".bmp"; if (dlg.ShowDialog() == DialogResult.OK) { IVector3 position = new Vector3(); IEulerAngle angle = new EulerAngle(); this.axRenderControl1.Camera.GetCamera(out position, out angle); IPoint center = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); center.SpatialCRS = dataset.SpatialReference; center.Position = position; bool b = this.axRenderControl1.ExportManager.ExportPanorama(dlg.FileName, 1024, center, angle); if (!b) { MessageBox.Show("错误码为:" + this.axRenderControl1.GetLastError().ToString()); } } }
/// <summary> /// 单击表格记录进行变色和定位 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { foreach (string key in rowMap.Keys) { RowObject r = rowMap[key]; int fid = int.Parse(r.FID); IFeatureClass fc = r.FeatureClass as IFeatureClass; axRenderControl1.FeatureManager.HighlightFeature(fc, fid, System.Drawing.Color.Red); } DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex]; if (row != null) { string fid = row.Cells["FID"].Value.ToString(); IFeatureClass fc = row.Cells["FID"].Tag as IFeatureClass; axRenderControl1.FeatureManager.HighlightFeature(fc, int.Parse(fid), System.Drawing.Color.Blue); IEnvelope evn = rowMap[fid].Envelop; IEulerAngle angle = new EulerAngle(); angle.Set(0, -30, 0); axRenderControl1.Camera.LookAt(evn.Center, 40, angle); } }
static void Main(string[] args) { #if DEBUG string path = @"C:\tmp\Sample_000000000213_keypoints.vmd"; #else string path = args[0]; #endif var vr = new VmdReader(path); var vmd = vr.Read(); var vw = new VmdWriter(path.Substring(0, path.LastIndexOf('.')) + "_rewrite.vmd"); vw.Write(vmd); foreach (var frame in vmd.Frames) { Console.WriteLine($"Frame #{frame.Index}"); Console.WriteLine($"-----------------------------------------"); foreach (var bone in frame.Bones) { Console.WriteLine($"Bone {bone.Key}:"); var p = bone.Value.Position; Console.WriteLine($" Position (x,y,z) = ({p.X}, {p.Y}, {p.Z})"); var q = bone.Value.Quaternion; Console.WriteLine($" Quartenion (x,y,z,w) = ({q.X}, {q.Y}, {q.Z}, {q.W})"); var e = EulerAngle.FromQuaternion(q); Console.WriteLine($" Euler angles (h,p,b) = ({e.HeadingDeg}, {e.PitchDeg}, {e.BankDeg})"); } Console.WriteLine($""); } #if DEBUG Console.WriteLine("Press any key to continue..."); Console.ReadKey(true); #else #endif }
private void menuLoadData_Click(object sender, EventArgs e) { if (layers.Count > 0) { MessageBox.Show("数据已加载"); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); layers.Add(featureLayer); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } }
void axRenderControl1_RcObjectEditing(IGeometry Geometry) { polyline = Geometry as IPolyline; if (polyline.PointCount == 2) { this.axRenderControl1.ObjectEditor.FinishEdit(); this.axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectDrag; this.axRenderControl1.RcObjectEditing -= new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing); IEulerAngle angle = this.axRenderControl1.Camera.GetAimingAngles2(polyline.GetPoint(0), polyline.GetPoint(1)); IEulerAngle cameraAngle = new EulerAngle(); cameraAngle.Heading = angle.Heading - 90; cameraAngle.Tilt = cameraAngle.Roll = 0; IPoint center = polyline.Midpoint; IEnvelope newEnv = new Envelope(); //newEnv表示相机出图范围 newEnv.MinX = -polyline.Length / 2; //相机出图宽度 newEnv.MaxX = polyline.Length / 2; newEnv.MinY = -10; //相机出图高度 newEnv.MaxY = 100; newEnv.MinZ = -100; //相机出图深度 newEnv.MaxZ = 100; SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Image Files(*.BMP)|*.BMP|Image Files(*.PNG)|*.PNG|Image Files(*.JPG)|*.JPG"; dlg.DefaultExt = ".bmp"; if (dlg.ShowDialog() == DialogResult.OK) { bool b = this.axRenderControl1.ExportManager.ExportOrthoImage(dlg.FileName, 1024, center, cameraAngle, newEnv, false, System.Drawing.Color.Blue); if (!b) { MessageBox.Show("错误码为:" + this.axRenderControl1.GetLastError().ToString()); } } } }
public Matrix(EulerAngle euler) : this(new Quaternion(euler)) { }