/
romost
/
flange
Обзор
Документация
Войти
/
romost
/
flange
Код
Запросы
0
Пакеты
0
Релизы
1
Аналитика
Безопасность
master
src/flange.lua
163 строки
6 KB
romost
add stud metalware
10 мар 2025, 21:49
10 мар 2025, 21:49
ae9326f
Код
Авторство
О чём код?
local function CreateHoles(flangeTable) local flangeThickness = flangeTable[4].value local betweenHolesDiameter = flangeTable[5].value local holesCount = flangeTable[6].value local holesDiameter = flangeTable[7].value local baseHole = CreateRightCircularCylinder(holesDiameter / 2, flangeThickness) local holes = {} local baseAngle = math.rad(360 / holesCount) local holesRadius = betweenHolesDiameter / 2 for i = 1, holesCount do local hole = baseHole:Clone() :Shift(holesRadius, 0, 0) :Rotate(CreateZAxis3D(), i * baseAngle) table.insert(holes, hole) end return Unite(holes) end local function ShiftSolidBySealingThickness (solid, sealingSurfaceTable) local sealingSurfaceType = sealingSurfaceTable[1].value if sealingSurfaceType ~= "typeA" then local sealingThickness = sealingSurfaceTable[2].value return solid:Shift(0, 0, -sealingThickness) else return solid end end function CreateFlangeSolidType01(flangeTable) local flangeDiameterOuter = flangeTable[2].value local flangeDiameterInner = flangeTable[3].value local flangeThickness = flangeTable[4].value return Subtract( CreateRightCircularCylinder(flangeDiameterOuter / 2, flangeThickness), Unite( CreateRightCircularCylinder(flangeDiameterInner / 2, flangeThickness), CreateHoles(flangeTable) ) ) end function CreateFlangeSolidType02(flangeTable, sealingSurfaceTable) local weldingRingDiameterOuter = flangeTable[8].value local weldingRingDiameterInner = flangeTable[9].value local weldingRingThickness = flangeTable[10].value local weldingRing = Subtract( CreateRightCircularCylinder(weldingRingDiameterOuter / 2, weldingRingThickness), CreateRightCircularCylinder(weldingRingDiameterInner / 2, weldingRingThickness) ):Shift(0, 0, -weldingRingThickness) ShiftSolidBySealingThickness(weldingRing, sealingSurfaceTable) return Unite( CreateFlangeSolidType01(flangeTable), weldingRing ) end function CreateFlangeSolidType03(flangeTable, sealingSurfaceTable) local flangeDiameterInner = flangeTable[3].value local sleeveDiameter = flangeTable[11].value local sleeveWallThickness = flangeTable[12].value local sleeveLength = flangeTable[13].value local sleeveSolid = Subtract( Unite( CreateRightCircularCylinder(sleeveDiameter / 2, sleeveWallThickness) :Shift(0, 0, -sleeveWallThickness), CreateRightCircularCylinder(flangeDiameterInner / 2, sleeveLength) ), CreateRightCircularCylinder(flangeDiameterInner / 2 - sleeveWallThickness, sleeveLength + sleeveWallThickness) :Shift(0, 0, -sleeveWallThickness) ) ShiftSolidBySealingThickness(sleeveSolid, sealingSurfaceTable) return Unite( CreateFlangeSolidType01(flangeTable), sleeveSolid ) end function CreateFlangeSolidType04(flangeTable, sealingSurfaceTable) local clampDiameterDocking = flangeTable[14].value local clampDiameterWideBase = flangeTable[15].value local clampDiameterOuter = flangeTable[16].value local clampWallThickness = flangeTable[17].value local clampDockingThickness = flangeTable[18].value local clampLengthStraightPart = flangeTable[19].value local clampLengthFull = flangeTable[20].value local clampSolid = Subtract( Unite({ CreateRightCircularCylinder(clampDiameterDocking / 2, clampDockingThickness) :Shift(0, 0, -clampDockingThickness), Loft( { CreateCircle2D(Point2D(0, 0), clampDiameterWideBase / 2), CreateCircle2D(Point2D(0, 0),clampDiameterOuter / 2) }, { Placement3D(Point3D(0, 0, 0), Vector3D(0, 0, 1), Vector3D(1, 0, 0)), Placement3D(Point3D(0, 0, clampLengthFull - (clampDockingThickness + clampLengthStraightPart)), Vector3D(0, 0, 1), Vector3D(1, 0, 0)) } ), CreateRightCircularCylinder(clampDiameterOuter / 2, clampLengthStraightPart) :Shift(0, 0, clampLengthFull - (clampDockingThickness + clampLengthStraightPart)), }), CreateRightCircularCylinder(clampDiameterOuter / 2 - clampWallThickness, clampLengthFull) :Shift(0, 0, -clampDockingThickness) ) ShiftSolidBySealingThickness(clampSolid, sealingSurfaceTable) return Unite( CreateFlangeSolidType01(flangeTable), clampSolid ) end function CreateFlangeSolidType11(flangeTable, sealingSurfaceTable) local flangeDiameterInner = flangeTable[3].value local flangeThickness = flangeTable[4].value local flangeDiameterWideBase = flangeTable[21].value local flangeDiameterStraightPart = flangeTable[22].value local flangeLengthStraightPart = flangeTable[23].value local flangeLengthFull = flangeTable[24].value local sealingThickness = sealingSurfaceTable[2].value return Unite( CreateFlangeSolidType01(flangeTable), Subtract( Unite( CreateRightCircularCylinder(flangeDiameterStraightPart / 2, flangeLengthStraightPart) :Shift(0, 0, flangeLengthFull - flangeLengthStraightPart - sealingThickness), Loft( { CreateCircle2D(Point2D(0, 0), flangeDiameterWideBase / 2), CreateCircle2D(Point2D(0, 0), flangeDiameterStraightPart / 2) }, { Placement3D(Point3D(0, 0, flangeThickness), Vector3D(0, 0, 1), Vector3D(1, 0, 0)), Placement3D(Point3D(0, 0, flangeLengthFull - flangeLengthStraightPart - sealingThickness), Vector3D(0, 0, 1), Vector3D(1, 0, 0)) } ) ), CreateRightCircularCylinder(flangeDiameterInner / 2, flangeLengthFull - flangeThickness - sealingThickness) :Shift(0, 0, flangeThickness) ) ) end function CreateRectangleSolid(flangeTable) local flangeThickness = flangeTable[4].value local flangeRectangleLength = flangeTable[26].value return Subtract( CreateBlock(flangeRectangleLength, flangeRectangleLength, flangeThickness) :Rotate(CreateZAxis3D(), math.rad(45)), CreateHoles(flangeTable) ) end