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