Created
January 15, 2025 15:31
-
-
Save AlexandrDragunkin/f8960d6d363a656f92326b43cdbf6ebc to your computer and use it in GitHub Desktop.
Как посчитать реальную длину вырезов в мебельной панели в сцене к3 Реализация на основе модуля drawrof\mPanel.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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