Make 2 linear dimension position equal in drawing

Make 2 linear dimension position equal in drawing

tim11_manhhieu
Advocate Advocate
330 Views
6 Replies
Message 1 of 7

Make 2 linear dimension position equal in drawing

tim11_manhhieu
Advocate
Advocate

Hi all,

Is there any solution for this idea, I want to make the 2nd dimension line position 10mm from the 1st dimension line.

The sequence is:
1) Select the 1st baseline
2) Select the 2nd line
Thanks for taking the time.

 

tim11_manhhieu_0-1735267574752.png

 

0 Likes
Accepted solutions (2)
331 Views
6 Replies
Replies (6)
Message 2 of 7

C_Haines_ENG
Collaborator
Collaborator
Accepted solution

This should do the trick:

 

 

Dim oView As DrawingView = ThisApplication.CommandManager.Pick(kDrawingViewFilter, "Select Drawing View")
Dim Dim1 As GeneralDimension = ThisApplication.CommandManager.Pick(kDrawingDimensionFilter, "Select First Dimension")
Dim Dim2 As GeneralDimension = ThisApplication.CommandManager.Pick(kDrawingDimensionFilter, "Select Second Dimension")

oPoint = Dim2.Text.Origin.Copy

If Dim1.DimensionLine.Direction.X <> 0 Or Dim1.DimensionType = kHorizontalDimensionType

	If Dim1.Text.Origin.Y > oView.Top
		oPoint.Y = Dim1.Text.Origin.Y + 1
	Else
		oPoint.Y = Dim1.Text.Origin.Y - 1
	End If

ElseIf Dim1.DimensionLine.Direction.Y <> 0 Or Dim1.DimensionType = kVerticalDimensionType

	If Dim1.Text.Origin.X > oView.Left
		oPoint.X = Dim1.Text.Origin.X + 1
	Else
		oPoint.X = Dim1.Text.Origin.X - 1
	End If
End If

Dim2.Text.Origin = oPoint

 

 

Unfortunately you have to select the drawing view because you need to know which side of the drawing the dimension is facing and iLogic gives no easy way to get their attached view. 

0 Likes
Message 3 of 7

tim11_manhhieu
Advocate
Advocate

you are genius, the code works flawlessly. VBA code for who need.

 

Option Explicit

Sub AlignDimText()

Dim oView As DrawingView
Set oView = ThisApplication.CommandManager.Pick(kDrawingViewFilter, "Select Drawing View: ")

Dim Dim1 As GeneralDimension
Set Dim1 = ThisApplication.CommandManager.Pick(kDrawingDimensionFilter, "Select First Dimension (Base): ")

Dim Dim2 As GeneralDimension
Set Dim2 = ThisApplication.CommandManager.Pick(kDrawingDimensionFilter, "Select Second Dimension: ")

Dim oPoint As Point2d
Set oPoint = Dim2.Text.Origin.Copy

If Dim1.DimensionLine.Direction.x <> 0 Or Dim1.DimensionType = kHorizontalDimensionType Then

    If Dim1.Text.Origin.y > oView.Top Then
        oPoint.y = Dim1.Text.Origin.y + 1
    Else
        oPoint.y = Dim1.Text.Origin.y - 1
    End If

Else:

    If Dim1.DimensionLine.Direction.y <> 0 Or Dim1.DimensionType = kVerticalDimensionType Then

        If Dim1.Text.Origin.x > oView.Left Then
            oPoint.x = Dim1.Text.Origin.x + 1
        Else
            oPoint.x = Dim1.Text.Origin.x - 1
        End If
    
    End If
    
End If

Dim2.Text.Origin = oPoint

End Sub

 

Message 4 of 7

C_Haines_ENG
Collaborator
Collaborator
Accepted solution

Hey I was able to get rid of having to select the view! Was bugging me a lot so I looked a little harder into fixing it. This does only work with Linear Dimensions but that seems to be what you're using anyway. 

 

 

Dim Dim1 As LinearGeneralDimension = ThisApplication.CommandManager.Pick(kDrawingDimensionFilter, "Select First Dimension")
Dim Dim2 As LinearGeneralDimension = ThisApplication.CommandManager.Pick(kDrawingDimensionFilter, "Select Second Dimension")

oPoint = Dim2.Text.Origin.Copy

If Dim1.DimensionLine.Direction.X <> 0 Or Dim1.DimensionType = kHorizontalDimensionType

	If Dim1.ExtensionLineOne.Direction.Y = 1
		oPoint.Y = Dim1.Text.Origin.Y + 1
	Else
		oPoint.Y = Dim1.Text.Origin.Y - 1
	End If

ElseIf Dim1.DimensionLine.Direction.Y <> 0 Or Dim1.DimensionType = kVerticalDimensionType

	If Dim1.ExtensionLineOne.Direction.X = 1
		oPoint.X = Dim1.Text.Origin.X + 1
	Else
		oPoint.X = Dim1.Text.Origin.X - 1
	End If
	
End If

Dim2.Text.Origin = oPoint

 

0 Likes
Message 5 of 7

tim11_manhhieu
Advocate
Advocate

yes i only use it for linear dimension, i appreciate it. 
VBA code below

 

Option Explicit

Sub AlignDimText2()

Dim Dim1 As LinearGeneralDimension
Set Dim1 = ThisApplication.CommandManager.Pick(kDrawingDimensionFilter, "Select First Dimension (Base): ")

Dim Dim2 As LinearGeneralDimension
Set Dim2 = ThisApplication.CommandManager.Pick(kDrawingDimensionFilter, "Select Second Dimension: ")

Dim oPoint As Point2d
Set oPoint = Dim2.Text.Origin.Copy

If Dim1.DimensionLine.Direction.x <> 0 Or Dim1.DimensionType = kHorizontalDimensionType Then

    If Dim1.ExtensionLineOne.Direction.y = 1 Then
        oPoint.y = Dim1.Text.Origin.y + 1
    Else
        oPoint.y = Dim1.Text.Origin.y - 1
    End If

Else

    If Dim1.DimensionLine.Direction.y <> 0 Or Dim1.DimensionType = kVerticalDimensionType Then

        If Dim1.ExtensionLineOne.Direction.x = 1 Then
            oPoint.x = Dim1.Text.Origin.x + 1
        Else
            oPoint.x = Dim1.Text.Origin.x - 1
        End If
    
    End If
    
End If

Dim2.Text.Origin = oPoint

End Sub
0 Likes
Message 6 of 7

tim11_manhhieu
Advocate
Advocate

I have developed a macro based on the above code, aligning multiple dimension lines. Hope this help.

The sequence is:
1) Scan and select multiple dimension lines
2) Click on the macro
3) Select base dimension

But sometimes an error occurs on line 19, I don't understand much about it, but in short it still works.

 

tim11_manhhieu_2-1736232145273.png

 

Option Explicit

Sub AlignDimension2()

Dim Dim1 As LinearGeneralDimension
Set Dim1 = ThisApplication.CommandManager.Pick(kDrawingDimensionFilter, "Select Base Dimension: ")

Dim oDoc As DrawingDocument
Set oDoc = ThisApplication.ActiveDocument

Dim oSelectSet As SelectSet
Set oSelectSet = oDoc.SelectSet

Dim oItem As Object
Dim oPoint As Point2d

For Each oItem In oSelectSet

    Set oPoint = oItem.Text.Origin.Copy

    If Dim1.DimensionLine.Direction.x <> 0 Or Dim1.DimensionType = kHorizontalDimensionType Then
        oPoint.y = Dim1.Text.Origin.y
    Else
        oPoint.x = Dim1.Text.Origin.x
    End If
   
    oItem.Text.Origin = oPoint
    
Next oItem

oSelectSet.Clear

End Sub

 

0 Likes
Message 7 of 7

C_Haines_ENG
Collaborator
Collaborator

It's not an iLogic solution, but if you are looking for an easy way to keep a bunch of dimensions aligned with each other you should look into using the "Set" variant of dimensions. For example, the "Chain Set" dimension would be perfect for your application.

 

Click the down arrow beside the "Chain" dimension and select "Chain Set". Very useful tool and keeps everything organized. Plus if you ever want to add another item in the chain you can right click on the chain dimension and select "Add Member".