Создание линий / геометрии с использованием стиля текста в AutoCAD - PullRequest
1 голос
/ 06 января 2011

Я работаю в AutoCAD, используя ObjectARX .Net API. Есть ли способ создать текст, используя линии / кривые / полилинии, или разбить существующий текстовый объект на линии / т.д.? Желательно, чтобы я мог иметь возможность создавать линейную работу на основе существующего стиля текста AutoCAD.

Редактировать: мне удалось найти источник для команды TxtExp здесь . Тем не менее, он написан на собственном языке Lisp в AutoCAD, и я не могу этого сделать.

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

Ответы [ 2 ]

2 голосов
/ 08 января 2011

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

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

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

Существует также класс 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 голосов
/ 07 января 2011

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

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

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

...