VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "Class1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = True Dim iKompasObject As Object 'KompasObject Dim iDocument3D As Object 'ksDocument3D ' GetLibraryName Public Function GetLibraryName() As String GetLibraryName = "Операции, оси и плоскости" End Function ' ExternalMenuItem Public Function ExternalMenuItem(ByVal number As Integer, itemType As Integer, command As Integer) As String itemType = 1 'MENUITEM' Select Case number Case 1 ExternalMenuItem = "Конструктивная ось операции" command = 1 Case 2 ExternalMenuItem = "Конструктивная ось по двум точкам" command = 2 Case 3 ExternalMenuItem = "Конструктивная ось, проходящая через ребро" command = 3 ' Case 4 ' ExternalMenuItem = "Конструктивная ось конической грани" ' command = 4 Case 4 ExternalMenuItem = "Смещенная плоскость, ось по двум плоскостям, плоскость под углом к другой пло-ти" command = 4 Case 5 ExternalMenuItem = "Плоскость через три вершины" command = 5 Case 6 itemType = 3 'ENDMENU' ExternalMenuItem = "" command = -1 End Select End Function ' конструктивная ось операции Sub ConstrAxisOperations() Dim part As Object ' интерфейс компонента Set part = iDocument3D.GetPart(pNew_Part) ' новый компонент If Not part Is Nothing Then ' если компонент создан Dim entitySketch As Object ' интерфейс 3D-объекта Set entitySketch = part.NewEntity(o3d_sketch) ' создать новый эскиз If Not entitySketch Is Nothing Then ' если 3D-объект создан Dim sketchDef As Object ' интерфейс свойств эскиза Set sketchDef = entitySketch.GetDefinition ' берем у объекта его свойства If Not sketchDef Is Nothing Then ' если интерфейс свойств есть Dim basePlane As Object ' интерфейс 3D-объекта Set basePlane = part.GetDefaultEntity(o3d_planeXOY) ' получим интерфейс базовой плоскости XOY If Not basePlane Is Nothing Then ' плоскость получили sketchDef.SetPlane basePlane ' установим плоскость XOY базовой для эскиза Set basePlane = Nothing ' освобождаем интерфейс End If ' entitySketch.Create ' создадим эскиз Dim sketchEdit As Object ' интерфейс редактора эскиза ksDocument2D Set sketchEdit = sketchDef.BeginEdit ' открыть эскиз на редактирование If Not sketchEdit Is Nothing Then sketchEdit.ksCircle 20, 0, 10, 1 ' рисуем окружность sketchEdit.ksLineSeg 0, 0, 0, 5, 3 ' рисуем отрезок (ось) sketchDef.EndEdit ' завершение редактирования эскиза Set sketchEdit = Nothing ' освобождаем интерфейс End If Set sketchDef = Nothing ' освобождаем интерфейс End If ' Dim entityRotate As Object ' интерфейс 3D-объекта Set entityRotate = part.NewEntity(o3d_baseRotated) ' создаем операцию вращения If Not entityRotate Is Nothing Then Dim rotateDef As Object ' интерфейс свойств базовой операции вращения Set rotateDef = entityRotate.GetDefinition ' получить свойства базовой операции вращения If Not rotateDef Is Nothing Then Dim rotproperty As Object ' интерфейс парметров вращения Set rotproperty = rotateDef.RotatedParam ' получить параметры вращения If Not rotproperty Is Nothing Then rotproperty.direction = dtBoth ' выдавливаем в два направления rotproperty.toroidShape = False ' Set rotproperty = Nothing ' освобождаем интерфейс End If ' rotateDef.TorShapeType false ' rotateDef.DirectionType dtNormal ' направление вращения rotateDef.SetThinParam True, dtBoth, 1, 1 ' тонкая стенка в два направления rotateDef.SetSideParam True, 180 ' rotateDef.SetSketch entitySketch ' эскиз операции вращения entityRotate.Create ' создать операцию Set rotateDef = Nothing ' освобождаем интерфейс End If Dim entityAxisOperation As Object ' интерфейс оси операции Set entityAxisOperation = part.NewEntity(o3d_axisOperation) ' создать интерфейс If Not entityAxisOperation Is Nothing Then Dim axisOperation As Object ' интерфейс свойств оси операций Set axisOperation = entityAxisOperation.GetDefinition ' получаем интерфейс свойств оси операций If Not axisOperation Is Nothing Then axisOperation.SetOperation entityRotate ' базовая операция entityAxisOperation.Create ' создать операцию Set axisOperation = Nothing ' освобождаем интерфейс End If Set entityAxisOperation = Nothing ' освобождаем интерфейс End If iKompasObject.ksMessage ("Ось операции") ' Set entityRotate = Nothing ' освобождаем интерфейс End If Set entitySketch = Nothing ' освобождаем интерфейс End If ' Set part = Nothing ' освобождаем интерфейс End If End Sub ' Конструктивная ось по двум точкам ' Конструктивная ось, проходящая через ребро Sub ConstrAxis2PointOrEdge(ax2Point As Boolean) Dim part As Object ' интерфейс компонента Set part = iDocument3D.GetPart(pNew_Part) ' новый компонент If Not part Is Nothing Then ' если компонент создан Dim entitySketch As Object ' интерфейс 3D-объекта Set entitySketch = part.NewEntity(o3d_sketch) ' создать новый эскиз If Not entitySketch Is Nothing Then ' если 3D-объект создан Dim sketchDef As Object ' интерфейс свойств эскиза Set sketchDef = entitySketch.GetDefinition ' берем у объекта его свойства If Not sketchDef Is Nothing Then ' если интерфейс свойств есть Dim basePlane As Object ' интерфейс 3D-объекта Set basePlane = part.GetDefaultEntity(o3d_planeXOY) ' получим интерфейс базовой плоскости XOY If Not basePlane Is Nothing Then ' плоскость получили sketchDef.SetPlane basePlane ' установим плоскость XOY базовой для эскиза Set basePlane = Nothing ' освобождаем интерфейс End If ' entitySketch.Create ' создадим эскиз Dim sketchEdit As Object ' интерфейс редактора эскиза ksDocument2D Set sketchEdit = sketchDef.BeginEdit ' открыть эскиз на редактирование If Not sketchEdit Is Nothing Then ' введем новый эскиз - квадрат sketchEdit.ksLineSeg 50, 50, -50, 50, 1 sketchEdit.ksLineSeg 50, -50, -50, -50, 1 sketchEdit.ksLineSeg 50, -50, 50, 50, 1 sketchEdit.ksLineSeg -50, -50, -50, 50, 1 sketchDef.EndEdit ' завершение редактирования эскиза Set sketchEdit = Nothing ' освобождаем интерфейс End If Set sketchDef = Nothing ' освобождаем интерфейс End If ' Dim entityExtr As Object ' Set entityExtr = part.NewEntity(o3d_baseExtrusion) ' If Not entityExtr Is Nothing Then ' Dim extrusionDef As Object ' интерфейс свойств базовой операции выдавливания Set extrusionDef = entityExtr.GetDefinition ' получаем интерфейс свойств базовой операции выдавливания If Not extrusionDef Is Nothing Then extrusionDef.directionType = dtNormal ' направление выдавливания extrusionDef.SetSideParam True, etBlind, 20, 0, False extrusionDef.SetThinParam True, dtBoth, 20, 20 ' тонкая стенка в два направления extrusionDef.SetSketch entitySketch ' эскиз операции выдавливания entityExtr.Create ' создать операцию Set extrusionDef = Nothing ' освобождаем интерфейс End If Set entityExtr = Nothing ' освобождаем интерфейс End If Set entitySketch = Nothing ' освобождаем интерфейс End If ' Dim entityColl As Object ' интерфейс динамического массива 3D-объектов Dim collType As Integer If ax2Point Then collType = o3d_vertex Else collType = o3d_edge End If Set entityColl = part.EntityCollection(collType) ' получаем массив вершин или ребер If Not entityColl Is Nothing And entityColl.GetCount > 1 Then If ax2Point Then ' создадим ось по двум точкам Dim entityAxis2Point As Object ' интерфейс 3D-объекта Set entityAxis2Point = part.NewEntity(o3d_axis2Points) ' получить интерфейс оси по двум точкам If Not entityAxis2Point Is Nothing Then Dim axis2Point As Object ' интерфейс свойств оси по двум точкам Set axis2Point = entityAxis2Point.GetDefinition ' получаем интерфейс свойств оси по двум точкам If Not axis2Point Is Nothing Then axis2Point.SetPoint 1, entityColl.GetByIndex(0) axis2Point.SetPoint 2, entityColl.GetByIndex(entityColl.GetCount - 1) entityAxis2Point.Create iKompasObject.ksMessage ("Ось через две точки") Set axis2Point = Nothing ' освобождаем интерфейс End If Set entityAxis2Point = Nothing ' освобождаем интерфейс End If Else ' создадим ось через ребро Dim entityAxisEdge As Object ' интерфейс 3D-объекта Set entityAxisEdge = part.NewEntity(o3d_axisEdge) ' получить интерфейс - ось через ребро If Not entityAxisEdge Is Nothing Then Dim axisEdge As Object ' Set axisEdge = entityAxisEdge.GetDefinition ' If Not axisEdge Is Nothing Then axisEdge.SetEdge entityColl.GetByIndex(0) entityAxisEdge.Create Set axisEdge = Nothing ' освобождаем интерфейс End If Set entityAxisEdge = Nothing ' освобождаем интерфейс End If iKompasObject.ksMessage ("Ось через грань") ' создадим еще ось через грань Dim entityAxisEdge2 As Object ' интерфейс 3D-объекта Set entityAxisEdge2 = part.NewEntity(o3d_axisEdge) ' получить интерфейс - ось через ребро If Not entityAxisEdge2 Is Nothing Then Dim axisEdge2 As Object ' Set axisEdge2 = entityAxisEdge2.GetDefinition() ' If Not axisEdge2 Is Nothing Then axisEdge2.SetEdge entityColl.GetByIndex(1) entityAxisEdge2.Create Set axisEdge = Nothing ' освобождаем интерфейс End If Set entityAxisEdge2 = Nothing ' освобождаем интерфейс End If iKompasObject.ksMessage ("Другая ось через грань") End If Set entityColl = Nothing ' освобождаем интерфейс End If Set part = Nothing ' освобождаем интерфейс End If End Sub ' Конструктивная ось конической грани 'Sub ConstrAxisConeface() ' Dim part As Object ' интерфейс компонента ' Set part = iDocument3D.GetPart(pNew_Part) ' новый компонент ' ' If Not part Is Nothing Then ' если компонент создан ' Dim entitySketch As Object ' интерфейс 3D-объекта ' Set entitySketch = part.NewEntity(o3d_sketch) ' создать новый эскиз ' ' If Not entitySketch Is Nothing Then ' если 3D-объект создан ' Dim sketchDef As Object ' интерфейс свойств эскиза ' Set sketchDef = entitySketch.GetDefinition ' берем у объекта его свойства ' ' If Not sketchDef Is Nothing Then ' если интерфейс свойств есть ' Dim basePlane As Object ' интерфейс 3D-объекта ' Set basePlane = part.GetDefaultEntity(o3d_planeXOY) ' получим интерфейс базовой плоскости XOY ' ' If Not basePlane Is Nothing Then ' плоскость получили ' sketchDef.SetPlane basePlane ' установим плоскость XOY базовой для эскиза ' Set basePlane = Nothing ' освобождаем интерфейс ' End If ' ' ' entitySketch.Create ' создадим эскиз ' Dim sketchEdit As Object ' интерфейс редактора эскиза ksDocument2D ' Set sketchEdit = sketchDef.BeginEdit ' открыть эскиз на редактирование ' ' If Not sketchEdit Is Nothing Then ' sketchEdit.ksCircle 0, 0, 50, 1 ' sketchDef.EndEdit ' завершение редактирования эскиза ' Set sketchEdit = Nothing ' освобождаем интерфейс ' End If ' ' Set sketchDef = Nothing ' освобождаем интерфейс ' End If ' ' ' Dim entityExtr As Object ' ' Set entityExtr = part.NewEntity(o3d_baseExtrusion) ' ' If Not entityExtr Is Nothing Then ' ' Dim extrusionDef As Object ' интерфейс свойств базовой операции выдавливания ' Set extrusionDef = entityExtr.GetDefinition ' получаем интерфейс свойств базовой операции выдавливания ' ' If Not extrusionDef Is Nothing Then ' extrusionDef.directionType = dtNormal ' направление выдавливания ' extrusionDef.SetSideParam True, etBlind, 20, 30, False ' extrusionDef.SetThinParam True, dtBoth, 10, 10 ' тонкая стенка в два направления ' extrusionDef.SetSketch entitySketch ' эскиз операции выдавливания ' entityExtr.Create ' создать операцию ' Set extrusionDef = Nothing ' освобождаем интерфейс ' End If ' ' Set entityExtr = Nothing ' освобождаем интерфейс ' End If ' ' Set entitySketch = Nothing ' освобождаем интерфейс ' End If ' ' ' Dim entityColl As Object ' интерфейс динамического массива 3D-объектов ' Set entityColl = part.EntityCollection(o3d_face) ' получаем массив вершин или ребер ' ' If Not entityColl Is Nothing Then ' Dim entityConFace As Object ' ' Dim i As Integer ' Dim count As Integer ' count = entityColl.GetCount ' For i = 0 To count ' Set entityConFace = entityColl.GetByIndex(i) ' If Not entityConFace Is Nothing Then ' Dim face As Object ' Set face = entityConFace.GetDefinition ' If Not face Is Nothing Then ' If Not face.IsConic Then ' если поверхность не коническая, берем следующую из массива ' Set entityConFace = Nothing ' Else ' Exit For ' End If ' End If ' End If ' Next i ' ' ' создадим ось через коническую поверхность ' If Not entityConFace Is Nothing Then ' Dim entityAxisConFace As Object ' Set entityAxisConFace = part.NewEntity(o3d_axisConeFace) ' If Not entityAxisConFace Is Nothing Then ' ' Dim axisConFace As Object ' Set axisConFace = entityAxisConFace.GetDefinition ' If Not axisConFace Is Nothing Then ' ' axisConFace.SetFace entityConFace ' entityAxisConFace.Create ' Set axisConFace = Nothing ' End If ' ' Set entityAxisConFace = Nothing ' End If ' iKompasObject.ksMessage "Ось через коническую поверхность" ' Set entityConFace = Nothing ' End If ' ' End If ' ' Set part = Nothing ' освобождаем интерфейс ' End If ' 'End Sub ' Создание смещенной плоскости, оси по двум плоскостям и плоскости под углом к заданной Sub CreateConstrElem() Dim part As Object ' интерфейс компонента Set part = iDocument3D.GetPart(pNew_Part) ' новый компонент If Not part Is Nothing Then ' если компонент создан Dim entity As Object Set entity = part.NewEntity(o3d_planeOffset) If Not entity Is Nothing Then ' интерфейс свойств смещенной плоскости Dim offsetDef As Object Set offsetDef = entity.GetDefinition If Not offsetDef Is Nothing Then offsetDef.offset = 150 ' расстояние от базовой плоскости Dim basePlane As Object Set basePlane = part.GetDefaultEntity(o3d_planeXOY) basePlane.Name = "XOY" ' название для плоскости basePlane.Update ' обновить параметры offsetDef.SetPlane basePlane ' базовая плоскость offsetDef.direction = False ' направление смещения от базовой плоскости entity.Name = "Смещенная плоскость" ' имя для смещенной плоскости entity.Create ' создать смещенную плоскость iKompasObject.ksMessage "Изменим параметры смещенной плоскости" offsetDef.offset = 50 ' изменим расстояние до базовой плоскости Set basePlane = Nothing ' возьмем другую базовую плоскость Set basePlane = part.GetDefaultEntity(o3d_planeYOZ) basePlane.Name = "YOZ" basePlane.Update ' обновить параметры offsetDef.direction = True ' изменим направления смещения относительно базовой плоскости offsetDef.SetPlane basePlane entity.Update ' обновить параметры Set basePlane = Nothing ' возьмем другую базовую плоскость Set basePlane = part.GetDefaultEntity(o3d_planeXOY) basePlane.Name = "XOY" iKompasObject.ksMessage "На пересечении плоскостей построим ось" ' Ось на пересечении двух плоскостей Dim entityAxis As Object Set entityAxis = part.NewEntity(o3d_axis2Planes) If Not entityAxis Is Nothing Then Dim axis2PlanesDef As Object Set axis2PlanesDef = entityAxis.GetDefinition If Not axis2PlanesDef Is Nothing Then axis2PlanesDef.SetPlane 1, entity ' Базовая плоскость 1 axis2PlanesDef.SetPlane 2, basePlane ' Базовая плоскость 2 entityAxis.Name = "Ось по двум плоскостям" ' имя для оси entityAxis.Create ' создаем ось iKompasObject.ksMessage "Поменяем одну из базовых плоскостей для построения оси" Set basePlane = Nothing ' возьмем другую базовую плоскость Set basePlane = part.GetDefaultEntity(o3d_planeXOZ) basePlane.Name = "XOZ" axis2PlanesDef.SetPlane 2, basePlane ' Базовая плоскость 2 entityAxis.Update iKompasObject.ksMessage "Через смещенную плоскость и построенную ось \n проведем плоскость под углом 45" Dim entityAnglePlane As Object Set entityAnglePlane = part.NewEntity(o3d_planeAngle) If Not entityAnglePlane Is Nothing Then ' интерфейс свойств плоскости под углом к другой плоскости Dim planeAngleDef As Object Set planeAngleDef = entityAnglePlane.GetDefinition If Not planeAngleDef Is Nothing Then planeAngleDef.angle = 45 ' угол наклона к базовой плоскости planeAngleDef.SetPlane entity ' базовая плоскость planeAngleDef.SetAxis entityAxis ' базовая ось entityAnglePlane.Name = "Плоскость под углом к другой плоскости" entityAnglePlane.Create ' создать плоскость под углом iKompasObject.ksMessage "Изменим одну из базовых плоскостей" planeAngleDef.SetPlane basePlane ' базовая плоскость entityAnglePlane.Update ' обновить параметры плоскости End If End If End If End If Set offsetDef = Nothing ' освобождаем интерфейс End If Set entity = Nothing ' освобождаем интерфейс End If Set part = Nothing ' освобождаем интерфейс End If End Sub ' Плоскость через три вершины Sub constrPlane3Point() Dim part As Object ' интерфейс компонента Set part = iDocument3D.GetPart(pNew_Part) ' новый компонент If Not part Is Nothing Then ' если компонент создан Dim entitySketch As Object ' интерфейс 3D-объекта Set entitySketch = part.NewEntity(o3d_sketch) ' создать новый эскиз If Not entitySketch Is Nothing Then ' если 3D-объект создан Dim sketchDef As Object ' интерфейс свойств эскиза Set sketchDef = entitySketch.GetDefinition ' берем у объекта его свойства If Not sketchDef Is Nothing Then ' если интерфейс свойств есть Dim basePlane As Object ' интерфейс 3D-объекта Set basePlane = part.GetDefaultEntity(o3d_planeXOY) ' получим интерфейс базовой плоскости XOY If Not basePlane Is Nothing Then ' плоскость получили sketchDef.SetPlane basePlane ' установим плоскость XOY базовой для эскиза Set basePlane = Nothing ' освобождаем интерфейс End If ' entitySketch.Create ' создадим эскиз Dim sketchEdit As Object ' интерфейс редактора эскиза ksDocument2D Set sketchEdit = sketchDef.BeginEdit ' открыть эскиз на редактирование If Not sketchEdit Is Nothing Then ' введем новый эскиз - квадрат sketchEdit.ksLineSeg 50, 50, -50, 50, 1 sketchEdit.ksLineSeg 50, -50, -50, -50, 1 sketchEdit.ksLineSeg 50, -50, 50, 50, 1 sketchEdit.ksLineSeg -50, -50, -50, 50, 1 sketchDef.EndEdit ' завершение редактирования эскиза Set sketchEdit = Nothing ' освобождаем интерфейс End If Set sketchDef = Nothing ' освобождаем интерфейс End If ' Dim entityExtr As Object ' Set entityExtr = part.NewEntity(o3d_baseExtrusion) ' If Not entityExtr Is Nothing Then ' Dim extrusionDef As Object ' интерфейс свойств базовой операции выдавливания Set extrusionDef = entityExtr.GetDefinition ' получаем интерфейс свойств базовой операции выдавливания If Not extrusionDef Is Nothing Then extrusionDef.directionType = dtNormal ' направление выдавливания extrusionDef.SetSideParam True, etBlind, 20, 30, False extrusionDef.SetThinParam True, dtBoth, 10, 10 ' тонкая стенка в два направления extrusionDef.SetSketch entitySketch ' эскиз операции выдавливания entityExtr.Create ' создать операцию Set extrusionDef = Nothing ' освобождаем интерфейс End If Set entityExtr = Nothing ' освобождаем интерфейс End If Set entitySketch = Nothing ' освобождаем интерфейс End If ' Dim entityColl As Object ' интерфейс динамического массива 3D-объектов Set entityColl = part.EntityCollection(o3d_vertex) ' получаем массив вершин If Not entityColl Is Nothing And entityColl.GetCount > 2 Then ' Плоскость через три вершины Dim entityConstrPlane3Point As Object Set entityConstrPlane3Point = part.NewEntity(o3d_plane3Points) If Not entityConstrPlane3Point Is Nothing Then Dim constrPlane3Point As Object Set constrPlane3Point = entityConstrPlane3Point.GetDefinition If Not constrPlane3Point Is Nothing Then constrPlane3Point.SetPoint 1, entityColl.GetByIndex(0) constrPlane3Point.SetPoint 2, entityColl.GetByIndex(1) constrPlane3Point.SetPoint 3, entityColl.GetByIndex(2) entityConstrPlane3Point.Create Set constrPlane3Point = Nothing End If Set constrPlane3Point = Nothing End If iKompasObject.ksMessage "Плоскость через три вершины" Set entityColl = Nothing ' освобождаем интерфейс End If Set part = Nothing ' освобождаем интерфейс End If End Sub ' ExternalRunCommand Public Sub ExternalRunCommand(ByVal command As Integer, ByVal mode As Integer, ByVal Kompas As Object) Set iKompasObject = Kompas If iKompasObject Is Nothing Then Exit Sub End If Set iDocument3D = iKompasObject.ActiveDocument3D If iDocument3D Is Nothing Then Exit Sub End If Select Case command Case 1 ConstrAxisOperations ' Конструктивная ось операции Case 2 ConstrAxis2PointOrEdge (True) ' Конструктивная ось по двум точкам Case 3 ConstrAxis2PointOrEdge (False) ' Конструктивная ось, проходящая через ребро ' Case 4 ' ConstrAxisConeface ' Конструктивная ось конической грани Case 4 CreateConstrElem ' Создание смещенной плоскости, оси по двум плоскостям и плоскости под углом к заданной Case 5 constrPlane3Point ' Плоскость через три вершины End Select iKompasObject.ksMessageBoxResult End Sub