Пример #1
0
        /// <summary>
        /// Получить базовую плоскость, параллельную _основной базовой плоскости.
        /// Разница между этими плоскостями заключается в том,
        /// что базовая плоскость _main_ является выдавливаемой сущностью,
        /// а базовая плоскость _parallel_ выдавленной вытянутой сущностью.
        /// </summary>
        /// <param name="_doc3DPart">Kompas part of 3D document</param>
        /// <param name="faceIndex1">Base plane index 1</param>
        /// <param name="faceIndex2">Base plane index 2</param>
        /// <returns>Parallel base plane by base plane area
        /// state and indexes of faces in detail faces collection</returns>
        public static ksEntity GetParallelBasePlane(ksPart _doc3DPart,
                                                    int faceIndex1, int faceIndex2, BaseFaceAreaState baseFaceAreaState)
        {
            if (faceIndex1 == -1)
            {
                return(null);
            }

            var faceCollection = (ksEntityCollection)_doc3DPart.EntityCollection(
                (short)Obj3dType.o3d_face);

            var face1           = (ksEntity)faceCollection.GetByIndex(faceIndex1);
            var faceDefinition1 = (ksFaceDefinition)face1.GetDefinition();

            if (faceIndex2 == -1)
            {
                return(face1);
            }

            var face2           = (ksEntity)faceCollection.GetByIndex(faceIndex2);
            var faceDefinition2 = (ksFaceDefinition)face2.GetDefinition();

            var face = (ksEntity)faceCollection.GetByIndex(0);

            uint SM = 0x0;

            switch (baseFaceAreaState)
            {
            case BaseFaceAreaState.BaseFaceAreaHigher:
                if (faceDefinition1.GetArea(SM) > faceDefinition2.GetArea(SM))
                {
                    face = face2;
                }
                else
                {
                    face = face1;
                }
                break;

            case BaseFaceAreaState.BaseFaceAreaLower:
                if (faceDefinition1.GetArea(SM) < faceDefinition2.GetArea(SM))
                {
                    face = face2;
                }
                else
                {
                    face = face1;
                }
                break;
            }

            return(face);
        }
Пример #2
0
        /// <summary>
        /// Получить базовую плоскость, параллельную _основной базовой плоскости.
        /// Разница между этими плоскостями заключается в том, что базовая плоскость _main_ является выдавливаемой сущностью,
        /// а базовая плоскость _parallel_ выдавленной вытянутой сущностью.
        /// </summary>
        /// <param name="_doc3DPart">Kompas part of 3D document</param>
        /// <param name="faceIndex1">Base plane index 1</param>
        /// <param name="faceIndex2">Base plane index 2</param>
        /// <param name="baseFaceAreaState"> Base plane area state, using for correct definition of parallel base plane and main base plane indexes.</param>
        /// <returns>Parallel base plane by base plane area state and indexes of faces in detail faces collection</returns>
        public static ksEntity GetParallelBasePlane(ksPart _doc3DPart, int faceIndex1, int faceIndex2, BaseFaceAreaState baseFaceAreaState)
        {
            // If первый индекс не определен --
            if (faceIndex1 == -1)
            {
                return(null);
            }

            var faceCollection = (ksEntityCollection)_doc3DPart.EntityCollection((short)Obj3dType.o3d_face);

            var face1           = (ksEntity)faceCollection.GetByIndex(faceIndex1);
            var faceDefinition1 = (ksFaceDefinition)face1.GetDefinition();

            // If второй базовый индекс face не определен --
            // -- затем получите первое базовое face
            if (faceIndex2 == -1)
            {
                return(face1);
            }

            var face2           = (ksEntity)faceCollection.GetByIndex(faceIndex2);
            var faceDefinition2 = (ksFaceDefinition)face2.GetDefinition();

            var face = (ksEntity)faceCollection.GetByIndex(0);

            uint SM = 0x0; // это похоже на "площадь в сантиметрах" в API

            switch (baseFaceAreaState)
            {
            case BaseFaceAreaState.BaseFaceAreaHigher:
                if (faceDefinition1.GetArea(SM) > faceDefinition2.GetArea(SM))
                {
                    face = face2;
                }
                else
                {
                    face = face1;
                }
                break;

            case BaseFaceAreaState.BaseFaceAreaLower:
                if (faceDefinition1.GetArea(SM) < faceDefinition2.GetArea(SM))
                {
                    face = face2;
                }
                else
                {
                    face = face1;
                }
                break;
            }

            return(face);
        }
Пример #3
0
        /// <summary>
        /// Get base plane which is parallel to _main_ base plane.
        /// The difference between this planes is the _main_ base plane is extrudABLE entity, while the _parallel_ base plane is extrudED entity.
        /// </summary>
        /// <example>
        ///	This example explains how program correctly gets index of face by <paramref cref="baseFaceAreaState">information about base face area</paramref>.
        /// <code language="cs">
        /// case BaseFaceAreaState.BaseFaceAreaHigher:
        ///		if (faceDefinition1.GetArea(SM) > faceDefinition2.GetArea(SM))
        ///		{
        ///			face = faceCollection.GetByIndex(faceIndex2);
        ///		}
        ///		else
        ///		{
        ///			face = faceCollection.GetByIndex(faceIndex1);
        ///		}
        ///		break;
        /// </code>
        /// </example>
        /// <param name="_doc3DPart">Kompas part of 3D document</param>
        /// <param name="faceIndex1">Base plane index 1</param>
        /// <param name="faceIndex2">Base plane index 2</param>
        /// <param name="baseFaceAreaState"> Base plane area state, using for correct definition of parallel base plane and main base plane indexes.</param>
        /// <returns>Parallel base plane by base plane area state and indexes of faces in detail faces collection</returns>
        public static ksEntity GetParallelBasePlane(ksPart _doc3DPart, int faceIndex1, int faceIndex2, BaseFaceAreaState baseFaceAreaState)
        {
            // If first index isn't defined --
            // -- then just open this and enjoy

            /** facepalm.txt
             * ............................................________........................
             * ....................................,.-‘”...................``~.,..................
             * .............................,.-”...................................“-.,............
             * .........................,/...............................................”:,........
             * .....................,?......................................................\,.....
             * .................../...........................................................,}....
             * ................./......................................................,:`^`..}....
             * .............../...................................................,:”........./.....
             * ..............?.....__.........................................:`.........../.....
             * ............./__.(.....“~-,_..............................,:`........../........
             * .........../(_....”~,_........“~,_....................,:`........_/...........
             * ..........{.._$;_......”=,_.......“-,_.......,.-~-,},.~”;/....}...........
             * ...........((.....* ~_.......”=-._......“;,,./`..../”............../............
             * ...,,,___.\`~,......“~.,....................`.....}............../.............
             * ............(....`=-,,.......`........................(......;_,,-”...............
             * ............/.`~,......`-...............................\....../\...................
             * .............\`~.*-,.....................................|,./.....\,__...........
             * ,,_..........}.>-._\...................................|..............`=~-,....
             * .....`=~-,_\_......`\,.................................\........................
             * ...................`=~-,,.\,...............................\.......................
             * ................................`:,,...........................`\..............__..
             * .....................................`=-,...................,%`>--==``.......
             * ........................................_\..........._,-%.......`\...............
             * ...................................,<`.._|_,-&``................`\..............
             */
            if (faceIndex1 == -1)
            {
                return(null);
            }

            var faceCollection = (ksEntityCollection)_doc3DPart.EntityCollection((short)Obj3dType.o3d_face);

            var face1           = (ksEntity)faceCollection.GetByIndex(faceIndex1);
            var faceDefinition1 = (ksFaceDefinition)face1.GetDefinition();

            // If second base face index isn't defined --
            // -- then get first base face
            if (faceIndex2 == -1)
            {
                return(face1);
            }

            var face2           = (ksEntity)faceCollection.GetByIndex(faceIndex2);
            var faceDefinition2 = (ksFaceDefinition)face2.GetDefinition();

            var face = (ksEntity)faceCollection.GetByIndex(0);

            uint SM = 0x0;             // this is similar to "area in santimeters" in API

            switch (baseFaceAreaState)
            {
            case BaseFaceAreaState.BaseFaceAreaHigher:
                if (faceDefinition1.GetArea(SM) > faceDefinition2.GetArea(SM))
                {
                    face = face2;
                }
                else
                {
                    face = face1;
                }
                break;

            case BaseFaceAreaState.BaseFaceAreaLower:
                if (faceDefinition1.GetArea(SM) < faceDefinition2.GetArea(SM))
                {
                    face = face2;
                }
                else
                {
                    face = face1;
                }
                break;
            }

            return(face);
        }