예제 #1
0
        private int _currentPoint = -1; // текущая загружаемая точка. нужна только для загрузки

        public override void TakeNode(DxfNode node)
        {
            base.TakeNode(node);
            switch (node.TypeCode)
            {
            case 10:
                _currentPoint++;
                Points[_currentPoint].X = (double)node.Value;
                break;

            case 20:
                Points[_currentPoint].Y = (double)node.Value;
                break;

            case 30:
                Points[_currentPoint].Z = (double)node.Value;
                break;

            case 43:
                Width = (double)node.Value;
                break;

            case 70:
                Closed = ((short)node.Value == 1);
                break;

            case 90:     // количество точек
                Points = new Point3D[(int)node.Value];
                break;
            }
        }
예제 #2
0
        public override void TakeNode(DxfNode node)
        {
            base.TakeNode(node);
            switch (node.TypeCode)
            {
            case 50:
                StartAngle = (double)node.Value;
                break;

            case 51:
                EndAngle = (double)node.Value;
                break;

            case 210:
                ExtrusionDirection.X = (double)node.Value;
                break;

            case 220:
                ExtrusionDirection.Y = (double)node.Value;
                break;

            case 230:
                ExtrusionDirection.Z = (double)node.Value;
                break;
            }
        }
예제 #3
0
 public virtual void TakeNode(DxfNode node)
 {
     if (node.TypeCode == 8)
     {
         Layer = (string)node.Value;
     }
 }
예제 #4
0
        public static LinkedList <AcDbEntity> Load(TextReader reader)
        {
            LinkedList <AcDbEntity> result = new LinkedList <AcDbEntity>();
            State      state  = State.Start;
            AcDbEntity entity = null;
            DxfReader  rdr    = new DxfReader(reader);

            while (!rdr.IsEof)
            {
                DxfNode node = rdr.Read();
                if (state == State.Start || node.TypeCode == 0)
                {
                    // завершаем текущее состояние
                    if (state != State.Start && node.TypeCode == 0)
                    {
                        state = State.Start;
                    }

                    if (node.TypeCode == 0)
                    {
                        switch ((string)node.Value)
                        {
                        case "LWPOLYLINE":
                            entity = new AcDbPolyline();
                            result.AddLast(entity);
                            state = State.Entity;
                            break;

                        case "LINE":
                            entity = new AcDbLine();
                            result.AddLast(entity);
                            state = State.Entity;
                            break;

                        case "CIRCLE":
                            entity = new AcDbCircle();
                            result.AddLast(entity);
                            state = State.Entity;
                            break;

                        case "ARC":
                            entity = new AcDbArc();
                            result.AddLast(entity);
                            state = State.Entity;
                            break;
                        }
                    }
                }
                else if (state == State.Entity)
                {
                    entity.TakeNode(node);
                }
            }
            return(result);
        }
예제 #5
0
        public override void TakeNode(DxfNode node)
        {
            base.TakeNode(node);
            switch (node.TypeCode)
            {
            case 10:
                StartPoint.X = (double)node.Value;
                break;

            case 20:
                StartPoint.Y = (double)node.Value;
                break;

            case 30:
                StartPoint.Z = (double)node.Value;
                break;

            case 11:
                EndPoint.X = (double)node.Value;
                break;

            case 21:
                EndPoint.Y = (double)node.Value;
                break;

            case 31:
                EndPoint.Z = (double)node.Value;
                break;

            case 39:
                Thickness = (double)node.Value;
                break;

            case 210:
                ExtrusionDirection.X = (double)node.Value;
                break;

            case 220:
                ExtrusionDirection.Y = (double)node.Value;
                break;

            case 230:
                ExtrusionDirection.Z = (double)node.Value;
                break;
            }
        }
예제 #6
0
        public override void TakeNode(DxfNode node)
        {
            base.TakeNode(node);
            switch (node.TypeCode)
            {
            case 10:
                Center.X = (double)node.Value;
                break;

            case 20:
                Center.Y = (double)node.Value;
                break;

            case 30:
                Center.Z = (double)node.Value;
                break;

            case 39:
                Thickness = (double)node.Value;
                break;

            case 40:
                Radius = (double)node.Value;
                break;

            case 210:
                ExtrusionDirection.X = (double)node.Value;
                break;

            case 220:
                ExtrusionDirection.Y = (double)node.Value;
                break;

            case 230:
                ExtrusionDirection.Z = (double)node.Value;
                break;
            }
        }