Вопросы по Kompas API

Автор GkmSoft, 23.07.13, 13:51:10

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

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

GkmSoft

Здравствуйте!

Есть вопросы по Компас API.

1. Как узнать реальный размер листов чертежа?
Можно получать размеры листов, используя свойство Format интерфейса ILayoutSheet для каждого листа. Но для примера <Папка установки Компас 3-D>\Samples\Drawings\12020.cdw такой прием не проходит. Чертеж имеет размер 630 x 297 мм, тогда как согласно свойству Format — А4 (297 x 210 мм). Есть возможность использовать функцию GetObjParam для указателя на документ, передавая ей структуру SheetSize для данных и DOCUMENT_SIZE в качестве типа параметров, но это действие позволяет узнать размер только для первого листа чертежа.

2. Размеры штриховых линий чертежа.
При рисовании штриховой линии ее параметры можно получить посредством функции GetStyleParam, передав ей указатель на структуру CurveStyleParam. Из структуры можно узнать длины видимых и невидимых участков линии. Но в большинстве случаев свойство even у CurveStyleParam имеет значение 1 и длина штрихов определяется не массивом участков линий, а каким-то другим способом. Так вот, как в этом случае рассчитать длину участков линии?

3. Заливка.
Для получения примитивов чертежа я прохожу итератором по элементам каждого вида, которые разбиваю функцией DecomposeObj (с уровнем разбиения 5) и по полученным объектам снова прохожу итератором. В примере <Папка установки Компас 3-D>\Samples\Drawings\Raster.cdw на рисунок накладывается область с белой заливкой. Описанным выше способом я получаю ссылки сначала на объект RASTER_OBJ, а затем — сразу на объект COLORFILL_OBJ, при этом никаких других объектов, которые бы ограничивали область заливки, нет.

4. Растровые объекты.
В предыдущем пункте я описал способ получения элементов чертежа. Для объекта RASTER_OBJ функцией GetObjParam можно получить структуру RasterParam со свойствами рисунка. В ней содержатся данные о расположении объекта на чертеже, признак внедрения и имя файла (для чего оно нужно для внедренного объекта?). А как получить содержимое растрового объекта, внедренного в документ?

23.07.13, 18:32:01 #1 Последнее редактирование: 23.07.13, 19:39:30 от Sabahs
1. ILayoutSheets у коллекции получить оформление конкретного листа, далее получить размеры, в том числе и пользовательские.
Приколы работы с PDocumentParamW в которую входит SheetSize разбирал в этой теме http://forum.ascon.ru/index.php/topic,22593.0.html , хотя они Вам по идеи не должны понадобиться.

3. ksDuplicateBoundaries
+ Благодарностей: 1

KrissKross

По первому вопросу
Вы не дошли до кратности листа
ISheetFormat::FormatMultiplicity - Кратность формата листа.
+ Благодарностей: 1

IDrawingContainer.Rasters - получаем коллекцию растровых объектов, далее IRasters.Raster - растровый объект, заданный по индексу, у него куча свойств посмотрите в SDK, от него можно получить IBoundariesObject - интерфейс объекта с границами, далее IBoundariesObject.Boundaries - получаете копию границ в виде массива SAFEARRAY | VT_DISPATCH, если нужна.
По поводу содержимого нужно воспользоваться IRaster.FileName, скорее всего, если растр взят в документ, то здесь должно быть имя файла отображённого в память, но это Вам придётся проверить, т.е открываете, как обычный файл.




Администратор

Прошу создавать для каждого отдельного вопроса отдельную тему с ИНФОРМАТИВНЫМ названием.

Спасибо за понимание.
+ Благодарностей: 1