Похожие презентации:
Сложные составные объекты. Программирование в nanoCAD, .NET API. Модуль 2
1.
Программирование в nanoCAD, .NET APIМодуль 2
Сложные составные
объекты
2.
Рассматриваемые вопросы1. Блоки с точки зрения программиста
2. Полилинии и сети с точки зрения программиста
3. Размеры с точки зрения программиста
3.
Блоки1. Пользовательские блоки
2. Служебные блоки
Модель, листы
Представление размеров
Представление штриховок
Внешние ссылки
Имена служебных блоков начинаются с символа * (звездочка),
такие блоки не показывают диспетчер чертежа и команда INSERT.
4.
Определение и вставка блокаБлок состоит из двух объектов:
1. Неграфической части (Object), определения BlockTableRecord,
2. Графической части (Entity), вставки BlockReference.
Определения блоков расположены в таблице блоков BlockTable.
Вставки блоков, как и любые другие примитивы, содержатся в
других блоках, например, в служебном блоке *Model_Space.
5.
Привычные команды и блокиBLOCK. Создает определение блока из примитивов, удаляет их,
вместо них добавляет в базу данных чертежа вставку блока.
INSERT существующего блока добавляет в базу данных чертежа
вставку блока.
INSERT блока из внешнего файла, создает определение блока,
имя которого задается по имени вставляемого файла,
содержимым определения блока становится *Model_Space
внешнего файла. Далее вставка идет по пути «блок существует».
COPY. При копировании вставки блок, копируется только вставка
блока, новая вставка ссылается на то же определение, что и
исходный блок.
PURGE. Удаляет определения блоков, если у них нет вставок.
6.
Таблица блоковКласс BlockTable – наследник IEnumerable.
Алгоритм перебора таблицы блоков:
1. Получить ObjectId таблицы блоков Database.BlockTableId.
2. Открыть объект BlockTable на чтение
Transaction.GetObject().
3. Перебрать элементы при помощи оператора foreach.
Переменная BlockTableRecord.Name содержит имя блока.
Переменная BlockTableRecord.Handle.Value содержит
значение Handle.
Упражнение (TODO 2.1.1 Blocks.cs): Доработать команду
HelloBlockTable, вывести в командную строку список всех блоков
чертежа и их handle.
7.
Вставка блока из внешнего файлаАлгоритм вставки блока:
1. Создать базу данных исходного чертежа, для чего создать объект
Database, загрузить в него исходный файл при помощи
Database.ReadDwgFile().
2. В результирующей базе данных вызвать метод
Database.Insert(), указав имена исходного и результирующего
блоков.
3. Удалить из памяти исходную базу данных, вызвав Dispose().
Упражнение (TODO 2.1.2 Blocks.cs): Доработать команду
HelloInsertBlock, которая запрашивает у пользователя имя файла
и вставляет его блок *Model_Space в текущий чертёж как новый блок.
Результат можно проверить с помощью команды HelloBlockTable.
8.
Перебор содержимого блокаКласс BlockTableRecord – наследник IEnumerable.
Алгоритм:
1. Перебрать ObjectId объектов блока при помощи оператора
foreach.
2. Открыть объект при помощи Transaction.GetObject()
Команда HelloBlockIterator перебирает блок *Model_Space
выводит в командную строку тип и handle объектов.
Упражнение (TODO 2.1.3 Blocks.cs): Доработать команду
HelloBlockIterator, добавить запрос имени блока у
пользователя и вывести тип и Handle объектов .
9.
АтрибутыАтрибут – примитив AttributeDefinition, как и другие
примитивы, добавляется в определение блока при его создании
(или редактировании, программном или при помощи команды
BEDIT).
При вставке блока, атрибуты превращаются в примитивы
AttributeReference и наполняются конкретными значениями,
своими для каждой вставки.
Получить доступ к коллекции атрибутов можно при помощи
свойства BlockReference.AttributeCollection.
AttributeCollection – это коллекция ObjectId примитивов
AttributeReference.
10.
Перебор атрибутовКласс AttributeCollection – наследник IEnumerable.
Упражнение (TODO 2.1.4):
Доработать команду HelloBlockAttributes, которая выводит в
командную строку значения атрибутов выбранного блока.
attRef.Tag - тэг(название) атрибута
attRef.TextString – значение атрибута
Подсказка: Для выбора одного примитива удобней использовать
Editor.GetEntity() вместо Editor.GetSelection().
11.
Виды полилинийPolyline, 2D полилиния, один объект, содержащий точки.
Polyline3d, 3D полилиния, каждая точка представлена отдельным
объектом PolylineVertex3d.
«Старая» 2D полилиния Polyline2d, устроена так же, как и Polyline3d.
Но заменена на Polyline по соображениям производительности.
В AutoCAD создание и преобразование старых полилиний в новые
управляется системной переменной PLINETYPE.
В nanoCAD 20 (и более ранних версиях) значение PLINETYPE не
учитывается, полилинии открываются как есть без преобразования,
создаются всегда примитивы типа Polyline.
12.
Полилинии. Упражнения (Polylines.cs)Упражнение(TODO 2.2.1): Доработать команду HelloPolylineDump,
вывести в командную строку список узлов 2D полилинии. Перед
выполнением команды создать 2D полилинию вручную командой
PLINE.
Упражнение (TODO 2.2.2): Доработать команду HelloPline, добавить
2D полилинию в чертёж программно, запросив у пользователя
несколько точек.
Упражнение (TODO 2.2.3): Создать 3D полилинию вручную командой
3DPOLY. Доработать команду HelloPolyline3dDump, вывести в
командную строку список узлов 3D полилинии.
Упражнение (TODO 2.2.4): Доработать команду Hello3DPoly, добавить
3D полилинию в чертеж программно, запросив у пользователя
несколько точек.
13.
Сети1. SubDMesh – один объект,
реализация метода Catmull-Clark Subdivision Surface
Команда: 3D, сфера, тор и т.п.
2. PolygonMesh – регулярная сеть, множество связанных
объектов-вершин, как в 3D полилинии
Команда: 3DMESH
3. PolyfaceMesh – нерегулярная сеть, множество связанных
объектов-вершин, как в 3D полилинии
Команда: PFACE
14.
Размеры1. Стили размеров DimStyleTableRecord расположены в
таблице DimStyleTable, которую можно получить при
помощи Database.DimStyleTableId.
2. Размер в чертеже ссылается на стиль размера.
3. Графика размера отображается при помощи служебного блока
«*Dxxx», где xxx – произвольное число.
15.
Стиль размера, системные переменныеОни же свойства класса DimStyleTableRecord
Они же свойства класса Database (переопределяют текущий
стиль)
Dimadec
Dimalt
Dimaltd
Dimaltf
Dimaltrnd
Dimalttd
Dimalttz
Dimaltu
Dimaltz
Dimapost
Dimasz
Dimatfit
Dimaunit
Dimazin
Dimblk
Dimblk1
Dimblk2
Dimcen
Dimclrd
Dimclre
Dimclrt
Dimdec
Dimdle
Dimdli
Dimdsep
Dimexe
Dimexo
Dimfrac
Dimgap
Dimjust
Dimldrblk
Dimlfac
Dimlim
Dimlunit
Dimlwd
Dimlwe
Dimpost
Dimrnd
Dimsah
Dimscale
Dimsd1
Dimsd2
Dimse1
Dimse2
Dimsoxd
Dimtad
Dimtdec
Dimtfac
Dimtih
Dimtix
Dimtm
Dimtmove
Dimtofl
Dimtoh
Dimtol
Dimtolj
Dimtp
Dimtsz
Dimtvp
Dimtxsty
Dimtxt
Dimtzin
Dimupt
Dimzin
Dimfxl
Dimfxlon
Dimjogang
Dimtfill
Dimtfillclr
Dimarcsym
Dimltype
…
16.
Размеры, упражнения (Dimensions.cs)Упражнение(TODO 2.3.1): Доработать
команду HelloDimStyle, установить в
стиле NewStandard, используя свойства
newDimStyleTableRecord :
1.
2.
Масштаб 1:1000
(переменная DIMSCALE),
Точность до целых
(переменная DIMDEC).
Внимание! При проверке размерного
стиля путем создания размеров
вручную, использовать AutoCADсовместимые команды создания
размеров DIMLINEAR, DIMALIGNED и
т.п. Эти команды не вынесены на
ленту/в меню.
17.
Размеры, упражненияУпражнение(TODO 2.3.2): Создать команду HelloRectDim,
создающую прямоугольник с размерами по двум соседним
сторонам.
1.
2.
3.
4.
Запросить угловые точки.
Создать объект Polyline в виде прямоугольника.
Создать объекты RotatedDimension зеленого цвета.
Сравнить вывод команды HelloBlockTable до и после запуска
команды HelloRectDim.
18.
РезюмеИзучены основы работы с блоками, полилиниями, размерами.
ВОПРОСЫ?
19.
БонусTODO B2.1 (Blocks.cs): Добавить в команду вставки блока
диалоговый запрос имени файла (FileOpenDialog).
TODO B2.2 (Polylines.cs): Добавить в команду создания полилинии
ключевое слово «Замкнуть» (с третьей точки).
TODO B2.3 (Dimensions.cs): Добавить в команду создания
размерного стиля проверку существования этого стиля.
TODO B2.4 (Dimensions.cs): Доработать команду HelloRectDim,
обеспечить создание размеров вне прямоугольника для любого
относительного положения первой и второй точки.
Программное обеспечение