Python & ActiveX/COM Autocad

Автор Тема: Python & ActiveX/COM Autocad  (Прочитано 230093 раз)

MaxMarsh и 4 Гостей просматривают эту тему.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #300 : 10-04-2020, 15:26:35 »
Да, странное дело, у того блока, который не возвращал массива элементов установлен масштаб 110, меняю на 100, функция начинает возвращать элементы.
Почему?
О каком масштабе идёт речь? Есть масштабы по X,Y,Z, а есть масштаб аннотаций. Если масштабы по X,Y,Z отличаются, то Explode очень часто не срабатывает, ну и соответственно ничего не возвращает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #301 : 10-04-2020, 15:38:38 »
Цитата: DMuzer от 10-04-2020, 15:20:18
Да, странное дело, у того блока, который не возвращал массива элементов установлен масштаб 110, меняю на 100, функция начинает возвращать элементы.
Почему?
О каком масштабе идёт речь? Есть масштабы по X,Y,Z, а есть масштаб аннотаций. Если масштабы по X,Y,Z отличаются, то Explode очень часто не срабатывает, ну и соответственно ничего не возвращает.

Ну видимо это как раз тот случай. Устанавливаю одинаковые масштабы, все начинает работать.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #302 : 10-04-2020, 15:41:59 »
Ну видимо это как раз тот случай. Устанавливаю одинаковые масштабы, все начинает работать.
Интересно, а что внутри этого блока? И какая версия AutoCAD?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
« Последнее редактирование: 10-04-2020, 17:51:47 от Александр Ривилис »
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн DFG2020

  • ADN OPEN
  • Сообщений: 34
  • Карма: 1
Re: Python & ActiveX/COM Autocad
« Ответ #304 : 14-04-2020, 23:33:28 »
Всем добра!

Подскажите, как к координатам в виде VARIANT задать смещение на заданную величину? Т.е. у меня есть точка в формате VARIANT, как задать ее смещение, т.е. изменить одну или несколько ее  параметров x или y?
Все это в питоне.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #305 : 15-04-2020, 10:21:58 »
Всем добра!

Подскажите, как к координатам в виде VARIANT задать смещение на заданную величину? Т.е. у меня есть точка в формате VARIANT, как задать ее смещение, т.е. изменить одну или несколько ее  параметров x или y?
Все это в питоне.
Преобразовать в массив double, изменить соответствующие элементы массива и обратно преобразовать в VARIANT.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mvv_010

  • ADN OPEN
  • Сообщений: 2
  • Карма: 3
Re: Python & ActiveX/COM Autocad
« Ответ #306 : 15-04-2020, 19:02:05 »
DFG2020,
Код - Python [Выбрать]
  1. def POINT(list):
  2.     return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (list))
  3.  
  4. # Как поменять VARIANT
  5. bl = (POINT([1,2,3]))# win32com.client.VARIANT(8197, [1, 2, 3])
  6. bl.value[0] += 10
  7. bl.value[1] += 10
  8. bl.value[2] += 10
  9. print(bl) # win32com.client.VARIANT(8197, [11, 12, 13])
  10.  
  11. # Правка координат для точки
  12. point_1 = acad.ActiveDocument.ModelSpace.AddPoint(POINT([1,2,3]))
  13. print(point_1.Coordinates) # (1.0, 2.0, 3.0)
  14. # Так как возвращается кортеж, переводим его в список и меняем.
  15. listCoordinates = list(point_1.Coordinates)
  16. listCoordinates[0] += 10
  17. listCoordinates[1] += 20
  18. listCoordinates[2] += 30
  19. point_1.Coordinates = POINT(listCoordinates)
  20. # Или так
  21. point_1.Coordinates = POINT([point_1.Coordinates[0] + 10,
  22.                      point_1.Coordinates[1] + 20,
  23.                      point_1.Coordinates[2] + 30])
  24.  

Оффлайн DFG2020

  • ADN OPEN
  • Сообщений: 34
  • Карма: 1
Re: Python & ActiveX/COM Autocad
« Ответ #307 : 26-04-2020, 15:33:15 »
Всем терпения!

Подскажите пожалуйста, как использовать Lineweight в питоне, как применить толщину acLnWt030?
В примере для VBA строка выглядит просто: Obj.Lineweight = acLnWt211
Но в питоне выдает ошибку. Как преобразовать acLnWt211 для использования в питоне?


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #308 : 26-04-2020, 16:55:47 »
Как преобразовать acLnWt211 для использования в питоне?
Подставь просто целое число 211:
Код - C++ [Выбрать]
  1. enum AcLineWeight
  2.     {
  3.         acLnWt000       = 0,
  4.         acLnWt005       = 5,
  5.         acLnWt009       = 9,
  6.         acLnWt013       = 13,
  7.         acLnWt015       = 15,
  8.         acLnWt018       = 18,
  9.         acLnWt020       = 20,
  10.         acLnWt025       = 25,
  11.         acLnWt030       = 30,
  12.         acLnWt035       = 35,
  13.         acLnWt040       = 40,
  14.         acLnWt050       = 50,
  15.         acLnWt053       = 53,
  16.         acLnWt060       = 60,
  17.         acLnWt070       = 70,
  18.         acLnWt080       = 80,
  19.         acLnWt090       = 90,
  20.         acLnWt100       = 100,
  21.         acLnWt106       = 106,
  22.         acLnWt120       = 120,
  23.         acLnWt140       = 140,
  24.         acLnWt158       = 158,
  25.         acLnWt200       = 200,
  26.         acLnWt211       = 211,
  27.         acLnWtByLayer   = -1,
  28.         acLnWtByBlock   = -2,
  29.         acLnWtByLwDefault       = -3
  30.     }   AcLineWeight;
  31.  
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DFG2020

  • ADN OPEN
  • Сообщений: 34
  • Карма: 1
Re: Python & ActiveX/COM Autocad
« Ответ #309 : 26-04-2020, 21:01:01 »
Подскажите, как задать начальную и конечную ширину ломаной линии object.SetWidth SegmentIndex, StartWidth, EndWidth? Линия состоит из одного элемента.
При воспроизводстве данного метода в питоне возникает ошибка, возможно тип данных SegmentIndex не соответствует питону. SegmentIndex - тип данных Integer.
Если задавать как object.SetWidth 0, 5, 5 - ошибка "SyntaxError: invalid syntax" на первом значенни "0"
Если задавать как object.SetWidth , 5, 0 - ошибки нет, но ничего не меняется.



Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #310 : 26-04-2020, 21:13:47 »
Первый аргумент должен быть целым (int), а второй и третий - плавающим (double)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DFG2020

  • ADN OPEN
  • Сообщений: 34
  • Карма: 1
Re: Python & ActiveX/COM Autocad
« Ответ #311 : 26-04-2020, 23:44:00 »
Первый аргумент должен быть целым (int)
А 0 - это не целое (int)?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #312 : 26-04-2020, 23:46:55 »
А 0 - это не целое (int)?
В Python - не знаю. Может long, может short. Впрочем можешь попробовать short. Но главное второй и третий аргументы должны быть double.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DFG2020

  • ADN OPEN
  • Сообщений: 34
  • Карма: 1
Re: Python & ActiveX/COM Autocad
« Ответ #313 : 26-04-2020, 23:50:16 »
В Python - не знаю. Может long, может short. Впрочем можешь попробовать short. Но главное второй и третий аргументы должны быть double.
Первый аргумент ставлю 0, но питон ругается именно на него:
    arrow_B.SetWidth 0, 5, 5
                               ^
SyntaxError: invalid syntax

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #314 : 27-04-2020, 00:08:32 »
В Python - не знаю. Может long, может short. Впрочем можешь попробовать short. Но главное второй и третий аргументы должны быть double.
Первый аргумент ставлю 0, но питон ругается именно на него:
    arrow_B.SetWidth 0, 5, 5
                               ^
SyntaxError: invalid syntax
Так это же ошибка синтаксиса, а не типа данных. Может быть как-то так:
Код - Python [Выбрать]
  1.  arrow_B.SetWidth (0, 5.0, 5.0)
???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение