Represents a table entity in AutoCAD.

A table is generally thought of as an n x m rectangular array of cells whose contents consist of annotation objects, primarily text. Tables often contain a title row, a header row, and multiple data rows.

After creating a new table object using the constructor, applications usually need to set the table style, number of rows and columns, column width, row height, insert position, width direction, and normal vector. Applications can also enter text or block contents into each cell using methods of this class.

Tables are commonly used for bills of materials, schedules, data sheets, and other tabular information in technical drawings and documentation.

Hierarchy (View Summary)

Constructors

Properties

borderColorOverrideFlag?: number

Flag for an override of border color (DXF group code 94)

borderLineweightOverrideFlag?: number

Flag for an override of border lineweight (DXF group code 95)

borderVisibilityOverrideFlag?: number

Flag for an override of border visibility (DXF group code 96)

cellTypeOverrides?: AcDbTableCellTypeOverride[]

Table-level cell-type overrides (one entry per cell type)

flowDirection?: number

Flow direction; table-level override (DXF group code 70)

horizontalCellMargin?: number

Horizontal cell margin; table-level override (DXF group code 40)

horizontalDirection?: AcGeVector3d

Horizontal direction vector (DXF group code 11,21,31)

owningBlockRecordId?: string

Hard pointer ID of the owning BLOCK record (DXF group code 343)

rowDataTypes?: number[]

Standard/title/header row data type (DXF group code 97)

rowFormats?: string[]

Standard/title/header row format string (DXF group code 4)

rowUnitTypes?: number[]

Standard/title/header row unit type (DXF group code 98)

suppressHeader?: boolean

Flag for whether the header row is suppressed; table-level override (DXF group code 281)

suppressTitle?: boolean

Flag for whether the title is suppressed; table-level override (DXF group code 280)

tableBorderColors?: AcDbTableBorderColors

Table-level border colors (DXF group codes 63/64/65/66/68/69)

tableDataVersion?: number

Table data version number (DXF group code 280)

tableOverrideFlag?: number

Flag for an override (DXF group code 93)

tableStyleId?: string

Hard pointer ID of the TABLESTYLE object (DXF group code 342)

tableValueFlag?: number

Flag for table value (DXF group code 90)

verticalCellMargin?: number

Vertical cell margin; table-level override (DXF group code 41)

typeName: string = 'Table'

The entity type name

Accessors

  • get blockName(): string
  • Gets the name of the block definition referenced by this INSERT entity.

    The returned value is the block table record key used to resolve blockTableRecord from the current database.

    Returns string

    The referenced block name.

  • 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 dxfTypeName(): string
  • Gets the DXF entity type name written to the file.

    This value is the literal DXF record type emitted for the entity during DXF export, such as LINE, INSERT, or DIMENSION.

    Every concrete entity class must explicitly define this property so the DXF export contract stays local to the entity implementation rather than being inferred by the base class.

    Returns string

    The DXF entity type name used during export

  • get extensionDictionary(): undefined | string
  • Gets the objectId of the extension dictionary owned by this object.

    If the object does not have an extension dictionary, this returns undefined.

    In ObjectARX terms, this is equivalent to AcDbObject::extensionDictionary().

    Returns undefined | string

    The extension dictionary objectId, or undefined

    const dictId = obj.extensionDictionary
    if (dictId) {
    console.log('Has extension dictionary:', dictId)
    }
  • set extensionDictionary(value: undefined | string): void
  • Sets the objectId of the extension dictionary owned by this object.

    This does not create or delete the dictionary object itself — it only establishes or clears the ownership relationship.

    Passing undefined removes the association.

    Parameters

    • value: undefined | string

      The extension dictionary objectId, or undefined

    Returns void

    obj.extensionDictionary = dict.objectId
    
  • 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 isTemp(): any
  • Returns true if this object is temporary and not yet committed to the database.

    A temporary object is identified by its objectId starting with the TEMP prefix.

    Returns any

  • 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 scaleFactors(): AcGePoint3d
  • Gets the X, Y, and Z scale factors for the block reference.

    Returns AcGePoint3d

    The scale factors as a 3D point

    const scaleFactors = blockRef.scaleFactors;
    console.log(`Scale factors: ${scaleFactors.x}, ${scaleFactors.y}, ${scaleFactors.z}`);
  • set scaleFactors(value: AcGeVector3dLike): void
  • Sets the X, Y, and Z scale factors for the block reference.

    Parameters

    Returns void

    blockRef.scaleFactors = new AcGePoint3d(2, 1.5, 1); // 2x X scale, 1.5x Y scale
    
  • 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

  • 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();
    
  • Gets the column width at the specified column index in the table.

    Parameters

    • index: number

      Zero-based column index

    Returns number

    The width of the specified column

  • Creates the extension dictionary for this object if it does not already exist.

    This method closely mirrors the behavior of AcDbObject::createExtensionDictionary() in ObjectARX.

    • If the object already owns an extension dictionary, no new dictionary is created and the existing dictionary's objectId is returned.
    • Otherwise, a new AcDbDictionary is created, added to the same database, owned by this object, and its objectId is stored on this object.

    Returns undefined | string

    The objectId of the extension dictionary

    const dictId = obj.createExtensionDictionary()
    
  • Writes this INSERT entity to DXF, including its attribute sequence.

    The output order follows DXF conventions:

    1. Emit INSERT common/object fields via the base implementation
    2. Emit one ATTRIB section for each attached attribute
    3. Emit a terminating SEQEND record when attributes were written

    Parameters

    • filer: AcDbDxfFiler

      DXF output writer.

    • allXdata: boolean = false

      When true, emits all XData attached to this entity.

    Returns AcDbTable

    The current entity instance.

  • 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
    }
  • Retrieves the XData associated with this object for a given application ID.

    Extended Entity Data (XData) allows applications to attach arbitrary, application-specific data to an AcDbObject. Each XData entry is identified by a registered application name (AppId) and stored as an AcDbResultBuffer.

    This method is conceptually equivalent to AcDbObject::xData() in ObjectARX, but simplified to return the entire result buffer for the specified AppId.

    Parameters

    • appId: string

      The application ID (registered AppId name) that owns the XData

    Returns undefined | AcDbResultBuffer

    The AcDbResultBuffer associated with the AppId, or undefined if no XData exists for that AppId

    const xdata = obj.getXData('MY_APP')
    if (xdata) {
    // Read values from the result buffer
    }
  • Checks if the content of the specified cell is empty.

    Parameters

    • row: number

      Integer specifying the zero-based row index for the cell

    • col: number

      Integer specifying the zero-based column index for the cell

    Returns boolean

    True if the content of the specified cell is empty, false otherwise

  • Gets the number of contents in the specified cell.

    Parameters

    • row: number

      Row index. Must be greater than or equal to 0 and less than the number of rows

    • col: number

      Column index. Must be greater than or equal to 0 and less than the number of columns

    Returns number

    The number of contents in the specified cell

  • Removes the XData associated with the specified application ID.

    After removal, calls to getXData() for the same AppId will return undefined. If no XData exists for the given AppId, this method has no effect.

    This mirrors the behavior of clearing XData for a specific application in ObjectARX rather than removing all XData from the object.

    Parameters

    • appId: string

      The application ID whose XData should be removed

    Returns void

    obj.removeXData('MY_APP')
    
  • Resolves the effective properties of this entity.

    This method determines the final, usable values for entity properties such as layer, linetype, lineweight, color, and other display-related attributes. If a property is not explicitly set on the entity (for example, it is undefined or specified as ByLayer / ByBlock), the value is resolved according to the current AutoCAD system variables and drawing context.

    Typical system variables involved in the resolution process include, but are not limited to:

    • CLAYER – Current layer
    • CELTYPE – Current linetype
    • CELWEIGHT – Current lineweight
    • CECOLOR – Current color

    The resolution follows AutoCAD semantics:

    • Explicitly assigned entity properties take precedence
    • ByLayer properties are inherited from the entity’s layer
    • ByBlock properties are inherited from the owning block reference
    • If no explicit value can be determined, the corresponding system variable or default drawing value is used

    This method does not change user-defined property settings; it only computes and applies the final effective values used for display, selection, and downstream processing.

    Returns void

  • Gets the row height of the specified row in the table.

    Parameters

    • index: number

      Zero-based row index

    Returns number

    The row height of the specified row in the table

  • Sets the column width at the specified column index in the table.

    Parameters

    • index: number

      Zero-based column index

    • width: number

      Width to be used for the specified column

    Returns void

  • Sets the row height for the specified row index in the table.

    Parameters

    • index: number

      Zero-based row index

    • height: number

      Height to be used for the specified row

    Returns void

  • Sets the text for the first content at the specified content index.

    Parameters

    • row: number

      Integer specifying the zero-based row index for the cell

    • col: number

      Integer specifying the zero-based column index for the cell

    • text: string

      Text string to set

    Returns void

  • Sets a uniform column width for all the columns in the table.

    Parameters

    • width: number

      Uniform width to be used for all the columns in the table

    Returns void

  • Sets a uniform row height for all the rows in the table.

    Parameters

    • height: number

      Height to be used for all the rows in the table

    Returns void

  • Attaches or replaces XData for this object.

    If XData already exists for the given AppId, it is replaced by the provided AcDbResultBuffer. The caller is responsible for ensuring that:

    • The AppId is registered in the database's AppId table
    • The result buffer follows valid DXF/XData conventions (e.g. starts with a 1001 group code for the AppId)

    This method is conceptually similar to AcDbObject::setXData() in ObjectARX.

    Parameters

    Returns void

    const rb = new AcDbResultBuffer([
    { code: AcDbDxfCode.ExtendedDataRegAppName, value: 'MY_APP' },
    { code: AcDbDxfCode.ExtendedDataAsciiString, value: 'custom value' }
    ])

    obj.setXData('MY_APP', rb)
  • Gets the object snap points for this block reference.

    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.

    • OptionalinsertionMat: AcGeMatrix3d

      Cumulative insertion transform matrix from parent block references.

    Returns void

  • Gets the text string in the specified cell.

    Parameters

    • row: number

      Integer specifying the zero-based row index for the cell

    • col: number

      Integer specifying the zero-based column index for the cell

    • Optionalcontent: number

      Content index. Should be greater than or equal to 0 and less than the number of contents

    Returns string

    The text string in the specified cell

  • Transforms this block reference by an arbitrary world-space matrix.

    Unlike simple entities that can transform raw geometry directly, an INSERT stores placement as decomposed parameters (position, rotation, scaleFactors, and normal). This method applies the input matrix to a derived local frame, then reconstructs those parameters from the transformed frame so the reference remains representable as an INSERT.

    Recomposition pipeline:

    1. Build local axes from current rotation, normal, and scaleFactors
    2. Transform axis endpoints and origin by matrix
    3. Recompute normal from transformed X/Y axes (with a degenerate fallback)
    4. Project transformed X axis into the new OCS to recover rotation
    5. Recover axis lengths as new scaleFactors
    6. Transform all attached attributes with the same matrix

    Parameters

    Returns AcDbTable

    The current block reference instance.

  • 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