/// <summary> /// 加载MotionPath /// </summary> private void LoadMotionPath() { motionPath = CommonUnity.RenderHelper.ObjectManager.CreateMotionPath(rootId); motionPath.CrsWKT = datasetCRS.AsWKT(); //为MotionPath添加第一个点 position.SetCoords(firstX, firstY, firstZ, 0, 0); angle.Set(firstH, firstP, firstR); scale.Set(firstSX, firstSY, firstSZ); motionPath.AddWaypoint2(position, angle, scale, firtWhen); //为MotionPath添加第二个点 position.SetCoords(secondX, secondY, secondZ, 0, 0); angle.Set(secondH, secondP, secondR); scale.Set(secondSX, secondSY, secondSZ); motionPath.AddWaypoint2(position, angle, scale, secondWhen); //为MotionPath添加第三个点 position.SetCoords(thirdX, thirdY, thirdZ, 0, 0); angle.Set(thirdH, thirdP, thirdR); scale.Set(thirdSX, thirdSY, thirdSZ); motionPath.AddWaypoint2(position, angle, scale, thirdWhen); //为MotionPath添加第四个点 position.SetCoords(fourthX, fourthY, fourthZ, 0, 0); angle.Set(fourthH, fourthP, fourthR); scale.Set(fourthSX, fourthSY, fourthSZ); motionPath.AddWaypoint2(position, angle, scale, fourthWhen); }
private void Animation(IPresentation presentation) { //Get the slide from the presentation ISlide slide = presentation.Slides[0]; //Access the animation sequence to create effects ISequence sequence = slide.Timeline.MainSequence; //Add motion path effect to the shape IEffect line1 = sequence.AddEffect(slide.Shapes[8] as IShape, EffectType.PathUp, EffectSubtype.None, EffectTriggerType.OnClick); IMotionEffect motionEffect = line1.Behaviors[0] as IMotionEffect; motionEffect.Timing.Duration = 1f; IMotionPath motionPath = motionEffect.Path; motionPath[1].Points[0].X = 0.00365f; motionPath[1].Points[0].Y = -0.27431f; //Add motion path effect to the shape IEffect line2 = sequence.AddEffect(slide.Shapes[3] as IShape, EffectType.PathDown, EffectSubtype.None, EffectTriggerType.WithPrevious); motionEffect = line2.Behaviors[0] as IMotionEffect; motionEffect.Timing.Duration = 0.75f; motionPath = motionEffect.Path; motionPath[1].Points[0].X = 0.00234f; motionPath[1].Points[0].Y = 0.43449f; //Add wipe effect to the shape IEffect wipe1 = sequence.AddEffect(slide.Shapes[1] as IShape, EffectType.Wipe, EffectSubtype.None, EffectTriggerType.AfterPrevious); wipe1.Behaviors[1].Timing.Duration = 1f; //Add fly effect to the shape IEffect fly1 = sequence.AddEffect(slide.Shapes[5] as IShape, EffectType.Fly, EffectSubtype.Left, EffectTriggerType.AfterPrevious); fly1.Behaviors[1].Timing.Duration = 0.70f; fly1.Behaviors[2].Timing.Duration = 0.70f; ////Add wipe effect to the shape IEffect wipe2 = sequence.AddEffect(slide.Shapes[2] as IShape, EffectType.Wipe, EffectSubtype.None, EffectTriggerType.AfterPrevious); wipe2.Behaviors[1].Timing.Duration = 1f; ////Add fly effect to the shape IEffect fly2 = sequence.AddEffect(slide.Shapes[4] as IShape, EffectType.Fly, EffectSubtype.Right, EffectTriggerType.AfterPrevious); fly2.Behaviors[1].Timing.Duration = 0.70f; fly2.Behaviors[2].Timing.Duration = 0.70f; IEffect fly3 = sequence.AddEffect(slide.Shapes[6] as IShape, EffectType.Fly, EffectSubtype.Top, EffectTriggerType.AfterPrevious); fly3.Behaviors[1].Timing.Duration = 1.50f; fly3.Behaviors[2].Timing.Duration = 1.50f; ////Add flay effect to the shape IEffect fly4 = sequence.AddEffect(slide.Shapes[7] as IShape, EffectType.Fly, EffectSubtype.Left, EffectTriggerType.AfterPrevious); fly4.Behaviors[1].Timing.Duration = 0.50f; fly4.Behaviors[2].Timing.Duration = 0.50f; }
private void ToolStripMenuItemCreateRenderPolyline_Click(object sender, EventArgs e) { motionPath = this.axRenderControl1.ObjectManager.CreateMotionPath(rootId); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Application.StartupPath + @"\MotionPath.xml"); string wkt = xmlDoc.SelectSingleNode("root/WKT").InnerText; motionPath.CrsWKT = wkt; IPoint point = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); point.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS; IPolyline line = new GeometryFactory().CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; line.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS; XmlNodeList nodes = xmlDoc.SelectNodes("root/Waypoint"); int i = 0; foreach (XmlNode node in nodes) { double x = double.Parse(node.SelectSingleNode("X").InnerText); double y = double.Parse(node.SelectSingleNode("Y").InnerText); double z = double.Parse(node.SelectSingleNode("Z").InnerText); position.Set(x, y, z); point.Position = position; if (line.PointCount == 0) { line.StartPoint = point; } else { line.AddPointAfter(i - 1, point); } i++; double heading = double.Parse(node.SelectSingleNode("Heading").InnerText); double tilt = double.Parse(node.SelectSingleNode("Tilt").InnerText); double roll = double.Parse(node.SelectSingleNode("Roll").InnerText); double when = double.Parse(node.SelectSingleNode("When").InnerText); angle.Set(heading, tilt, roll); scale.Set(1, 1, 1); motionPath.AddWaypoint2(point, angle, scale, when); } IRenderPolyline rpl = this.axRenderControl1.ObjectManager.CreateRenderPolyline(line, null, selectedId); rpl.Name = "RenderPolyline"; TreeNode treeNode = new TreeNode("RenderPolyline", 1, 1); treeNode.Tag = rpl.Guid; treeNode.Checked = true; selectedNode.Nodes.Add(treeNode); this.treeView1.UpdateView(); }
private void MainForm_Load(object sender, System.EventArgs e) { init(); // 运动路径定位点 point = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); //point.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS; // 加载运动路径 motionPath = this.axRenderControl1.ObjectManager.CreateMotionPath(rootId); //motionPath.CrsWKT = wkt; // 画出运动路径 line = new GeometryFactory().CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; //line.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS; LoadMotionPathAndLineFromFile(); LoadPlane(); LoadTableLabel(); LoadParticleEffect(); this.axRenderControl1.Camera.FlyTime = 1; this.axRenderControl1.Camera.FlyToObject(this.skinMeshPlane.Guid, gviActionCode.gviActionFollowBehindAndAbove); this.cbFlyMode.SelectedIndex = 6; #region 指定每帧刷新事件 frameCallBack = new FrameCallback(); frameCallBack.onFrame = this.OnFrame; //this.axRenderControl1.OnFrameInvoke = frameCallBack; #endregion 指定每帧刷新事件 { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "MotionPath.html"; } }
private void LoadDynamicTableLabel() { #region 加载一个标签 dynamicTableLabel = axRenderControl1.ObjectManager.CreateTableLabel(2, 2, rootId); dynamicTableLabel.TitleText = "消防车当前位置"; dynamicTableLabel.SetRecord(0, 0, "X:"); dynamicTableLabel.SetRecord(0, 1, firstX.ToString()); dynamicTableLabel.SetRecord(1, 0, "Y:"); dynamicTableLabel.SetRecord(1, 1, firstY.ToString()); position.Set(firstX, firstY, firstZ + 2.4); if (fde_point == null) { fde_point = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); } fde_point.Position = position; dynamicTableLabel.Position = fde_point; dynamicTableLabel.BorderColor = System.Drawing.Color.White; dynamicTableLabel.BorderWidth = 2; dynamicTableLabel.TableBackgroundColor = System.Drawing.Color.Gray; dynamicTableLabel.TitleBackgroundColor = System.Drawing.Color.Red; // 表头样式 TextAttribute headerTextAttribute = new TextAttribute(); headerTextAttribute.TextColor = System.Drawing.Color.Black; headerTextAttribute.OutlineColor = System.Drawing.Color.Red; headerTextAttribute.Font = "黑体"; headerTextAttribute.Bold = true; headerTextAttribute.MultilineJustification = gviMultilineJustification.gviMultilineLeft; dynamicTableLabel.SetColumnTextAttribute(0, headerTextAttribute); // 内容样式 TextAttribute contentTextAttribute = new TextAttribute(); contentTextAttribute.TextColor = System.Drawing.Color.Black; contentTextAttribute.OutlineColor = System.Drawing.Color.Red; contentTextAttribute.Font = "黑体"; contentTextAttribute.Bold = false; contentTextAttribute.MultilineJustification = gviMultilineJustification.gviMultilineLeft; dynamicTableLabel.SetColumnTextAttribute(1, contentTextAttribute); // 标题样式 TextAttribute capitalTextAttribute = new TextAttribute(); capitalTextAttribute.TextColor = System.Drawing.Color.White; capitalTextAttribute.OutlineColor = System.Drawing.Color.Gray; capitalTextAttribute.Font = "华文新魏"; capitalTextAttribute.TextSize = 14; capitalTextAttribute.MultilineJustification = gviMultilineJustification.gviMultilineCenter; capitalTextAttribute.Bold = true; dynamicTableLabel.TitleTextAttribute = capitalTextAttribute; angle.Set(0, -20, 0); axRenderControl1.Camera.LookAt(position, 30, angle); #endregion #region 加载一个模型 if (renderModelPoint == null) { string modelName = (strMediaPath + @"\osg\Vehicles\XiaoFangChe\xiaoFangChe3.OSG"); IGeometryFactory geoFactory = new GeometryFactory(); IModelPoint modePoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modePoint.ModelName = modelName; modePoint.SetCoords(firstX, firstY, firstZ, 0, 0); renderModelPoint = axRenderControl1.ObjectManager.CreateRenderModelPoint(modePoint, null, rootId); } #endregion #region 加载一个运动路径 if (motionPath == null) { motionPath = axRenderControl1.ObjectManager.CreateMotionPath(rootId); // 为MotionPath添加第一个点 position.Set(firstX, firstY, firstZ); angle.Set(firstH, firstP, firstR); scale.Set(firstSX, firstSY, firstSZ); motionPath.AddWaypoint(position, angle, scale, firtWhen); //为MotionPath添加第二个点 position.Set(secondX, secondY, secondZ); angle.Set(secondH, secondP, secondR); scale.Set(secondSX, secondSY, secondSZ); motionPath.AddWaypoint(position, angle, scale, secondWhen); //为MotionPath添加第三个点 position.Set(thirdX, thirdY, thirdZ); angle.Set(thirdH, thirdP, thirdR); scale.Set(thirdSX, thirdSY, thirdSZ); motionPath.AddWaypoint(position, angle, scale, thirdWhen); //为MotionPath添加第四个点 position.Set(fourthX, fourthY, fourthZ); angle.Set(fourthH, fourthP, fourthR); scale.Set(fourthSX, fourthSY, fourthSZ); motionPath.AddWaypoint(position, angle, scale, fourthWhen); } #endregion #region 将模型和标牌同时绑定在路径上 m = renderModelPoint as IMotionable; //将模型绑定到路径上 v3.Set(0, 0, 0); m.Bind(motionPath, v3, 0, 0, 0); // 将标牌绑定到路径上 if (dynamicTableLabel != null && motionPath != null) { m = dynamicTableLabel as IMotionable; v3.Set(0, 0, 6); m.Bind(motionPath, v3, 0, 0, 0); } #endregion }