Архитектору и проектировщику|Тепло- и звукоизоляция URSA.RU
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > AutoCAD. VB.NET. Не получается установить Block.Rotation. Ошибка Value must be non-zero

AutoCAD. VB.NET. Не получается установить Block.Rotation. Ошибка Value must be non-zero

Ответ
Поиск в этой теме
Непрочитано 27.08.2014, 23:26 #1
AutoCAD. VB.NET. Не получается установить Block.Rotation. Ошибка Value must be non-zero
Дмитрий Асташев
 
päällikön suunnittelijat
 
Pietari, Venäjä
Регистрация: 04.12.2010
Сообщений: 63

Доброе время суток, коллеги!
Сохраняю во внешней базе точку вставки и угол поворота (далее "BlockRotation") блока с умыслом синхронизировать таковые во всех чертежах, где должен наличествовать этот блок. Да во незадача, выскакивает ошибка "Value must be non-zero" на нулевое значение Rotation. Решив схитрить, я считал текущее значение Rotation, (в опыте 1.5707963267948966, т.е. 90 градусов) и присвоил значению Rotation выражение ("BlockRotation"-block.Rotation) и, к несчастью, Rotation остался как был, а изменился масштаб по X, став -1.5708. Кто подскажет, что это было?
(AutoCAD 2013, VisualStudio 2012 (VB.NET), COM)
сохраняю:

dr("BlockX") = block.InsertionPoint(0)
dr("BlockY") = block.InsertionPoint(1)
dr("BlockZ") = block.InsertionPoint(2)
dr("BlockRotation") = block.Rotation
dr - строка в DataTable

устанавливаю:

Dim Point(2) As Double
Point(0) = dr("BlockX")
Point(1) = dr("BlockY")
Point(2) = dr("BlockZ")
block.InsertionPoint = Point

block.Rotation =dr("BlockRotation") '' здесь ошибка "Value must be non-zero" если dr("BlockRotation")=0

Dim rot As Double = dr("BlockRotation")
Dim brot As Double = block.Rotation
block.Rotation = rot - brot ''() '' здесь меняется масштаб по X

Последний раз редактировалось Дмитрий Асташев, 27.08.2014 в 23:55.
Просмотров: 2510
 
Непрочитано 27.08.2014, 23:32
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,760


Для начала неплохо было бы озвучить как минимум язык программирования. А заодно - и про что вообще разговор (про AutoCAD, про BricsCAD, про Revit и теде). Ну а если еще и код будет показан - то вообще будет зашибитлз
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.08.2014, 10:16
#3
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,683
Отправить сообщение для Do$ с помощью Skype™


А если попробовать менять свойство масштаба блока по X?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ на форуме  
 
Непрочитано 28.08.2014, 10:36
#4
trir


 
Регистрация: 18.12.2010
Сообщений: 3,464


забудь про COM - юзай NET API!
COM давно уже кусками отваливается
trir на форуме  
 
Автор темы   Непрочитано 28.08.2014, 10:58
#5
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Используя block.XScaleFactor=1, добиваемся возвращение масштаба в первоначальное состояние. Но Rotation от этого никак не меняется. Похоже на ошибку внутри AutoCAD.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от trir Посмотреть сообщение
забудь про COM - юзай NET API!
COM давно уже кусками отваливается
Юзал бы NET API, если бы не нужно было Автокад перезапускать +100500 раз в день. Попробовал, не понравилось.
Дмитрий Асташев вне форума  
 
Непрочитано 28.08.2014, 11:20
#6
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,683
Отправить сообщение для Do$ с помощью Skype™


Ну последняя попытка - есть еще свойство XEffectiveScaleFactor, что будет если его поменять?
Ну и по поводу перезапуска автокада - это мелочи. Зато скорость работы приложений несравнимо выше.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ на форуме  
 
Непрочитано 28.08.2014, 12:13
1 | #7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 7,023


Цитата:
Сообщение от Дмитрий Асташев Посмотреть сообщение
Используя block.XScaleFactor=1, добиваемся возвращение масштаба в первоначальное состояние. Но Rotation от этого никак не меняется. Похоже на ошибку внутри AutoCAD.
Сервис-паки все поставлены на AutoCAD?

Цитата:
Note: To enable the autoloading changes to acad.dvb, uninstall the original AutoCAD 2013 VBA Enabler, and download and install the latest AutoCAD 2013 VBA module that was updated for the changes made in Service Pack 1 for AutoCAD 2013.



Цитата:
Сообщение от Do$ Посмотреть сообщение
Зато скорость работы приложений несравнимо выше.
А за счет использование технологий Net еще и код получается гораздо красивее). Но затраты времени на освоение больше.
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.08.2014, 14:35
#8
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Спасибо! После установки ServicePack 2 глюк исчез.
Дмитрий Асташев вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > AutoCAD. VB.NET. Не получается установить Block.Rotation. Ошибка Value must be non-zero

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск