Форум программистов, компьютерный форум, киберфорум
SolidWorks
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
1

Как прочитать разделы штампа и тех.требований чертежа

27.08.2019, 14:05. Показов 3576. Ответов 21
Метки нет (Все метки)

Всем доброго дня.
Нужно прочитать информацию из разделов штампа и тех.требований чертежа.
Буду благодарен за любую помощь.
Спасибо.

Добавлено через 2 минуты
Забыл написать. Речь идет о SolidWorks API.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2019, 14:05
Ответы с готовыми решениями:

Наложение штампа(оттиска) в готовом файле (XLS или PDF)
Всем добрый день. Стоит задача в своей программе сделать вывод некоторой информации в виде штампа...

Прочитать текстовый файл и получить отчет о тех днях, когда осадков не было
Список содержит данные об осадках за 10 дней некоторого периода 1. Создать текстовый файл,...

Как лучше реализовать GUI с учетом моих требований
Нам нужна возможность реализовать на C# под .NET4 красивые и "юзабельные" интерфейсы наших программ...

(Для моего товарища)Скажите как сборка для таких требований?Поправте,объясните
У него очень сильно сильно старый комп,ему уже не помочь.Но он решил сменить его. Сразу говорю,что...

21
65 / 59 / 14
Регистрация: 27.11.2017
Сообщений: 421
28.08.2019, 15:22 2
Полностью расписанный вопрос - это уже половина ответа.

какой язык?
прикрепите файл чертежа к сообщению.

http://help.solidworks.com/201... elcome.htm
0
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
28.08.2019, 15:29  [ТС] 3
Язык - C#
Вложения
Тип файла: zip 01_000.ZIP (1.84 Мб, 2 просмотров)
0
65 / 59 / 14
Регистрация: 27.11.2017
Сообщений: 421
28.08.2019, 15:41 4
2019 версии нету

запустите запись макроса и проведите все операции (заполнение штампа , и тт)
далее увидите в нем методы с приставкой set

и поискать аналоги с приставкой get

и макрос прикрепите посмотреть
0
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
28.08.2019, 17:32  [ТС] 5
Запустил макрос. Подкорректировал тех.требования и основную надпись. Остановил запись макроса.
Вновь загрузил тот же документ и запустил макрос на выполнение.
Тех.требования и основная надпись остались без изменений.

Добавлено через 1 минуту
Или я где-то не прав, или запись макроса не работает.
0
65 / 59 / 14
Регистрация: 27.11.2017
Сообщений: 421
28.08.2019, 17:54 6
Цитата Сообщение от Борис_С Посмотреть сообщение
Подкорректировал тех.требования и основную надпись.
нужно с чистого чертежа начать
0
1 / 1 / 0
Регистрация: 21.03.2013
Сообщений: 34
29.08.2019, 07:44 7
Борис_С, как вариант, сделай всю инфу на чертеже ссылками из детали/сборки. Из модели легче вытащить инфу и записать.
А потом cusPropMgr в помощь.
0
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
30.08.2019, 12:29  [ТС] 8
Создал новый чертеж. Сформировал заметку. Записал в макрос.
Вот код:

Visual Basic
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
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
 
Sub main()
 
Set swApp = Application.SldWorks
 
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
 
Dim myNote As Object
Dim myAnnotation As Object
Dim myTextFormat As Object
Set myNote = Part.InsertNote("1. Размеры")
If Not myNote Is Nothing Then
   myNote.LockPosition = False
   myNote.Angle = 0
   boolstatus = myNote.SetBalloon(0, 0)
   Set myAnnotation = myNote.GetAnnotation()
   If Not myAnnotation Is Nothing Then
      longstatus = myAnnotation.SetLeader3(swLeaderStyle_e.swNO_LEADER, 0, True, False, False, False)
      boolstatus = myAnnotation.SetPosition(0.230593668745639, 0.166584501154104, 0)
      boolstatus = myAnnotation.SetTextFormat(0, True, myTextFormat)
   End If
End If
Part.ClearSelection2 True
Part.WindowRedraw
End Sub
Как я понимаю, запись в заметку осуществляет оператор Set myNote = Part.InsertNote("1. Размеры")
Это прекрасно, но как мне это поможет вытащить все тексты документа?
0
65 / 59 / 14
Регистрация: 27.11.2017
Сообщений: 421
30.08.2019, 13:14 9
Лучший ответ Сообщение было отмечено Борис_С как решение

Решение

Цитата Сообщение от Борис_С Посмотреть сообщение
Set myNote = Part.InsertNote("1. Размеры")
для интерфейса ISketchManager есть метод InsertNote и есть GetNotes

- http://help.solidworks.com/201... Redirect=1

там же внизу есть примеры
1
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
30.08.2019, 16:24  [ТС] 10
Спасибо. Это то, что надо. Буду копать.

Добавлено через 2 часа 51 минуту
Что такое блок в SW? Включают ли в себя блоки заметки?
В Help по API я нашел пример Get Block Information Example (VBA)
Там есть такие операторы:
vBlockDef = SwSketchMgr.GetSketchBlockDefinitions
If Not IsEmpty(vBlockDef) Then

Внутрь оператора If я не попадаю, хотя в чертеже есть 2 заметки.
Почему?
0
65 / 59 / 14
Регистрация: 27.11.2017
Сообщений: 421
30.08.2019, 17:18 11
Цитата Сообщение от Борис_С Посмотреть сообщение
Включают ли в себя блоки заметки?
текстовый блок это и есть заметка

Цитата Сообщение от Борис_С Посмотреть сообщение
If Not IsEmpty(vBlockDef) Then
это просто проверка на его наличие в модели
0
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
30.08.2019, 17:19  [ТС] 12
Тогда почему я не попадаю внутрь If?
0
65 / 59 / 14
Регистрация: 27.11.2017
Сообщений: 421
30.08.2019, 17:46 13
Цитата Сообщение от Борис_С Посмотреть сообщение
Тогда почему я не попадаю внутрь If?
попробуйте с начала реализовать решение на VBA затем перенести в vb.net и потом C#

C# - строг в типизации объектов - скорее всего ошибка в приведении типов
0
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
30.08.2019, 21:07  [ТС] 14
Я так и сделал. Начал с VBA.
0
65 / 59 / 14
Регистрация: 27.11.2017
Сообщений: 421
31.08.2019, 12:42 15
прикрепите код посмотреть
0
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
02.09.2019, 10:01  [ТС] 16
Я использовал пример из API HELP: Get Block Information Example (VBA)
Работаю с SW 2019
Файл чертежа во вложении.

Visual Basic
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
'----------------------------------------------
' Preconditions: 
' 1. Open drawing with block definitions
'    and instances.
' 2. Open the Immediate window.
'
' Postconditions: Examine the Immediate window.
'----------------------------------------------
 
Option Explicit
 
Sub main()
 
    Dim swApp                       As SldWorks.SldWorks
 
    Dim swModel                     As SldWorks.ModelDoc2
 
    Dim swDraw                      As SldWorks.DrawingDoc
 
    Dim vBlockDef                   As Variant
 
    Dim vBlockInst                  As Variant
 
    
 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    ' OLD BLOCKS: Obsolete and not supported block
 
    '             interfaces as of SOLIDWORKS 2007
 
    'Dim swBlockDef                  As SldWorks.BlockDefinition
 
    'Dim swBlockInst                 As SldWorks.BlockInstance
 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    
 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    ' NEW BLOCKS: New block interfaces as of SOLIDWORKS 2007
 
    Dim swBlockDef                  As SldWorks.SketchBlockDefinition
 
    Dim swBlockInst                 As SldWorks.SketchBlockInstance
 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
 
 
    Dim vNote                       As Variant
 
    Dim swNote                      As SldWorks.Note
 
    Dim vDispDim                    As Variant
 
    Dim swDispDim                   As SldWorks.DisplayDimension
 
    Dim swDim                       As SldWorks.Dimension
 
    Dim i                           As Long
 
    Dim j                           As Long
 
    Dim k                           As Long
 
    Dim bRet                        As Boolean
 
        
 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    ' NEW BLOCKS: Additional declaration needed for new blocks
 
    Dim SwSketchMgr                 As SldWorks.SketchManager
 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
 
 
    Set swApp = CreateObject("SldWorks.Application")
 
    Set swModel = swApp.ActiveDoc
 
    Set swDraw = swModel
 
    
 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    ' NEW BLOCKS: For SketchBlockDefinition
 
    Set SwSketchMgr = swModel.SketchManager
 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    
 
    Debug.Print "File = " & swModel.GetPathName
 
    
 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    ' OLD BLOCKS: Obsolete and not supported method to get block
 
    '             definitions
 
    'vBlockDef = swDraw.GetBlockDefinitions
 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    
 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    ' NEW BLOCKS: New method to get block definitions
 
    vBlockDef = SwSketchMgr.GetSketchBlockDefinitions
 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
 
 
    If Not IsEmpty(vBlockDef) Then
 
        For i = 0 To UBound(vBlockDef)
 
            Set swBlockDef = vBlockDef(i)
 
    
 
            vBlockInst = swBlockDef.GetInstances
 
            vNote = swBlockDef.GetNotes
 
            vDispDim = swBlockDef.GetDisplayDimensions
 
           
 
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
            ' OLD BLOCKS: Obsolete and not supported block-related  
 
            '             methods and properties
 
            'Debug.Print "  " & swBlockDef.Name
 
            'Debug.Print "    UseExternalFile = " & swBlockDef.GetUseExternalFile
 
            'Debug.Print "      ExternalFileName = " & swBlockDef.GetExternalFileName
 
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
            
 
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
            ' NEW BLOCKS: New block-related properties for external files; no
 
            ' corresponding block definition Name property
 
            Debug.Print "      Block definition linked to file? " & swBlockDef.LinkToFile
 
            Debug.Print "         File name: " & swBlockDef.FileName
 
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
 
 
            If Not IsEmpty(vNote) Then
 
                Debug.Print ""
 
                Debug.Print "    Notes:"
 
                For j = 0 To UBound(vNote)
 
                    Set swNote = vNote(j)
 
                 
 
                    Debug.Print "      Tag Name         = " & swNote.TagName
 
                    Debug.Print "      Text             = " & swNote.GetText
 
                    Debug.Print ""
 
                    
 
                Next j
 
            End If
 
 
 
            If Not IsEmpty(vDispDim) Then
 
                Debug.Print ""
 
                Debug.Print "    Dimensions:"
 
                For j = 0 To UBound(vDispDim)
 
                    Set swDispDim = vDispDim(j)
 
                    Set swDim = swDispDim.GetDimension
 
                    Debug.Print "      Name             = " & swDim.Name
 
                    Debug.Print "      FullName         = " & swDim.FullName
 
                    Debug.Print "      Type             = " & swDim.GetType
 
                    Debug.Print "      DrivenState      = " & swDim.DrivenState
 
                    Debug.Print "      ReadOnly         = " & swDim.ReadOnly
 
                    Debug.Print "      Value            = " & swDim.GetSystemValue2("") * 1000# & " mm"
 
                    Debug.Print "      TextAll          = " & swDispDim.GetText(swDimensionTextAll)
 
                    Debug.Print "      TextPrefix       = " & swDispDim.GetText(swDimensionTextPrefix)
 
                    Debug.Print "      TextSuffix       = " & swDispDim.GetText(swDimensionTextSuffix)
 
                    Debug.Print "      CalloutAbove     = " & swDispDim.GetText(swDimensionTextCalloutAbove)
 
                    Debug.Print "      CalloutBelow     = " & swDispDim.GetText(swDimensionTextCalloutBelow)
 
                    Debug.Print ""
 
                Next j
 
            End If
 
 
 
            If Not IsEmpty(vBlockInst) Then
 
                Debug.Print ""
 
                For j = 0 To UBound(vBlockInst)
 
                    Set swBlockInst = vBlockInst(j)
 
                    vNote = swBlockInst.GetAttributes
 
                    
 
                    ''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
                    ' NEW BLOCKS: Get block instance Name
 
                    Debug.Print "  Name of block instance: " & swBlockInst.Name
 
                    ''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
                    
 
                    Debug.Print "    Block instance(" & j & "):"
 
                    ' 1 radian = 180º/p = 57.295779513º or approximately 57.3º 
 
                    Debug.Print "      Angle            = " & swBlockInst.Angle * 57.3 & " deg"
 
                    Debug.Print "      Scale            = " & swBlockInst.Scale
 
                    Debug.Print "      TextDisplay      = " & swBlockInst.TextDisplay
 
                    If Not IsEmpty(vNote) Then
 
                        Debug.Print "      Notes:"
 
                        For k = 0 To UBound(vNote)
 
                            Set swNote = vNote(k)
 
                            Debug.Print "        Tag Name         = " & swNote.TagName
 
                            Debug.Print "        Text             = " & swNote.GetText
 
                            Debug.Print ""
 
                        Next k
 
                    End If
 
                Next j
 
            End If
 
            Debug.Print "  ------------------------------------"
 
        
 
        Next i
 
    End If
 
End Sub
 
'------------------------------------
Вложения
Тип файла: zip angular contact ball bearing_68_skf.zip (57.5 Кб, 0 просмотров)
0
65 / 59 / 14
Регистрация: 27.11.2017
Сообщений: 421
02.09.2019, 14:35 17
Цитата Сообщение от Борис_С Посмотреть сообщение
Я использовал пример из API HELP
прикрепите свое решение

а пример - рабочий.
0
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
02.09.2019, 16:50  [ТС] 18
Я создал новый макрос. Записал туда этот текст и запустил его, предварительно прочитав в SW файл чертежа, который я послал во вложении.

Добавлено через 2 часа 1 минуту
В макросе есть такие операторы:
vBlockDef = SwSketchMgr.GetSketchBlockDefinitions
If Not IsEmpty(vBlockDef) Then

Внутрь оператора If я не попадаю, хотя в чертеже есть 2 заметки.
Почему?
0
65 / 59 / 14
Регистрация: 27.11.2017
Сообщений: 421
02.09.2019, 21:24 19
Для 3d модели и чертежа - заметка должна быть заключена в блок т.к. в последующем там можно к нему делать привязки и различные манипуляции и в таком случае макрос с примера работает.
и примере есть маленькая но существенная опечатка...

но. есть такой вариант тоже рабочий(проверил) -
https://help.solidworks.com/20... Redirect=1
1
2 / 2 / 0
Регистрация: 29.03.2015
Сообщений: 197
03.09.2019, 16:02  [ТС] 20
Спасибо, это то, что надо. Кстати, нашел в Help похожий вариант https://help.solidworks.com/20... ple_vb.htm
Он тоже работает. Странно только, что он 2 раза выдает один и тот же текстовый блок:
Пропорции
Изгибы
Линии
Один раз с именем блока "Детальный элемент4",
2-ой - "Детальный элемент5"

Добавлено через 58 секунд
Речь идет о моем примере.

Добавлено через 1 час 7 минут
Хочу поменять текст для текстового блока. Нашел пример - https://help.solidworks.com/20... ple_vb.htm
Там есть оператор ret = swModel.SelectByID("DetailItem300@Sheet Format1", "NOTE", 0, 0, 0)
Как я понимаю, он выделяет текстовый блок с именем DetailItem300.
Я написал аналогичный оператор для моего примера:
bRet = swModel.SelectByID("Детальный элемент3@Лист1 Формат листа1", "NOTE", 0, 0, 0)
Оператор возвращает false, т.е. блок не выделяется.
Поменял оператор
bRet = swModel.SelectByID("DetailItem3@Sheet1 Format1", "NOTE", 0, 0, 0)
Результат тот же.
Где я не прав?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2019, 16:02

как представить разделы сайта как директории в файловой системе
возможно пишу не в ту ветку форума и вопрос ламерский наверное...но... заметил, что на сайтах...

Как соеденить разделы
У меня жесткий диск поделен на 4 диска, как мне их соеденить и сделать 2.

Как создавать разделы в Битрикс?
Снова прошу вашей помощи, прошлый вопрос получилось решить. Спасибо всем. Как в инет магазине на...

Как создать разделы в меню
Господа, честно даже стыдно писать. Сложнейшие части кода будущей программы написаны(в C#, WPF), а...

Как монтировать разделы Gparted
Использовал Gparted для создания разделов с разными файловыми системами. Прочитал, что чтобы иметь...

Как разделить диск на разделы?
стал замечать что после 1-2 месяцев работы компа на семёрке появляется масса непонятно откуда...


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

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

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