2011-01-06 3 views
1

Я работаю в AutoCAD, используя API-интерфейс ObjectARX .Net. Есть ли способ создать текст, используя строки/кривые/полилинии, или взорвать существующий текстовый объект в строки/ect? Предпочитаемый я хотел бы иметь возможность генерировать linework на основе exsiting стиля текста AutoCAD.Создать Linework/Geometry с использованием стиля текста в AutoCAD

Редактировать: Мне удалось найти источник для команды TxtExp here. Однако его в AutoCADs собственный язык Lisp, и я не могу сделать его головами или хвостами.

Редактировать: Если посмотреть на источник TxtExp, он просто экспортирует текст как файл WMF, а затем импортирует его. Unfourtunatly, не существует .NET API для импорта и экспорта файлов WMF, поэтому я не могу использовать этот метод для этого.

ответ

0

Я просто сделал быстрый поиск на странице обсуждения Autodesk, так как я даже не был уверен, можно ли взорвать текст. Я нашел сообщение this и попробовал его в AutoCad 2010. Он взорвал текст в виде двухмерных полилиний.

Я провел поиск here ad в .Net Обсуждения и ничего не нашел. Возможно, вы могли бы использовать ActiveDocument.SendCommand() для его выполнения.

Я знаю, что это не отвечает на ваш вопрос, но, возможно, это заставит вас двигаться. Повеселись!

+0

Да, я не могу использовать команду TxtExp, в основном потому, что я делаю все за кадром. Хотя TxtExp является частью дополнения Express Tools, он дает мне надежду, что это можно сделать. Мне просто нужен источник! – Kratz

2

Вы пытались использовать AcGiWorldGeometry и AcGiWorldDraw? Я не использовал ObjectArx, но я использовал DwgDirect (теперь называемый Teigha для DWG), доступный от http://www.opendesign.com/), части которого предполагается быть своего рода клоном ObjectArx. Из того, что я могу сказать, кратко прочитав документы ObjectArx, кажется, что вы можете реализовать свой собственный объект AcGiWorldGeometry и передать его методу worldDraw вашего текста.

AcGiGeometry определяет много количества функций обратного вызова. Когда геометрия «втягивается» в объект «world draw», будут вызваны различные функции обратного вызова.

В способе, которым я использовал DwgDirect, вы можете переопределить некоторые обратные вызовы, в зависимости от того, как вы хотите получать результаты. По сути, вы бы использовали объект для захвата «векторизации» или «взрыва» геометрии (текст в вашем случае). В DwgDirect в простейшем случае я мог реализовать только функцию «полилинии». Любой элемент, когда «вынесенный» в конечном итоге разбивается на одну или несколько полилиний. В моем проекте, если бы я не хотел получать «круг», например, моя реализация обратного вызова «круг» состояла бы в том, чтобы просто вызвать базовую реализацию (или я бы не стал переопределять этот обратный вызов вообще - я не могу вспомнить). Это приведет к следующему уровню «упрощения», и мой callback-запрос «polygon» будет вызван. Затем я мог бы захватить круг как «поглаженный» многоугольник.

Существует также класс AcGiTextEngine, который может помочь. Обратите внимание, что его методы отмечены «только для внутреннего использования». Сказав это, существует метод tesellate (перегруженный), который, по-видимому, обеспечивает возможность поглаживания/разведения/tesellation. Из подписи кажется, что вы даете ему текстовый стиль, некоторый текст (строка) и «PolylineCallback», и, я думаю, он будет вызывать обратный вызов в соответствии с параметрами.

Прошу прощения, что у меня нет хорошего примера кода для вас, но проект, в котором я использовал DwgDirect, был давным-давно, и теперь у меня нет простого доступа к этому коду. Я не использовал ObjectArx напрямую, поэтому у меня также нет примеров этого кода.

Оглянувшись на мой ответ и присмотревшись к документации (которую я нашел здесь: http://docs.autodesk.com/ACDMAC/2011/ENU/ObjectARX%20Reference/index.html), похоже, что я смотрел документы C++.Я не знаю, существует ли эквивалентная функциональность в интерфейсе .NET.

[EDIT]

Согласно файлу справки, что я нашел здесь (http://www.codeproject.com/KB/dotnet/arxref.aspx), это выглядит есть подобные классы в. NET, которая может позволить вам попытаться сделать то, что я описал выше. Начните с WorldGeometry и WorldDraw, и вы сможете получить желаемый результат.

Удачи вам!

+0

Звучит так, как будто это сработает. Не похоже, что интерфейс .NET предоставляет достаточно классов и функциональных возможностей, необходимых для выполнения этой работы. Мне, возможно, придется сделать попытку сделать это на C++ и вызвать его из .Net. – Kratz