Esempio n. 1
0
 public Drawing(DrawingSettings settings, ReadOnlyTree <string, Layer> layers, string author)
     : this(settings, layers, layers.GetKeys().OrderBy(x => x).First(), author)
 {
 }
Esempio n. 2
0
        public Task <ReadDrawingResult> ReadDrawing(string fileName, Stream fileStream, Func <string, Task <byte[]> > contentResolver)
        {
            ReadOnlyTree <string, Layer> layers = null;

            using (var reader = new StreamReader(fileStream, encoding: Encoding.UTF8, detectEncodingFromByteOrderMarks: true, bufferSize: 1024, leaveOpen: true))
            {
                var json        = reader.ReadToEnd();
                var jsonDrawing = JsonConvert.DeserializeObject <JsonDrawing>(json, Settings);
                var layerList   = new List <Layer>();
                foreach (var jsonLayer in jsonDrawing.Floorplan.Layers)
                {
                    var layer = new Layer(jsonLayer.Name, color: CadColor.FromArgb(255, jsonLayer.R, jsonLayer.G, jsonLayer.B));
                    layerList.Add(layer);
                }

                layers = ReadOnlyTree <string, Layer> .FromEnumerable(layerList, l => l.Name);

                void AddEntityToLayer(string layerName, Entity entity)
                {
                    var layer = layers.GetValue(layerName);

                    layer  = layer.Add(entity);
                    layers = layers.Insert(layerName, layer);
                }

                foreach (var block in jsonDrawing.Floorplan.Blocks)
                {
                    switch (block.Name.ToUpperInvariant())
                    {
                    case "*MODEL_SPACE":
                        foreach (var jsonEntity in block.Entities)
                        {
                            switch (jsonEntity)
                            {
                            case JsonArc jsonArc:
                                var arc = new Arc(jsonArc.Center, jsonArc.Radius, jsonArc.StartAngle * MathHelper.RadiansToDegrees, jsonArc.EndAngle * MathHelper.RadiansToDegrees, Vector.ZAxis);
                                AddEntityToLayer(jsonEntity.Layer, arc);
                                break;

                            case JsonLine jsonLine:
                                for (int i = 0; i < jsonLine.Points.Count - 1; i++)
                                {
                                    AddEntityToLayer(jsonEntity.Layer, new Line(jsonLine.Points[i], jsonLine.Points[i + 1]));
                                }

                                if (jsonLine.Points.Count > 2)
                                {
                                    AddEntityToLayer(jsonEntity.Layer, new Line(jsonLine.Points.Last(), jsonLine.Points.First()));
                                }
                                break;

                            default:
                                break;
                            }
                        }
                        break;
                        // TODO: handle other blocks?
                    }
                }
            }

            var drawing = new Drawing().Update(layers: layers);

            return(Task.FromResult(ReadDrawingResult.Succeeded(drawing, null)));
        }
Esempio n. 3
0
 public Layer(string name, IEnumerable <Entity> entities, CadColor?color = null, bool isVisible = true)
     : this(name, ReadOnlyTree <uint, Entity> .FromEnumerable(entities, (ent) => ent.Id), color, isVisible)
 {
 }