/// <summary> /// Searches for an object by name. /// Returns a ModelReturnData object containing the location of an object. /// </summary> /// <param name="name">The name of the object to search for.</param> /// <returns>ModelReturnData containing all 8 corners.</returns> public ModelReturnData FindObjectLocationByName(string name) { try { byte byteCodeSearch = 0; foreach (KeyValuePair<byte, string> pair in modelNameCodes) { if (name.Equals(pair.Value)) { byteCodeSearch = pair.Key; } } if (byteCodeSearch == 0) throw new ModuleNotFoundException(); int xLower = int.MaxValue, xUpper = int.MinValue, yLower = int.MaxValue, yUpper = int.MinValue, zLower = int.MaxValue, zUpper = int.MinValue; for (int i = 0; i < xGridSize; i++) { for (int j = 0; j < yGridSize; j++) { for (int k = 0; k < zGridSize; k++) { if (modelGrid[i, j, k] == byteCodeSearch) { if (i < xLower) xLower = i; if (i > xUpper) xUpper = i; if (j < yLower) yLower = j; if (j > yUpper) yUpper = j; if (k < zLower) zLower = k; if (k > zUpper) zUpper = k; } } } } //adjust by offset xUpper -= offset[0]; xLower -= offset[0]; yUpper -= offset[1]; yLower -= offset[1]; zUpper -= offset[2]; zLower -= offset[2]; //construct return object ModelReturnData objectReturn = new ModelReturnData(); objectReturn.name = name; objectReturn.Coord1[0] = xLower; objectReturn.Coord1[1] = yLower; objectReturn.Coord1[2] = zLower; objectReturn.Coord2[0] = xUpper; objectReturn.Coord2[1] = yLower; objectReturn.Coord2[2] = zLower; objectReturn.Coord3[0] = xLower; objectReturn.Coord3[1] = yUpper; objectReturn.Coord3[2] = zLower; objectReturn.Coord4[0] = xUpper; objectReturn.Coord4[1] = yUpper; objectReturn.Coord4[2] = zLower; objectReturn.Coord5[0] = xLower; objectReturn.Coord5[1] = yLower; objectReturn.Coord5[2] = zUpper; objectReturn.Coord6[0] = xUpper; objectReturn.Coord6[1] = yLower; objectReturn.Coord6[2] = zUpper; objectReturn.Coord7[0] = xLower; objectReturn.Coord7[1] = yUpper; objectReturn.Coord7[2] = zUpper; objectReturn.Coord8[0] = xUpper; objectReturn.Coord8[1] = yUpper; objectReturn.Coord8[2] = zUpper; objectReturn.SpecPoint[0] = objectSpecPoints[byteCodeSearch][0]; objectReturn.SpecPoint[1] = objectSpecPoints[byteCodeSearch][1]; objectReturn.SpecPoint[2] = objectSpecPoints[byteCodeSearch][2]; return objectReturn; } catch (ModuleNotFoundException) { //code for error handling here. return new ModelReturnData(); } }
/// <summary> /// Searches for an object given one of its corners. /// </summary> /// <param name="coordIn">A length three int representing a coordinate.</param> /// <returns>ModelReturnData containing all 8 corners.</returns> public ModelReturnData FindObjectLocationByCoord(int[] coordIn) { byte byteCodeSearch = modelGrid[coordIn[0], coordIn[1], coordIn[2]]; int xLower = int.MaxValue, xUpper = int.MinValue, yLower = int.MaxValue, yUpper = int.MinValue, zLower = int.MaxValue, zUpper = int.MinValue; for (int i = 0; i < xGridSize; i++) { for (int j = 0; j < yGridSize; j++) { for (int k = 0; k < zGridSize; k++) { if (modelGrid[i, j, k] == byteCodeSearch) { if (i < xLower) { xLower = i; } if (i > xUpper) { xUpper = i; } if (j < yLower) { yLower = j; } if (j > yUpper) { yUpper = j; } if (k < zLower) { zLower = k; } if (k > zUpper) { zUpper = k; } } } } } //adjust by offset xUpper -= offset[0]; xLower -= offset[0]; yUpper -= offset[1]; yLower -= offset[1]; zUpper -= offset[2]; zLower -= offset[2]; //construct return object ModelReturnData objectReturn = new ModelReturnData(); objectReturn.name = modelNameCodes[byteCodeSearch]; objectReturn.Coord1[0] = xLower; objectReturn.Coord1[1] = yLower; objectReturn.Coord1[2] = zLower; objectReturn.Coord2[0] = xUpper; objectReturn.Coord2[1] = yLower; objectReturn.Coord2[2] = zLower; objectReturn.Coord3[0] = xLower; objectReturn.Coord3[1] = yUpper; objectReturn.Coord3[2] = zLower; objectReturn.Coord4[0] = xUpper; objectReturn.Coord4[1] = yUpper; objectReturn.Coord4[2] = zLower; objectReturn.Coord5[0] = xLower; objectReturn.Coord5[1] = yLower; objectReturn.Coord5[2] = zUpper; objectReturn.Coord6[0] = xUpper; objectReturn.Coord6[1] = yLower; objectReturn.Coord6[2] = zUpper; objectReturn.Coord7[0] = xLower; objectReturn.Coord7[1] = yUpper; objectReturn.Coord7[2] = zUpper; objectReturn.Coord8[0] = xUpper; objectReturn.Coord8[1] = yUpper; objectReturn.Coord8[2] = zUpper; objectReturn.SpecPoint[0] = objectSpecPoints[byteCodeSearch][0]; objectReturn.SpecPoint[1] = objectSpecPoints[byteCodeSearch][1]; objectReturn.SpecPoint[2] = objectSpecPoints[byteCodeSearch][2]; return(objectReturn); }
/// <summary> /// Searches for an object given one of its corners. /// </summary> /// <param name="coordIn">A length three int representing a coordinate.</param> /// <returns>ModelReturnData containing all 8 corners.</returns> public ModelReturnData FindObjectLocationByCoord(int[] coordIn) { byte byteCodeSearch = modelGrid[coordIn[0], coordIn[1], coordIn[2]]; int xLower = int.MaxValue, xUpper = int.MinValue, yLower = int.MaxValue, yUpper = int.MinValue, zLower = int.MaxValue, zUpper = int.MinValue; for (int i = 0; i < xGridSize; i++) { for (int j = 0; j < yGridSize; j++) { for (int k = 0; k < zGridSize; k++) { if (modelGrid[i, j, k] == byteCodeSearch) { if (i < xLower) xLower = i; if (i > xUpper) xUpper = i; if (j < yLower) yLower = j; if (j > yUpper) yUpper = j; if (k < zLower) zLower = k; if (k > zUpper) zUpper = k; } } } } //adjust by offset xUpper -= offset[0]; xLower -= offset[0]; yUpper -= offset[1]; yLower -= offset[1]; zUpper -= offset[2]; zLower -= offset[2]; //construct return object ModelReturnData objectReturn = new ModelReturnData(); objectReturn.name = modelNameCodes[byteCodeSearch]; objectReturn.Coord1[0] = xLower; objectReturn.Coord1[1] = yLower; objectReturn.Coord1[2] = zLower; objectReturn.Coord2[0] = xUpper; objectReturn.Coord2[1] = yLower; objectReturn.Coord2[2] = zLower; objectReturn.Coord3[0] = xLower; objectReturn.Coord3[1] = yUpper; objectReturn.Coord3[2] = zLower; objectReturn.Coord4[0] = xUpper; objectReturn.Coord4[1] = yUpper; objectReturn.Coord4[2] = zLower; objectReturn.Coord5[0] = xLower; objectReturn.Coord5[1] = yLower; objectReturn.Coord5[2] = zUpper; objectReturn.Coord6[0] = xUpper; objectReturn.Coord6[1] = yLower; objectReturn.Coord6[2] = zUpper; objectReturn.Coord7[0] = xLower; objectReturn.Coord7[1] = yUpper; objectReturn.Coord7[2] = zUpper; objectReturn.Coord8[0] = xUpper; objectReturn.Coord8[1] = yUpper; objectReturn.Coord8[2] = zUpper; objectReturn.SpecPoint[0] = objectSpecPoints[byteCodeSearch][0]; objectReturn.SpecPoint[1] = objectSpecPoints[byteCodeSearch][1]; objectReturn.SpecPoint[2] = objectSpecPoints[byteCodeSearch][2]; return objectReturn; }
/// <summary> /// Searches for an object by name. /// Returns a ModelReturnData object containing the location of an object. /// </summary> /// <param name="name">The name of the object to search for.</param> /// <returns>ModelReturnData containing all 8 corners.</returns> public ModelReturnData FindObjectLocationByName(string name) { try { byte byteCodeSearch = 0; foreach (KeyValuePair <byte, string> pair in modelNameCodes) { if (name.Equals(pair.Value)) { byteCodeSearch = pair.Key; } } if (byteCodeSearch == 0) { throw new ModuleNotFoundException(); } int xLower = int.MaxValue, xUpper = int.MinValue, yLower = int.MaxValue, yUpper = int.MinValue, zLower = int.MaxValue, zUpper = int.MinValue; for (int i = 0; i < xGridSize; i++) { for (int j = 0; j < yGridSize; j++) { for (int k = 0; k < zGridSize; k++) { if (modelGrid[i, j, k] == byteCodeSearch) { if (i < xLower) { xLower = i; } if (i > xUpper) { xUpper = i; } if (j < yLower) { yLower = j; } if (j > yUpper) { yUpper = j; } if (k < zLower) { zLower = k; } if (k > zUpper) { zUpper = k; } } } } } //adjust by offset xUpper -= offset[0]; xLower -= offset[0]; yUpper -= offset[1]; yLower -= offset[1]; zUpper -= offset[2]; zLower -= offset[2]; //construct return object ModelReturnData objectReturn = new ModelReturnData(); objectReturn.name = name; objectReturn.Coord1[0] = xLower; objectReturn.Coord1[1] = yLower; objectReturn.Coord1[2] = zLower; objectReturn.Coord2[0] = xUpper; objectReturn.Coord2[1] = yLower; objectReturn.Coord2[2] = zLower; objectReturn.Coord3[0] = xLower; objectReturn.Coord3[1] = yUpper; objectReturn.Coord3[2] = zLower; objectReturn.Coord4[0] = xUpper; objectReturn.Coord4[1] = yUpper; objectReturn.Coord4[2] = zLower; objectReturn.Coord5[0] = xLower; objectReturn.Coord5[1] = yLower; objectReturn.Coord5[2] = zUpper; objectReturn.Coord6[0] = xUpper; objectReturn.Coord6[1] = yLower; objectReturn.Coord6[2] = zUpper; objectReturn.Coord7[0] = xLower; objectReturn.Coord7[1] = yUpper; objectReturn.Coord7[2] = zUpper; objectReturn.Coord8[0] = xUpper; objectReturn.Coord8[1] = yUpper; objectReturn.Coord8[2] = zUpper; objectReturn.SpecPoint[0] = objectSpecPoints[byteCodeSearch][0]; objectReturn.SpecPoint[1] = objectSpecPoints[byteCodeSearch][1]; objectReturn.SpecPoint[2] = objectSpecPoints[byteCodeSearch][2]; return(objectReturn); } catch (ModuleNotFoundException) { //code for error handling here. return(new ModelReturnData()); } }