Quantcast
Channel: Manufacturing DevBlog
Viewing all articles
Browse latest Browse all 518

Align DrawingView to Face and Edge

$
0
0

By Adam Nagy

Wrote a few articles on drawing views already, but they do not seem to be enough :)

http://adndevblog.typepad.com/manufacturing/2014/11/rotate-drawing-view-around-x-axis-of-sheet.html 
http://adndevblog.typepad.com/manufacturing/2014/11/rotate-camera-around-any-axis-any-angle.html 
http://adndevblog.typepad.com/manufacturing/2014/11/drawing-coordinate-systems-and-camera.html 

So, now here is one on aligning the view to show a given face. To make this work directly in a drawing, where only edges can be selected, we'll let the user select two drawing curve segments. From those we'll find the corresponding model edges, and then we'll find the common face of those edges. Using the Face's normal we'll set the camera's view direction, and using the second selected Edge's direction we'll set the UpVector of the view.
Note that the below code only works with planar faces and linear edges, and the direction of the edge used to set the UpVector may be opposite to what you'd like in which case the view will be upside-down.

Function GetFace(edges() As Edge) As Face
  Dim i As Integer
  Dim j As Integer
  For i = 1 To 2
    For j = 1 To 2
      If edges(0).Faces(i) Is edges(1).Faces(j) Then
        Set GetFace = edges(0).Faces(i)
        Exit Function
      End If
    Next
  Next
End Function

Sub SetViewDirection()
  Dim doc As DrawingDocument
  Set doc = ThisApplication.ActiveDocument

  Dim edges(1) As Edge
  Set edges(0) = doc.SelectSet(1).Parent.ModelGeometry
  Set edges(1) = doc.SelectSet(2).Parent.ModelGeometry
  
  Dim f As Face
  Set f = GetFace(edges)
  
  Dim p As Plane
  Set p = f.Geometry
  
  Dim dv As DrawingView
  Set dv = doc.SelectSet(1).Parent.Parent
  
  Dim c As Camera
  Set c = dv.Camera
    
  ' Set Eye or Target
  Dim pt As Point
  If f.IsParamReversed Then
    Set pt = c.Eye.Copy
    Call pt.TranslateBy(p.Normal.AsVector())
    c.Target = pt
  Else
    Set pt = c.Target.Copy
    Call pt.TranslateBy(p.Normal.AsVector())
    c.Eye = pt
  End If' Set UpVector
  Dim ls As LineSegment
  Set ls = edges(1).Geometry
  c.UpVector = ls.Direction
  Call c.ApplyWithoutTransition
End Sub

Here is the result:

Drawingview
 

 


Viewing all articles
Browse latest Browse all 518

Trending Articles