• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Регистрация будет доступна с 8:00 (мск) 12 января.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Программно удалить в dxf-файле все окружности

Автор Warlock-72, 29.01.26, 11:53:53

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

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

Warlock-72

Добрый день.
Описание ситуации
Получаем путем экспорта из "некой САПР" файл в формате DFX. Образец такого файла прилагаю. Задача состоит в том, чтобы максимально быстро удалить в этом файле окружности, которые указаны на прилагаемом рисунке. Т.е. все окружности, расположенные в вершинах всех отрезков, имеющихся в файле.
Как делаю врукопашную? Открываю в КОМПАСе, выделяю эти окружности по свойствам - Выделить => По свойствам => Прочее => Стили линий (эти окружности всегда при экспорте получаются одним и тем же стилем линии) => выбираю нужный стиль => Применить, далее удаляю.
Хотелось бы  автоматизировать этот процесс, т.к. исходных dxf-файлов будет много.
Допускаю любое программное решение (программа, макрос и др.), требования к наличию интерфейса отсутствуют - хоть из командной строки вызывать...Удалить окружности.jpgНеверный ID вложения.

Soultaker

На C# я использовал NuGet библиотеку netDXF, когда писал прокси для листовых деталей и нужно было вторичное представление формировать из DXF файла разёртки.

p3452

Файл формата DXF, это текстовый файл!
Самый быстрый вариант - "пакетная обработка текстовых файлов"...
Но!
Надо уточнить (конкретизировать) понятие "эти окружности" :)

Warlock-72

Цитата: p3452 от 29.01.26, 14:00:55Надо уточнить (конкретизировать) понятие "эти окружности"
Конкретизирую - все окружности в файле.

lavgirb

Цитата: Warlock-72 от 29.01.26, 14:34:40Конкретизирую - все окружности в файле.
А там нет окружностей.
В автокаде это сегмент, во фрагменте КОМПАС это контур, похожий на овал.

Warlock-72

Цитата: lavgirb от 29.01.26, 14:46:23там нет окружностей
Я привел в качестве пояснения рисунок.
На нем не ясно какие из линий (сегментов, контуров и пр. термины) представляют собой окружности?

p3452

Все было-бы "очень просто", если бы "окружности" присутствовали - Ваш файл состоит ИСКЛЮЧИТЕЛЬНО из "полилиний"...
DXF-псевдоокружности.png

Проще всего, решить "задачу", выключением толщины линии перед сохранением в DXF...

Warlock-72

Цитата: p3452 от 29.01.26, 15:12:15Ваш файл состоит ИСКЛЮЧИТЕЛЬНО из "полилиний"
На прикрепленном рисунке приведено изображение из файла dxf, окрытого в КОМПАСе (в режиме "фрагмента") - на нем виден отрезок и 2 окружности.
Вы, я так понимаю, открываете в Автокаде - у нас такой возможности нет.

Цитата: p3452 от 29.01.26, 15:12:15Проще всего, решить "задачу", выключением толщины линии перед сохранением в DXF
Нет такой возможности при экспорте в dxf. Если бы это было можно, то и вопроса бы такого не возникло.

p3452

Цитата: Warlock-72 от 29.01.26, 15:50:06На прикрепленном рисунке приведено изображение из файла dxf, окрытого в КОМПАСе (в режиме "фрагмента") - на нем виден отрезок и 2 окружности.
Вы, я так понимаю, открываете в Автокаде - у нас такой возможности нет.
:-))) "Хрен, редьки, не слаще!"
В Компас Ваш файл состоит ИСКЛЮЧИТЕЛЬНО из "Контуров"!
(Нет никаких Окружностей, есть Контура в которые конвертировались автокадовские Полилинии)

p/s: Задача решаема, но нужна сложная "эвристика" для отбора НУЖНЫХ "полилиний", или "контуров"...


Warlock-72

Цитата: p3452 от 29.01.26, 15:56:26:-))) "Хрен, редьки, не слаще!"
В Компас Ваш файл состоит ИСКЛЮЧИТЕЛЬНО из "Контуров"!
(Нет никаких Окружностей, есть Контура в которые конвертировались автокадовские Полилинии)

Цитата: Warlock-72 от 29.01.26, 14:48:54Я привел в качестве пояснения рисунок.
На нем не ясно какие из линий (сегментов, контуров и пр. термины) представляют собой окружности?

-------------------------

Цитата: p3452 от 29.01.26, 15:56:26нужна сложная "эвристика" для отбора НУЖНЫХ "полилиний", или "контуров"

Цитата: Warlock-72 от 29.01.26, 11:53:53Как делаю врукопашную? Открываю в КОМПАСе, выделяю эти окружности по свойствам - Выделить => По свойствам => Прочее => Стили линий (эти окружности всегда при экспорте получаются одним и тем же стилем линии) => выбираю нужный стиль => Применить, далее удаляю.

Очень сложная "эвристика"...

Эвристика.jpg

p3452

С белыми "контурами" - нет проблем.
"Проблема" - в красных "контурах" - "стиль линии" для ВСЕХ одинаков...

Soultaker


Михаил88

#12
Я сейчас попробовал и сделал. Вроде все получается без проблем. С красными окружностями тоже проблем нету. А Вы можете еще скинуть несколько dxf для примера.
Пока сделал так. Запускаете на текущем открытом документе компас и программа удаляет все элементы, которые Вы указали на скриншоте.
+ Благодарностей: 1

p3452

Цитата: Михаил88 от 29.01.26, 16:59:16Я сейчас попробовал и сделал. Вроде все получается без проблем.
И, прямо-таки, "без проблем"?:
DXF-псевдоокружности1.png

Михаил88

Да.

kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
kompas_document_2d_1 = kompas_api7_module.IKompasDocument2D1(kompas_document_2d)
selection_manager = kompas_document_2d_1.SelectionManager

# Менеджер слоев и видов графического документа.
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
# Интерфейс коллекции видов графического документа.
views = views_and_layers_manager.Views
view = views.View(0)
drawing_container = kompas_api7_module.IDrawingContainer(view)
selection_manager.Select(drawing_container.Objects(kompas6_constants.ksAllObj))

application.ExecuteKompasCommand(kompas6_constants.ksCMDestroyMacro, False)

arcs = drawing_container.Objects(kompas6_constants.ksDrArc)
print(arcs)
if arcs:
    for arc in arcs:
        print(arc.Delete())
+ Благодарностей: 3

Kolos

Проблем, не вижу - помогать не буду.
Причины, Вы знаете или догадываетесь.

Михаил88


Kolos

#17
Цитата: Михаил88 от 29.01.26, 19:29:48...
Долго, особенно тут, удалять нечего, да и много лишних движений.


p3452

Михаил88, отличный вариант (хотя и является решением ДРУГОЙ задачи) - надеюсь ТС такой вариант устроит...

Михаил88

if arcs:
    kompas_document_1 = kompas_api7_module.IKompasDocument1(kompas_document)
    kompas_document_1.Delete(arcs)

Вот так удаление переписал. Можно без цикла обойтись.
с циклом затраченное время:  2.4866373538970947
после того , как убрал цикл затраченное время:  1.0121595859527588
+ Благодарностей: 2