Represents a block reference entity in AutoCAD.

A block reference is used to place, size, and display an instance of the collection of entities within the block table record that it references. Block references allow you to reuse complex geometry by referencing a block definition multiple times with different positions, rotations, and scales.

// Create a block reference
const blockRef = new AcDbBlockReference("MyBlock");
blockRef.position = new AcGePoint3d(10, 20, 0);
blockRef.rotation = Math.PI / 4; // 45 degrees
blockRef.scaleFactors = new AcGePoint3d(2, 2, 1); // 2x scale

// Access block reference properties
console.log(`Block name: ${blockRef.blockTableRecord?.name}`);
console.log(`Position: ${blockRef.position}`);
console.log(`Rotation: ${blockRef.rotation}`);

Hierarchy (View Summary)

Constructors

  • Creates a new block reference entity.

    This constructor initializes a block reference with the specified block name. The position is set to the origin, rotation to 0, normal to Z-axis, and scale factors to 1.

    Parameters

    • blockName: string

      The name of the block table record to reference

    Returns AcDbBlockReference

    const blockRef = new AcDbBlockReference("MyBlock");
    blockRef.position = new AcGePoint3d(5, 10, 0);
    blockRef.rotation = Math.PI / 6; // 30 degrees

Properties

typeName: string = 'BlockReference'

The entity type name

Accessors

  • get blockTableRecord(): undefined | AcDbBlockTableRecord
  • Gets the block table record referenced by this block reference.

    The referenced block table record contains the entities that the block reference will display.

    Returns undefined | AcDbBlockTableRecord

    The block table record, or undefined if not found

    const blockRecord = blockRef.blockTableRecord;
    if (blockRecord) {
    console.log(`Block name: ${blockRecord.name}`);
    }
  • get blockTransform(): AcGeMatrix3d
  • Gets the block-local transformation matrix of this block reference.

    This matrix represents the INSERT entity transform in Object Coordinate System (OCS), excluding the extrusion / normal transformation.

    In AutoCAD, a block reference transform is conceptually applied in the following order:

    1. Translate geometry by the negative block base point
    2. Apply non-uniform scaling
    3. Apply rotation about the block Z axis (OCS Z)
    4. Translate to the insertion point
    5. Finally, transform from OCS to WCS using the entity normal (extrusion)

    This property returns the matrix for steps 1–4 only.

    The OCS → WCS transformation derived from normal must NOT be included here, because:

    • The rotation angle of an INSERT is defined in OCS
    • Applying OCS earlier would rotate around an incorrect axis
    • Cached block geometry must remain reusable for different normals

    Therefore, the extrusion transformation is applied after rendering (see AcDbRenderingCache.draw), matching AutoCAD / RealDWG behavior.

    blockTransform =
    T(position)
    · R(rotation about OCS Z)
    · S(scaleFactors)
    · T(-blockBasePoint)
    • The returned matrix operates in OCS space
    • Rotation is always about the OCS Z axis
    • normal is applied later as a final orientation step
    • This mirrors the internal behavior of AcDbBlockReference in ObjectARX

    Returns AcGeMatrix3d

    A transformation matrix representing the block-local INSERT transform in OCS, excluding extrusion.

  • get database(): AcDbDatabase
  • Gets the database in which this object is resident.

    When an object isn't added to a database, this property returns the current working database. After it is added to a database, it will be set automatically. You should never set this value manually.

    Returns AcDbDatabase

    The database this object belongs to

    const db = obj.database;
    
  • set database(db: AcDbDatabase): void
  • Sets the database for this object.

    This is typically set automatically when the object is added to a database. Manual setting should be avoided unless you know what you're doing.

    Parameters

    Returns void

    obj.database = myDatabase;
    
  • get geometricExtents(): AcGeBox3d
  • Gets the geometric extents (bounding box) of this block reference.

    This method calculates the bounding box by transforming the geometric extents of all entities in the referenced block according to the block reference's position, rotation, and scale factors.

    Returns AcGeBox3d

    The bounding box that encompasses the entire block reference

    const extents = blockRef.geometricExtents;
    console.log(`Block bounds: ${extents.minPoint} to ${extents.maxPoint}`);
  • get layer(): string
  • Gets the name of the layer referenced by this entity.

    Returns string

    The layer name

    const layerName = entity.layer;
    
  • set layer(value: string): void
  • Sets the name of the layer for this entity.

    Parameters

    • value: string

      The new layer name

    Returns void

    entity.layer = 'MyLayer';
    
  • get lineStyle(): AcGiLineStyle
  • Gets the line style for this entity.

    This method returns the line style based on the entity's linetype and other properties.

    Returns AcGiLineStyle

    The line style object

    const lineStyle = entity.lineStyle;
    
  • get lineType(): string
  • Gets the name of the line type referenced by this entity.

    Returns string

    The linetype name

    const lineType = entity.lineType;
    
  • set lineType(value: string): void
  • Sets the name of the line type for this entity.

    Parameters

    • value: string

      The new linetype name

    Returns void

    entity.lineType = 'DASHED';
    
  • get linetypeScale(): number
  • Gets the line type scale factor of this entity.

    When an entity is first instantiated, its line type scale is initialized to an invalid value. When the entity is added to the database, if a linetype scale has not been specified for the entity, it is set to the database's current line type scale value.

    Returns number

    The linetype scale factor

    const scale = entity.linetypeScale;
    
  • set linetypeScale(value: number): void
  • Sets the line type scale factor for this entity.

    Parameters

    • value: number

      The new linetype scale factor

    Returns void

    entity.linetypeScale = 2.0;
    
  • get objectId(): string
  • Gets the object ID.

    AutoCAD uses 64-bit integers to represent handles, which exceed the maximum integer value of JavaScript. Therefore, strings are used to represent object handles.

    Returns string

    The object ID as a string

    const id = obj.objectId;
    console.log(`Object ID: ${id}`);
  • set objectId(value: string): void
  • Sets the object ID.

    Parameters

    • value: string

      The new object ID

    Returns void

    obj.objectId = 'new-object-id';
    
  • get ownerId(): string
  • Gets the object ID of the owner of this object.

    Returns string

    The owner object ID

    const ownerId = obj.ownerId;
    
  • set ownerId(value: string): void
  • Sets the object ID of the owner of this object.

    Parameters

    • value: string

      The new owner object ID

    Returns void

    obj.ownerId = 'parent-object-id';
    
  • get rgbColor(): number
  • Gets the RGB color of this entity.

    This method handles the conversion of color indices (including ByLayer and ByBlock) to actual RGB colors. It resolves layer colors and block colors as needed.

    Returns number

    The RGB color value as a number

    const rgbColor = entity.rgbColor;
    console.log(`RGB: ${rgbColor.toString(16)}`);
  • get rotation(): number
  • Gets the rotation value of the block reference.

    The rotation value is relative to the X axis of a coordinate system that is parallel to the OCS of the block reference, but has its origin at the position point of the block reference. The rotation axis is the Z axis of this coordinate system with positive rotations going counterclockwise when looking down the Z axis towards the origin.

    Returns number

    The rotation value in radians

    const rotation = blockRef.rotation;
    console.log(`Rotation: ${rotation} radians (${rotation * 180 / Math.PI} degrees)`);
  • set rotation(value: number): void
  • Sets the rotation value of the block reference.

    Parameters

    • value: number

      The new rotation value in radians

    Returns void

    blockRef.rotation = Math.PI / 4; // 45 degrees
    
  • get type(): string
  • Gets the type name of this entity.

    This method returns the entity type by removing the "AcDb" prefix from the constructor name.

    Returns string

    The entity type name

    const entity = new AcDbLine();
    console.log(entity.type); // "Line"
  • get visibility(): boolean
  • Gets whether this entity is visible.

    Returns boolean

    True if the entity is visible, false otherwise

    const isVisible = entity.visibility;
    
  • set visibility(value: boolean): void
  • Sets whether this entity is visible.

    Parameters

    • value: boolean

      True to make the entity visible, false to hide it

    Returns void

    entity.visibility = false; // Hide the entity
    

Methods

  • Appends the specified AcDbAttribute object to the attribute list of the block reference, establishes the block reference as the attribute's owner, and adds the attribute to the AcDbDatabase that contains the block reference.

    Parameters

    • attrib: AcDbAttribute

      The attribute to be appended to the attribute list of the block reference.

    Returns void

  • Closes the object.

    All changes made to the object since it was opened are committed to the database, and a "closed" notification is sent. This method can be overridden by subclasses to provide specific cleanup behavior.

    Returns void

    obj.close();
    
  • Erase the current entity from the associated database.

    Returns boolean

    — true if an entity in the database existed and has been removed, or false if the entity does not exist.

  • Gets the value of the specified attribute.

    This method will throw an exception if the specified attribute doesn't exist. Use getAttrWithoutException() if you want to handle missing attributes gracefully.

    Parameters

    • attrName: string

      The name of the attribute to retrieve

    Returns any

    The value of the specified attribute

    When the specified attribute doesn't exist

    try {
    const value = obj.getAttr('objectId');
    } catch (error) {
    console.error('Attribute not found');
    }
  • Gets the value of the specified attribute without throwing an exception.

    This method returns undefined if the specified attribute doesn't exist, making it safer for optional attributes.

    Parameters

    • attrName: string

      The name of the attribute to retrieve

    Returns any

    The value of the specified attribute, or undefined if it doesn't exist

    const value = obj.getAttrWithoutException('optionalAttribute');
    if (value !== undefined) {
    // Use the value
    }
  • Gets the color of the layer this entity belongs to.

    This method retrieves the color from the layer table for the layer this entity belongs to.

    Returns null | AcCmColor

    The layer color, or undefined if the layer doesn't exist

    const layerColor = entity.getLayerColor();
    
  • Gets the grip points for this entity.

    Grip points are the control points that can be used to modify the entity. This method should be overridden by subclasses to provide entity-specific grip points.

    Returns AcGePoint3d[]

    Array of grip points as 3D points

    const gripPoints = entity.subGetGripPoints();
    
  • Gets the object snap points for this mtext.

    Object snap points are precise points that can be used for positioning when drawing or editing. This method provides snap points based on the specified snap mode.

    Parameters

    • osnapMode: AcDbOsnapMode

      The object snap mode

    • pickPoint: AcGeVector3dLike

      The point where the user picked

    • lastPoint: AcGeVector3dLike

      The last point

    • snapPoints: AcGeVector3dLike[]

      Array to populate with snap points

    • OptionalgsMark: string

      The object id of subentity. For now, it is used by INSERT entity only. In AutoCAD, it uses AcGiSubEntityTraits::setSelectionMarkerInput to set GS marker of the subentity involved in the object snap operation. For now, we don't provide such a GS marker mechanism yet. So passed id of subentity as GS marker. Maybe this behavior will change in the future.

    Returns void

  • Transforms this entity by the specified matrix.

    This method applies a geometric transformation to the entity. Subclasses should override this method to provide entity-specific transformation behavior.

    Parameters

    Returns this

    This entity after transformation

    const matrix = AcGeMatrix3d.translation(10, 0, 0);
    entity.transformBy(matrix);
  • Called by cad application when it wants the entity to draw itself in WCS (World Coordinate System) and acts as a wrapper / dispatcher around subWorldDraw(). The children class should never overidde this method.

    It executes the following logic:

    • Handles traits (color, linetype, lineweight, transparency, etc.)
    • Calls subWorldDraw() to do the actual geometry output

    Parameters

    • renderer: AcGiRenderer<AcGiEntity>

      The renderer to use for drawing

    • Optionaldelay: boolean

      The flag to delay creating one rendered entity and just create one dummy entity. Renderer can delay heavy calculation operation to avoid blocking UI when this flag is true. For now, text and mtext entity supports this flag only. Other types of entities just ignore this flag.

    Returns undefined | AcGiEntity

    The rendered entity, or undefined if drawing failed