Ejemplo n.º 1
0
        override public bool computeOutput(ConnectionPoint connPoint, OutputGenerationParams parms)
        {
            if (!verifyInputConnections())
            {
                return(false);
            }

            gatherInputAndParameters(parms);

            ArrayBasedMask terrMask = (ArrayBasedMask)CoreGlobals.getEditorMain().mITerrainShared.getMask();

            int numXVerts = CoreGlobals.getEditorMain().mITerrainShared.getNumXVerts();
            int numZVerts = CoreGlobals.getEditorMain().mITerrainShared.getNumXVerts();

            float[] fk = new float[numXVerts * numZVerts];
            for (int x = 0; x < numXVerts; x++)
            {
                for (int y = 0; y < numZVerts; y++)
                {
                    fk[x + numXVerts * y] = terrMask.GetValue(x + parms.Width * y);
                }
            }


            if (numXVerts != parms.Width || numZVerts != parms.Height)
            {
                float[] resizedHeights = ImageManipulation.resizeF32Img(fk, numXVerts, numZVerts, parms.Width, parms.Height, ImageManipulation.eFilterType.cFilter_Linear);
                fk = (float[])resizedHeights.Clone();
            }



            MaskParam mp = ((MaskParam)(connPoint.ParamType));

            mp.Value = new DAGMask(parms.Width, parms.Height);

            for (int x = 0; x < parms.Width; x++)
            {
                for (int y = 0; y < parms.Height; y++)
                {
                    float k = fk[x + parms.Width * y];
                    mp.Value[x, y] = k;
                }
            }

            return(true);
        }
Ejemplo n.º 2
0
        public bool loadAndExecute()
        {
            if (mGraphMemoryStream == null)
            {
                return(false);
            }

            mGraphMemoryStream.Seek(0, SeekOrigin.Begin);
            int tWidth  = CoreGlobals.getEditorMain().mITerrainShared.getNumXVerts();
            int tHeight = CoreGlobals.getEditorMain().mITerrainShared.getNumXVerts();

            DAGCanvas dg = new DAGCanvas(512, 512);

            dg.loadCanvasFromMemoryStream(mGraphMemoryStream);
            DAGMask resMask = dg.execute(tWidth, tHeight);

            if (resMask == null)
            {
                MessageBox.Show("There was an error computing Mask");
                return(false);
            }

            mOutputMask = new ArrayBasedMask(mCapacity);


            for (int x = 0; x < tWidth; x++)
            {
                for (int y = 0; y < tHeight; y++)
                {
                    mOutputMask.SetMaskWeight(x * tWidth + y, resMask[x, y]);
                }
            }
            dg.newCanvas();
            dg = null;
            mGraphMemoryStream.Seek(0, SeekOrigin.Begin);
            return(true);
        }
Ejemplo n.º 3
0
        override public bool computeOutput(ConnectionPoint connPoint, OutputGenerationParams parms)
        {
            if (!verifyInputConnections())
            {
                return(false);
            }

            if (SelectedMaskName == null || SelectedMaskName == "")
            {
                return(false);
            }

            gatherInputAndParameters(parms);

            ArrayBasedMask terrMask = null;

            IMask msk = CoreGlobals.getEditorMain().mIMaskPickerUI.GetMask(SelectedMaskName);

            if (msk == null)
            {
                return(false);
            }
            if (msk is ArrayBasedMask)
            {
                terrMask = msk as ArrayBasedMask;
            }
            else if (msk is GraphBasedMask)
            {
                //we have to generate this mask...
                if (((GraphBasedMask)msk).loadAndExecute())
                {
                    terrMask = ((GraphBasedMask)msk).getOutputMask();
                }
            }



            int numXVerts = CoreGlobals.getEditorMain().mITerrainShared.getNumXVerts();
            int numZVerts = CoreGlobals.getEditorMain().mITerrainShared.getNumXVerts();

            float[] fk = new float[numXVerts * numZVerts];
            for (int x = 0; x < numXVerts; x++)
            {
                for (int y = 0; y < numZVerts; y++)
                {
                    fk[x + numXVerts * y] = terrMask.GetValue(x * numXVerts + y);
                }
            }


            if (numXVerts != parms.Width || numZVerts != parms.Height)
            {
                float[] resizedHeights = ImageManipulation.resizeF32Img(fk, numXVerts, numZVerts, parms.Width, parms.Height, ImageManipulation.eFilterType.cFilter_Linear);
                fk = (float[])resizedHeights.Clone();
            }



            MaskParam mp = ((MaskParam)(connPoint.ParamType));

            mp.Value = new DAGMask(parms.Width, parms.Height);

            for (int x = 0; x < parms.Width; x++)
            {
                for (int y = 0; y < parms.Height; y++)
                {
                    float k = fk[x + parms.Width * y];
                    mp.Value[x, y] = k;
                }
            }

            terrMask = null;
            msk      = null;

            return(true);
        }