ViewportInfo ============ .. py:module:: rhino3dm .. py:class:: ViewportInfo .. py:method:: ViewportInfo() ViewportInfo constructor .. py:attribute:: IsValidCameraFrame .. py:attribute:: IsValidCamera bool: Gets a value that indicates whether the camera is valid. .. py:attribute:: IsValidFrustum bool: Gets a value that indicates whether the frustum is valid. .. py:attribute:: IsParallelProjection bool: Get or set whether this projection is parallel. .. py:attribute:: IsPerspectiveProjection bool: Get or set whether this projection is perspective. .. py:attribute:: IsTwoPointPerspectiveProjection bool: Gets a value that indicates whether this projection is a two-point perspective. .. py:attribute:: CameraLocation rhino3dm.Point3d: Gets the camera location (position) point. .. py:attribute:: CameraDirection rhino3dm.Vector3d: Gets the direction that the camera faces. .. py:attribute:: CameraUp rhino3dm.Vector3d: Gets the camera up vector. .. py:attribute:: CameraX rhino3dm.Vector3d: Gets the unit "to the right" vector. .. py:attribute:: CameraY rhino3dm.Vector3d: Gets the unit "up" vector. .. py:attribute:: CameraZ rhino3dm.Vector3d: Gets the unit vector in -CameraDirection. .. py:attribute:: ScreenPortAspect float: Gets the screen aspect ratio. This is width / height. .. py:attribute:: CameraAngle float: Gets or sets the 1/2 smallest angle. See for more information. .. py:attribute:: Camera35mmLensLength float: This property assumes the camera is horizontal and crop the film rather than the image when the aspect of the frustum is not 36/24. (35mm film is 36mm wide and 24mm high.) Setting preserves camera location, changes the frustum, but maintains the frustum's aspect. .. py:attribute:: TargetPoint rhino3dm.Point3d: The current value of the target point. This point does not play a role in the view projection calculations. It can be used as a fixed point when changing the camera so the visible regions of the before and after frustums both contain the region of interest. The default constructor sets this point on ON_3dPoint::UnsetPoint. You must explicitly call one SetTargetPoint() functions to set the target point. .. py:attribute:: Id Guid: Sets the viewport's id to the value used to uniquely identify this viewport. There is no approved way to change the viewport id once it is set in order to maintain consistency across multiple viewports and those routines that manage them. .. py:staticmethod:: DefaultTop() [todo] add documentation .. py:staticmethod:: DefaultPerspective() [todo] add documentation .. py:method:: ChangeToParallelProjection(symmetricFrustum) Use this function to change projections of valid viewports from parallel to perspective. It will make common additional adjustments to the frustum and camera location so the resulting views are similar. The camera direction and target point are not be changed. If the current projection is parallel and symmetricFrustum, FrustumIsLeftRightSymmetric() and FrustumIsTopBottomSymmetric() are all equal, then no changes are made and True is returned. :param bool symmetricFrustum: True if you want the resulting frustum to be symmetric. :return: True if the operation succeeded; otherwise, false. :rtype: bool .. py:method:: ChangeToPerspectiveProjection(targetDistance, symmetricFrustum, lensLength) Use this function to change projections of valid viewports from parallel to perspective. It will make common additional adjustments to the frustum and camera location so the resulting views are similar. The camera direction and target point are not changed. If the current projection is perspective and symmetricFrustum, IsFrustumIsLeftRightSymmetric, and IsFrustumIsTopBottomSymmetric are all equal, then no changes are made and True is returned. :param float targetDistance: If RhinoMath.UnsetValue this parameter is ignored. \ Otherwise it must be > 0 and indicates which plane in the current view frustum should be preserved. :param bool symmetricFrustum: True if you want the resulting frustum to be symmetric. :param float lensLength: (pass 50.0 when in doubt) \ 35 mm lens length to use when changing from parallel \ to perspective projections. If the current projection \ is perspective or lens_length is <= 0.0, \ then this parameter is ignored. :return: True if the operation succeeded; otherwise, false. :rtype: bool .. py:method:: ChangeToTwoPointPerspectiveProjection(targetDistance, up, lensLength) Changes projections of valid viewports to a two point perspective. It will make common additional adjustments to the frustum and camera location and direction so the resulting views are similar. If the current projection is perspective and IsFrustumIsLeftRightSymmetric is True and IsFrustumIsTopBottomSymmetric is false, then no changes are made and True is returned. :param float targetDistance: If RhinoMath.UnsetValue this parameter is ignored. Otherwise \ it must be > 0 and indicates which plane in the current \ view frustum should be preserved. :param rhino3dm.Vector3d up: The locked up direction. Pass Vector3d.Zero if you want to use the world \ axis direction that is closest to the current up direction. \ Pass CameraY() if you want to preserve the current up direction. :param float lensLength: (pass 50.0 when in doubt) \ 35 mm lens length to use when changing from parallel \ to perspective projections. If the current projection \ is perspective or lens_length is <= 0.0, \ then this parameter is ignored. :return: True if the operation succeeded; otherwise, false. :rtype: bool .. py:method:: SetCameraLocation(location) Sets the camera location (position) point. :return: True if the operation succeeded; otherwise, false. :rtype: bool .. py:method:: SetCameraDirection(direction) Sets the direction that the camera faces. :param rhino3dm.Vector3d direction: A new direction. :return: True if the direction was set; otherwise false. :rtype: bool .. py:method:: SetCameraUp(up) Sets the camera up vector. :param rhino3dm.Vector3d up: A new direction. :return: True if the direction was set; otherwise false. :rtype: bool .. py:method:: SetFrustum(left, right, bottom, top, near, far) Sets the view frustum. If FrustumSymmetryIsLocked() is true and left != -right or bottom != -top, then they will be adjusted so the resulting frustum is symmetric. :param float left: A new left value. :param float right: A new right value. :param float bottom: A new bottom value. :param float top: A new top value. :param float nearDistance: A new near distance value. :param float farDistance: A new far distance value. :return: True if operation succeeded; otherwise, false. :rtype: bool .. py:method:: GetFrustum() Gets the view frustum. :return: tuple (bool, float, float, float, float, float, float) - True if operation succeeded; otherwise, false. - A left value that will be filled during the call. \ - A right value that will be filled during the call. \ - A bottom value that will be filled during the call. \ - A top value that will be filled during the call. \ - A near distance value that will be filled during the call. \ - A far distance value that will be filled during the call. \ :rtype: (bool, float, float, float, float, float, float) .. py:method:: SetScreenPort() Location of viewport in pixels. These are provided so you can set the port you are using and get the appropriate transformations to and from screen space. // For a Windows window / int width = width of window client area in pixels; / int height = height of window client area in pixels; / port_left = 0; / port_right = width; / port_top = 0; / port_bottom = height; / port_near = 0; / port_far = 1; / SetScreenPort( port_left, port_right, / port_bottom, port_top, / port_near, port_far ); :param int left: A left value. :param int right: A left value. (port_left != port_right) :param int bottom: A bottom value. :param int top: A top value. (port_top != port_bottom) :param int near: A near value. :param int far: A far value. :return: True if input is valid. :rtype: bool .. py:method:: GetScreenPort() Gets the location of viewport in pixels. See value meanings in SetScreenPort. :return: tuple (System.Drawing.Rectangle, int, int) - The rectangle, or Empty rectangle on error. - The near value. This out parameter is assigned during the call. \ - The far value. This out parameter is assigned during the call. \ :rtype: (System.Drawing.Rectangle, int, int) .. py:method:: GetXform(sourceCoordinateSystem, destinationCoordinateSystem) Computes a transform from a coordinate system to another. :param CoordinateSystem sourceSystem: The coordinate system to map from. :param CoordinateSystem destinationSystem: The coordinate system to map into. :return: The 4x4 transformation matrix (acts on the left). :rtype: Transform .. py:method:: Extents(halfViewAngleRadians, worldBbox) Extends this viewport view to include a bounding box. Use Extents() as a quick way to set a viewport to so that bounding volume is inside of a viewports frustum. The view angle is used to determine the position of the camera. :param float halfViewAngleRadians: 1/2 smallest subtended view angle in radians. :param rhino3dm.BoundingBox bbox: A bounding box in 3d world coordinates. :return: True if the operation succeeded; otherwise, false. :rtype: bool .. py:method:: DollyExtents(bbox, border) Dolly the camera location and so that the view frustum contains all of the document objects that can be seen in view. If the projection is perspective, the camera angle is not changed. :return: True if successful. :rtype: bool .. py:method:: FrustumCenterPoint(targetDistance) Return a point on the central axis of the view frustum. This point is a good choice for a general purpose target point. :param float targetDistance: If targetDistance > 0.0, then the distance from the returned \ point to the camera plane will be targetDistance. Note that \ if the frustum is not symmetric, the distance from the \ returned point to the camera location will be larger than \ targetDistance. \ If targetDistance == ON_UNSET_VALUE and the frustum \ is valid with near > 0.0, then 0.5*(near + far) will be used \ as the targetDistance. :return: A point on the frustum's central axis. If the viewport or input \ is not valid, then ON_3dPoint::UnsetPoint is returned. :rtype: rhino3dm.Point3d .. py:method:: TargetDistance(useFrustumCenterFallback) Gets the distance from the target point to the camera plane. Note that if the frustum is not symmetric, then this distance is shorter than the distance from the target to the camera location. :param bool useFrustumCenterFallback: If bUseFrustumCenterFallback is False and the target point is \ not valid, then ON_UNSET_VALUE is returned. \ If bUseFrustumCenterFallback is True and the frustum is valid \ and current target point is not valid or is behind the camera, \ then 0.5*(near + far) is returned. :return: Shortest signed distance from camera plane to target point. \ If the target point is on the visible side of the camera, \ a positive value is returned. ON_UNSET_VALUE is returned \ when the input of view is not valid. :rtype: float