R&D Data/Code · 2025. 9. 7.

종이모형 설명서 제작용 라인 위 텍스트+번호 생성 라이노 스크립트

Num on Line

!-_RunScript (
Option Explicit

Call Numbering02

Sub Numbering02
	Dim Number
	Dim Fontsize, Text
	Dim arrBod01, arrBod02, arrBod03
	Dim arrTextassociate
	Dim Line01, Line02
	Dim UnderlineLength 
	Dim Operator
	Dim arrLeaderPoints(1)
  
	Operator = 0
	Number = Rhino.GetReal("Start Number:",1)
	Fontsize = Rhino.GetReal("Font Size:",2)
	
	If Not Rhino.isLayer("Numbers::Parts_Num") Then
		Rhino.AddLayer "Numbers::Parts_Num"
	End If
	If Not Rhino.isLayer("Numbers::Num_Lines") Then
		Rhino.AddLayer "Numbers::Num_Lines"
	End If
	If Not Rhino.isLayer("Numbers::Leader_Lines") Then
		Rhino.AddLayer "Numbers::Leader_Lines"
 	End If
 
	Do 
		UnderlineLength  = Fontsize*0.8
		UnderlineLength  = UnderlineLength  * Len(Number)
		
		arrBod01 = Rhino.GetPoint("Select the top line:")
		If Not IsNull (arrBod01) Then
			arrBod02 = Rhino.GetPoint("Select the end of the line:", arrBod01 )
			If Not IsNull (arrBod02) Then
				If arrBod02(0)>arrBod01(0)Then
'					'Line01 = Rhino.AddLine(arrBod01,arrBod02)
					arrBod03 = Array(arrBod02(0)+UnderlineLength ,arrBod02(1),arrBod02(2))
					Line02 = Rhino.AddLine(arrBod02,arrBod03)
'                                                                     'Rhino.CurveArrows Line01, 1
					arrTextassociate = Array(arrBod02(0),arrBod02(1)+0.5,arrBod02(2))
					Text = Rhino.AddText (Number, arrTextassociate, Fontsize)
                                                                      Rhino.TextObjectFont Text, "Arial"
               				Rhino.TextObjectStyle Text,0
					Number = Number + 1
				Else
					'Line01 = Rhino.AddLine(arrBod01,arrBod02)
					arrBod03 = Array(arrBod02(0)-UnderlineLength ,arrBod02(1),arrBod02(2))
					Line02 = Rhino.AddLine(arrBod02,arrBod03)
                                                                      'Rhino.CurveArrows Line01, 1
					arrTextassociate = Array(arrBod02(0)-UnderlineLength ,arrBod02(1)+0.5,arrBod02(2))
					Text = Rhino.AddText (Number, arrTextassociate, Fontsize)
                                                                      Rhino.TextObjectFont Text, "Arial"
               				Rhino.TextObjectStyle Text,0
					Number = Number + 1
				End If
				
				'Rhino.ObjectLayer Line01, "Numbers::Leader_Lines"
				Rhino.ObjectLayer Line02, "Numbers::Num_Lines"
				Rhino.ObjectLayer Text, "Numbers::Parts_Num"
				
			Else
				Operator = 1
			End If
			'화살표 그리기
			arrLeaderPoints(0) = arrBod01
			arrLeaderPoints(1) = arrBod02
			Rhino.AddLeader arrLeaderPoints
		Else
			Operator = 1
		End If
		
	Loop Until Operator=1

	Rhino.Command "SelNone"
	Rhino.Command "SelLeader"
	Rhino.Command "-ChangeLayer pause Numbers::Leader_Lines"
	Rhino.Command "SelNone"

	Rhino.Print("Finished users")
End Sub
)

 

 

Num + Letter on Line

!-_RunScript (
Option Explicit

Call Numbering02

Sub Numbering02
	Dim Number
	Dim Fontsize, Text
	Dim arrBod01, arrBod02, arrBod03
	Dim arrTextassociate
	Dim Line01, Line02
	Dim UnderlineLength
	Dim Operator, writing, Character
	Dim arrLeaderPoints(1)
  
	Operator = 0
	
	Number = Rhino.GetReal("Select a number:",1)
	writing = Rhino.GetString("Begin with a:", "a")
	Character = Asc(writing)
	Fontsize = Rhino.GetReal("Font Size:",2)
	
	If Not Rhino.isLayer("Numbers::Parts_Num") Then
		Rhino.AddLayer "Numbers::Parts_Num"
	End If
	If Not Rhino.isLayer("Numbers::Num_Lines") Then
		Rhino.AddLayer "Numbers::Num_Lines"
	End If
	If Not Rhino.isLayer("Numbers::Leader_Lines") Then
		Rhino.AddLayer "Numbers::Leader_Lines"
 	End If
  
	Do 
		UnderlineLength = Fontsize*0.8
		UnderlineLength = UnderlineLength * Len(Number&writing)
		
		arrBod01 = Rhino.GetPoint("Select the top line:")
		If Not IsNull (arrBod01) Then
			arrBod02 = Rhino.GetPoint("Select the end of the line:", arrBod01 )
			If Not IsNull (arrBod02) Then
				If arrBod02(0)>arrBod01(0)Then
'					Line01 = Rhino.AddLine(arrBod01,arrBod02)
					arrBod03 = Array(arrBod02(0)+UnderlineLength,arrBod02(1),arrBod02(2))
					Line02 = Rhino.AddLine(arrBod02,arrBod03)
'					Rhino.CurveArrows Line01, 1
					arrTextassociate = Array(arrBod02(0),arrBod02(1)+0.5,arrBod02(2))
					Text = Rhino.AddText (Number&writing, arrTextassociate, Fontsize)
                                                                      Rhino.TextObjectFont Text, "Arial"
               				Rhino.TextObjectStyle Text,0
					Character = Character + 1
					writing = Chr(Character)
				Else
'					Line01 = Rhino.AddLine(arrBod01,arrBod02)
					arrBod03 = Array(arrBod02(0)-UnderlineLength,arrBod02(1),arrBod02(2))
					Line02 = Rhino.AddLine(arrBod02,arrBod03)
'					Rhino.CurveArrows Line01, 1
					arrTextassociate = Array(arrBod02(0)-UnderlineLength,arrBod02(1)+0.5,arrBod02(2))
					Text = Rhino.AddText (Number&writing, arrTextassociate, Fontsize)
                                                                      Rhino.TextObjectFont Text, "Arial"
               				Rhino.TextObjectStyle Text,0
					Character = Character + 1
					writing = Chr(Character)
				End If
				
'				Rhino.ObjectLayer Line01, "Numbers::Leader_Lines"
				Rhino.ObjectLayer Line02, "Numbers::Num_Lines"
				Rhino.ObjectLayer Text, "Numbers::Parts_Num"
				
			Else
				Operator = 1
			End If
			'화살표 그리기
			arrLeaderPoints(0) = arrBod01
			arrLeaderPoints(1) = arrBod02
			Rhino.AddLeader arrLeaderPoints
		Else
			Operator = 1
		End If
		
	Loop Until Operator=1

	Rhino.Command "SelNone"
	Rhino.Command "SelLeader"
	Rhino.Command "-ChangeLayer pause Numbers::Leader_Lines"
	Rhino.Command "SelNone"

	Rhino.Print("Finished users")
End Sub
)