コード例 #1
0
ファイル: InternalModel.cs プロジェクト: MorgThom/sos-sub
        /// <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();
            }
        }
コード例 #2
0
ファイル: InternalModel.cs プロジェクト: minhnh/sos-sub
        /// <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);
        }
コード例 #3
0
ファイル: InternalModel.cs プロジェクト: MorgThom/sos-sub
        /// <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;
        }
コード例 #4
0
ファイル: InternalModel.cs プロジェクト: minhnh/sos-sub
        /// <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());
            }
        }