Product Design & Manufacturing – Українською
Дана гілка форуму є основною для теми дизайну виробів та їх виробництва. В ній пропонуємо обговорювати застосування програмних продуктів, що входять до Autodesk Product Design & Manufacturing Collection, як Inventor, Vault, Fusion (раніше відомий як Fusion 360), так і дотичні до них, як PowerMill, Netfabb, Moldflow та інші. Діліться знаннями, запитуйте й отримуйте відповіді, та читайте найпопулярніші теми по цим програмним продуктам.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Inventor: Найменування видів у кресленнях.

15 REPLIES 15
SOLVED
Reply
Message 1 of 16
DmytroMukhin
1102 Views, 15 Replies

Inventor: Найменування видів у кресленнях.

Вітаю!

Разом з @Andrii_Humeniuk вирішили підняти наступну тему. Вірніше я хочу його в цій темі підтримати.

При виконанні креслень часто видаляють вже готові види на листах, а від того збивається нумерація видів. Також відповідно до правил ЄСКД, якщо у вида масштаб відповідає зазначеному в штампі, тоді у назві вида не потрібно показувати його масштаб. Чи можна якось допомогти оптимізувати ці рутинні проблеми?

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" повідомленню! | Do you find the posts helpful? "LIKE" these posts!
На ваше запитання відповіли? Натисніть кнопку 'ПРИЙНЯТИ РІШЕННЯ' | Have your question been answered successfully? Click 'ACCEPT SOLUTION' button.

Дмитро Мухін | Dmytro Mukhin Facebook | Instagram | InventorInUa




Менеджер спільноти Autodesk | Autodesk Community Manager
15 REPLIES 15
Message 2 of 16

Вітаю @DmytroMukhin ! Мою макрос, який виконує вище вказанні перевірки:

 

  1. Перевіряє послідовність найменування видів відповідно до першості їх розміщеня на листах;
  2. Перевіряє чи потрібно показувати масштаб виду (відповідно до ЕСКД, у випадку, якщо вид відповідає зазначеному у штампі);
Sub main
	If TypeOf ThisDoc.Document Is DrawingDocument Then
		Dim oDraw As DrawingDocument = ThisDoc.Document
		Dim oTM As TransactionManager = ThisApplication.TransactionManager	
		Dim oSheets As Sheets = oDraw.Sheets
		
		If oSheets.Item(1).DrawingViews.Count = 0 Then
			Exit Sub
		End If
		
		Dim oSheet As Sheet
		Dim oViews As DrawingViews
		Dim oView As DrawingView
		
		Dim ViewLetter = New String() {"A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y"}
	'	Dim ViewLetter = New String() {"А", "Б", "В", "Г", "Д", "Е", "Ж", "Й", "К", "Л", "М", "Н", "П", "Р", "С", "Т", "У", "Ф", "Ц", "Ш", "Щ", "Ю", "Я" }
		Dim ViewCount As Integer = 0
		
		Dim o1stViewScale As String = oSheets.Item(1).DrawingViews.Item(1).ScaleString
	    Dim oView_Number As String = "<StyleOverride Underline='False'><DrawingViewName/></StyleOverride>"
		Dim oView_Scale As String = "<StyleOverride Underline='False'> (<DrawingViewScale/></StyleOverride>)"
		Dim oView_Name As String
		
		Dim numbList As New ArrayList
				
		Dim newTM As Transaction = oTM.StartTransaction(oDraw, "ChangeViewsName")
		
		For i = 1 To oSheets.Count
			numbList.Add(oSheets.Item(i).Name)
		Next
		
		For Each oSheet In oSheets
			oViews = oSheet.DrawingViews
		    For Each oView In oViews
				If oView.ShowLabel Then
					
					If Not IsNothing(oView.ParentView) Then
						
						Dim numbLetters As Double = ViewCount / ViewLetter.Length
	
						If o1stViewScale = oView.ScaleString Then
							oView_Name = oView_Number
						Else
							oView_Name = oView_Number & oView_Scale
						End If
											
						If oView.ViewType = DrawingViewTypeEnum.kDetailDrawingViewType Or _
							oView.ViewType = DrawingViewTypeEnum.kSectionDrawingViewType Or _
							oView.ViewType = DrawingViewTypeEnum.kProjectedDrawingViewType Or _
							oView.ViewType = DrawingViewTypeEnum.kAuxiliaryDrawingViewType Then
							If numbLetters <= 1 Then
								oView.Name = ViewLetter(ViewCount)
							Else If numbLetters > 1 And numbLetters <= 2 Then
								oView.Name = ViewLetter(0) & ViewLetter(ViewCount - ViewLetter.Length)
							Else If numbLetters > 2 And numbLetters <= 3 Then
								oView.Name = ViewLetter(1) & ViewLetter(ViewCount - ViewLetter.Length*2)
							End If
							
							If oView.ViewType = DrawingViewTypeEnum.kSectionDrawingViewType And oView.Label.Text.Contains("-") Then
								oView.Label.FormattedText = oView_Number & "-" & oView_Name
							Else
								oView.Label.FormattedText = oView_Name
							End If
							
				            ViewCount = ViewCount + 1
						End If
					Else
						If o1stViewScale = oView.ScaleString Then
							oView_Name = oView_Number
						Else
							oView_Name = oView_Number & oView_Scale
						End If
						oView.Label.FormattedText = oView_Name
					End If			
		        End If
		    Next
		Next
		
		newTM.End()
	End If
	
End Sub

Рядок 15 - англійський алфавіт, рядок 16 - український алфавіт. У обох відсутні літери, які не рекомендується використовувати у назвах видів. В коді активний англійкий алфавіт, щоб активувати український, потрібно закоментити рядок 15 та відповідно розкоментити 16-й.

P.S. Особисто я додав дане правило в шаблон креслення до "Event Triggers", в пункт "Before Save Document". Таким чином при збереженні файлу правило виконає перевірку автоматично.

P.S.S. Сподіваюсь тема буде корисною для форумчан та надіхне на цікаві ідеї в сфері написання макросів. Дякую, @DmytroMukhin  за підтримку.

Andrii Humeniuk - Leading design engineer

LinkedIn | My free Inventor Addin | My Repositories

Did you find this reply helpful ? If so please use the Accept as Solution/Like.

EESignature

Message 3 of 16

Так, дуже потрібний макрос!

Але за стандартом ДСТУ ISO 128-44:2005 вже має використовуватись латинська абетка.

Також бажано додати перевірку на поворот вида та додавання відповідної позначки.
Раніше це був символ Alexander_Chernikov_0-1683985857910.png, зараз має бути Alexander_Chernikov_1-1683985947292.png

Щоб його додавати в автоматичному режимі слід перевіряти властивість виду

 

.....
  Dim oDocDwg As Sheet
  Set oDocDwg = ThisApplication.ActiveDocument.ActiveSheet

  oDocDwg.DrawingViews.Item(i).Rotation
.....

 

і, якщо кут відрізняється від 0, додавати відповідне позначення у вигляді:

 

'   фрагмент кода на VBA для додавання/прибирання символу повороту виду
  ..................
  Dim fRot As String
  For i = 2 To oDocDwg.DrawingViews.Count
    BasViewLabel = oDocDwg.DrawingViews.Item(i).Label.FormattedText
    If Abs(oDocDwg.DrawingViews.Item(i).Rotation) < 0.01 Then
       fRot = ""
      Else
       fRot = " " & ChrW(&HE94E)
'   це код кругової стрілки, зараз треба визначити новий код та
'   додати величину кута та символ "градус"
    End If
    If oDocDwg.DrawingViews.Item(i).Scale = oDocDwg.DrawingViews.Item(1).Scale Then
      If oDocDwg.DrawingViews.Item(i).ViewType = kSectionDrawingViewType Then
        oDocDwg.DrawingViews.Item(i).Label.FormattedText = "<DrawingViewName/>-<DrawingViewName/>" & fRot
      Else
        oDocDwg.DrawingViews.Item(i).Label.FormattedText = "<DrawingViewName/>" & fRot
      End If
    Else
      If oDocDwg.DrawingViews.Item(i).ViewType = kSectionDrawingViewType Then
        oDocDwg.DrawingViews.Item(i).Label.FormattedText = "<DrawingViewName/>-<DrawingViewName/> (<DrawingViewScale/>)" & fRot
      Else
        oDocDwg.DrawingViews.Item(i).Label.FormattedText = "<DrawingViewName/> (<DrawingViewScale/>)" & fRot
      End If
    End If
  Next

 

Мабуть, доречно об'єднати в одно правило

Do you find the posts helpful? "LIKE" these posts! | Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням!
Have your question been answered successfully? Click "ACCEPT SOLUTION" button. | На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ"

Олександр Черніков / Alexander Chernikov

EESignature

Facebook | LinkedIn

.


Message 4 of 16

Дякую за пораду. Я додав Ваш код до свого, але отримав не вірний символ Screenshot 2023-05-13 191823.png. Думаю, це пов'язано з тим, що у нас різний тип тексту, я використовую "Tahoma".

Ось так виглядає підшитий код (додав між 74 та 75 рядок):

Dim dDeg As Double = Round(oView.Rotation * 180/PI, 3)
If dDeg > 0.01 Then
	oView.Label.FormattedText = oView.Label.FormattedText & " " & ChrW(&HE906) & " " & dDeg & ChrW(176)
End If	

 

Andrii Humeniuk - Leading design engineer

LinkedIn | My free Inventor Addin | My Repositories

Did you find this reply helpful ? If so please use the Accept as Solution/Like.

EESignature

Message 5 of 16

Так, ми використовуємо "GOST Common".

Символ, показаний у ДСТУ ISO 128-44:2005 має в ньому код &H21B7 (він є також у ISOCPEUR)

Do you find the posts helpful? "LIKE" these posts! | Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням!
Have your question been answered successfully? Click "ACCEPT SOLUTION" button. | На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ"

Олександр Черніков / Alexander Chernikov

EESignature

Facebook | LinkedIn

.


Message 6 of 16

По стандарту ми показуємо кут повороту за годинниковою стрілкою, а в Інвенторі це від'ємний кут.
тому, мабуть:

	Dim dDeg As Double = -Round(oView.Rotation * 180 / PI, 3)
	If dDeg > 0.01 Then
		oView.Label.FormattedText = oView.Label.FormattedText & " " & ChrW(&H21B7) & " " & dDeg & ChrW(176)
		Else If dDeg < -0.01 Then
			oView.Label.FormattedText = oView.Label.FormattedText & " " & ChrW(&H21B7) & " " & 360 + dDeg & ChrW(176)
		End If
	End If

 

Do you find the posts helpful? "LIKE" these posts! | Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням!
Have your question been answered successfully? Click "ACCEPT SOLUTION" button. | На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ"

Олександр Черніков / Alexander Chernikov

EESignature

Facebook | LinkedIn

.


Message 7 of 16

Дякую за інформацію. Додав перевірку на яку із сторін буде швидче покрутити, щоб отримати потрібний вигляд (типу стрілка за годинниковою стрілкою чи проти годинникової стрілки). Для того, щоб уникнути конфлікту з існуючими стилями тексту, виділив символ стрілки в окремий стиль, який описаний в рядку 90 ,Шрифт - @Arial Unicode MS, Висота тексту - 8.

Sub main
	If TypeOf ThisDoc.Document Is DrawingDocument Then
		Dim oDraw As DrawingDocument = ThisDoc.Document
		Dim oTM As TransactionManager = ThisApplication.TransactionManager	
		Dim oSheets As Sheets = oDraw.Sheets
		
		If oSheets.Item(1).DrawingViews.Count = 0 Then
			Exit Sub
		End If
		
		Dim oSheet As Sheet
		Dim oViews As DrawingViews
		Dim oView As DrawingView
		
		Dim ViewLetter = New String() {"A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y"}
	'	Dim ViewLetter = New String() {"А", "Б", "В", "Г", "Д", "Е", "Ж", "Й", "К", "Л", "М", "Н", "П", "Р", "С", "Т", "У", "Ф", "Ц", "Ш", "Щ", "Ю", "Я" }
		Dim ViewCount As Integer = 0
		
		Dim o1stViewScale As String = oSheets.Item(1).DrawingViews.Item(1).ScaleString
	    Dim oView_Number As String = "<StyleOverride Underline='False'><DrawingViewName/></StyleOverride>"
		Dim oView_Scale As String = "<StyleOverride Underline='False'> (<DrawingViewScale/></StyleOverride>)"
		Dim oView_Name As String
		
		Dim numbList As New ArrayList				
		Dim newTM As Transaction = oTM.StartTransaction(oDraw, "ChangeViewsName")
		
		For i = 1 To oSheets.Count
			numbList.Add(oSheets.Item(i).Name)
		Next
		
		For Each oSheet In oSheets
			oViews = oSheet.DrawingViews
		    For Each oView In oViews
				If oView.ShowLabel Then					
					If Not IsNothing(oView.ParentView) Then						
						Dim numbLetters As Double = ViewCount / ViewLetter.Length	
						If o1stViewScale = oView.ScaleString Then
							oView_Name = oView_Number
						Else
							oView_Name = oView_Number & oView_Scale
						End If											
						If oView.ViewType = DrawingViewTypeEnum.kDetailDrawingViewType Or _
							oView.ViewType = DrawingViewTypeEnum.kSectionDrawingViewType Or _
							oView.ViewType = DrawingViewTypeEnum.kProjectedDrawingViewType Or _
							oView.ViewType = DrawingViewTypeEnum.kAuxiliaryDrawingViewType Then
							If numbLetters <= 1 Then
								oView.Name = ViewLetter(ViewCount)
							Else If numbLetters > 1 And numbLetters <= 2 Then
								oView.Name = ViewLetter(0) & ViewLetter(ViewCount - ViewLetter.Length)
							Else If numbLetters > 2 And numbLetters <= 3 Then
								oView.Name = ViewLetter(1) & ViewLetter(ViewCount - ViewLetter.Length*2)
							End If
							
							If oView.ViewType = DrawingViewTypeEnum.kSectionDrawingViewType And oView.Label.Text.Contains("-") Then
								oView.Label.FormattedText = oView_Number & "-" & oView_Name
							Else
								oView.Label.FormattedText = oView_Name
							End If
							
				            ViewCount = ViewCount + 1
						End If
					Else
						If o1stViewScale = oView.ScaleString Then
							oView_Name = oView_Number
						Else
							oView_Name = oView_Number & oView_Scale
						End If
						oView.Label.FormattedText = oView_Name
					End If
					Dim dDeg As Double = Round(oView.Rotation * 180 / PI, 2)
					Do While dDeg > 360.01
						dDeg = dDeg - 360
					Loop
					If dDeg <> 0 And dDeg <> 360 Then
						Dim sDeg As String
						Dim sRotate As String
						If Abs(dDeg) < 180.01 Then
							sDeg = Abs(dDeg) & ChrW(176)
							If dDeg < 0 Then
								sRotate = ChrW(&H21B7)
							Else
								sRotate = ChrW(&H21B6)
							End If
						Else
							sDeg = Abs(dDeg) - 180 & ChrW(176)
							If dDeg < 0 Then
								sRotate = ChrW(&H21B6)
							Else
								sRotate = ChrW(&H21B7)
							End If
						End If
				    	oView.Label.FormattedText = oView.Label.FormattedText & _
						" <StyleOverride Font='@Arial Unicode MS' FontSize='0,8'>" & sRotate & " </StyleOverride>" & sDeg
					End If				
		        End If
		    Next
		Next		
		newTM.End()
	End If	
	
End Sub

 

 

 Виглядає досить круто, ще раз дякую за підсказки.

Andrii Humeniuk - Leading design engineer

LinkedIn | My free Inventor Addin | My Repositories

Did you find this reply helpful ? If so please use the Accept as Solution/Like.

EESignature

Message 8 of 16

Доброго дня. Підкажіть як і куди додавати даний макрос для новачків. Пояснення в картинках найінформативніше. Дякую
З повагою, Bleck Men
P.S. Використовую Inventor 2013/2020.5
Message 9 of 16

Доброго дня,
1. Створити текстовий, скопіювати в нього макрос та зберегти, наприклад, у
C:\Users\Public\Documents\Autodesk\Inventor 20ХХ\Macros

2. В Інвенторі зайти у налаштування iLogic та задати місце зберігання (Tools --> Option+)

Alexander_Chernikov_0-1684300270120.png

3. Якщо у браузері моделі немає відповідної вкладки, додайте її

Alexander_Chernikov_1-1684300504664.png

4. Перейдіть на вкладку iLogic --> External Rules

Alexander_Chernikov_2-1684300619552.png

5. Маєте побачити відповідні правила

6. Перетягніть правило у відповідний розділ (затиснувши ЛКМ)

Alexander_Chernikov_3-1684300852913.png

7. Правило буде спрацьовувати автоматично по заданій умові.

 

Більш докладно (для відповідної версії):
https://help.autodesk.com/view/INVNTOR/2023/ENU/?guid=GUID-C5ADE109-10E9-41A0-BC4A-BE73AA68A1C7

Do you find the posts helpful? "LIKE" these posts! | Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням!
Have your question been answered successfully? Click "ACCEPT SOLUTION" button. | На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ"

Олександр Черніков / Alexander Chernikov

EESignature

Facebook | LinkedIn

.


Message 10 of 16

Вітаю @BleckMen08 ! Мене на кілька хвилин випередили, але я все ж бажаю викласти відео про налаштування внутрішнього правила.

Внутрішні та зовнішні правила мають свої переваги та недоліки, і доцільність їх використання залежить від природи правила.

Внутрішнє правило прив'язується виключно до одного документа, в якому знаходиться.

Перевагою є можливість індивідуального налаштування правила для конкретного документа. Наприклад, під час роботи в документі креслення ви можете використовувати український алфавіт або відображення повороту виду. В такому випадку ви просто редагуєте правило в документі, не турбуючись про цілісність шаблону.

Недоліком є неможливість розповсюдити зміни в правилі на вже існуючі документи, тому доведеться окремо змінювати правило в кожному документі.

Зовнішнє правило зберігається в окремій теці та не враховує існування документів креслення. Таким чином, переваги та недоліки порівнюваних з внутрішніми правилами змінюються.

При використанні зовнішніх правил потрібно завжди мати на увазі, що ваше правило знаходиться лише на вашому комп'ютері, і якщо ви хочете передати комусь ваші документи креслення, в яких є посилання на ці правила, вам доведеться передати й правила як окремі файли.
Особисто я правило по відслідковуваню найменування видів у креслиннику використовую, як зовнішнє, тому зверніть увагу на повідомлення @Alexander_Chernikov .

Andrii Humeniuk - Leading design engineer

LinkedIn | My free Inventor Addin | My Repositories

Did you find this reply helpful ? If so please use the Accept as Solution/Like.

EESignature

Message 11 of 16

Вітаю!
Щоб вручну не закоментовувати/розкоментовувати множину літер, можна перевіряти стандарт поточного документа (кресленика): якщо GOST - кирилиця, для інших - латиниця.

Додаю приклад

Sub Main () ' GetStd()
  Dim oDoc As DrawingDocument = ThisApplication.ActiveDocument
  Dim iCode As Long = oDoc.StylesManager.ActiveStandardStyle.InternationalStandardReference
  Select Case iCode
  Case 9729
    InputBox ("Current standard is DEFAULT")
  Case 9731
    InputBox ("Current standard is ANSI")
  Case 9732
    InputBox ("Current standard is BSI")
  Case 9733
    InputBox ("Current standard is DIN")
  Case 9734
    InputBox ("Current standard is GB")
  Case 9735
    InputBox ("Current standard is ISO")
  Case 9736
    InputBox ("Current standard is JIS")
  Case 9737
    InputBox ("Current standard is GOST")
  Case Else
    InputBox ("Current standard is UNKNOWN ")
  End Select
End Sub

Do you find the posts helpful? "LIKE" these posts! | Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням!
Have your question been answered successfully? Click "ACCEPT SOLUTION" button. | На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ"

Олександр Черніков / Alexander Chernikov

EESignature

Facebook | LinkedIn

.


Message 12 of 16

Вітаю!

Вважаю, що це вже більш персоналізоване налаштування. Кожен має право обирати те, що йому більше підходить без прив'язки до якихось обставин. Наприклад, я використовую шаблон "GOST" та англійські літери. В будь-якому випадку, якщо для когось це важливо, в документі нижче правило з прив'язкою до стандарту.

Andrii Humeniuk - Leading design engineer

LinkedIn | My free Inventor Addin | My Repositories

Did you find this reply helpful ? If so please use the Accept as Solution/Like.

EESignature

Message 13 of 16

Вітаю колеги!

Виявив у своєму коді грубі помилки з найменуванням видів у випадку, коли потрібно застосовувати більше ніж одну літеру (АА, АВ, АС...).

Також вніс зміни у структуру коду, тепер він більш логічніший та читабільніший.

Якщо комусь не потрібно зазначати поворот виду (знак повороту та градуси), закоментуйте рядки 75, 77-81.

Окрім цього, код додає сторінку аркуша* до імені виду, якщо вид та його бадьківський вид знаходяться на різних аркушах. Для того щоб це прибрати закоментуйте рядки 69-71.

Sub main
	Dim oDraw As DrawingDocument : oDraw = ThisDoc.Document
	Dim oTM As TransactionManager = ThisApplication.TransactionManager	
	Dim oSheets As Sheets = oDraw.Sheets
	Dim oFirstView As DrawingView = GetFirstView(oSheets)
	
	If oFirstView Is Nothing Then Exit Sub
		
	Dim ViewLetter As String() = {"A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y"}
	Dim iViewCount As Integer = 0
	
	Dim o1stViewScale As String = oFirstView.ScaleString
    Dim oView_Number As String = "<StyleOverride Underline='False'><DrawingViewName/></StyleOverride>"
	Dim oView_Scale As String = "<StyleOverride Underline='False'> (<DrawingViewScale/></StyleOverride>)"
	Dim oView_Name As String
	
	Dim numbList As New ArrayList	
			
	Dim newTM As Transaction = oTM.StartTransaction(oDraw, "ChangeViewsName")
	
	For i As Integer = 1 To oSheets.Count
		numbList.Add(oSheets(i).Name)
	Next
	
	For Each oSheet As Sheet In oSheets
	    For Each oView As DrawingView In oSheet.DrawingViews
			If Not oView.ShowLabel Then Continue For
			Dim sNameView As String = oView.Label.FormattedText
			If o1stViewScale = oView.ScaleString Then
				oView_Name = oView_Number
			Else
				oView_Name = oView_Number & oView_Scale
			End If
				
			If Not IsNothing(oView.ParentView) Then
				If oView.ViewType = DrawingViewTypeEnum.kAssociativeDraftDrawingViewType Then Continue For
'				If oView.ViewType = DrawingViewTypeEnum.kAuxiliaryDrawingViewType Then Continue For
				If oView.ViewType = DrawingViewTypeEnum.kCustomDrawingViewType Then Continue For
				If oView.ViewType = DrawingViewTypeEnum.kDefaultDrawingViewType Then Continue For
'				If oView.ViewType = DrawingViewTypeEnum.kDetailDrawingViewType Then Continue For
				If oView.ViewType = DrawingViewTypeEnum.kDraftDrawingViewType Then Continue For
				If oView.ViewType = DrawingViewTypeEnum.kOLEAttachmentDrawingViewType Then Continue For
				If oView.ViewType = DrawingViewTypeEnum.kOverlayDrawingViewType Then Continue For
'				If oView.ViewType = DrawingViewTypeEnum.kProjectedDrawingViewType Then Continue For
'				If oView.ViewType = DrawingViewTypeEnum.kSectionDrawingViewType Then Continue For
				If oView.ViewType = DrawingViewTypeEnum.kStandardDrawingViewType Then Continue For
					
				If iViewCount < ViewLetter.Length Then
					oView.Name = ViewLetter(iViewCount)
				Else
					Dim dMaxCount As Integer = ViewLetter.Length + ViewLetter.Length				
					If ViewLetter.Length <= iViewCount And iViewCount < (dMaxCount) Then
						oView.Name = ViewLetter(0) & ViewLetter(iViewCount - ViewLetter.Length)
					Else
						Dim iStepNumb As Double = iViewCount - (dMaxCount - 1)
						Dim iStep As Integer = Ceil(iStepNumb / ViewLetter.Length)
						Dim iNumb As Double = iViewCount - (ViewLetter.Length * (iStep+1))
						oView.Name = ViewLetter(iStep) & ViewLetter(iNumb)
					End If
				End If
		    	iViewCount = iViewCount + 1
				Dim sSheetName As String = oView.ParentView.Parent.Name
				If oView.ViewType = DrawingViewTypeEnum.kSectionDrawingViewType _
					And oView.Label.Text.Contains("-") Then
					sNameView = oView_Number & "-" & oView_Name
				Else
					sNameView = oView_Name
				End If	
				If sSheetName <> oView.Parent.Name Then
					sNameView = sNameView & " (" & numbList.IndexOf(sSheetName) + 1 & ")"
				End If				
			Else
				sNameView = oView_Name
			End If
			If oView.Rotation = 0 Then
				oView.Label.FormattedText = sNameView
			Else
				sNameView = CheckRotateView(oView)
				If sNameView Is Nothing Then Continue For
				oView.Label.FormattedText = sNameView
			End If
	    Next
	Next
	
	newTM.End()
	
End Sub

Private Function GetFirstView(ByVal oSheets As Sheets) As DrawingView
	For iSheet As Integer = 1 To oSheets.Count
		If oSheets(iSheet).DrawingViews.Count = 0 Then Continue For
		Return oSheets(iSheet).DrawingViews(1)
	Next
	Return Nothing
End Function

Private Function CheckRotateView(ByVal oView As DrawingView) As String
	Dim dDeg As Double = Round(oView.Rotation * 180 / PI, 2)
	Do While dDeg > 360.01
		dDeg = dDeg - 360
	Loop
	If dDeg <> 0 And dDeg <> 360 Then
		Dim sDeg, sRotate As String
		If Abs(dDeg) < 180.01 Then
			sDeg = Abs(dDeg) & ChrW(176)
			If dDeg < 0 Then : sRotate = ChrW(&H21B7)
			Else : sRotate = ChrW(&H21B6)
			End If
		Else
			sDeg = Abs(dDeg) - 180 & ChrW(176)
			If dDeg < 0 Then : sRotate = ChrW(&H21B6)
			Else : sRotate = ChrW(&H21B7)
			End If
		End If
    	Return oView.Label.FormattedText & " <StyleOverride Font='@Arial Unicode MS' FontSize='0,8'>" _
				& sRotate & " </StyleOverride>" & sDeg
	End If
	Return Nothing
End Function

В коді лише англійський алфавіт, сподіваюсь, ви знаєте, що робити, якщо вам потрібен інший:)

* Нажаль, в API відсутній доступ до редагування позначок розрізів та виносних видів, таким чином код не додає сторінку аркуша до позначки на якому знаходиться вид. Це доведеться робити руками, якщо хочете оформлення по ЕСКД.

Andrii Humeniuk - Leading design engineer

LinkedIn | My free Inventor Addin | My Repositories

Did you find this reply helpful ? If so please use the Accept as Solution/Like.

EESignature

Message 14 of 16
d.grytsenko
in reply to: DmytroMukhin

Дякую! Це дуже корисно. Якраз у мене були такі питання. Ви на них повністю відповіли. Дякую!

Message 15 of 16

Добрий вечір. Спробував скористатися Вашим кодом. Добре працює, але є зауваження: при кожному запуску скрипта в позначенні виду ставиться знак повернутий і кут, тому його слід запускати лише руками – ініціатор подій не підходить. Ще один пункт - знак повернуто ставитися курсивом (виглядає не дуже), думаю що це не вдасться виправити, тому що весь рядок пишеться курсивом, а цей знак потрібний звичайним шрифтом. Ще помітив, може це в мене в одного, але види повертаю на той самий кут, а градуси пишуться різні, не знаю чому так (наприклад вид повернутий на 13 градусів і другий вид на 13 градусів, а в запис виду потрапляє в одному 13 градусів, а в іншій 167 градусів). Це все дрібниці та руками можна виправити. Але зверніть увагу. Дякую за Вашу працю.
Message 16 of 16

Вітаю @anton.mashkin.ua !

Дякую за Ваш відгук, це корисно для розвитку макросу.
З останньої публікації я знайшов багато недоліків, серед них були і Вами озвученні.

Тож нова версія значно продвинутіша, але аби використовувати її на максимум потрібно робити редагування у самому коді вручну:

  1. Стиль тексту - рядок 80 (GOST Common);
  2. Висота тексту - рядок 81 (0,5 см);
  3. Активний алфавіт - рядок 86 (значення 64 - це англійська), при зміні алфавіту потрібно зробитии зміни у рядку 84, це кількість літер у алфавіті*;
  4. Виключення букв з алфавіту - рядок 82 для англ. та 83 для укр.*;
  5. За замовченням усі розрізи (section) найменуються цифрами (будівельний стиль), якщо Вам потрібні літери, придушіть рядки 43-44 та зніміть придушення рядків 41-42.
  6. Рядок 72 - встановлення стилю Italic (курсив) для всього тексту окрім знаку повороту (True - Так, False - Ні).

 

Sub main
	Dim oInvApp As Inventor.Application = ThisApplication
	Dim oDraw As DrawingDocument = TryCast(oInvApp.ActiveDocument, DrawingDocument)
	If oDraw Is Nothing Then Exit Sub
	Dim oTM As TransactionManager = oInvApp.TransactionManager	
	Dim oSheets As Sheets = oDraw.Sheets
	Dim oFirstView As DrawingView = GetFirstView(oSheets)
	
	If oFirstView Is Nothing Then Exit Sub	
	
	Dim o1stViewScale As String = oFirstView.ScaleString
    Dim oView_Number As String = "<StyleOverride Font='" & sStyleT & "' FontSize='" & dHT & "'><DrawingViewName/></StyleOverride>"
	Dim oView_Scale As String = "<StyleOverride Font='" & sStyleT & "' FontSize='" & dHT & "'> (<DrawingViewScale/>)</StyleOverride>"
	Dim oView_Name As String
	
	Dim numbList As New ArrayList	
			
	Dim newTM As Transaction = oTM.StartTransaction(oDraw, "ChangeViewsName")
	
	For i As Integer = 1 To oSheets.Count
		numbList.Add(oSheets(i).Name)
	Next
	
	For Each oSheet As Sheet In oSheets
	    For Each oView As DrawingView In oSheet.DrawingViews
			If Not oView.ShowLabel Then Continue For
			Dim sNameView As String = oView.Label.FormattedText
			If o1stViewScale = oView.ScaleString Then
				oView_Name = oView_Number
			Else
				oView_Name = oView_Number & oView_Scale
			End If
				
			If Not IsNothing(oView.ParentView) Then
				If oView.ViewType = DrawingViewTypeEnum.kAuxiliaryDrawingViewType Or
					oView.ViewType = DrawingViewTypeEnum.kDetailDrawingViewType Or
					oView.ViewType = DrawingViewTypeEnum.kProjectedDrawingViewType Then
					oView.Name = GetLetters()				
		    		iDetailCount += 1
				Else If oView.ViewType = DrawingViewTypeEnum.kSectionDrawingViewType Then
'					oView.Name = GetLetters()				
'		    		iDetailCount += 1
					oView.Name = iSectionCount
					iSectionCount += 1
				Else
					Continue For
				End If				
				
				Dim sSheetName As String = oView.ParentView.Parent.Name
				If oView.ViewType = DrawingViewTypeEnum.kSectionDrawingViewType _
					And oView.Label.Text.Contains("-") Then
					sNameView = oView_Number & "-" & oView_Name
				Else
					sNameView = oView_Name
				End If	
				If sSheetName <> oView.Parent.Name Then
					sNameView = sNameView & "<StyleOverride Font='" & sStyleT & "' FontSize='" & dHT & "'> (" &
										numbList.IndexOf(sSheetName) + 1 & ")</StyleOverride>"
				End If				
			Else
				sNameView = oView_Name
			End If
			
			If oView.Rotation = 0 Then
				oView.Label.FormattedText = sNameView
			Else
				sNameView = CheckRotateView(oView.Rotation, sNameView)
				If sNameView Is Nothing Then Continue For
				Try : oView.Label.FormattedText = sNameView
				Catch : End Try
			End If
			oView.Label.TextStyle.Italic = True
	    Next
	Next
	
	newTM.End()
	
End Sub

Dim sStyleT As String = "GOST Common" ' Стиль тексту
Dim dHT As Double = 0.5 ' Висота тексту у сантиметрах
Dim cLetter() As Char = {"I", "O", "Q", "Z" }
'Dim cLetter() As Char = {"З", "И", "О", "Х", "Ч", "Ъ", "Ы", "Ь", "Э"}
Dim iCL As Integer = 26 'англ - 26, укр - 32
Dim iCL2 As Integer = iCL * iCL
Dim iSL As Integer = 64 'англ - 64, укр - 191
Dim iDetailCount As Integer = 1
Dim iSectionCount As Integer = 1

Private Function GetFirstView(ByVal oSheets As Sheets) As DrawingView
	For iSheet As Integer = 1 To oSheets.Count
		If oSheets(iSheet).DrawingViews.Count = 0 Then Continue For
		Return oSheets(iSheet).DrawingViews(1)
	Next
	Return Nothing
End Function

Private Function GetLetters() As String
	BeakLetters :
	i = iDetailCount
	Dim sNameView As String
	Dim c1, c2, c3 As Char
	If i > iCL Then
		If i > iCL2 + iCL Then		
			Dim iCount As Integer = Floor((i-iCL-1) / iCL2)
			Dim iStep As Integer = (iCount * iCL2) + iCL
			c1 = Chr(((i - 1) Mod iCL) + iSL + 1)
			If cLetter.Contains(c1) Then iDetailCount += 1 : GoTo BeakLetters
			c2 = Chr(Int((i - iStep - 1) / iCL) + iSL + 1)	
			If cLetter.Contains(c2) Then iDetailCount += 1 : GoTo BeakLetters
			c3 = Chr(Int(iCount) + iSL)
			If cLetter.Contains(c3) Then iDetailCount += 1 : GoTo BeakLetters
			sNameView = c3 & c2 & c1
		Else			
			c1 = Chr(((i - 1) Mod iCL) + iSL + 1)
			If cLetter.Contains(c1) Then iDetailCount += 1 : GoTo BeakLetters
			c2 = Chr(Int((i - 1) / iCL) + iSL)		
			If cLetter.Contains(c2) Then iDetailCount += 1 : GoTo BeakLetters
			sNameView = c2 & c1
		End If
    Else
		c1 = Chr(i + iSL)
		If cLetter.Contains(c1) Then iDetailCount += 1 : GoTo BeakLetters
		sNameView = c1
    End If
	Return sNameView
End Function

Private Function CheckRotateView(ByVal dRot As Double, ByVal sNameView As String) As String
	Dim dDeg As Double = Round(dRot * 180 / PI, 2)
	Do While dDeg > 360.01
		dDeg = dDeg - 360
	Loop
	If dDeg <> 0 And dDeg <> 360 Then
		Dim sDeg, sRotate As String
		If Abs(dDeg) < 180.01 Then
			sDeg = Abs(dDeg) & ChrW(176)
			If dDeg < 0 Then : sRotate = ChrW(&H21B7)
			Else : sRotate = ChrW(&H21B6)
			End If
		Else
			sDeg = Abs(dDeg) - 180 & ChrW(176)
			If dDeg < 0 Then : sRotate = ChrW(&H21B6)
			Else : sRotate = ChrW(&H21B7)
			End If
		End If
    	Return sNameView & " <StyleOverride Italic='False' Font='@Arial Unicode MS' FontSize='" & dHT+0.3 & "'>" _
				& sRotate & " </StyleOverride>" & sDeg
	End If
	Return Nothing
End Function​

 

Нажаль, не вдалося відслідкувати баг з невідповідністю значень повороту. Можливо це виправив раніше та тепер небачу проблем. Спробуйте нову версію, та залишіть відгук. Дякую!

 

* - Насправді, це не український алфавіт, а москальський. Це пов'язано з тим, що літери я беру з системи, а там лише кацапська. Тому, серед літер у рядку 83 є ті, що притамані гидкій мові.

Andrii Humeniuk - Leading design engineer

LinkedIn | My free Inventor Addin | My Repositories

Did you find this reply helpful ? If so please use the Accept as Solution/Like.

EESignature

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums