Сообщество программистов Autodesk в СНГ
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Образовательный курс по платформе Autodesk Forge.
Начало
Сайт
Правила
Помощь
Поиск
Непрочитанные
Календарь
Вход
Регистрация
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
Изменение параметра динамического блока в новом открытом документе?
« предыдущая тема
следующая тема »
Печать
Страницы: [
1
]
2
3
Все
Вниз
Автор
Тема: Изменение параметра динамического блока в новом открытом документе? (Прочитано 19620 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Вильдар
ADN Club
Сообщений: 409
Карма: 77
Skype:
Изменение параметра динамического блока в новом открытом документе?
«
:
23-01-2016, 11:19:20 »
Добрый день всем.
Некорректное поведение дин блока при изменении его параметра, если это выполняется в новом открытом документе.
Тестовый пример:
Код - C#
[Выбрать]
[
CommandMethod
(
"Test"
, CommandFlags
.
Session
)
]
public
void
Test
(
)
{
// Блокировка текущего документа
using
(
Application
.
DocumentManager
.
MdiActiveDocument
.
LockDocument
(
)
)
{
// Открытие тестового документа
string
testFile
=
@"c:\test\test.dwg"
;
Document doc
=
Application
.
DocumentManager
.
Open
(
testFile,
false
)
;
// Блокировка открытого документа
using
(
doc
.
LockDocument
(
)
)
{
Database db
=
doc
.
Database
;
using
(
var t
=
db
.
TransactionManager
.
StartTransaction
(
)
)
{
var bt
=
db
.
BlockTableId
.
GetObject
(
OpenMode
.
ForRead
)
as
BlockTable
;
var ms
=
bt
[
BlockTableRecord
.
ModelSpace
]
.
GetObject
(
OpenMode
.
ForWrite
)
as
BlockTableRecord
;
// Вставка дин блока в модель
BlockReference blRefTest
=
new
BlockReference
(
Point3d
.
Origin
, bt
[
"test"
]
)
;
ms
.
AppendEntity
(
blRefTest
)
;
t
.
AddNewlyCreatedDBObject
(
blRefTest,
true
)
;
// Изменение дин параметра Длины
setDynParam
(
blRefTest
)
;
t
.
Commit
(
)
;
}
}
}
}
private
void
setDynParam
(
BlockReference blRefSecHor
)
{
foreach
(
DynamicBlockReferenceProperty prop
in
blRefSecHor
.
DynamicBlockReferencePropertyCollection
)
{
if
(
prop
.
PropertyName
==
"Длина"
)
{
prop
.
Value
=
6000d
;
return
;
}
}
}
Результат на первой картинке. А должно быть как на второй.
Ассоциативная штриховка не обновилась.
Записан
Александр Пекшев aka Modis
ADN Club
Сообщений: 1658
Карма: 366
Отец modplus.org
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #1 :
23-01-2016, 11:26:36 »
Могу предположить, что сам блок сделан неверно. Ассоциативность в автокаде, лично для меня, вещь не надежная - стараюсь ей не пользоваться (особенно касается размеров)
Скорее всего в блоке в параметр растяжения нужно добавить и штриховку тоже. ИМХО
Записан
+1/-0 к карме за данное сообщение
ModPlus
Блог
Вильдар
ADN Club
Сообщений: 409
Карма: 77
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #2 :
23-01-2016, 11:41:28 »
Если не открывать новый документ, а выполнить изм дин параметра блока в текущем документе, то все норм.
modis
, а можешь изменить блок в файле примера test.dwg. Что-то у меня сейчас не получается растягивать штриховку параметром растяжения, а не ассоциативностью, почему-то вся штриховка сдвигается, а не растягивается
Записан
Александр Пекшев aka Modis
ADN Club
Сообщений: 1658
Карма: 366
Отец modplus.org
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #3 :
23-01-2016, 11:49:31 »
Попробуй с этим блоком
Я никогда не делал штриховку в блоке. Как ни странно для меня, но ассоциативность пришлось оставить
Записан
ModPlus
Блог
Вильдар
ADN Club
Сообщений: 409
Карма: 77
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #4 :
23-01-2016, 11:53:42 »
Не. Вот что получается - вся штриховка сдвигается.
Странно, раньше мы, вроде, делали растяжение штриховки линейным параметром (без ассоциативности), тоже все работало
Записан
Александр Пекшев aka Modis
ADN Club
Сообщений: 1658
Карма: 366
Отец modplus.org
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #5 :
23-01-2016, 11:55:25 »
Ну не программно если - блок у вас правильно работает?
Еще эту тему посмотрите -
http://adn-cis.org/forum/index.php?topic=3348.0
Записан
+1/-0 к карме за данное сообщение
ModPlus
Блог
Вильдар
ADN Club
Сообщений: 409
Карма: 77
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #6 :
23-01-2016, 12:19:30 »
Да, непрограммно, правильно работает блок (с ассоциативной штриховкой).
Еще один момент заметил в рабочем варианте.
При копировании блоков с помощью WblockCloneObjects, ассоциативность штриховки в дин блоке пропадает.
Ошибся. WblockCloneObjects тут не причем. какая-то другая причина.
«
Последнее редактирование: 23-01-2016, 14:50:19 от vildar82
»
Записан
Александр Пекшев aka Modis
ADN Club
Сообщений: 1658
Карма: 366
Отец modplus.org
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #7 :
23-01-2016, 12:27:00 »
Значит придется вам ассоциативность штриховки "восстанавливать". Вот нашел по теме
http://www.acadnetwork.com/index.php?topic=259.0
Но самый лучший вариант - убрать ее нафиг из блока! ИМХО
Записан
+1/-0 к карме за данное сообщение
ModPlus
Блог
Вильдар
ADN Club
Сообщений: 409
Карма: 77
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #8 :
23-01-2016, 12:30:49 »
Да, пока тоже думаю создавать штриховку программно.
Записан
Александр Ривилис
Administrator
Сообщений: 13882
Карма: 1787
Рыцарь ObjectARX
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #9 :
23-01-2016, 14:45:44 »
Не проверял, но попробуй переключать
HostApplicationServices.WorkingDatabase на открытую базу данных до манипуляций с ней, а затем возвращать обратно.
Записан
Не забывайте про правильное
Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился
правильный ответ
, то не забудьте про кнопку
Решение
Вильдар
ADN Club
Сообщений: 409
Карма: 77
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #10 :
23-01-2016, 14:49:27 »
Не помогает.
Записан
Александр Ривилис
Administrator
Сообщений: 13882
Карма: 1787
Рыцарь ObjectARX
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #11 :
23-01-2016, 15:08:34 »
Глянь. Что-то не так?
Код немного порихтовал. Что именно приводит к другому поведению не выяснял.
Код - C#
[Выбрать]
[
CommandMethod
(
"Test"
, CommandFlags
.
Session
)
]
public
void
Test
(
)
{
// Открытие тестового документа
string
testFile
=
@"c:\test\test.dwg"
;
Document doc
=
Application
.
DocumentManager
.
Open
(
testFile,
false
)
;
Database db
=
doc
.
Database
;
Database dbold
=
HostApplicationServices
.
WorkingDatabase
;
HostApplicationServices
.
WorkingDatabase
=
db
;
// Блокировка открытого документа
using
(
doc
.
LockDocument
(
)
)
{
ObjectId id
=
ObjectId
.
Null
;
using
(
var t1
=
db
.
TransactionManager
.
StartTransaction
(
)
)
{
var bt
=
db
.
BlockTableId
.
GetObject
(
OpenMode
.
ForRead
)
as
BlockTable
;
var ms
=
bt
[
BlockTableRecord
.
ModelSpace
]
.
GetObject
(
OpenMode
.
ForWrite
)
as
BlockTableRecord
;
// Вставка дин блока в модель
BlockReference blRefTest
=
new
BlockReference
(
Point3d
.
Origin
, bt
[
"test"
]
)
;
id
=
ms
.
AppendEntity
(
blRefTest
)
;
t1
.
AddNewlyCreatedDBObject
(
blRefTest,
true
)
;
t1
.
Commit
(
)
;
}
using
(
var t2
=
db
.
TransactionManager
.
StartTransaction
(
)
)
{
BlockReference blRefTest
=
id
.
GetObject
(
OpenMode
.
ForWrite
)
as
BlockReference
;
// Изменение дин параметра Длины
setDynParam
(
blRefTest
)
;
t2
.
Commit
(
)
;
}
}
HostApplicationServices
.
WorkingDatabase
=
dbold
;
}
private
void
setDynParam
(
BlockReference blRefSecHor
)
{
foreach
(
DynamicBlockReferenceProperty prop
in
blRefSecHor
.
DynamicBlockReferencePropertyCollection
)
{
if
(
prop
.
PropertyName
==
"Длина"
)
{
prop
.
Value
=
6000d
;
return
;
}
}
}
Проверял в AutoCAD 2015 x64 SP2
Записан
+1/-0 к карме за данное сообщение
Не забывайте про правильное
Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился
правильный ответ
, то не забудьте про кнопку
Решение
Вильдар
ADN Club
Сообщений: 409
Карма: 77
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #12 :
23-01-2016, 15:29:21 »
Спасибо! Скопировал. Попробовал, но у меня тоже самое (.
Попробовал заснять.
AutoCAD 2016 x64 SP1
Записан
Александр Ривилис
Administrator
Сообщений: 13882
Карма: 1787
Рыцарь ObjectARX
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #13 :
23-01-2016, 15:41:10 »
AutoCAD 2016 SP1 x64 Russian (в English аналогично):
У тебя свои какие-нибудь приложения с обработчиками событий не загружены случайно?
Записан
+1/-0 к карме за данное сообщение
Не забывайте про правильное
Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился
правильный ответ
, то не забудьте про кнопку
Решение
Вильдар
ADN Club
Сообщений: 409
Карма: 77
Skype:
Re: Изменение параметра динамического блока в новом открытом документе?
«
Ответ #14 :
23-01-2016, 16:05:20 »
Нет. Попытался все убрать лишнее. Все сторонние приложения.
Записан
Печать
Страницы: [
1
]
2
3
Все
Вверх
« предыдущая тема
следующая тема »
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
Изменение параметра динамического блока в новом открытом документе?