0 / 0 / 0
Регистрация: 04.10.2021
Сообщений: 1
1

Вставить из редактора блока объект круг в пространство модели на python пользуясь библиотекой win32com

17.06.2024, 14:13. Показов 200. Ответов 0

Author24 — интернет-сервис помощи студентам
Выводится:
Подключено к запущенному AutoCAD
Пожалуйста, выберите блок.
Круг скопирован в буфер обмена.
Ошибка при вставке круга в пространство модели: <unknown>.SendComand
Но скопированный объект из редактора блока опять вставляется в редактор блока, а нужно чтобы вставлялся в пространство модели через буфер обмена.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import win32com.client
 
def connect_to_autocad():
    try:
        acad = win32com.client.GetActiveObject("AutoCAD.Application")
        print("Подключено к запущенному AutoCAD")
    except Exception as e:
        print(f"Не удалось подключиться к запущенному AutoCAD: {e}")
        acad = win32com.client.Dispatch("AutoCAD.Application")
        acad.Visible = True
        print("Запущен новый экземпляр AutoCAD")
    return acad
 
def get_selected_block(doc):
    try:
        selection_set = doc.SelectionSets.Item("SS1")
        selection_set.Delete()
    except Exception:
        pass
 
    selection_set = doc.SelectionSets.Add("SS1")
    selection_set.SelectOnScreen()
 
    block_ref = None
    for entity in selection_set:
        if entity.ObjectName == "AcDbBlockReference":
            block_ref = entity
            break
 
    return block_ref
 
def get_block_objects(block_ref):
    try:
        block_name = block_ref.Name
        block_table_record = block_ref.Database.Blocks.Item(block_name)
        return block_table_record
    except Exception as e:
        print(f"Ошибка при доступе к BlockTableRecord: {e}")
        return None
 
def copy_circle_to_clipboard(circle_entity):
    try:
        circle_entity.Copy()
        print("Круг скопирован в буфер обмена.")
        return True
    except Exception as e:
        print(f"Ошибка при копировании круга в буфер обмена: {e}")
        return False
 
def paste_circle_to_model_space(doc):
    try:
 
        doc.SendComand("_pasteclip\n")  # Команда вставки из буфера обмена
        print("Круг успешно вставлен в пространство модели.")
    except Exception as e:
        print(f"Ошибка при вставке круга в пространство модели: {e}")
 
def main():
    acad = connect_to_autocad()
    if acad is None:
        return
 
    doc = acad.ActiveDocument
    print("Пожалуйста, выберите блок.")
    block_ref = get_selected_block(doc)
    if block_ref:
        try:
            block_objects = get_block_objects(block_ref)
            if block_objects:
                found_circle = False
                for entity in block_objects:
                    if entity.ObjectName == "AcDbCircle":
                        found_circle = True
                        if copy_circle_to_clipboard(entity):
                            paste_circle_to_model_space(doc)
                        break
                if not found_circle:
                    print("В блоке не найден круг.")
            else:
                print(f"Не удалось получить объекты блока '{block_ref.Name}'.")
        except Exception as e:
            print(f"Ошибка при получении содержимого блока '{block_ref.Name}': {e}")
    else:
        print("Блок не был выбран или выбор неверен.")
 
if __name__ == "__main__":
    main()
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2024, 14:13
Ответы с готовыми решениями:

Python и модуль Excel win32com.Client
Обрабатываю файлики Excel при помощи модуля win32com.client. Не вижу толковой документации в...

Вычислить a в степени n не пользуясь библиотекой math.h
1) Даны действительное число a, натуральное число n. Вычислить: a в степени n не пользуясь ...

Разработка программной модели взаимодействия абонентов с библиотекой
В библиотеке сохраняются много наименований книг,по несколько экземпляров каждой. Абоненты...

Можно с пользуясь бутстрапом разместить 3 блока в 1 ряду таким образом
Можно с помощью бутстрапа разместить 3 блока в 1 ряду таким образом: http://************/qd4m7f ...

0
17.06.2024, 14:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2024, 14:13
Помогаю со студенческими работами здесь

Как нарисовать 3D объект с библиотекой OpenGL
Как нарисовать такой 3D объект с помощью библиотеки OpenGL?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru