private void LoadPeople(IDynamicObject dynamicObject) { if (skinMesh == null) { // 构造ModelPoint mp = geoFac.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; string modelName = (strMediaPath + @"\x\Character\QiYeYuanGong.X"); mp.ModelName = modelName; mp.SpatialCRS = dataset_Road.SpatialReference; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); IPoint startPoint = null; double speed = 0.0; dynamicObject.GetWaypoint2(0, out startPoint, out speed); matrix.SetTranslate(startPoint.Position); mp.FromMatrix(matrix); mp.SelfScale(5, 5, 5); // 创建骨骼动画 skinMesh = this.axRenderControl1.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMesh == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMesh.Loop = true; skinMesh.Play(); skinMesh.MaxVisibleDistance = 10000; skinMesh.ViewingDistance = 100; // 绑定到运动路径 IMotionable m = skinMesh as IMotionable; pos.Set(0, 0, 0); m.Bind2(dynamicObject, pos, 0, 0, 0); } }
void t_Tick(object sender, EventArgs e) { Random r = new Random(); int i = 0; foreach (IRenderModelPoint rmp in list) { //System.Threading.Thread.Sleep(2); int n = r.Next(100); if (n > 80) { rmp.Highlight(System.Drawing.Color.Red); } else if (n > 40 && n <= 80) { rmp.Highlight(System.Drawing.Color.Yellow); } else { rmp.Highlight(System.Drawing.Color.Blue); } IModelPoint modelPoint = rmp.GetFdeGeometry() as IModelPoint; modelPoint.FromMatrix(MatrixList[i]); i++; ITransform tf = modelPoint as ITransform; tf.Scale3D(1, 1, n, modelPoint.Envelope.Center.X, modelPoint.Envelope.Center.Y, modelPoint.Envelope.MinZ); IModelPoint newModelPoint = tf as IModelPoint; rmp.SetFdeGeometry(newModelPoint); } }
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); }
private IModelPoint Polygon2ModelPoint(IPolygon polygon, out Gvitech.CityMaker.Resource.IModel gvModel) { if (polygon == null || !polygon.IsValid) { gvModel = null; return(null); } IVector3 vector = polygon.QueryNormal(); if (vector.Z < 0.0) { polygon.ExteriorRing.ReverseOrientation(); } IModelPoint result = null; IGeometryConvertor geometryConvertor = new GeometryConvertorClass(); ITriMesh triMesh = geometryConvertor.PolygonToTriMesh(polygon); if (triMesh != null) { IMultiTriMesh multiTriMesh = ((IGeometryFactory) new GeometryFactoryClass()).CreateGeometry(gviGeometryType.gviGeometryMultiTrimesh, polygon.VertexAttribute) as IMultiTriMesh; multiTriMesh.AddTriMesh(triMesh); bool flag = geometryConvertor.TriMeshToModelPoint(multiTriMesh, out gvModel, out result); if (flag && gvModel != null) { this.Model2Water(ref gvModel); } } else { result = null; gvModel = null; } return(result); }
private void LoadPlane() { // 加载直升飞机 string fileName = (strMediaPath + @"\x\Vehicles\wrj.X"); if (skinMeshPlane == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); matrix.SetTranslate(line.GetPoint(0).Position); mp.FromMatrix(matrix); // 创建骨骼动画 skinMeshPlane = this.axRenderControl1.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMeshPlane == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMeshPlane.Loop = true; skinMeshPlane.Play(); skinMeshPlane.MaxVisibleDistance = 1000; skinMeshPlane.ViewingDistance = 100; // 绑定到运动路径 IMotionable m = skinMeshPlane as IMotionable; position.Set(0, 0, 0); m.Bind2(dynamicObject, position, 0, 0, 0); } }
private void LoadCar(IDynamicObject dynamicObject) { if (renderModelPoint == null) { // 构造ModelPoint mp = geoFac.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; string modelName = (strMediaPath + @"\osg\Vehicles\Car\TCJ006.osg"); mp.ModelName = modelName; mp.SpatialCRS = dataset_Road.SpatialReference; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); IPoint startPoint = null; double speed = 0.0; dynamicObject.GetWaypoint2(0, out startPoint, out speed); matrix.SetTranslate(startPoint.Position); mp.FromMatrix(matrix); mp.SelfScale(0.05, 0.05, 0.05); // 创建骨骼动画 renderModelPoint = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(mp, null, rootId); renderModelPoint.MaxVisibleDistance = 10000; renderModelPoint.ViewingDistance = 200; // 绑定到运动路径 IMotionable m = renderModelPoint as IMotionable; pos.Set(0, 0, 0); m.Bind2(dynamicObject, pos, 90, 0, 0); } }
private void btnCreateModelPoint_Click(object sender, EventArgs e) { _geoEditor.FinishEdit(); //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时 if (gfactory == null) { gfactory = new GeometryFactory(); } string tmpOsgPath = (strMediaPath + @"\osg\Buildings\Apartment\Apartment.osg"); fde_modelpoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; fde_modelpoint.SetCoords(0, 0, 0, 0, 0); fde_modelpoint.ModelName = tmpOsgPath; //****获取包围盒 IResourceFactory resfac = new ResourceFactory(); IPropertySet images = new PropertySet(); IModel model = null; IMatrix matrix = null; resfac.CreateModelAndImageFromFile(tmpOsgPath, out images, out model, out matrix); fde_modelpoint.ModelEnvelope = model.Envelope; //************* rmodelpoint = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null, rootId); resultCode = _geoEditor.StartEditRenderGeometry(rmodelpoint, gviGeoEditType.gviGeoEditCreator); if (!resultCode) { MessageBox.Show(this.axRenderControl1.GetLastError().ToString()); } oldfdeGeometry = fde_modelpoint; }
// 绘制架空模型 FX 2014.04.01 public virtual bool DrawOver(out IModelPoint mp, out IModel fmodel, out IModel smodel) { mp = this.GetModelPoint(); fmodel = null; smodel = null; return(true); }
void scaleCalculate(IModelPoint oldMP, IModelPoint newMP, out double scaleX, out double scaleY, out double scaleZ, out double centerX, out double centerY, out double centerZ) { M0 = oldMP.AsMatrix(); M1 = newMP.AsMatrix(); IMatrix M0_Inverse = M0.Clone(); M0_Inverse.Inverse(); IMatrix MS = MultiplyMatrix(M0_Inverse, M1); IVector3 scaleV = MS.GetScale(); scaleX = scaleV.X; scaleY = scaleV.Y; scaleZ = scaleV.Z; centerX = MS.M41 / (1.0 - scaleV.X); centerY = MS.M42 / (1.0 - scaleV.Y); centerZ = MS.M43 / (1.0 - scaleV.Z); if (scaleV.X == 1) { centerX = MS.M41; } if (scaleV.Y == 1) { centerY = MS.M42; } if (scaleV.Z == 1) { centerZ = MS.M43; } }
/// <summary> /// 加载直升机骨骼动画 /// </summary> private void LoadXFilePlane() { string fileName = (strMediaPath + @"\x\Vehicles\wrj.X"); if (skinMeshPlane == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = datasetCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); v3.Set(planeX, planeY, planeZ); matrix.SetTranslate(v3); mp.FromMatrix(matrix); // 创建骨骼动画 skinMeshPlane = CommonUnity.RenderHelper.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMeshPlane == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMeshPlane.Loop = true; skinMeshPlane.Play(); skinMeshPlane.MaxVisibleDistance = 1000; } }
private void timer1_Tick(object sender, System.EventArgs e) { // 删除原有指针 if (render_ZhiZhen != null) { this.axRenderControl1.ObjectManager.DeleteObject(render_ZhiZhen.Guid); render_ZhiZhen = null; } // 加载指针 string modelNameZhiZhen = (strMediaPath + @"\osg\Dashboard\zhizhen.osg"); fdepoint_ZhiZhen = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); fdepoint_ZhiZhen.ModelName = modelNameZhiZhen; fdepoint_ZhiZhen.SetCoords(biaoPanX, biaoPanY, biaoPanZ + 0.01, 0, 0); fdepoint_ZhiZhen.SpatialCRS = dataset.SpatialReference; zhiZhenValue = random1.Next(0, 16); fdepoint_ZhiZhen.SelfRotate(0, 0, 1, -((zhiZhenValue % 16) * 3 * 3.14 / 32)); render_ZhiZhen = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fdepoint_ZhiZhen, null, rootId); label.Text = "当前的压力值是:" + zhiZhenValue.ToString(); // 刷新弹出窗口 if (clickFlag == 1) { if (dxform.IsDisposed) { return; } else { dxform.arcScaleComponent1.Value = zhiZhenValue; dxform.Refresh(); } } }
/// <summary> /// 加载人物骨骼动画 /// </summary> private void LoadXFileCharacter() { string fileName = (strMediaPath + @"\x\Character\QiYeYuanGong.X"); if (skinMeshCharacter == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = datasetCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); v3.Set(gugeX, gugeY, gugeZ); matrix.SetTranslate(v3); mp.FromMatrix(matrix); // 创建骨骼动画 skinMeshCharacter = CommonUnity.RenderHelper.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMeshCharacter == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMeshCharacter.Duration = 1; //人物的那个骨骼动画播放速度调快一倍 skinMeshCharacter.Loop = true; skinMeshCharacter.Play(); skinMeshCharacter.MaxVisibleDistance = 1000; } }
private void btnConstructModelPoint_Click(object sender, EventArgs e) { if (gfactory == null) gfactory = new GeometryFactory(); modelPoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; modelPoint.SetCoords(100, 200, 300, 0, 0); modelPoint.ModelName = "testModel"; //IMatrix matrix = new Matrix(); //matrix.MakeIdentity(); //modelPoint.Matrix33 = matrix as Array; IEnvelope boundingBox = new Envelope(); boundingBox.Set(50, 60, 70, 150, 160, 170); modelPoint.ModelEnvelope = boundingBox; if (modelPoint == null) return; ModelPoint geo = new ModelPoint(); // Geometry属性 geo.Dimension = modelPoint.Dimension; if (modelPoint.Envelope != null) { geo.MaxX = modelPoint.Envelope.MaxX; geo.MaxY = modelPoint.Envelope.MaxY; geo.MaxZ = modelPoint.Envelope.MaxZ; geo.MinX = modelPoint.Envelope.MinX; geo.MinY = modelPoint.Envelope.MinY; geo.MinZ = modelPoint.Envelope.MinZ; } geo.GeometryType = modelPoint.GeometryType; geo.IsEmpty = modelPoint.IsEmpty; geo.IsValid = modelPoint.IsValid; geo.VertexAttribute = modelPoint.VertexAttribute; geo.HasId = modelPoint.HasId(); geo.HasM = modelPoint.HasM(); geo.HasZ = modelPoint.HasZ(); // Point属性 geo.Id = modelPoint.Id; geo.M = modelPoint.M; geo.X = modelPoint.X; geo.Y = modelPoint.Y; geo.Z = modelPoint.Z; // modelPoint属性 geo.Matrix33 = modelPoint.Matrix33; if (modelPoint.ModelEnvelope != null) { geo.ModelEnvelopeMaxX = modelPoint.ModelEnvelope.MaxX; geo.ModelEnvelopeMaxY = modelPoint.ModelEnvelope.MaxY; geo.ModelEnvelopeMaxZ = modelPoint.ModelEnvelope.MaxZ; geo.ModelEnvelopeMinX = modelPoint.ModelEnvelope.MinX; geo.ModelEnvelopeMinY = modelPoint.ModelEnvelope.MinY; geo.ModelEnvelopeMinZ = modelPoint.ModelEnvelope.MinZ; } geo.ModelName = modelPoint.ModelName; this.propertyGrid1.SelectedObject = geo; }
private void beFilePath_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { try { if (this.comboBoxEdit1.SelectedIndex == 0) { OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = "osg"; ofd.Filter = "3DModel Filess(*.osg)|*.osg"; ofd.RestoreDirectory = true; if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this.beFilePath.Text = ofd.FileName; Clear(); if (this._drawTool != null) { this._drawTool.OnStartDraw -= new OnStartDraw(this.OnStartDraw); this._drawTool.OnFinishedDraw -= new OnFinishedDraw(this.OnFinishedDraw); this._drawTool.Close(); this._drawTool.End(); this._drawTool = null; } // 开启 this._drawTool = DrawToolService.Instance.CreateDrawTool(DrawType._3DModel); if (this._drawTool != null) { (this._drawTool as Draw3DModel).Set3DModelFilePath(this.beFilePath.Text); this._drawTool.OnStartDraw += new OnStartDraw(this.OnStartDraw); this._drawTool.OnFinishedDraw += new OnFinishedDraw(this.OnFinishedDraw); this._drawTool.Start(); } } } else if (this.comboBoxEdit1.SelectedIndex == 1) { OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = "osg"; ofd.Filter = "3DModel Filess(*.osg)|*.osg"; ofd.RestoreDirectory = true; if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this.beFilePath.Text = ofd.FileName; double x = double.Parse(this.seX.Text.ToString()); double y = double.Parse(this.seY.Text.ToString()); double z = double.Parse(this.seZ.Text.ToString()); IModelPoint mp = (new GeometryFactory()).CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZM) as IModelPoint; mp.SetCoords(x, y, z, 0, 0); mp.ModelName = this.beFilePath.Text; AddRecord(mp); } } } catch (Exception ex) { } }
private void repositoryItemButtonEdit1_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { DevExpress.XtraEditors.Controls.EditorButton btn = e.Button; switch (btn.Caption) { case "定位": DF3DApplication app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } int focusedRowHandle = this.gridView1.FocusedRowHandle; if (focusedRowHandle == -1) { return; } DataRow dr = this.gridView1.GetDataRow(focusedRowHandle); if (dr["geo"] != null && dr["Name"] != null && dr["fcName"] != null && dr["fc"] != null) { ISurfaceSymbol ss = new SurfaceSymbolClass(); ss.Color = 0xcc00ff00; ICurveSymbol cs = new CurveSymbolClass(); cs.Color = 0xff00ff00; cs.Width = -5; ss.BoundarySymbol = cs; ISimplePointSymbol ps = new SimplePointSymbol(); ps.Size = SystemInfo.Instance.SymbolSize; ps.FillColor = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16); IGeometry objGeo = dr["geo"] as IGeometry; if (objGeo.GeometryType == gviGeometryType.gviGeometryModelPoint) { IModelPoint mp = objGeo as IModelPoint; IModelPointSymbol mps = new ModelPointSymbol(); mps.SetResourceDataSet((dr["fc"] as IFeatureClass).FeatureDataSet); mps.Color = 0xffffff00; IRenderModelPoint rMP = app.Current3DMapControl.ObjectManager.CreateRenderModelPoint(mp, mps, app.Current3DMapControl.ProjectTree.RootID); rMP.Glow(8000); app.Current3DMapControl.ObjectManager.DelayDelete(rMP.Guid, 8000); IGeometryFactory geoFact = new GeometryFactory(); IPoint pt = geoFact.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pt.X = mp.X; pt.Y = mp.Y; pt.Z = mp.Z; ITableLabel tl = DrawTool.CreateTableLabel1(1); tl.TitleText = dr["fcName"].ToString(); tl.SetRecord(0, 0, dr["Name"].ToString()); tl.Position = pt; this._listRender.Add(tl.Guid); app.Current3DMapControl.Camera.FlyToObject(tl.Guid, gviActionCode.gviActionFlyTo); } } break; } }
/// <summary> /// 将当前renderModelPoint所在的位置插入MotionPath中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnInsertWaypoint_Click(object sender, EventArgs e) { if (renderModelPoint != null) { IModelPoint modelPoint = renderModelPoint.GetFdeGeometry() as IModelPoint; IMatrix matrix = new Matrix(); matrix = modelPoint.AsMatrix(); motionPath.AddWaypointByMatrix(matrix, motionPath.TotalDuration + 4); } }
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; }
private IModelPoint GetModel(IFeatureClass fc, string geoFieldName, int oid) { IModelPoint result = null; IRowBuffer row = fc.GetRow(oid); int num = row.FieldIndex(geoFieldName); if (num != -1) { result = (row.GetValue(num) as IModelPoint); } return(result); }
/// <summary> /// 加载模型 /// </summary> private void LoadModel() { string modelName = (strMediaPath + @"\osg\Vehicles\XiaoFangChe\xiaoFangChe3.OSG"); IGeometryFactory geoFactory = new GeometryFactory(); IModelPoint modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(firstX, firstY, firstZ, 0, 0); modelPoint.SpatialCRS = datasetCRS; renderModelPoint = CommonUnity.RenderHelper.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint.VisibleMask = gviViewportMask.gviViewAllNormalView; }
public void Set3DModelFilePath(string filePath) { this._filePath = filePath; if (System.IO.File.Exists(this._filePath)) { IModelPoint mp = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, Gvitech.CityMaker.FdeGeometry.gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.SetCoords(0, 0, 0, 0, 0); mp.ModelName = this._filePath; this._rmp = this._3DControl.ObjectManager.CreateRenderModelPoint(mp, null, this._rootID); this._rmp.VisibleMask = gviViewportMask.gviViewAllNormalView; this._3DControl.ObjectEditor.StartEditRenderGeometry(this._rmp, gviGeoEditType.gviGeoEditCreator); } }
//public override bool Draw(out IModelPoint mp, out IModel fmodel, out IModel smodel) //{ // int[] index = null; // base.Draw(out mp, out fmodel, out smodel); // try // { // IDrawGroup group; // if ((base._vtx.Length == 4) && (base._sections.Length == 4)) // { // index = new int[] { 0, 1, 2, 3 }; // if (!PipeSection.SetConnectIndex(base._sections, base._vtx, out index)) // { // return false; // } // if (!DrawGeometry.Compare(base._vtx[index[0]][0], base._vtx[index[1]][0], false)) // { // return false; // } // object renderInfo = (base._renderType == RenderType.Texture) ? ((object)base._tcNames) : ((object)base._colors); // int[] numArray2 = new int[3]; // numArray2[1] = 1; // numArray2[2] = 2; // if (base.NewEmptyModel(numArray2, base._renderType, renderInfo, out fmodel)) // { // int[] numArray3 = new int[1]; // if (base.NewEmptyModel(numArray3, base._renderType, renderInfo, out smodel)) // { // goto Label_00DF; // } // } // } // return false; // Label_00DF: // group = null; // group = fmodel.GetGroup(0); // IDrawPrimitive primitive = group.GetPrimitive(0); // group.GetPrimitive(1); // group.GetPrimitive(2); // IDrawPrimitive primitive2 = smodel.GetGroup(0).GetPrimitive(0); // base.DrawConBetween(new Vector[][] { base._vtx[index[0]], base._vtx[index[1]] }, new IPipeSection[] { base._sections[index[0]], base._sections[index[1]] }, ref fmodel); // base.DrawConSingle(base._vtx[index[2]], base._sections[index[2]], ref fmodel); // base.DrawConSingle(base._vtx[index[3]], base._sections[index[3]], ref fmodel); // primitive2.Material.CullMode = gviCullFaceMode.gviCullNone; // primitive2.VertexArray = primitive.VertexArray; // primitive2.NormalArray = primitive.NormalArray; // primitive2.TexcoordArray = primitive.TexcoordArray; // primitive2.IndexArray = primitive.IndexArray; // return true; // } // catch (Exception exception) // { // SystemLog.Instance.Log(exception.StackTrace); // return false; // } //} #endregion #region 单壁绘制--冯欣修改20131101 public override bool Draw(out IModelPoint mp, out IModel fmodel, out IModel smodel) { int[] index = null; base.Draw(out mp, out fmodel, out smodel); try { IDrawGroup group; if ((base._vtx.Length == 4) && (base._sections.Length == 4)) { index = new int[] { 0, 1, 2, 3 }; if (!PipeSection.SetConnectIndex(base._sections, base._vtx, out index)) { return(false); } if (!DrawGeometry.Compare(base._vtx[index[0]][0], base._vtx[index[1]][0], false)) { return(false); } object renderInfo = (base._renderType == RenderType.Texture) ? ((object)base._tcNames) : ((object)base._colors); int[] numArray2 = new int[1]; if (base.NewEmptyModel(numArray2, base._renderType, renderInfo, out fmodel)) { int[] numArray3 = new int[1]; if (base.NewEmptyModel(numArray3, base._renderType, renderInfo, out smodel)) { goto Label_00DF; } } } return(false); Label_00DF: group = null; group = fmodel.GetGroup(0); IDrawPrimitive primitive = group.GetPrimitive(0); IDrawPrimitive primitive2 = smodel.GetGroup(0).GetPrimitive(0); base.DrawConBetween(new Vector[][] { base._vtx[index[0]], base._vtx[index[1]] }, new IPipeSection[] { base._sections[index[0]], base._sections[index[1]] }, ref fmodel); base.DrawConSingle(base._vtx[index[2]], base._sections[index[2]], ref fmodel); base.DrawConSingle(base._vtx[index[3]], base._sections[index[3]], ref fmodel); primitive2.Material.CullMode = gviCullFaceMode.gviCullNone; primitive2.VertexArray = primitive.VertexArray; primitive2.NormalArray = primitive.NormalArray; primitive2.TexcoordArray = primitive.TexcoordArray; primitive2.IndexArray = primitive.IndexArray; return(true); } catch (Exception exception) { return(false); } }
public static void TestDrawTriMesh(IModelPoint mp, IModel model) { ISurfaceSymbol symbol = (SurfaceSymbol)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("4D5F0624-50A1-43E2-A0EC-A9713CB25608"))); symbol.Color = 0xff0000ff; ICurveSymbol symbol2 = (CurveSymbol)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("E02C69C4-828D-40D5-869D-DAEB189B7F6F"))); symbol2.Color = 0xffff0000; symbol.BoundarySymbol = symbol2; IMultiPolygon multiPolygon = geoFactory.CreateGeometry(gviGeometryType.gviGeometryMultiPolygon, gviVertexAttribute.gviVertexAttributeZ) as IMultiPolygon; if (multiPolygon != null) { IPolygon geometry = null; IPoint pointValue = null; for (int i = 0; i < model.GroupCount; i++) { IDrawGroup group = model.GetGroup(i); for (int j = 0; j < group.PrimitiveCount; j++) { IDrawPrimitive primitive = group.GetPrimitive(j); for (int k = 0; k < (primitive.IndexArray.Length / 3); k++) { geometry = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; pointValue = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pointValue.X = mp.X + primitive.VertexArray.Array[primitive.IndexArray.Array[k * 3] * 3]; pointValue.Y = mp.Y + primitive.VertexArray.Array[(primitive.IndexArray.Array[k * 3] * 3) + 1]; pointValue.Z = mp.Z + primitive.VertexArray.Array[(primitive.IndexArray.Array[k * 3] * 3) + 2]; geometry.ExteriorRing.AppendPoint(pointValue); pointValue = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pointValue.X = mp.X + primitive.VertexArray.Array[primitive.IndexArray.Array[(k * 3) + 1] * 3]; pointValue.Y = mp.Y + primitive.VertexArray.Array[(primitive.IndexArray.Array[(k * 3) + 1] * 3) + 1]; pointValue.Z = mp.Z + primitive.VertexArray.Array[(primitive.IndexArray.Array[(k * 3) + 1] * 3) + 2]; geometry.ExteriorRing.AppendPoint(pointValue); pointValue = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pointValue.X = mp.X + primitive.VertexArray.Array[primitive.IndexArray.Array[(k * 3) + 2] * 3]; pointValue.Y = mp.Y + primitive.VertexArray.Array[(primitive.IndexArray.Array[(k * 3) + 2] * 3) + 1]; pointValue.Z = mp.Z + primitive.VertexArray.Array[(primitive.IndexArray.Array[(k * 3) + 2] * 3) + 2]; geometry.ExteriorRing.AppendPoint(pointValue); geometry.Close(); multiPolygon.AddGeometry(geometry); } } } IRenderMultiPolygon item = Ocx.ObjectManager.CreateRenderMultiPolygon(multiPolygon, symbol, Ocx.ProjectTree.RootID); item.MaxVisibleDistance = 5000000.0; tmpList.Add(item); } }
/// <summary> /// 原代码 /// </summary> //public override bool Draw(out IModelPoint mp, out IModel fmodel, out IModel smodel) //{ // base.Draw(out mp, out fmodel, out smodel); // try // { // IDrawGroup group; // if ((base._vtx.Length == 1) && (base._sections.Length == 1)) // { // object renderInfo = (base._renderType == RenderType.Texture) ? ((object)base._tcNames) : ((object)base._colors); // int[] index = new int[3]; // index[1] = 1; // index[2] = 2; // if (base.NewEmptyModel(index, base._renderType, renderInfo, out fmodel)) // { // int[] numArray2 = new int[1]; // if (base.NewEmptyModel(numArray2, base._renderType, renderInfo, out smodel)) // { // goto Label_0086; // } // } // } // return false; // Label_0086: // group = null; // group = fmodel.GetGroup(0); // IDrawPrimitive primitive = group.GetPrimitive(0); // group.GetPrimitive(1); // group.GetPrimitive(2); // IDrawPrimitive primitive2 = smodel.GetGroup(0).GetPrimitive(0); // base.DrawConSingle(base._vtx[0], base._sections[0], ref fmodel); // primitive2.Material.CullMode = gviCullFaceMode.gviCullNone; // primitive2.VertexArray = primitive.VertexArray; // primitive2.NormalArray = primitive.NormalArray; // primitive2.TexcoordArray = primitive.TexcoordArray; // primitive2.IndexArray = primitive.IndexArray; // return true; // } // catch (Exception exception) // { // SystemLog.Instance.Log(exception.StackTrace); // return false; // } //} /// <summary> /// 单面封口绘制 FX 2014.04.04 /// </summary> public override bool Draw(out IModelPoint mp, out IModel fmodel, out IModel smodel) { base.Draw(out mp, out fmodel, out smodel); try { IDrawGroup group; if ((base._vtx.Length == 1) && (base._sections.Length == 1)) { object renderInfo = (base._renderType == RenderType.Texture) ? ((object)base._tcNames) : ((object)base._colors); int[] index = new int[2]; index[1] = 1; // 调整封口处颜色 与管壁颜色一致 uint[] numArray1 = renderInfo as uint[]; if (numArray1.Length > 1) { for (int i = 1; i < numArray1.Length; i++) { numArray1[i] = numArray1[0]; } } if (base.NewEmptyModel(index, base._renderType, renderInfo, out fmodel)) { int[] numArray2 = new int[1]; if (base.NewEmptyModel(numArray2, base._renderType, renderInfo, out smodel)) { goto Label_0086; } } } return(false); Label_0086: group = null; group = fmodel.GetGroup(0); IDrawPrimitive primitive = group.GetPrimitive(0); IDrawPrimitive primitive2 = smodel.GetGroup(0).GetPrimitive(0); base.DrawConSingle1(base._vtx[0], base._sections[0], ref fmodel); primitive2.Material.CullMode = gviCullFaceMode.gviCullNone; primitive2.VertexArray = primitive.VertexArray; primitive2.NormalArray = primitive.NormalArray; primitive2.TexcoordArray = primitive.TexcoordArray; primitive2.IndexArray = primitive.IndexArray; return(true); } catch (Exception exception) { return(false); } }
public virtual IModelPoint GetModelPoint() { IModelPoint point = geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; if (point == null) { return(null); } point.ModelName = this._modelname; point.SetCoords(this._x, this._y, this._z, double.NaN, -1); point.SelfScale(this._scaleX, this._scaleY, this._scaleZ); point.SelfRotate(1.0, 0.0, 0.0, this._rotateX); point.SelfRotate(0.0, 1.0, 0.0, this._rotateY); point.SelfRotate(0.0, 0.0, 1.0, this._rotateZ); return(point); }
public bool DrawModel(out GvitechModelPoint mp, GvitechModel fmodel, GvitechModel smodel) { mp = null; fmodel = null; smodel = null; IModelPoint point = null; IModel model = null; IModel model2 = null; if (!this.Draw(out point, out model, out model2)) { return(false); } mp = new GvitechModelPoint(point); fmodel = (model == null) ? null : new GvitechModel(model); smodel = (model2 == null) ? null : new GvitechModel(model2); return(true); }
private void LoadSkinMeshAndViewshed() { string fileName = (strMediaPath + @"\x\Character\QiYeYuanGong.X"); if (skinMesh == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); matrix.SetTranslate(line.GetPoint(0).Position); mp.FromMatrix(matrix); // 创建骨骼动画 skinMesh = this.axRenderControl1.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMesh == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMesh.Loop = true; skinMesh.Play(); skinMesh.MaxVisibleDistance = 1000; skinMesh.ViewingDistance = 50; // 绑定到运动路径 IMotionable m = skinMesh as IMotionable; position.Set(0, 0, 0); m.Bind2(dynamicObject, position, 0, 0, 0); this.axRenderControl1.Camera.FlyToObject(skinMesh.Guid, gviActionCode.gviActionFollowBehind); } if (tv == null) { tv = this.axRenderControl1.ObjectManager.CreateViewshed(line.GetPoint(0), rootId); IMotionable tvm = tv as IMotionable; position.Set(0, 0, 0); tvm.Bind2(dynamicObject, position, 0, 0, 0); } }
public static void TestDrawModel(IModelPoint mp, IModel model, List <string> filesPath) { if ((mp != null) && (model != null)) { string str = Application.StartupPath + @"\..\temp"; string str2 = Path.Combine(str, "osg"); string filePath = string.Format(@"{0}\{1}.osg", str2, mp.ModelName); if (!Directory.Exists(str)) { Directory.CreateDirectory(str); } if (!Directory.Exists(str2)) { Directory.CreateDirectory(str2); } IPropertySet images = null; IImage image = null; string key = string.Empty; images = new PropertySetClass(); if (filesPath != null) { foreach (string str5 in filesPath) { if (File.Exists(str5) || Directory.Exists(str5)) { key = Path.GetFileNameWithoutExtension(str5); image = resFactory.CreateImageFromFile(str5); images.SetProperty(key, image); } } } model.WriteFile(filePath, images); IModelPointSymbol symbol = (ModelPointSymbol)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("6BCF8C9B-E506-43AE-AD6E-44A41D748431"))); symbol.Color = 0xaaaaaaaa; mp.ModelName = filePath; mp.ModelEnvelope = model.Envelope; IRenderModelPoint item = Ocx.ObjectManager.CreateRenderModelPoint(mp, symbol, Ocx.ProjectTree.RootID); item.MaxVisibleDistance = 500000.0; tmpList.Add(item); Ocx.Camera.LookAtEnvelope(item.Envelope); } }
/// <summary> /// 创建并加载点云 /// </summary> /// <returns></returns> IRenderModelPoint CreatePointCloud() { //准备容器 IModel model = new ResourceFactory().CreateModel(); IDrawGroup drawGroup = new DrawGroup(); IDrawPrimitive drawPrimitive = new DrawPrimitive(); IFloatArray verList = new FloatArray(); //点集 IUInt32Array colorList = new UInt32Array(); //点色 //点坐标 float x = 3.3f, y = 4.4f, z = 5.5f; //点色 byte a = 128, r = 255, g = 255, b = 255; uint col = (uint)(b | g << 8 | r << 16 | a << 24); //argb => uint for (int i = 0; i < 10; i++) { verList.Append(x); verList.Append(y); verList.Append(z); colorList.Append(col); } //塞入容器 drawPrimitive.VertexArray = verList; drawPrimitive.ColorArray = colorList; drawPrimitive.Material.EnableBlend = false; //关闭融合 drawPrimitive.Material.EnableLight = false; //关闭光照 drawPrimitive.PrimitiveMode = gviPrimitiveMode.gviPrimitiveModeLineList; //设置绘制模式为点 drawGroup.AddPrimitive(drawPrimitive); //塞入渲染组 model.AddGroup(drawGroup); //塞入model axRenderControl.ObjectManager.AddModel("modelName", model); //塞入三维对象,与modelPoint通过名称匹配 //创建modelPoint,用于索引模型 IModelPoint mp = (IModelPoint) new GeometryFactory().CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); mp.SpatialCRS = (SpatialCRS)CRSFactory.CreateFromWKT("wkt"); //设置坐标系 mp.ModelEnvelope = model.Envelope; // 排除不显示BUG mp.SetCoords(3.3, 4.4, 5.5, 0, 0); mp.ModelName = "modelName"; //匹配模型 return(axRenderControl.ObjectManager.CreateRenderModelPoint(mp, null, Guid.Empty)); //创建完成 }
private void tsb_Update_Click(object sender, EventArgs e) { this.cmdManager.StartCommand(); //获取当前选中要素,将其放大一倍,作为新的行进行更新 IRowBuffer row = curSelectFc.GetRow(curSelectFid); int geoPos = curSelectFc.GetFields().IndexOf("Geometry"); if (geoPos != -1) { IModelPoint geo = row.GetValue(geoPos) as IModelPoint; geo.SelfScale(2, 2, 2); row.SetValue(geoPos, geo); } this.cmdManager.UpdateFeature(curSelectFc as IObjectClass, row); this.axRenderControl1.FeatureManager.EditFeature(curSelectFc, row); this.tsb_Redo.Enabled = this.cmdManager.CanRedo; this.tsb_Undo.Enabled = this.cmdManager.CanUndo; this.tsb_Update.Enabled = false; }
// 创建车模型 private void CreateCarModelPoint() { string carImgPath = Path.Combine(Environment.CurrentDirectory, @"data\TrashCar\SSCMX01.osg"); try { IModelPoint mp = (IModelPoint)_geoFactory.CreateGeometry(i3dGeometryType.i3dGeometryModelPoint, i3dVertexAttribute.i3dVertexAttributeZ); mp.ModelName = carImgPath; mp.SpatialCRS = _spatialCRS; mp.SetCoords(121.27170, 31.17965, 1.5, 0, 0); CarRmp = _axRenderControl.ObjectManager.CreateRenderModelPoint(mp, null); CarRmp.MaxVisibleDistance = 15000; CarRmp.MinVisiblePixels = 10; CarRmp.ClientData = "111"; } catch (Exception e) { LoggerHelper.Logger.Error(e, "执行SetCarModelPoint错误"); throw e; } }