Измерение длин (периметра) нескольких кривых

Автор Vzlet, 29.08.17, 11:28:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Vzlet

Стоит задача, имея файл с множеством (более 2-х) кривых, вычислить общую длину данных объектов.
Инструмент, видимо, должен работать аналогично как "проверка замкнутости", но на базе оператора измерения длин.


Есть советы или готовое решение?

ТрындецЪ

Можно перебором всех геометрических объектов считать их длины, но где гарантии, что нет наложенных линий?

Дмитрий22


Vzlet

Цитата: ТрындецЪ от 29.08.17, 11:45:46
Можно перебором всех геометрических объектов считать их длины, но где гарантии, что нет наложенных линий?

Файлы поступают на анализ с гарантией отсутствия пересечений.
Как перебор со считыванием их длин в Макросе прописать не подскажите?

Николай

В прошлом году написал программу по расчёту центра давления штампа. Программа считает сумму всех длин всех контуров чертежа для определения длины реза. Для упрощения программы чертёж следует "сохранить как *ksf" и программа работает уже с ним, так как это- текстовый формат. Вот как-то так...

ТрындецЪ

Цитата: Vzlet от 07.09.17, 14:11:25
Файлы поступают на анализ с гарантией отсутствия пересечений.
Как перебор со считыванием их длин в Макросе прописать не подскажите?
Держите! Набросал на скорую руку, нужно тестировать.
# -*- coding: utf-8 -*-
# Измерение длины всех геометрических объектов
#http://forum.ascon.ru/index.php/topic,30673.msg242508.html#msg242508

import pythoncom
from win32com.client import Dispatch, gencache
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application

iDocument2D = kompas_object.ActiveDocument2D()
iDocument = application.ActiveDocument
iKompasDocument2D = kompas_api7_module.IKompasDocument2D(iDocument)
iKompasDocument2D1 = kompas_api7_module.IKompasDocument2D1(iKompasDocument2D)
iSelectionManager = iKompasDocument2D1.SelectionManager

iDocument2D.ksSelectGroup(0,2, 1E17, 1E17, 1E17, 1E17)
SelectedObjects  = iSelectionManager.SelectedObjects

L = 0
for obj in SelectedObjects:
    iDrawingObject = kompas_api7_module.IDrawingObjects(obj)
    iDrawingObject1 = kompas_api7_module.IDrawingObject1(iDrawingObject)

    if iDrawingObject1.IsCurve:
        iCurve2D = iDrawingObject1.GetCurve2D()
        Length = iCurve2D.Length
        L += Length
application.MessageBoxEx( u"Длина всех объектов равна: " + str(L)+ u" мм", u"<ТрындецЪ>", 0)
+ Благодарностей: 2

Vzlet

Спасибо за текстовку кода, но у меня она почему то не идет.  :`(
По результату выполнения даже сообщение не выдает, хотя это уж должно было сработать? Не наведете на здравую мысть в чем может быть дело?

ТрындецЪ

Цитата: Vzlet от 15.09.17, 06:53:41
Спасибо за текстовку кода, но у меня она почему то не идет.  :`(
По результату выполнения даже сообщение не выдает, хотя это уж должно было сработать? Не наведете на здравую мысть в чем может быть дело?
Нужно через отладчик ( IDLE (Python GUI), PySkripter и т.п. ) запускать и смотреть, на что ругается.