/
romost
/
flange
Обзор
Документация
Войти
/
romost
/
flange
Код
Запросы
0
Пакеты
0
Релизы
1
Аналитика
Безопасность
master
src/metalware.lua
181 строка
7 KB
romost
add stud metalware
10 мар 2025, 21:49
10 мар 2025, 21:49
ae9326f
Код
Авторство
О чём код?
--M10-M64 -> GOST R ISO 4014-2013 Accuracy class B --M72 -> GOST 10602-94 BOLTS_TABLE = { ["M10"] = {studDiameter = 10, turnkeySize = 16, headHeight = 6.4}, ["M12"] = {studDiameter = 12, turnkeySize = 18, headHeight = 7.5}, ["M16"] = {studDiameter = 16, turnkeySize = 24, headHeight = 10}, ["M20"] = {studDiameter = 20, turnkeySize = 30, headHeight = 12.5}, ["M24"] = {studDiameter = 24, turnkeySize = 36, headHeight = 15}, ["M27"] = {studDiameter = 27, turnkeySize = 41, headHeight = 17}, ["M30"] = {studDiameter = 30, turnkeySize = 46, headHeight = 18.7}, ["M33"] = {studDiameter = 33, turnkeySize = 50, headHeight = 21}, ["M36"] = {studDiameter = 36, turnkeySize = 55, headHeight = 22.7}, ["M39"] = {studDiameter = 39, turnkeySize = 50, headHeight = 25}, ["M42"] = {studDiameter = 42, turnkeySize = 65, headHeight = 26}, ["M45"] = {studDiameter = 45, turnkeySize = 70, headHeight = 28}, ["M48"] = {studDiameter = 48, turnkeySize = 75, headHeight = 30}, ["M52"] = {studDiameter = 52, turnkeySize = 80, headHeight = 33}, ["M56"] = {studDiameter = 56, turnkeySize = 85, headHeight = 35}, ["M64"] = {studDiameter = 64, turnkeySize = 95, headHeight = 40}, ["M72"] = {studDiameter = 72, turnkeySize = 105, headHeight = 45} } --GOST 5915-70 --GOST 10605-94 --DIN 934 1987-10 NUTS_TABLE = { ["M10"] = {turnkeySize = 16, headHeight = 8.4}, ["M12"] = {turnkeySize = 18, headHeight = 10.8}, ["M16"] = {turnkeySize = 24, headHeight = 14.8}, ["M20"] = {turnkeySize = 30, headHeight = 18}, ["M24"] = {turnkeySize = 36, headHeight = 21.5}, ["M27"] = {turnkeySize = 41, headHeight = 23.6}, ["M30"] = {turnkeySize = 46, headHeight = 25.6}, ["M33"] = {turnkeySize = 50, headHeight = 26}, ["M36"] = {turnkeySize = 55, headHeight = 31}, ["M39"] = {turnkeySize = 50, headHeight = 31}, ["M42"] = {turnkeySize = 65, headHeight = 34}, ["M45"] = {turnkeySize = 70, headHeight = 36}, ["M48"] = {turnkeySize = 75, headHeight = 38}, ["M52"] = {turnkeySize = 80, headHeight = 42}, ["M56"] = {turnkeySize = 85, headHeight = 45}, ["M64"] = {turnkeySize = 95, headHeight = 51}, ["M72"] = {turnkeySize = 105, headHeight = 58} } --GOST 11371-78 Accuracy class A --DIN 125B WASHER_TABLE = { ["M10"] = {diameterOuter = 20, thickness = 2}, ["M12"] = {diameterOuter = 24, thickness = 2.5}, ["M16"] = {diameterOuter = 30, thickness = 3}, ["M20"] = {diameterOuter = 37, thickness = 3}, ["M24"] = {diameterOuter = 44, thickness = 4}, ["M27"] = {diameterOuter = 50, thickness = 4}, ["M30"] = {diameterOuter = 56, thickness = 4}, ["M33"] = {diameterOuter = 60, thickness = 5}, ["M36"] = {diameterOuter = 66, thickness = 5}, ["M39"] = {diameterOuter = 72, thickness = 6}, ["M42"] = {diameterOuter = 78, thickness = 7}, ["M45"] = {diameterOuter = 85, thickness = 7}, ["M48"] = {diameterOuter = 92, thickness = 8}, ["M52"] = {diameterOuter = 98, thickness = 8}, ["M56"] = {diameterOuter = 105, thickness = 9}, ["M64"] = {diameterOuter = 115, thickness = 9}, ["M72"] = {diameterOuter = 125, thickness = 10} } local function Create3DHexagon(item) local x = item.turnkeySize / 2 local y = x / math.cos(math.pi / 6) local a = x * math.tan(math.pi / 6) return Extrude( CreatePolyline2D({ Point2D(0, y), Point2D(x, a), Point2D(x, -a), Point2D(0, -y), Point2D(-x, -a), Point2D(-x, a), Point2D(0, y) }), ExtrusionParameters(item.headHeight) ) end function CreateMetalwareBoltSolid(flangeTable, metalwareTable) local nominalDiameter = metalwareTable[3].value local bolt = BOLTS_TABLE[nominalDiameter] local washer = WASHER_TABLE[nominalDiameter] local nut = NUTS_TABLE[nominalDiameter] local boltsLength = metalwareTable[4].value local mountingDistance = metalwareTable[6].value local nutsCount = metalwareTable[7].value local flangeThickness = flangeTable[4].value local betweenHolesDiameter = flangeTable[5].value local metalwareCount = flangeTable[6].value local holesRadius = betweenHolesDiameter / 2 local boltSolid = Unite( Create3DHexagon(bolt) :Shift(0, 0, -bolt.headHeight), CreateRightCircularCylinder(bolt.studDiameter / 2, boltsLength) ):Shift(holesRadius, 0, 0) local washerSolid = CreateRightCircularCylinder(washer.diameterOuter / 2, washer.thickness) :Shift(holesRadius, 0, mountingDistance) local nutsParts = {} for i = 1, nutsCount do local nutSolid = Create3DHexagon(nut) :Shift(holesRadius, 0, mountingDistance + washer.thickness + (i - 1) * nut.headHeight) :Rotate(CreateZAxis3D():Shift(holesRadius, 0, 0), math.rad((i - 1) * 90)) table.insert(nutsParts, nutSolid) end local metalware = Unite({boltSolid, washerSolid, Unite(nutsParts)}) :Rotate(CreateXAxis3D(), math.rad(180)) :Shift(0, 0, flangeThickness) local metalwareParts = {} local baseAngle = math.rad(360 / metalwareCount) for i = 1, metalwareCount do local item = metalware:Clone() :Rotate(CreateZAxis3D(), i * baseAngle) table.insert(metalwareParts, item) end return Unite(metalwareParts) end function CreateMetalwareStudSolid(flangeTable, metalwareTable) local nominalDiameter = metalwareTable[3].value local stud = BOLTS_TABLE[nominalDiameter] local washer = WASHER_TABLE[nominalDiameter] local nut = NUTS_TABLE[nominalDiameter] local studLength = metalwareTable[5].value local mountingDistance = metalwareTable[6].value local nutsCount = metalwareTable[7].value local flangeThickness = flangeTable[4].value local betweenHolesDiameter = flangeTable[5].value local metalwareCount = flangeTable[6].value local holesRadius = betweenHolesDiameter / 2 local studSolid = CreateRightCircularCylinder(stud.studDiameter / 2, studLength) :Shift(holesRadius, 0, -1.25 * nutsCount * nut.headHeight) local washerSolid = CreateRightCircularCylinder(washer.diameterOuter / 2, washer.thickness) :Shift(holesRadius, 0, mountingDistance) local washerReversed = washerSolid:Clone() :Shift(0, 0, -mountingDistance - washer.thickness) local nutsParts = {washerSolid, washerReversed} for i = 1, nutsCount do local nutSolid = Create3DHexagon(nut) :Shift(holesRadius, 0, mountingDistance + washer.thickness + (i - 1) * nut.headHeight) :Rotate(CreateZAxis3D():Shift(holesRadius, 0, 0), math.rad((i - 1) * 90)) table.insert(nutsParts, nutSolid) local nutSolidReversed = Create3DHexagon(nut) :Shift(holesRadius, 0, -washer.thickness - i * nut.headHeight) :Rotate(CreateZAxis3D():Shift(holesRadius, 0, 0), math.rad((i - 1) * 90)) table.insert(nutsParts, nutSolidReversed) end local metalware = Unite({studSolid, Unite(nutsParts)}) :Rotate(CreateXAxis3D(), math.rad(180)) :Shift(0, 0, flangeThickness) local metalwareParts = {} local baseAngle = math.rad(360 / metalwareCount) for i = 1, metalwareCount do local item = metalware:Clone() :Rotate(CreateZAxis3D(), i * baseAngle) table.insert(metalwareParts, item) end return Unite(metalwareParts) end