Python & ActiveX/COM Autocad

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Python & ActiveX/COM Autocad
« Ответ #420 : 11-07-2021, 10:22:21 »
Я бы писал наподобие:
Код - Python [Выбрать]
  1. for bdef aDoc.Blocks
  2.   for ent bdef
  3.     if ent.Layer == "Layer0"
  4.       ent.Delete
Но по-хорошему тут надо добавить проверку на заблокированность / замороженность слоя - как минимум. Туда же - проход по вхождениям и определениям атрибутов, синхронизация атрибутов и т.д.
P.S. На питоне вообще не пишу.
Все, что сказано - личное мнение.

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

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

Оффлайн Marik

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #421 : 11-07-2021, 10:38:55 »
Спасибо! А нет более быстрого способа?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Python & ActiveX/COM Autocad
« Ответ #422 : 11-07-2021, 10:49:09 »
Только если запулить команду _.-laydel ИМХО
Но насколько это будет быстрее - вопрос.
Все, что сказано - личное мнение.

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

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

Оффлайн Aleks_199513

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #423 : 15-07-2021, 14:15:11 »
Добрый день. Подскажите пожалуйста, как можно в автокаде найти или поставить point3d через python? Хочу применить этот метод, но не могу понять как подать туда point3d


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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Python & ActiveX/COM Autocad
« Ответ #424 : 15-07-2021, 14:20:37 »
Point3D для Civil ИМХО немного другая история.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #425 : 15-07-2021, 20:31:46 »
Aleks_199513,
Point3d доступен только изнутри AutoCAD, а не через COM/ActiveX, как и вообще весь AutoCAD .NET API и Civil3D .NET API. Этот класс доступен в AcDbMgd.dll (Autodesk.AutoCAD.Geometry.Point3d)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Nutson

  • ADN OPEN
  • Сообщений: 43
  • Карма: 6
Re: Python & ActiveX/COM Autocad
« Ответ #426 : 29-07-2021, 06:54:16 »
Через COM можно добавить.


Код - Visual Basic [Выбрать]
  1. Sub testAddPointToFeatureLine()
  2.     Dim obj As AcadObject
  3.  
  4.     ThisDrawing.Utility.GetEntity obj, pp
  5.    
  6.     Dim fl As AeccLandFeatureLine
  7.     Set fl = obj
  8.     flPoints = fl.GetPoints
  9.    
  10.     i = 0
  11.     Dim util As Object
  12.     Set util = ThisDrawing.Utility
  13.     Call util.CreateTypedArray(newPoint, vbDouble, (flPoints (i) + flPoints (i + 3)) * 0.5, flPoints ((i + 1) + flPoints (i + 4)) * 0.5, 20)
  14.  
  15.     'Call fl.InsertFeaturePoint(newPoint, aeccLandFeatureLinePointPI) 'aeccLandFeatureLinePointPI = 1 отображается на плане квадратной ручкой
  16.    Call fl.InsertFeaturePoint(newPoint, aeccLandFeatureLinePointElevation) 'aeccLandFeatureLinePointElevation = 2 отображается на плане круглой ручкой
  17.  
  18. End Sub
  19.  
  20.  

Так же есть метод  InsertFeaturePoints
« Последнее редактирование: 29-07-2021, 07:33:50 от Nutson »

Оффлайн Aleks_199513

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #427 : 29-07-2021, 08:02:37 »
Через COM можно добавить.


Код - Visual Basic [Выбрать]
  1. Sub testAddPointToFeatureLine()
  2.     Dim obj As AcadObject
  3.  
  4.     ThisDrawing.Utility.GetEntity obj, pp
  5.    
  6.     Dim fl As AeccLandFeatureLine
  7.     Set fl = obj
  8.     flPoints = fl.GetPoints
  9.    
  10.     i = 0
  11.     Dim util As Object
  12.     Set util = ThisDrawing.Utility
  13.     Call util.CreateTypedArray(newPoint, vbDouble, (flPoints (i) + flPoints (i + 3)) * 0.5, flPoints ((i + 1) + flPoints (i + 4)) * 0.5, 20)
  14.  
  15.     'Call fl.InsertFeaturePoint(newPoint, aeccLandFeatureLinePointPI) 'aeccLandFeatureLinePointPI = 1 отображается на плане квадратной ручкой
  16.    Call fl.InsertFeaturePoint(newPoint, aeccLandFeatureLinePointElevation) 'aeccLandFeatureLinePointElevation = 2 отображается на плане круглой ручкой
  17.  
  18. End Sub
  19.  
  20.  

Так же есть метод  InsertFeaturePoints
Спасибо

Оффлайн Aleks_199513

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #428 : 05-08-2021, 10:48:42 »
Aleks_199513,  Добрый день. Подскажите пожалуйста как через Python задать номер ярлыка мультивыноски? не могу найти метод..


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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #429 : 05-08-2021, 10:59:55 »
Aleks_199513,
Если я правильно понял о чем, то это делается через MLeader.TextString

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Aleks_199513

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #430 : 05-08-2021, 11:02:49 »
Если я правильно понял о чем, то это делается через MLeader.TextString
не совсем, это работает, когда стиль мультивыноски текст, а когда блок, то не работает...

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #431 : 05-08-2021, 11:03:41 »
Если я правильно понял о чем, то это делается через MLeader.TextString
не совсем, это работает, когда стиль мультивыноски текст, а когда блок, то не работает...
А если неправильно, то через MLeader.SetBlockAttributeValue
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Nutson

  • ADN OPEN
  • Сообщений: 43
  • Карма: 6
Re: Python & ActiveX/COM Autocad
« Ответ #432 : 05-08-2021, 11:04:55 »
На вба так, в питон наверное сами сможете переконвертировать

Код - Visual Basic [Выбрать]
  1. Sub select_obj()
  2.     Dim obj As AcadObject
  3.     ThisDrawing.Utility.GetEntity obj, pp
  4.     Dim mleader As AcadMLeader
  5.     Set mleader = obj
  6.  
  7.     Dim blc As AcadBlock
  8.     Dim blcEl As AcadEntity
  9.    
  10.    
  11.     For Each blc In ThisDrawing.Blocks
  12.         If blc.Name = mleader.ContentBlockName Then
  13.             For Each blcEl In blc
  14.                 If blcEl.ObjectName = "AcDbAttributeDefinition" Then
  15.                     Call mleader.SetBlockAttributeValue(blcEl.ObjectID, "test")
  16.                 End If
  17.             Next
  18.         End If
  19.     Next
  20. End Sub
  21.  

Оффлайн Aleks_199513

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #433 : 05-08-2021, 13:46:51 »
А если неправильно, то через MLeader.SetBlockAttributeValue
А как сделать так, чтобы центр блока не улетал в 0,0?

Оффлайн Nutson

  • ADN OPEN
  • Сообщений: 43
  • Карма: 6
Re: Python & ActiveX/COM Autocad
« Ответ #434 : 05-08-2021, 13:48:33 »
А если неправильно, то через MLeader.SetBlockAttributeValue
А как сделать так, чтобы центр блока не улетал в 0,0?

Не видя Ваш код - никак :)