Skip to content

Instantly share code, notes, and snippets.

@AlexandrDragunkin
Created January 15, 2025 15:31
Show Gist options
  • Save AlexandrDragunkin/f8960d6d363a656f92326b43cdbf6ebc to your computer and use it in GitHub Desktop.
Save AlexandrDragunkin/f8960d6d363a656f92326b43cdbf6ebc to your computer and use it in GitHub Desktop.
Как посчитать реальную длину вырезов в мебельной панели в сцене к3 Реализация на основе модуля drawrof\mPanel.py
# -*- coding: utf-8 -*-
from __future__ import annotations
__author__ = 'Aleksandr Dragunkin'
__created__= '15.01.2025'
__version__ = '0.1.00'
# -------------------------------------------------------------------------------
# Name: lencuts
# Purpose:
# Copyright: (c) GEOS 2012-2025
# Licence: FREE
# ------------------------------------------------------------------------------
from typing import Tuple
from drawprof import mPanel
import k3
def count():
"""Считает число выделенных объектов командами select или selbyattr.
Вместо k3.sysvar(61)"""
return int(k3.sysvar(61))
def selectobject() -> Tuple[k3.K3Obj]:
"""Список выделенных объектов командами select или selbyattr"""
if count():
return tuple([k3.getselnum(i) for i in range(1, count() + 1)])
return ()
def get_cuts_length(pan: k3.Group) -> Tuple[float, float]:
'''расчитать суммарную длину сквозных и глухих вырезов в панели
Args:
pan (k3.Group): Указатель на мебельную панель в сцене к3 мебель
Returns:
Tuple[float,float]: кортеж длин вырезов мм (глухие, сквозные)
'''
Panel = mPanel.PanelRectangle(holder=pan)
InfoPoly = Panel.getPanelPathInfo(Panel=pan, PathIn=0, IsCuts=False)
InfoPolyC = Panel.getPanelPathInfo(Panel=pan, PathIn=0, IsCuts=True)
sl = 0 # глухие
slt = 0 # сквозные
if InfoPoly.paths[0]:
slt = sum([sum([el.length for el in p.elems]) for p in InfoPoly.paths[1:]])
if InfoPolyC.paths:
sl = sum([sum([el.length for el in p.elems]) for p in InfoPolyC.paths])
return sl, slt
def main():
k3.fltrparamobj(1, 61)
try:
k3.select(k3.k_partly, k3.k_interact)
for pan in selectobject():
res = get_cuts_length(pan=pan)
print(
f"Панель UnitPos={int(k3.getattr(pan, 'UnitPos', -999))} длина вырезов:\n Глухие {res[0]}мм\n Cквозные {res[1]}мм"
)
finally:
k3.fltrparamobj(0)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment