예제 #1
0
        public bool UnPack(byte[] pack)
        {
            if (pack == null || pack.Length < 48)
            {
                return(false);
            }
            int ptr = 8;

            CliendID     = BytePacketReader.ReadLong(pack, ref ptr);
            PictureBoxID = BytePacketReader.ReadLong(pack, ref ptr);

            Line = new BrushLineObject();

            byte cR = BytePacketReader.ReadByte(pack, ref ptr);
            byte cG = BytePacketReader.ReadByte(pack, ref ptr);
            byte cB = BytePacketReader.ReadByte(pack, ref ptr);
            byte cA = BytePacketReader.ReadByte(pack, ref ptr);

            Line.BrushColor = Color.FromArgb(cA, cR, cG, cB);

            Line.BrushSize  = BytePacketReader.ReadInt(pack, ref ptr);
            Line.LineStartX = BytePacketReader.ReadInt(pack, ref ptr);
            Line.LineStartY = BytePacketReader.ReadInt(pack, ref ptr);
            Line.LineEndX   = BytePacketReader.ReadInt(pack, ref ptr);
            Line.LineEndY   = BytePacketReader.ReadInt(pack, ref ptr);

            return(true);
        }
예제 #2
0
        public DrawObject GetDrawObject(int pX, int pY)
        {
            BrushLineObject line = new BrushLineObject();

            line.Picture    = _picture;
            line.BrushColor = _color;
            line.BrushSize  = _brushSize;

            if (_startX == null)
            {
                _startX = pX;
            }
            if (_startY == null)
            {
                _startY = pY;
            }

            int endX = pX; int endY = pY;

            line.LineStartX = _startX ?? endX;
            line.LineStartY = _startY ?? endY;
            line.LineEndX   = endX;
            line.LineEndY   = endY;

            _startX = endX; _startY = endY;

            return(line);
        }
예제 #3
0
        private void NCDrawByBrush(IConnector connection, ArgBrushObject arg)
        {
            BrushLineObject line = arg.Line;

            if (arg.PictureBoxID == 0)
            {
                line.Picture = _canvas.BackPicture;
            }
            _canvas.AddDrawObject(arg.PictureBoxID, line);
            AddCommandToSendClients(arg);
        }
예제 #4
0
        public ArgBrushObject(long clientID, long pictureBoxID, BrushLineObject line)
        {
            if (line == null)
            {
                throw new ArgumentNullException("line is null");
            }

            CliendID     = clientID;
            PictureBoxID = pictureBoxID;
            Line         = line;
        }
예제 #5
0
        private void NCDrawByBrush(IConnector connection, ArgBrushObject arg)
        {
            if (arg == null)
            {
                return;
            }

            BrushLineObject line = arg.Line;

            if (arg.PictureBoxID == 0)
            {
                line.Picture = _canvas.BackPicture;
            }
            _canvas.AddDrawObject(arg.PictureBoxID, line);
        }
예제 #6
0
        private void SendDrawObject(DrawObject drObj)
        {
            if (drObj == null || drObj.Picture == null)
            {
                return;
            }

            long        picBoxID = drObj.Picture.UniqueID; //canvas
            ICommandArg arg      = null;

            if (drObj is BrushLineObject)
            {
                BrushLineObject line = drObj as BrushLineObject;
                arg = new ArgBrushObject(_netClient.ClientID, picBoxID, line);
            }
            else if (drObj is LineObject)
            {
                LineObject line = drObj as LineObject;
                arg = new ArgLineObject(_netClient.ClientID, picBoxID, line);
            }
            else if (drObj is RectObject)
            {
                RectObject rect = drObj as RectObject;
                arg = new ArgRectObject(_netClient.ClientID, picBoxID, rect);
            }
            else if (drObj is EllipseObject)
            {
                EllipseObject ellipse = drObj as EllipseObject;
                arg = new ArgEllipseObject(_netClient.ClientID, picBoxID, ellipse);
            }
            else if (drObj is MoveObject)
            {
                MoveObject move = drObj as MoveObject;
                arg = new ArgMoveObject(_netClient.ClientID, picBoxID, move);
            }
            else if (drObj is SelectorObject)
            {
                SelectorObject selector = drObj as SelectorObject;
                arg = new ArgSelectorCopyObject(_netClient.ClientID, picBoxID, selector);
            }

            if (arg != null && _netClient.Connector != null)
            {
                _netClient.Connector.SendCommand(arg);
            }
        }
예제 #7
0
        public static void Draw(DrawObject drawObj)
        {
            BrushLineObject line = drawObj as BrushLineObject;

            if (line == null || line.Picture == null || line.Picture.Image == null)
            {
                return;
            }
            if (line.Picture.Status != PictureBoxStatus.Canvas)
            {
                return;
            }
            using (Graphics gr = Graphics.FromImage(line.Picture.Image))
            {
                using (Pen pen = new Pen(new SolidBrush(line.BrushColor), line.BrushSize)){
                    gr.DrawLine(pen, new Point(line.LineStartX, line.LineStartY), new Point(line.LineEndX, line.LineEndY));
                }
                //чтобы не было разрывов между линиями
                using (Brush br = new SolidBrush(line.BrushColor)){
                    gr.FillEllipse(br, line.LineEndX - line.BrushSize / 2, line.LineEndY - line.BrushSize / 2, line.BrushSize, line.BrushSize);
                }
            }
            line.Picture.Invalidate();
        }