Архитекторам и проектировщикам
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить основные свойства объекта hatch

Как получить основные свойства объекта hatch

Ответ
Поиск в этой теме
Непрочитано 07.04.2021, 18:07 #1
Как получить основные свойства объекта hatch
Syranheli
 
Регистрация: 07.04.2021
Сообщений: 8

Я создаю скрипт на VBA, который экспортирует все данные с карты местности в json файл, что б потом отрисовать её в другом месте.
Столкнулся с проблемой объекта Hatch (AcadHatch).
Суть в том, что мне нужно экспортировать его, как и все другие объекты, но я понятия не имею как преобразовать паттерн и коррдинаты в простые объекты по типу линий, кругов, полилиний и т.п.
Возможно есть вариант замещения таких объектов другими на этапе редактирования файла в самом autocad
Просмотров: 1242
 
Непрочитано 07.04.2021, 18:52
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,363
Отправить сообщение для Александр Ривилис с помощью Skype™


Как вариант - расчленение штриховки.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 07.04.2021, 19:00
#3
Syranheli


 
Регистрация: 07.04.2021
Сообщений: 8


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Как вариант - расчленение штриховки.
Это в vba или самом autocad?
Syranheli вне форума  
 
Непрочитано 07.04.2021, 19:03
#4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,363
Отправить сообщение для Александр Ривилис с помощью Skype™



Перед экспортом расчленяешь, затем экспортируешь, потом отменяешь расчленение.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 07.04.2021, 22:55
#5
Syranheli


 
Регистрация: 07.04.2021
Сообщений: 8


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Перед экспортом расчленяешь, затем экспортируешь, потом отменяешь расчленение.
А как расчленить?
Syranheli вне форума  
 
Непрочитано 07.04.2021, 23:03
#6
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,363
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Syranheli Посмотреть сообщение
А как расчленить?
На VBA это можно сделать только командными методами. Вообще же инструмент для этой задачи (VBA) далеко не самый лучший. На .NET было бы намного удобнее и проще.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 07.04.2021, 23:24
#7
Syranheli


 
Регистрация: 07.04.2021
Сообщений: 8


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
На VBA это можно сделать только командными методами. Вообще же инструмент для этой задачи (VBA) далеко не самый лучший. На .NET было бы намного удобнее и проще.
Под командными методами имеются консольные команды внутри оболочки Autocad?
Syranheli вне форума  
 
Непрочитано 08.04.2021, 08:07
#8
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 785


Насколько я понимаю, на VBA можно перебрать объекты, которые составляют контуры штриховки через object.GetLoopAt, потом нужно определять тип этих объектов и каждый из этих объектов сохранить отдельно в файл, в зависимости от типа.
НО, это очень неправильный и тормозной путь. Границы штриховки могут составлять очень разные объекты, это приведет к грандиозным и ненужным затратам труда.

Есть куча возможностей стандартного экспорта-импорта чертежа, проще нужную часть объектов сохранить в dxf, а потом вставить их импортом там, где нужно (dxf то наверняка любая программа поддерживает).
nickname2019 на форуме  
 
Автор темы   Непрочитано 08.04.2021, 12:04
#9
Syranheli


 
Регистрация: 07.04.2021
Сообщений: 8


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Насколько я понимаю, на VBA можно перебрать объекты, которые составляют контуры штриховки через object.GetLoopAt, потом нужно определять тип этих объектов и каждый из этих объектов сохранить отдельно в файл, в зависимости от типа.
НО, это очень неправильный и тормозной путь. Границы штриховки могут составлять очень разные объекты, это приведет к грандиозным и ненужным затратам труда.

Есть куча возможностей стандартного экспорта-импорта чертежа, проще нужную часть объектов сохранить в dxf, а потом вставить их импортом там, где нужно (dxf то наверняка любая программа поддерживает).
У вас на примете есть какая-нибудь библиотека для js, которая парсит dxf? Я уже перепробовал несколько, но все они игнорируют объект hatch даже если в документации указано обратное

----- добавлено через ~14 мин. -----
Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Перед экспортом расчленяешь, затем экспортируешь, потом отменяешь расчленение.
Я пришёл к выводу, что могу расчленять (EXPLODE) некоторые hatch, но если их pattern name SOLID то расчленению не поддаются. Но мне всё ещё нужно как-то получить их основные свойства для отрисовки. Есть идеи как это сделать?
Syranheli вне форума  
 
Непрочитано 08.04.2021, 12:38
#10
Петр-и-Алекс


 
Регистрация: 18.01.2021
Сообщений: 175


"На VBA это можно сделать только командными методами. Вообще же инструмент для этой задачи (VBA) далеко не самый лучший. На .NET было бы намного удобнее и проще."
если это выльется в перекомпиляцию решений под каждую версию КАД, то лично я попробовал бы встроить код на lisp
А хоть бы и путем передачи инфы поколхозному, через внешний файл...
Чесслово, постарался б избежать компилированных файлов.
И вообще, vba в акаде упорно душат. Есть ли смысл писать новое под АКАД на vba?
ЛИСП форева!
__________________
Если не видите ответа на заданный мне вопрос, то это не значит, что я не отвечал...
Петр-и-Алекс вне форума  
 
Автор темы   Непрочитано 08.04.2021, 12:54
#11
Syranheli


 
Регистрация: 07.04.2021
Сообщений: 8


Цитата:
Сообщение от Петр-и-Алекс Посмотреть сообщение
"На VBA это можно сделать только командными методами. Вообще же инструмент для этой задачи (VBA) далеко не самый лучший. На .NET было бы намного удобнее и проще."
если это выльется в перекомпиляцию решений под каждую версию КАД, то лично я попробовал бы встроить код на lisp
А хоть бы и путем передачи инфы поколхозному, через внешний файл...
Чесслово, постарался б избежать компилированных файлов.
И вообще, vba в акаде упорно душат. Есть ли смысл писать новое под АКАД на vba?
ЛИСП форева!
При всём уважении к лисп, но я не знаю этого языка и не особо горю желанием в нём разбиратья после того, как увидел "мини скрипты" написанные на нём. Сейчас у меня несколько вариантов развития:
- GetLoopAt (отброшен, т.к. судя по всему не будет работать со сплошной заливкой)
- Переписать код на .net (сейчас работаю над этим)
- Пересохранять карты в dxf формат (пока отброшен, я не смог найти библиотеку, которая бы доставала hatch объекты из карты)
- Расчленение hatch объектов перед эскортом (частично рабочий, но не может расчленять hatch с SOLID заливкой)
Syranheli вне форума  
 
Непрочитано 08.04.2021, 16:56
#12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 9,127


Offtop:
Цитата:
Сообщение от Петр-и-Алекс Посмотреть сообщение
если это выльется в перекомпиляцию решений под каждую версию КАД
Даже ручками при нормально написанном коде - дело пары минут: удалить ссылки на старые сборки акада, добавить ссылки на новые сборки и снять атрибут копирования в выходную папку в свойствах сборок. Если есть экспортирование функций или иные зависимости от версии - условная компиляция в помощь: раз в год можно добавить несколько новых строк в исходный текст программы - это не так страшно, как кажется) Тем более нет никаких гарантий в 100% работоспособности лиспов/VBA-проектов без "напильника" в следующих версиях программы.
Сергей812 вне форума  
 
Непрочитано 08.04.2021, 17:10
#13
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,363
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Syranheli Посмотреть сообщение
Я пришёл к выводу, что могу расчленять (EXPLODE) некоторые hatch, но если их pattern name SOLID то расчленению не поддаются. Но мне всё ещё нужно как-то получить их основные свойства для отрисовки. Есть идеи как это сделать?
Вопрос упирается в то, что считать основными свойствами. Если контур штриховки, то Hatch.NumberOfLoops и Hatch.GetLoopAt должны помочь. В документации есть пример их использования.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от Syranheli Посмотреть сообщение
- GetLoopAt (отброшен, т.к. судя по всему не будет работать со сплошной заливкой)
Это почему? GetLoopAt возвращает контур штриховки, а контур есть и у SOLID-штриховки.

----- добавлено через ~6 мин. -----
Цитата:
Сообщение от Syranheli Посмотреть сообщение
- Переписать код на .net (сейчас работаю над этим)
Только учти, что в этом случае нужно использовать не COM/ActiveX модель AutoCAD (никакого преимущества по сравнению с VBA не будет), а AutoCAD .NET API.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 08.04.2021, 17:50
#14
Syranheli


 
Регистрация: 07.04.2021
Сообщений: 8


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Вопрос упирается в то, что считать основными свойствами. Если контур штриховки, то Hatch.NumberOfLoops и Hatch.GetLoopAt должны помочь. В документации есть пример их использования.

----- добавлено через ~4 мин. -----

Это почему? GetLoopAt возвращает контур штриховки, а контур есть и у SOLID-штриховки.

----- добавлено через ~6 мин. -----

Только учти, что в этом случае нужно использовать не COM/ActiveX модель AutoCAD (никакого преимущества по сравнению с VBA не будет), а AutoCAD .NET API.
У меня сейчас нет конкретных требований к основным свойствам, но в идеали - это просто разбиение штриховки на простые элементы, с которыми я уже умею работать (линии, круги, прямоугольники и т.п.), получить их заливки (если есть), координаты и т.п.

По поводу GetLoopAt видимо нужно более подробно поизучать, потому что всё что я пытался это что-то типа
Код:
[Выделить все]
Dim test as Variant
Dim testIndex as Long
testIndex = 0
hatchObj.GetLoopAt testIndex, test
и просто смотрел, что у меня в тесте, а там всегда пусто.

В .net проекте использую NuGet пакет AutoCAD.ObjectARX.2016 (ObjectARX .NET libraries for AutoCAD 2016, 2017)
Syranheli вне форума  
 
Непрочитано 08.04.2021, 18:27
#15
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 785


Цитата:
Сообщение от Syranheli Посмотреть сообщение
У вас на примете есть какая-нибудь библиотека для js, которая парсит dxf? Я уже перепробовал несколько, но все они игнорируют объект hatch даже если в документации указано обратное
К сожалению - нет, я никогда не парсил dxf.
Возможно, что пересохранение в dxf нужно выполнять в более "древних" версиях dxf, может быть библиотека новые версии dxf некорректно обрабатывает.

Использование VBA через Hatch.NumberOfLoops и Hatch.GetLoopAt при наличии большого количества объектов может вызвать такие тормоза на этапе выполнения, что практическое использование кода будет проблематичным.
nickname2019 на форуме  
 
Автор темы   Непрочитано 09.04.2021, 11:05
#16
Syranheli


 
Регистрация: 07.04.2021
Сообщений: 8


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Возможно, что пересохранение в dxf нужно выполнять в более "древних" версиях dxf, может быть библиотека новые версии dxf некорректно обрабатывает.
Пробовал, ничего не выходило
Syranheli вне форума  
 
Непрочитано 09.04.2021, 11:18
#17
trir


 
Регистрация: 18.12.2010
Сообщений: 4,438


Цитата:
Возможно есть вариант замещения таких объектов другими на этапе редактирования файла в самом autocad
mpolygon

Цитата:
Я создаю скрипт на VBA, который экспортирует все данные с карты местности в json файл
а чем _mapexport не устраивает?
и вообще gdal умеет dwg https://gis.stackexchange.com/questi...-one-per-layer

Цитата:
В .net проекте использую NuGet пакет AutoCAD.ObjectARX.2016 (ObjectARX .NET libraries for AutoCAD 2016, 2017)
лучше использовать https://www.nuget.org/packages/AutoCAD.NET/

Последний раз редактировалось trir, 09.04.2021 в 11:23.
trir на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить основные свойства объекта hatch

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить свойства отдельно взятого объекта в VBA? penb Программирование 11 01.08.2011 12:24
Archicad. Какой plugin показывает свойства объекта? stoper ArchiCAD 3 10.12.2010 14:18
Как получить свойства layout луки Программирование 2 23.06.2009 10:50
Как получить свойства 3dSolid Box в VB... 99garry Программирование 8 22.06.2009 20:58
Можно ли получить список реакторов объекта? kos Программирование 1 13.01.2005 13:28