SetCustomScale Method (ActiveX)

Sets the custom scale for a layout or plot configuration.

Supported platforms: Windows only

Signature

VBA:

object.SetCustomScale Numerator, Denominator
object

Type: Layout, PlotConfiguration

The objects this method applies to.

Numerator

Access: Input-only

Type: Double

A positive number representing the numerator in the scale ratio. This value represents the number of inches or mm for the scale.

Denominator

Access: Input-only

Type: Double

A positive number representing the denominator in the scale ratio. This value represents the number of drawing units for the scale.

Return Value (RetVal)

No return value.

Remarks

The units for the Numerator parameter can be found in the PaperUnits property.

The Numerator and Denominator parameters must be greater than zero.

Changes made by this method will not be visible until after a regeneration of the drawing. Use the Regen method to regenerate the drawing.

Examples

VBA:

Sub Example_SetCustomScale()
    ' This example will access the Layouts collection for the current drawing
    ' and list basic information about the custom scale for each Layout.
    ' It will then change the custom scale information for model space and re-display
    ' the scale information.

    Dim Layouts As AcadLayouts, Layout As ACADLayout
    Dim msg As String
    Dim Numerator As Double, Denominator As Double
    Dim Measurement As String
    
    ' Display current scale information
    GoSub DISPLAY_SCALE_INFO
    
    ' Modify scale
    Numerator = 1
    Denominator = 1
    
    ThisDrawing.Layouts("Model").SetCustomScale Numerator, Denominator
    ThisDrawing.Regen acAllViewports
            
    ' Display new scale information
    GoSub DISPLAY_SCALE_INFO
        
    Exit Sub
    
DISPLAY_SCALE_INFO:
    ' Get layouts collection from document object
    Set Layouts = ThisDrawing.Layouts
    
    msg = vbCrLf & vbCrLf   ' Start with a space
    
    ' Get the scale information of every layout in this drawing
    For Each Layout In Layouts
        msg = msg & Layout.name & vbCrLf
        
        ' Get scale information
        Layout.GetCustomScale Numerator, Denominator
        
        ' Identify whether inches or millimeters are being used.
        Measurement = IIf(Layout.PaperUnits = acInches, " inch(es)", " millimeter(s)")
        
        ' Format for display
        msg = msg & vbTab & "Contains " & Numerator & Measurement & vbCrLf
        msg = msg & vbTab & "Contains " & Denominator & " drawing units" & vbCrLf
        msg = msg & "_____________________" & vbCrLf
        
    Next
    
    ' Display custom scale information
    MsgBox "Custom scale information for the current drawing is: " & msg
    
    Return
End Sub

Visual LISP:

(vl-load-com)
(defun c:Example_SetCustomScale()
    ;; This example will access the Layouts collection for the current drawing
    ;; and list basic information about the custom scale for each Layout.
    ;; It will then change the custom scale information for model space and re-display
    ;; the scale information.
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))

    ;; Display current scale information
    (setq Layouts (vla-get-Layouts doc))
    
    (setq msg "")
    
    ;; Get the scale information of every layout in this drawing
    (vlax-for Layout Layouts
        (setq msg (strcat msg (vla-get-Name Layout) "\n"))
        
        ;; Get scale information
        (vla-GetCustomScale Layout 'Numerator 'Denominator)
        
        ;; Are we using inches or millimeters
        (setq Measurement (if (= (vla-get-PaperUnits Layout) acInches) " inch(es)\n" " millimeter(s)\n"))
        
        ;; Format for display
        (setq msg (strcat msg "  Contains " (rtos Numerator 2) Measurement
                              "  Contains " (rtos Denominator 2) " drawing units\n"
                              "_____________________\n"))   
    )
    
    ;; Display custom scale information
    (alert (strcat "Custom scale information for the current drawing is: " msg))
  
    ;; Modify scale
    (setq Numerator 1
          Denominator 1)
    
    (vla-SetCustomScale (vla-Item (vla-get-Layouts doc) "Model") Numerator Denominator)
    (vla-Regen doc acAllViewports)
            
    ;; Display new scale information
    (setq Layouts (vla-get-Layouts doc))
    
    (setq msg "")
    
    ;; Get the scale information of every layout in this drawing
    (vlax-for Layout Layouts
        (setq msg (strcat msg (vla-get-Name Layout) "\n"))
        
        ;; Get scale information
        (vla-GetCustomScale Layout 'Numerator 'Denominator)
        
        ;; Are we using inches or millimeters
        (setq Measurement (if (= (vla-get-PaperUnits Layout) acInches) " inch(es)\n" " millimeter(s)\n"))
        
        ;; Format for display
        (setq msg (strcat msg "  Contains " (rtos Numerator 2) Measurement
                              "  Contains " (rtos Denominator 2) " drawing units\n"
                              "_____________________\n"))   
    )

    ;; Display custom scale information
    (alert (strcat "Custom scale information for the current drawing is: " msg))
)