public AnimatedContour(ContourShape shape, ref List <AnimatedPoint> pointPool) { // Create contour animation using existing points, creates new points if needed this.shape = shape; int shapeLength = shape != null ? shape.Length : 0; this.animatedPoints = new AnimatedPoint[shapeLength]; if (pointPool == null) { pointPool = new List <AnimatedPoint>(shapeLength); } for (int i = 0; i < shapeLength; i++) { // Find existing point matching position Vector2 pointPosition = shape.GetPosition(i); AnimatedPoint pointAnimation = pointPool.Find(pta => pta.position == pointPosition); // If no point was found, create one if (pointAnimation == null) { pointAnimation = new AnimatedPoint(pointPosition); pointPool.Add(pointAnimation); } // Contour animation now contains the point reference, that can be shared with other contour animations this.animatedPoints[i] = pointAnimation; } }
public override bool Clear() { animationPositions = new Vector2[0]; radius = 0f; freq = 0f; phase = 0f; contourIsLoop = false; if (contour == null) { return(false); } contour = null; return(true); }
ContourShape oneShelfBoxContour; //书架正视图的外部轮廓 //List<ShelfShape> shelfMapShelfList; //一个书库俯视图中所有书柜的列表 //DoorShape shelfMapDoor; //一个书库门的位置 //ContourShape shelfMapContour; //一个书库的外部轮廓 //RouteShape shelfMapRoute; //取书的路径列表 public DrawMapService(IUnityContainer container) { this.container = container; this.eventAggregator = container.Resolve <IEventAggregator>(); //初始化其他变量 this.oneShelfDrawer = new CanvasDrawer(); this.libraryShelfDrawer = new CanvasDrawer(); //初始化各种图形参数,先初始化一个值,不管是否有意义,以免在后续引用中出错。 this.oneShelfBoxList = new List <ShelfShape>(); this.oneShelfBoxContour = new ContourShape(new List <Point>()); //this.shelfMapShelfList = new List<ShelfShape>(); //this.shelfMapDoor = new DoorShape(new Point(0,0),new Point(0,0)); //this.shelfMapContour = new ContourShape(new List<Point>()); //this.shelfMapRoute = new RouteShape(new List<Point>()); initVariableValue(); }
public void AddContour() { // Create empty contour (contour with one undefined point) int oldContourCount = GetContourCount(); bufferPoint.occurences.Add(new PointOccurence() { contourIndex = oldContourCount, indexInContour = 0 }); if (contourShapes == null) { contourShapes = new List <ContourShape>(); } ContourShape newContour = new ContourShape(new List <Vector2>()); contourShapes.Add(newContour); changes |= BlocChanges.ContourAdded; }
public override bool TryReadBlueprint(ContourBlueprint blueprint) { // Read if possible if (blueprint != null && blueprint.material is ContourAnimationMaterial) { contour = blueprint.shape; ReadBlueprintPositions(blueprint); ContourAnimationMaterial animationMaterial = blueprint.material as ContourAnimationMaterial; radius = animationMaterial.amplitude / 2f; freq = (animationMaterial.cycleDuration != 0f ? 1f / animationMaterial.cycleDuration : 0f) * 2f * Mathf.PI; phase = animationMaterial.phase * Mathf.Deg2Rad; if (contour != null && contour.Length > 2) { contourIsLoop = contour.GetPosition(0) == contour.GetPosition(contour.Length - 1); } else { contourIsLoop = false; } return(true); } return(false); }
private void FixedUpdate() { if (blueprints != null && animatedPoints != null && animatedContours != null) { float time = Time.fixedTime; // Set every point to its default position foreach (AnimatedPoint apt in animatedPoints) { apt.position = apt.idlePosition; } // Start from here to add each movement int blueprintCount = blueprints.Count; for (int bpi = 0; bpi < blueprintCount; bpi++) { // Play each animation if (readers[bpi] == null || blueprints[bpi] == null) { continue; } ContourShape shape = blueprints[bpi].shape; if (shape == null) { continue; } ContourAnimationReader reader = readers[bpi] as ContourAnimationReader; reader.Animate(time); // Add movement to each concerned point AnimatedContour act = animatedContours[bpi]; act.AddPointOffset(reader.animationPositions); } // Apply movement to each contour foreach (AnimatedContour act in animatedContours) { act.AnimationUpdate(); } } }
public Contour(ContourShape shape) { this.shape = shape; paletteIndex = -1; blueprints = new ContourBlueprint[0]; }
protected virtual void SetShape(ContourShape shape) { this.shape = shape; }
//该函数能够画出一个书库的背景图片,包含书架,轮廓和门,参数为该图书馆名称,参数即为Map表中的location字段 public void drawLibraryShelfMapBackgroundByLibraryName(String libraryName) { String libraryNameInTable = this.bookLocationStringToLibraryName(libraryName); //获取图书位置信息数据库的引用 IBookLocationService bookLocationService = this.container.Resolve <IBookLocationService>(); //画出书库的地板,重复画出 /*** * BitmapImage floorTileBitmapImage = new BitmapImage(); * floorTileBitmapImage.BeginInit(); * floorTileBitmapImage.UriSource = new Uri("pack://application:,,,/UI;component/Resource/images/glass.png", UriKind.RelativeOrAbsolute); * floorTileBitmapImage.EndInit(); * this.libraryShelfDrawer.drawFloor(floorTileBitmapImage); ***/ //画出所有的书架 try { //获取某个书库中所有的书架 List <String> shelfPositionStringList = bookLocationService.getItemPositionStringListByLocationAndType(libraryNameInTable, "SHELF"); //从数据库中读到的字符串列表中解析出所有的书架地理位置信息,并加入到this.shelfMapShelfList中 List <ShelfShape> shelfMapShelfList = new List <ShelfShape>(); foreach (String stringItem in shelfPositionStringList) {//stringItem is a string ,such as "13000,1500,1500,1000",startpoint x,y,and width,height char[] separator = { ',', ',' }; String[] pointDescInString = stringItem.Split(separator); if (pointDescInString.Length != 4) { continue; } //如果不为4个数字,则意味着可能出现了解析或者存储错误 double[] pointDescInDouble = new double[] { Convert.ToDouble(pointDescInString[0]), Convert.ToDouble(pointDescInString[1]), Convert.ToDouble(pointDescInString[2]), Convert.ToDouble(pointDescInString[3]) }; Point leftTop = new Point(pointDescInDouble[0], pointDescInDouble[1]); Point rightBottom = new Point(pointDescInDouble[0] + pointDescInDouble[2], pointDescInDouble[1] + pointDescInDouble[3]); //把书架的位置信息放入结构体的变量中shelfMapShelfList shelfMapShelfList.Add(new ShelfShape(leftTop, rightBottom)); } //开始绘制俯视图中的书架 BitmapImage bitmapImage = new BitmapImage(); //Uri uri = new Uri("pack://application:,,,/UI;component/Resource/images/oneShelf.png", UriKind.RelativeOrAbsolute); bitmapImage.BeginInit(); bitmapImage.UriSource = new Uri("pack://application:,,,/UI;component/Resource/images/oneShelf.png", UriKind.RelativeOrAbsolute); bitmapImage.EndInit(); //设置旋转效果和阴影效果,开始 RotateTransform rotateTransform = new RotateTransform(0); DropShadowBitmapEffect bitmapEffect = new DropShadowBitmapEffect(); Color ShadowColor = new Color(); ShadowColor.ScA = 1; ShadowColor.ScB = 0; ShadowColor.ScG = 0; ShadowColor.ScR = 0; bitmapEffect.Color = ShadowColor; bitmapEffect.Direction = 320; bitmapEffect.ShadowDepth = 10; bitmapEffect.Softness = 0.1; bitmapEffect.Opacity = 0.1; //设置选择效果和阴影效果,结束 foreach (ShelfShape oneShelf in shelfMapShelfList) { //原始代码是绘制矩形框,现在改为绘制图片 //this.libraryShelfDrawer.drawShelf(oneShelf.topLeft, oneShelf.bottomRight); this.libraryShelfDrawer.drawImage(oneShelf.topLeft, oneShelf.bottomRight, bitmapImage, rotateTransform, bitmapEffect); } } catch (Exception) { this.eventAggregator.GetEvent <DatabaseEvent>().Publish("DrawMapService:从数据库中获取书架信息出错!"); //如果发生错误那发布事件 } //画出某个书库的轮廓 try { List <String> shelfContourPostionStringList = bookLocationService.getItemPositionStringListByLocationAndType(libraryNameInTable, "CONTOUR"); String shelfContourPostionString = ""; ContourShape shelfMapContour; //轮廓信息存放的地点 //如果获得的轮廓个数小于零,则说明数据出现了问题.其实一个书库的轮廓只能有一个 if (shelfContourPostionStringList.Count > 0) { shelfContourPostionString = shelfContourPostionStringList[0]; char[] separator = { ',', ',' }; String[] pointDescInString = shelfContourPostionString.Split(separator); //轮廓点的个数只能是偶数个,如果解析和读取数据的时候出现任何错误,则花图书轮廓的程序终止 if ((pointDescInString.Length % 2 == 0) && (pointDescInString.Length >= 2)) { List <Double> pointXList = new List <Double>(); List <Double> pointYList = new List <Double>(); for (int i = 0; i < pointDescInString.Length; i = i + 2) { pointXList.Add(Convert.ToDouble(pointDescInString[i])); pointYList.Add(Convert.ToDouble(pointDescInString[i + 1])); } if (pointXList.Count == pointYList.Count) { List <Point> contourPointList = new List <Point>(); for (int i = 0; i < pointXList.Count(); i++) { Point onePoint = new Point(pointXList[i], pointYList[i]); contourPointList.Add(onePoint); } shelfMapContour = new ContourShape(contourPointList); this.libraryShelfDrawer.drawContour(shelfMapContour.pointList); } } } }catch (Exception) { this.eventAggregator.GetEvent <DatabaseEvent>().Publish("DrawMapService:从数据库中获取书库轮廓信息出错!"); //如果发生错误那发布事件 } //画出某个书库大门的位置 try { List <String> doorPostionStringList = bookLocationService.getItemPositionStringListByLocationAndType(libraryNameInTable, "DOOR"); DoorShape shelfMapDoor;//入口信息存放的位置 if (doorPostionStringList.Count > 0) { String doorPostionString = doorPostionStringList[0]; char[] separator = { ',', ',' }; String[] pointDescInString = doorPostionString.Split(separator); if (pointDescInString.Length == 4) { double[] pointDescInDouble = new double[] { Convert.ToDouble(pointDescInString[0]), Convert.ToDouble(pointDescInString[1]), Convert.ToDouble(pointDescInString[2]), Convert.ToDouble(pointDescInString[3]) }; Point leftTop = new Point(pointDescInDouble[0], pointDescInDouble[1]); Point rightBottom = new Point(pointDescInDouble[0] + pointDescInDouble[2], pointDescInDouble[1] + pointDescInDouble[3]); //把书库大门的位置信息放入结构体的变量中shelfMapShelfList shelfMapDoor = new DoorShape(leftTop, rightBottom); //载入入口图片 BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.UriSource = new Uri("pack://application:,,,/UI;component/Resource/images/door.png", UriKind.RelativeOrAbsolute); bitmapImage.EndInit(); //设置旋转效果和阴影效果,开始 RotateTransform rotateTransform = new RotateTransform(0); DropShadowBitmapEffect bitmapEffect = new DropShadowBitmapEffect(); //this.libraryShelfDrawer.drawDoor(shelfMapDoor.topLeft, shelfMapDoor.bottomRight); this.libraryShelfDrawer.drawImage(shelfMapDoor.topLeft, shelfMapDoor.bottomRight, bitmapImage, rotateTransform, bitmapEffect); } } } catch (Exception) { this.eventAggregator.GetEvent <DatabaseEvent>().Publish("DrawMapService:从数据库中获取书库大门信息出错!"); //如果发生错误那发布事件 } }