Получите текст объекта AutoCAD AcDbText с python - PullRequest
0 голосов
/ 15 февраля 2020

Как лучше всего из python получить текст объекта AcDbText?

Я работаю в python, win32com и autoCAD. Я хотел бы иметь возможность делать следующее с помощью python программы:

  • Поместить объекты в набор выбора
  • Определить, какие объекты AcDbText
  • Из них извлеките текст, а затем удалите.

Я могу сделать первые две вещи просто отлично. Однако, предполагая, что textObj является правильным типом объекта, следующая часть достигает половины оставшегося - t будет содержать желаемый текст в виде строки:

t = textObj.copy().fieldcode()
  • Задача 1 : Как следует из кода, это создает копию объекта прямо на чертеже и, по-видимому, не предоставляет способ идентифицировать его позже для удаления.

  • Проблема 2: Исходный объект сопротивляется удалению из набора выбора. Если selection является набором выбора, то никакие изменения selection.clear(), selection.delete() или selection.erase() ничего не делают. (Я проверил длину выделения, установленную до и после вызова fieldcode () - количество объектов остается неизменным.)

Я озадачен тем, что, кажется, нет способ получить текст из объекта, не копируя его. Чего мне не хватает?

За вопрос в комментариях к ответу вывод pprint(dir(textObj)):

['AddRef', 
'Application', 
'ArrayPolar', 
'ArrayRectangular', 
'Copy', 
'Database', 
'Delete', 
'Document',  
'EntityName', 
'EntityTransparency', 
'EntityType', 
'Erase',  
'GetBoundingBox', 
'GetExtensionDictionary',  
'GetIDsOfNames', 
'GetTypeInfo', 
'GetTypeInfoCount', 
'GetXData', 
'Handle', 
'HasExtensionDictionary', 
'Highlight', 
'Hyperlinks', 
'IntersectWith', 
'Invoke', 
'Layer', 
'Linetype', 
'LinetypeScale', 
'Lineweight', 
'Material', 
'Mirror', 
'Mirror3D', 
'Move', 
'ObjectID', 
'ObjectName', 
'OwnerID', 
'PlotStyleName', 
'QueryInterface', 
'Release', 
'Rotate', 
'Rotate3D', 
'ScaleEntity', 
'SetXData', 
'TransformBy', 
'TrueColor', 
'Update', 
'Visible', 
'_AddRef', 
'_GetIDsOfNames', 
'_GetTypeInfo', 
'_IAcadEntity__com_ArrayPolar', 
'_IAcadEntity__com_ArrayRectangular', 
'_IAcadEntity__com_Copy', 
'_IAcadEntity__com_GetBoundingBox', 
'_IAcadEntity__com_Highlight', 
'_IAcadEntity__com_IntersectWith', 
'_IAcadEntity__com_Mirror', 
'_IAcadEntity__com_Mirror3D', 
'_IAcadEntity__com_Move', 
'_IAcadEntity__com_Rotate', 
'_IAcadEntity__com_Rotate3D', 
'_IAcadEntity__com_ScaleEntity', 
'_IAcadEntity__com_TransformBy', 
'_IAcadEntity__com_Update', 
'_IAcadEntity__com__get_EntityName', 
'_IAcadEntity__com__get_EntityTransparency', 
'_IAcadEntity__com__get_EntityType', 
'_IAcadEntity__com__get_Hyperlinks', 
'_IAcadEntity__com__get_Layer', 
'_IAcadEntity__com__get_Linetype', 
'_IAcadEntity__com__get_LinetypeScale', 
'_IAcadEntity__com__get_Lineweight', 
'_IAcadEntity__com__get_Material', 
'_IAcadEntity__com__get_PlotStyleName', 
'_IAcadEntity__com__get_TrueColor', 
'_IAcadEntity__com__get_Visible', 
'_IAcadEntity__com__get_color', 
'_IAcadEntity__com__set_EntityTransparency', 
'_IAcadEntity__com__set_Layer', 
'_IAcadEntity__com__set_Linetype', 
'_IAcadEntity__com__set_LinetypeScale', 
'_IAcadEntity__com__set_Lineweight', 
'_IAcadEntity__com__set_Material', 
'_IAcadEntity__com__set_PlotStyleName', 
'_IAcadEntity__com__set_TrueColor', 
'_IAcadEntity__com__set_Visible', 
'_IAcadEntity__com__set_color', 
'_IAcadObject__com_Delete', 
'_IAcadObject__com_Erase', 
'_IAcadObject__com_GetExtensionDictionary', 
'_IAcadObject__com_GetXData', 
'_IAcadObject__com_SetXData', 
'_IAcadObject__com__get_Application', 
'_IAcadObject__com__get_Database', 
'_IAcadObject__com__get_Document', 
'_IAcadObject__com__get_Handle', 
'_IAcadObject__com__get_HasExtensionDictionary', 
'_IAcadObject__com__get_ObjectID', 
'_IAcadObject__com__get_ObjectName', 
'_IAcadObject__com__get_OwnerID', 
'_IDispatch__com_GetIDsOfNames', 
'_IDispatch__com_GetTypeInfo', 
'_IDispatch__com_GetTypeInfoCount', 
'_IDispatch__com_Invoke', 
'_IUnknown__com_AddRef', 
'_IUnknown__com_QueryInterface', 
'_IUnknown__com_Release', 
'_Invoke', 
'_QueryInterface', 
'_Release', 
'__bool__', 
'__class__', 
'__cmp__', 
'__com_interface__', 
'__ctypes_from_outparam__', 
'__del__', 
'__delattr__', 
'__dict__', 
'__dir__', 
'__doc__', 
'__eq__', 
'__format__', 
'__ge__', 
'__getattr__', 
'__getattribute__', 
'__gt__', 
'__hash__', 
'__init__', 
'__init_subclass__', 
'__le__', 
'__lt__', 
'__map_case__', 
'__module__', 
'__ne__', 
'__new__', 
'__reduce__', 
'__reduce_ex__', 
'__repr__', 
'__setattr__', 
'__setstate__', 
'__sizeof__', 
'__str__', 
'__subclasshook__', 
'__weakref__', 
'_b_base_', 
'_b_needsfree_', 
'_case_insensitive_', 
'_compointer_base__get_value', 
'_idlflags_', 
'_iid_', 
'_invoke', 
'_methods_', 
'_needs_com_addref_', 
'_objects', 
'_type_', 
'color', 
'from_param', 
'value']

1 Ответ

1 голос
/ 15 февраля 2020

Если textObj является однострочным текстовым объектом (AcDbText) или многострочным текстовым объектом (AcDbMText), то вы сможете получить текстовое содержимое, используя TextString* 1006. * свойство, например:

t = textObj.TextString

Обратите внимание, что методы clear() & delete() при вызове объекта ActiveX SelectionSet не удаляйте содержащиеся в нем объекты, а скорее удаляйте объекты из SelectionSet и соответственно удаляйте объект SelectionSet. Тем не менее, метод erase() должен успешно удалить все объекты, содержащиеся в SelectionSet.

Хотя, чтобы удалить объект, вы обычно просто вызываете метод delete() для самого объекта. Например:

textObj.Delete()
...