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); }
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); }
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); }