Сообщество программистов Autodesk в СНГ
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Звонок в техподдержку Autodesk Forge
Начало
Сайт
Правила
Помощь
Поиск
Непрочитанные
Календарь
Вход
Регистрация
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
Переопределение привязок
« предыдущая тема
следующая тема »
Печать
Страницы:
1
[
2
]
Все
Вниз
Автор
Тема: Переопределение привязок (Прочитано 12844 раз)
0 Пользователей и 2 Гостей просматривают эту тему.
VitaliyB
ADN OPEN
Сообщений: 63
Карма: 2
Re: Переопределение привязок
«
Ответ #15 :
20-12-2022, 13:24:05 »
Добрый день! Опять ломаю голову. Код работает, почему-то отключается все привязки (как и должно быть) кроме привязок типа "пересечение". Пересечение работает везде, ко всем слоям. интересно, почему такое возникает?
Записан
Алексей Кулик
Administrator
Сообщений: 1116
Карма: 173
Re: Переопределение привязок
«
Ответ #16 :
20-12-2022, 15:54:48 »
А как снимается привязка? Я на лиспе знаю минимум 2 варианта. И это только если касаться OSMODE, забыв про 3DOSMODE
Записан
Все, что сказано - личное мнение.
Правила форума
существуют не просто так!
Приводя в сообщении код, не забывайте про его
форматирование
!
VitaliyB
ADN OPEN
Сообщений: 63
Карма: 2
Re: Переопределение привязок
«
Ответ #17 :
22-12-2022, 13:28:08 »
если я всё правильно понимаю (ответ в комментариях к коду):
Код - C#
[Выбрать]
public
class
ViborSnap
{
private
static
string
[
]
Layers
=
FiltrPerem
.
namelayerCreate
.
ToArray
(
)
;
private
static
OsOverrule _osOverrule
;
private
class
OsOverrule
:
OsnapOverrule
{
public
override
void
GetObjectSnapPoints
(
Entity ent,
ObjectSnapModes mode,
IntPtr gsm,
Point3d pick,
Point3d last,
Matrix3d view,
Point3dCollection snap,
IntegerCollection geomIds
)
{
if
(
IsApplicable
(
ent
)
)
return
;
base
.
GetObjectSnapPoints
(
ent, mode, gsm, pick, last, view, snap, geomIds
)
;
// ТУТ ПОЛУЧАЕМ ПАРАМЕТРЫ ТОЧКИ ПРИВЯЗКИ, MODE - ПАРАМЕТР ОБЪЕКТНОЙ ПРИВЯЗКИ
}
public
override
bool
IsContentSnappable
(
Entity entity
)
{
return
!
IsApplicable
(
entity
)
;
}
/// <inheritdoc />
public
override
bool
IsApplicable
(
RXObject overruledSubject
)
{
//ТУТ ПРОВЕРЯЕМ УДОВЛЕТВОРЯЕТ ЛИ ПРИМИТИВ УСЛОВИЯМ, ЧТОБЫ К НЕМУ ПРИВЯЗАТЬСЯ
return
base
.
IsApplicable
(
overruledSubject
)
&&
overruledSubject
is
Entity ent
&&
!
Layers
.
Any
(
x
=>
x
.
Equals
(
ent
.
Layer
, StringComparison
.
OrdinalIgnoreCase
)
)
;
}
}
private
static
void
ToggleOverruling
(
bool
on
)
{
if
(
on
)
{
if
(
_osOverrule
==
null
)
{
_osOverrule
=
new
OsOverrule
(
)
;
Overrule
.
AddOverrule
(
RXObject
.
GetClass
(
typeof
(
Entity
)
)
, _osOverrule,
false
)
;
}
Overrule
.
Overruling
=
true
;
}
else
{
if
(
_osOverrule
==
null
)
return
;
Overrule
.
RemoveOverrule
(
RXObject
.
GetClass
(
typeof
(
Entity
)
)
, _osOverrule
)
;
_osOverrule
.
Dispose
(
)
;
_osOverrule
=
null
;
}
}
[
CommandMethod
(
"ИгнорSnapSelection_On"
)
]
//ЭТОЙ КОМАНДОЙ СНИМАЕМ ПРИВЯЗКУ
public
static
void
DisableSnapping
(
)
{
Layers
=
FiltrPerem
.
namelayerCreate
.
ToArray
(
)
;
ToggleOverruling
(
true
)
;
}
[
CommandMethod
(
"ИгнорSnapSelection_Off"
)
]
public
static
void
EnableSnapping
(
)
{
ToggleOverruling
(
false
)
;
}
}
}
Записан
Печать
Страницы:
1
[
2
]
Все
Вверх
« предыдущая тема
следующая тема »
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
Переопределение привязок