Python & ActiveX/COM Autocad

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

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн loban_iv

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #390 : 19-02-2021, 13:15:28 »
Loft решил добавлением временных групп. Наверно несколько топорно
Может можно было через SelectSet?и смущают кириллические буквы в тексте вызываемой команды
Нет какой нибудь установки чтоб Autocad понимал латинские буквы для дополнения команд?
Код - Python [Выбрать]
  1. app = win32com.client.Dispatch("AutoCAD.Application")
  2. doc = app.ActiveDocument
  3. model = doc.ModelSpace
  4.  
  5. cds = convert_coordinates([0, 0, 0])
  6. c = model.AddCircle(cds, 500)
  7. cds = convert_coordinates([0, 0, 300])
  8. c1 = model.AddCircle(cds, 250)
  9.  
  10. g = doc.Groups.Add("1")
  11. g1 = doc.Groups.Add("2")
  12.  
  13. g.AppendItems(win32com.client.VARIANT(VT_ARRAY | VT_DISPATCH, [c]))
  14. g1.AppendItems(win32com.client.VARIANT(VT_ARRAY | VT_DISPATCH, [c1]))
  15.  
  16. doc.SendCommand("_LOFT Г " + g.Name + "\n" + "Г " + g1.Name + "\n" + "Ж" + "\n" + "Т" + "\n\n\n")
  17.  
  18. g.Delete()
  19. g1.Delete()

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

  • Administrator
  • *****
  • Сообщений: 12669
  • Карма: 1641
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #391 : 19-02-2021, 16:11:12 »
Нет какой нибудь установки чтоб Autocad понимал латинские буквы для дополнения команд?

Это не дополнительные команды, а опции команд. И можно (так же, как и для команд) использовать их глобальные имена - английские с подчеркиванием спереди.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 12669
  • Карма: 1641
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #392 : 19-02-2021, 16:12:27 »
Вроде бы я не прав и все объекты продолжают строится относительно глобальной системы координат. Это так?
Да.
Если нет, мое решение - трансформировать все объекты матрицей 4х4?
Да.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн loban_iv

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #393 : 19-02-2021, 21:05:41 »
Александр, а нет мыслей по поводу как передать матрицу4х4 в TransformBy?
4х компонентный массив 4х компонентных массивов

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

  • Administrator
  • *****
  • Сообщений: 12669
  • Карма: 1641
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #394 : 19-02-2021, 21:20:12 »
loban_iv,
Как в Python - понятия не имею. На VBA есть пример в документации. Вообще же эта матрица должна быть VARIANT.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 12669
  • Карма: 1641
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #395 : 19-02-2021, 21:33:58 »
Подозреваю, что через Utility.CreateTypedArray(matrix, vbDouble, [16 плавающих чисел, образующих матрицу 4x4])
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Marik

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #396 : 15-06-2021, 00:48:31 »
Господа, подскажите! Читал, читал тему...в голове каша. Подскажите как начертить полилинию? Можно код? Что нужно вставить в AddLightweightPolyline?

Код:
Код - Python [Выбрать]
  1. import win32com.client
  2. from pythoncom import  VT_R8, VT_ARRAY, VT_DISPATCH, VT_VARIANT
  3.  
  4. appAutocad = win32com.client.GetActiveObject("AutoCAD.Application")
  5. aDoc = appAutocad.ActiveDocument
  6. mSp = aDoc.ModelSpace
  7.  
  8. def acadcoord(x,y,z): # преобразование координат
  9.     return win32com.client.VARIANT(VT_ARRAY | VT_R8, [x, y, z])
  10.  
  11. mSp.AddLightweightPolyline(??????)

Оффлайн Electric

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 6
Re: Python & ActiveX/COM Autocad
« Ответ #397 : 15-06-2021, 08:19:12 »
Господа, подскажите! Читал, читал тему...в голове каша. Подскажите как начертить полилинию? Можно код? Что нужно вставить в AddLightweightPolyline?

Код:
Код - Python [Выбрать]
  1. import win32com.client
  2. from pythoncom import  VT_R8, VT_ARRAY, VT_DISPATCH, VT_VARIANT
  3.  
  4. appAutocad = win32com.client.GetActiveObject("AutoCAD.Application")
  5. aDoc = appAutocad.ActiveDocument
  6. mSp = aDoc.ModelSpace
  7.  
  8. def acadcoord(x,y,z): # преобразование координат
  9.     return win32com.client.VARIANT(VT_ARRAY | VT_R8, [x, y, z])
  10.  
  11. mSp.AddLightweightPolyline(??????)

Примерно так:

Код - Python [Выбрать]
  1. import win32com.client
  2. from pythoncom import  VT_R8, VT_ARRAY, VT_DISPATCH, VT_VARIANT
  3.  
  4. appAutocad = win32com.client.GetActiveObject("AutoCAD.Application")
  5. aDoc = appAutocad.ActiveDocument
  6. mSp = aDoc.ModelSpace
  7.  
  8. def acadcoord(*args): # преобразование координат
  9.     if isinstance(args[0], (list, tuple)):
  10.         coords = [item for item in args[0]]
  11.     else:
  12.         coords = args
  13.     return win32com.client.VARIANT(VT_ARRAY | VT_R8, coords)
  14.  
  15.  
  16. line_coords = [0, 0, 300, 100]  # В списке или в кортеже передаешь координаты точек x, y вершин полилинии
  17.  
  18. if __name__=='__main__':
  19.     mSp.AddLightweightPolyline(acadcoord(line_coords))
  20.  
« Последнее редактирование: 15-06-2021, 10:51:12 от Electric »

Оффлайн Marik

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #398 : 15-06-2021, 09:27:56 »
Спасибо! Работает!