Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
developers:tutorial:customentity [2022/12/15 12:50] proxor [Команда вставки примитива на план] |
developers:tutorial:customentity [2022/12/15 13:14] (текущий) proxor [Контроллер пользовательского примитива.] |
||
---|---|---|---|
Строка 7: | Строка 7: | ||
Для создания пользовательского примитива необходимы следующие действия | Для создания пользовательского примитива необходимы следующие действия | ||
- Создание класса примитива, наследника от **DwgEntity** и связь его с чертежом и контроллером через атрибуты **DesignAliasAttribute** и **EntityControllerAttribute**. | - Создание класса примитива, наследника от **DwgEntity** и связь его с чертежом и контроллером через атрибуты **DesignAliasAttribute** и **EntityControllerAttribute**. | ||
- | - Создание класса контроллера примитива, наследника от DwgEntityController. Он служит для графического отображения на плане и 3D-виде | + | - Создание класса контроллера примитива, наследника от **DwgEntityController**. Он служит для графического отображения на плане и 3D-виде |
- Создание команды добавления примитива на план | - Создание команды добавления примитива на план | ||
Строка 17: | Строка 17: | ||
* Topomatic.Cad.View.dll - элемент управления для отображения слоёв моделей | * Topomatic.Cad.View.dll - элемент управления для отображения слоёв моделей | ||
* Topomatic.ComponentModel.dll – атрибуты свойств класса | * Topomatic.ComponentModel.dll – атрибуты свойств класса | ||
- | * Topomatic.Dwg.dll –классы элементов области рисования | + | * Topomatic.Dwg.dll – элементы области рисования |
* Topomatic.Dwg.Layer.dll – слои области рисования | * Topomatic.Dwg.Layer.dll – слои области рисования | ||
- | * Topomatic.Visualization.dll - классы элементов информационной модели | + | * Topomatic.Visualization.dll - элементы информационной модели |
==== Пользовательский примитив ==== | ==== Пользовательский примитив ==== | ||
Строка 441: | Строка 441: | ||
var e = (CustomDwgEntity)entity; | var e = (CustomDwgEntity)entity; | ||
var has_grips = false; | var has_grips = false; | ||
- | var drawing = e.Drawing; | + | var grip = new EntityGrip(((CadView)cadview), entity); |
- | var obj = e.TypedObject; | + | grip.Location = e.Position; |
- | var cadView = (CadView)cadview; | + | var z = e.Position.Z; |
- | foreach (var p in obj.GetAllProperties()) | + | grip.Move += delegate (Vector3D vertex) |
{ | { | ||
- | var grips = TypedPropertyManagerCollection.Current.GetGrips(cadView, drawing, obj, p, e.Matrix); | + | e.Position = new Vector3D(vertex.Pos, z); |
- | if (grips != null) | + | }; |
- | { | + | yield return grip; |
- | foreach (var tg in grips) | + | |
- | { | + | |
- | if (tg.Location.EqualsEps(e.Position)) | + | |
- | { | + | |
- | has_grips = true; | + | |
- | } | + | |
- | yield return tg; | + | |
- | } | + | |
- | } | + | |
- | } | + | |
- | if (!has_grips) | + | |
- | { | + | |
- | var grip = new EntityGrip(((CadView)cadview), entity); | + | |
- | grip.Location = e.Position; | + | |
- | var z = e.Position.Z; | + | |
- | grip.Move += delegate (Vector3D vertex) | + | |
- | { | + | |
- | e.Position = new Vector3D(vertex.Pos, z); | + | |
- | }; | + | |
- | yield return grip; | + | |
- | } | + | |
} | } | ||
| | ||
protected override void OnPaintEntity3d(DwgEntity entity, PaintEntityEventArgs args) | protected override void OnPaintEntity3d(DwgEntity entity, PaintEntityEventArgs args) | ||
+ | { | ||
+ | var e = (CustomDwgEntity)entity; | ||
+ | var dc = args.Pen.DeviceContext; | ||
+ | if (args.Pen.DeviceContext.gContains(e.Bounds3d)) | ||
{ | { | ||
- | var e = (CustomDwgEntity)entity; | + | var cache = e.GetCache(); |
- | var dc = args.Pen.DeviceContext; | + | if (cache != null) |
- | if (!e.HasCache3D) | + | |
{ | { | ||
- | if (dc.Simplify) | + | var pivot = dc.Pivot; |
+ | dc.Pivot = e.Position; | ||
+ | try | ||
{ | { | ||
- | dc.RequestRedraw(); | + | cache.Paint(dc); |
- | return; | + | |
} | } | ||
- | } | + | finally |
- | if (args.Pen.DeviceContext.gContains(e.Bounds3d)) | + | |
- | { | + | |
- | var cache = e.Cache; | + | |
- | if (cache != null) | + | |
{ | { | ||
- | var pivot = dc.Pivot; | + | dc.Pivot = pivot; |
- | dc.Pivot = e.Position; | + | |
- | try | + | |
- | { | + | |
- | cache.Paint(dc); | + | |
- | } | + | |
- | finally | + | |
- | { | + | |
- | dc.Pivot = pivot; | + | |
- | } | + | |
} | } | ||
} | } | ||
} | } | ||
+ | } | ||
public override double? Fire(DwgEntity entity, Ray3D ray) | public override double? Fire(DwgEntity entity, Ray3D ray) | ||
- | { | + | { |
- | var e = (CustomDwgEntity)entity; | + | var e = (CustomDwgEntity)entity; |
- | return e.Fire(ray); | + | return e.Fire(ray); |
- | } | + | } |
} | } | ||