Ejemplo n.º 1
0
        /// <summary>
        /// Sows as L panel.
        /// </summary>
        /// <param name="doc">The active document.</param>
        /// <param name="tr">The active transaction.</param>
        protected RivieraObject InsertLPanel(RivieraObject obj, ArrowDirection direction, params RivieraMeasure[] sizes)
        {
            //1: Se calcula la dirección y orientación del panel
            Point3d end, start;

            //Siempre se inserta en la posición inicial del bloque insertado
            //Selección de la dirección
            start = obj.Start.ToPoint3d();
            end   = direction.IsFront() ? start.ToPoint2d().ToPoint2dByPolar(1, obj.Angle).ToPoint3d()          //Misma dirección
                                      : start.ToPoint2d().ToPoint2dByPolar(1, obj.Angle + Math.PI).ToPoint3d(); //Dirección Invertida
            //Selección de la rotación
            SweepDirection rotation = direction.IsLeft() ? SweepDirection.Counterclockwise : SweepDirection.Clockwise;
            //Seleccion de tipo de L
            BordeoLPanelAngle lAng = direction.GetArrowDirectionName().Contains("90") ? BordeoLPanelAngle.ANG_90 : BordeoLPanelAngle.ANG_135;
            //Se convierten los tamaños a tamaños de bordeo
            IEnumerable <LPanelMeasure> pSizes = sizes.Select(x => x as LPanelMeasure);
            //El panel inferios se usa como distancia base del arreglo de paneles.
            var first = sizes[0] as LPanelMeasure;
            //Se crea el panel
            BordeoLPanelStack stack = new BordeoLPanelStack(start, end, first, rotation, lAng);

            //Se agregan los tamaños superiores
            for (int i = 1; i < sizes.Length; i++)
            {
                stack.AddPanel(sizes[i] as LPanelMeasure);
            }
            //Se dibuja en el plano y se borra el panel anterior
            RivieraObject objParent = obj.GetParent();

            this.DrawObjects((Document doc, Transaction tr, RivieraObject[] objs) => obj.Delete(tr), stack);
            if (objParent != null)
            {
                objParent.Connect(direction, stack);
            }
            else
            {
                var db = App.Riviera.Database.Objects;
                if (db.FirstOrDefault(x => x.Handle.Value == stack.Handle.Value) == null)
                {
                    db.Add(stack);
                }
            }
            //Se regresa el stack como objeto creado
            return(stack);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Sows as Linear panel.
        /// </summary>
        /// <param name="doc">The active document.</param>
        /// <param name="tr">The active transaction.</param>
        protected RivieraObject InsertLinearPanel(RivieraObject obj, ArrowDirection direction, params RivieraMeasure[] sizes)
        {
            //1: Se calcula la dirección y orientación del panel
            Point3d end, start;

            if (direction == ArrowDirection.FRONT) //Misma dirección
            {
                if (obj is BordeoLPanelStack)
                {
                    Polyline pl = (obj as BordeoLPanelStack).FirstOrDefault().PanelGeometry;
                    start = obj.End.ToPoint3d();
                    double angle = pl.GetPoint2dAt(2).GetVectorTo(pl.GetPoint2dAt(3)).Angle;
                    end = start.ToPoint2d().ToPoint2dByPolar(1, angle).ToPoint3d();
                }
                else
                {
                    start = obj.End.ToPoint3d();
                    end   = start.ToPoint2d().ToPoint2dByPolar(1, obj.Angle).ToPoint3d();
                }
            }
            else //Se invierte la dirección
            {
                start = obj.Start.ToPoint3d();
                end   = start.ToPoint2d().ToPoint2dByPolar(1, obj.Angle + Math.PI).ToPoint3d();
            }
            //Se convierten los tamaños a tamaños de bordeo
            IEnumerable <PanelMeasure> pSizes = sizes.Select(x => x as PanelMeasure);
            //El panel inferios se usa como distancia base del arreglo de paneles.
            var first = sizes[0] as PanelMeasure;
            //Se crea el panel
            BordeoPanelStack stack = new BordeoPanelStack(start, end, first);

            //Se agregan los tamaños superiores
            for (int i = 1; i < sizes.Length; i++)
            {
                stack.AddPanel(sizes[i] as PanelMeasure);
            }
            //Se dibuja en el plano
            this.DrawObjects(null, stack);
            obj.Connect(direction, stack);
            //Se regresa el stack como objeto creado
            return(stack);
        }