示例#1
0
        public void ApplyTextureAsNewChannel(int x, int y, textureData texture, Multibrush.LineSegment linesegment, Rectangle coverRectangle, double inner)
        {
            Rectangle rec = new Rectangle(x, y, this.Width, this.Height);
            Random ran = new Random();

            int channel = 0;
            int coverage = 0;
            bool firstCheck = true;
            bool painted = false;

            double presure = (float)texture.Presure / 100.0;

            if (coverRectangle.IntersectsWith(rec)) {
                for(int xCoor = x; xCoor < x + this.Width ; xCoor++) {
                    double adjustedXCoor = xCoor * Constants.TextureSpacing;
                    painted = false;

                    for(int yCoor = y; yCoor < y + this.Height; yCoor++) {
                        double adjustedYCoor = yCoor * Constants.TextureSpacing;

                        Pair<double, double> point = new Multibrush.Pair<double, double>(adjustedXCoor, adjustedYCoor);

                        if (linesegment.distance(point) <= inner) {
                            coverage = ran.Next(1, 100);
                            if (coverage <= texture.Coverage) {

                                if (firstCheck) {
                                    firstCheck = false;
                                    painted = true;

                                    if (this.TextureNames.Count >= 6)
                                        return;

                                    this.TextureNames.Add(texture.ToString());
                                    channel = this.TextureNames.Count - 1;
                                }

                                try {
                                    this[xCoor % this.Width, yCoor % this.Height, channel] = (byte)(presure * 255f);
                                } catch (Exception e) {
                                    throw new Exception("DDSGroup error: X:" + xCoor + ", Y:" + yCoor +" Channel: " + channel + ". Error Message: " + e.Message);
                                }
                            }
                        /* Since we are going over this in a linear fashion, we if we ever paint something, and then stop painting,
              				then we can be sure that we do not need to paint any more
             			*/
                        }
                        else if (painted) {
                            break;
                        }
                    }
                }
            }
        }
示例#2
0
        public void ApplyTextureAsNewChannel(int x, int y, textureData texture, Multibrush.Triangle inside, Rectangle coverRectangle, Random ran)
        {
            Rectangle rec = new Rectangle(x, y, this.Width, this.Height);

            int channel = 0;
            int coverage = 0;
            bool firstCheck = true;

            double presure = (float)texture.Presure / 100.0;

            if (coverRectangle.IntersectsWith(rec)) {
                for(int xCoor = x; xCoor < x + this.Width ; xCoor++) {
                    double adjustedXCoor = xCoor * Constants.TextureSpacing;

                    for(int yCoor = y; yCoor < y + this.Height; yCoor++) {
                        double adjustedYCoor = yCoor * Constants.TextureSpacing;

                        if (inside.insideTriangle(new Pair<double, double>(adjustedXCoor, adjustedYCoor))) {
                            coverage = ran.Next(1, 100);
                            if (coverage <= texture.Coverage) {

                                if (firstCheck) {
                                    firstCheck = false;

                                    if (this.TextureNames.Count >= 6)
                                        return;

                                    this.TextureNames.Add(texture.ToString());
                                    channel = this.TextureNames.Count - 1;
                                }

                                try {
                                    this[xCoor % this.Width, yCoor % this.Height, channel] = (byte)(presure * 255f);
                                } catch (Exception e) {
                                    throw new Exception("DDSGroup error: X:" + xCoor + ", Y:" + yCoor +" Channel: " + channel + ". Error Message: " + e.Message);
                                }
                            }
                        }
                    }
                }
            }
        }