[mxcad_2d API documentation] (../README. md)/[2d] (../modules/2d. md)/McObject
Class: McObject
2d.McObject
McObject is the main control object of MxCAD, responsible for undertaking the core capabilities of CAD application instances.
Description
This class is not a regular entity object, but rather the "controller/entry point" for the entire MxCAD runtime. It can accomplish: -Retrieve the current CAD instance and operate the graphics database; -Register and handle various events (such as selection changes, file opening completion, database modifications); -Call up drawing, redrawing, coordinate conversion, temporary display and other abilities; -Set global display and running parameters.
Usage:
- First, obtain the current CAD instance through MxCpp. getCurrentMxCAD() or MxCpp. mxcad;
- Call its methods again for drawing, interaction, or status monitoring; If you need to create a new independent instance, first use new McObject (), and then call create (config) to initialize it.
Example
import { MxCpp } from "mxcad";
const mxcad = MxCpp.getCurrentMxCAD();
//Read the current open file name
console.log(mxcad.currentFileName);
//Registration selection change event
mxcad.on("selectChange", (ids) => {
Console.log ("number of selected objects:", ids. length);
});Remarks
Applicable scenarios include: -Secondary development plugins: monitoring object selection, file opening, database changes; -Custom drawing: temporary highlighting, dynamic preview, auxiliary annotation; -Graphic operations: add/modify entities, redraw views, control display parameters; -Interactive development: Integrate with MxDraw and MxCAD event systems.
Table of contents
Constructors
Accessors
- database
- drawColor
- drawColorIndex
- drawDimStyle
- drawLayer
- drawLineTypeScale
- drawLineWeight
- drawLineWidth
- drawLinetype
- drawPatternDefinition
- drawTextStyle
- drawUseDefaultProperties
- mxdraw
Methods
- AddTureTypeTextStyle
- GetDocumentFileName
- addCurrentSelect
- addDimStyle
- addImageDefine
- addLayer
- addLinetype
- addLinetypeEx
- addPatternDefinition
- addSystemVarNameForEvent
- addTextStyle
- cadCoord2View
- cadCoordLong2View
- cadToSmallcoord
- callEvent
- clearDwgBackground
- clearGripDisplay
- clearMxCurrentSelect
- create
- createLayout
- deleteLayout
- drawArc
- drawArc2
- drawArc3
- drawBlockReference
- drawCircle
- drawDimAligned
- drawDimAngular
- drawDimDiametric
- drawDimOrdinate
- drawDimRadial
- drawDimRotated
- drawEllipse
- drawEllipseArc
- drawEntity
- drawHatch
- drawImage
- drawLine
- drawLine3d
- drawMText
- drawPathToHatch
- drawPathToPolyline
- drawPathToSpline
- drawPoint
- drawSolid
- drawText
- endBlockEdit
- endViewPortEdit
- getAllLayoutName
- getBackgroundEntity
- getCooperate
- getCurrentDatabaseDrawColor
- getCurrentFileName
- getCurrentLayout
- getCurrentLayoutId
- getCurrentOpenFileMd5
- getCurrentOriginaFileName
- getDatabase
- getImp
- getMxCADViewSpinMatrix
- getMxCpp
- getMxDrawObject
- getSysVarDouble
- getSysVarLong
- getSysVarPoint
- getSysVarString
- getTempDraw
- getViewBackgroundColor
- getViewCADCoord
- iniAuthorizedService
- init
- initMxObject
- initRegist
- insertBlock
- isBlockEditing
- isTryVersion
- isUselessLayer
- isViewPortEditing
- layoutRename
- loadDwgBackground
- loadImage
- loadImageBase64
- makeCurrent
- newFile
- objectIdToObject
- off
- on
- openWebFile
- pathCircle
- pathLineTo
- pathLineToEx
- pathMakeClosed
- pathMakeExclude
- pathMoveTo
- pathMoveToEx
- redo
- regen
- regenBlockRecord
- saveFile
- saveFileToUrl
- setAttribute
- setBrowse
- setCurrentFileName
- setCurrentLayout
- setCurrentOriginaFileName
- setSysVarDouble
- setSysVarLong
- setSysVarPoint
- setSysVarPoint2d
- setSysVarString
- setViewBackgroundColor
- showLineWeight
- smallcoordToCad
- startBlockEdit
- startViewPortEdit
- undo
- undoIndexIncrease
- undoMark
- updateDisplay
- updateLayerDisplayStatus
- viewCoord2Cad
- viewCoordLong2Cad
- zoomAll
- zoomAngle
- zoomCenter
- zoomScale
- zoomW
Constructors
constructor
• new McObject(imp?)
Create a McObject instance.
This constructor is usually only used when you need to manually create a standalone instance. If you only want to operate on the currently running CAD window, prioritize using MxCpp. getCurrentMxCAD() or MxCpp. mxcad.
Parameters
| Name | Type | Description |
|---|---|---|
imp? | any | The underlying implementation object; Usually injected automatically by the system, developers generally do not need to manually input it. |
Accessors
database
• get database(): McDbDatabase
Return database object
Returns
drawColor
• get drawColor(): McCmColor
Get drawing colors
Returns
Return to drawing color
• set drawColor(val): void
Set drawing color
Parameters
| Name | Type | Description |
|---|---|---|
| Val | [McCMColor] (2d. McCmColor. md) | Draw colors |
Returns
void
drawColorIndex
• get drawColorIndex(): number
Set color index for drawing
Returns
number
Val color index type
• set drawColorIndex(val): void
Set color index for drawing
Parameters
| Name | Type | Description |
|---|---|---|
| Val | number | color index type |
Returns
void
Example
import { MxCpp, ColorIndexType, McObject } from "mxcad" ;
const mxcad:McObject = MxCpp.App.getCurrentMxCAD();
mxcad.drawColorIndex = ColorIndexType.kMagenta;drawDimStyle
• get drawDimStyle(): string
Get the currently drawn annotation style
Returns
string
• set drawDimStyle(val): void
Set the annotation style for the current drawing
Parameters
| Name | Type | Description |
|---|---|---|
| Val | string | Style Name |
Returns
void
drawLayer
• get drawLayer(): string
Get drawing layers
Returns
string
Return to drawing layer
• set drawLayer(val): void
Set drawing layer
Parameters
| Name | Type | Description |
|---|---|---|
| Val | string | Draw layers |
Returns
void
Example
import { MxCpp, McObject } from 'mxcad'
const mxcad:McObject = MxCpp.getCurrentMxCAD();
mxcad.drawLayer = "MtextLayer";drawLineTypeScale
• get drawLineTypeScale(): number
Obtain the scale of the drawn line type
Returns
number
Return to drawing line type scale
• set drawLineTypeScale(val): void
Set the drawing line scale
Parameters
| Name | Type | Description |
|---|---|---|
| Val | number | Draw line type scale |
Returns
void
drawLineWeight
• get drawLineWeight(): LineWeight
Get drawing line width
Returns
Return to drawing line width
• set drawLineWeight(val): void
Set drawing line width
Parameters
| Name | Type | Description |
|---|---|---|
| Val | [LineWeight] (../enums/2d. McDb. LineWeight. md) | Draw line width |
Returns
void
Example
import { MxCpp, McDb, McObject } from "mxcad" ;
const mxcad: McObject = MxCpp.getCurrentMxCAD();
mxcad.drawLineWeight(McDb.LineWeight.kLnWtByLayer)drawLineWidth
• get drawLineWidth(): number
Get the current drawn line width
Returns
number
• set drawLineWidth(val): void
Set the current drawn line width
Parameters
| Name | Type | Description |
|---|---|---|
| Val | number | line width |
Returns
void
drawLinetype
• get drawLinetype(): string
Obtain the drawing line type
Returns
string
Return to drawing line type
• set drawLinetype(val): void
Set drawing line type
Parameters
| Name | Type | Description |
|---|---|---|
| Val | string | Draw line type names |
Returns
void
Example
import { MxCpp, McObject } from "mxcad" ;
const mxcad: McObject = MxCpp.getCurrentMxCAD();
mxcad.addLinetype("MyLineType3", "30,-10");
mxcad.drawLinetype = "MyLineType3";drawPatternDefinition
• get drawPatternDefinition(): string
Get the current line type definition drawn
Returns
string
Example
import { MxCpp, McObject } from "mxcad"
const mxcad: McObject = MxCpp.getCurrentMxCAD()
//Draw another patterned fill
//45, 0,0, 0,.25
//45, .176776695,0, 0,.25, .125,-.0625
mxcad.addPatternDefinition("MyHatchPattern2", "((45, 0,0, 0,0.25) (45, 0.176776695,0, 0,0.25, 0.125,-0.0625))");
mxcad.drawPatternDefinition = "MyHatchPattern2"
//Define the starting point of a path
mxcad.pathMoveToEx(800, 3300, 0, 0, 0.3);
//The next point on the path
mxcad.pathLineTo(900, 3300);
//The next point on the path
mxcad.pathLineTo(900, 3400);
//The next point on the path
mxcad.pathLineTo(800, 3300);
//Transform the path into a fill, where 80 is the scaling ratio of the fill pattern
mxcad.drawPathToHatch(80);• set drawPatternDefinition(val): void
Set the line type definition for the current drawing
Parameters
| Name | Type | Description |
|---|---|---|
| Val | string | Line type definition |
Returns
void
drawTextStyle
• get drawTextStyle(): string
Get the style of drawing text
Returns
string
Return the name of the text style for drawing
• set drawTextStyle(val): void
Set the style for drawing text
Parameters
| Name | Type | Description |
|---|---|---|
| Val | string | Draw text style name |
Returns
void
Example
import { MxCpp, McObject } from "mxcad" ;
const mxcad: McObject = MxCpp.getCurrentMxCAD();
mxcad.addTextStyle("MyTextStyle", "italicc.shx", "gbcbig.shx", 0.7);
mxcad.drawTextStyle = "MyTextStyle";drawUseDefaultProperties
• get drawUseDefaultProperties(): boolean
Return the number of drawings starting with the call 'draw', using the current default properties of the database.
Returns
boolean
• set drawUseDefaultProperties(val): void
Set the number of drawings starting with 'draw' when calling, using the current default properties of the database
Parameters
| Name | Type | Description |
|---|---|---|
| Val | boolean | Line width |
Returns
void
mxdraw
• get mxdraw(): MxDrawObject
Return the MxDraw object bound to the MxCAD object.
Returns
MxDrawObject
MxDraw object
Methods
AddTureTypeTextStyle
▸ AddTureTypeTextStyle(sName, sTrueTypeFontName?, dXScale?): McObjectId
Add text styles using TrueType fonts
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
sName | string | undefined | - |
| STrueTypeFontName | string | "" | TrueType font name, if left blank, use the default TrueType font |
| DXScale | number | 1.0 | X-direction scaling ratio |
Returns
Example
//Using TrueType fonts for text styles in MxCAD
import { MxCpp } from "mxcad"
function Mx_Test_TrueText() {
let mat: McGeMatrix3d = new McGeMatrix3d();
let mxcad = MxCpp.getCurrentMxCAD();
//Clear the current display content
mxcad.newFile();
MxCpp.App.loadFonts([], [], ["syadobe", "simsun", "sysimsun"], () => {
mxcad.AddTureTypeTextStyle("ht_style", "syadobe");
mxcad.AddTureTypeTextStyle("st_style", "simsun");
mxcad.drawTextStyle = "ht_style";
mxcad.drawColor = new McCmColor(200, 255, 50);
Let idText=mxcad.drawText (0, 3500, "TrueType Text Test for Drawing Control", 100, 0, 0, 1);
let ent = idText.getMcDbEntity();
if (ent) ent.textStyle = "st_style";
let txt: McDbText = ent as McDbText;
txt.adjustAlignment();
mxcad.zoomAll();
mxcad.regen();
mxcad.updateDisplay();
});
}GetDocumentFileName
▸ GetDocumentFileName(): string
Get the file name of the current openWebFile open file. If the file is a stream data, this variable will take the value of filename in the request header returned by the server.
Returns
string
addCurrentSelect
▸ addCurrentSelect(id, isDisplayGrid?, fireSelectEvent?): void
Add the object to the current selection
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
id | McObjectId | McObjectId[] | undefined | Object ID or object ID array |
| IsDisplayGrid | boolean | true | Whether to display grips, default to true |
| FireSelectEvent | boolean | true | Whether to trigger a selection event, default to true |
Returns
void
void
Example
import { MxCpp, McObject } from "mxcad"
let mxcad:McObject = MxCpp.getCurrentMxCAD();
let id = mxcad.drawLine(0,0,1000,1000);
mxcad.addCurrentSelect(id);addDimStyle
▸ addDimStyle(pszName, pszDoubleData, pszIntData, pszStringData, pszIdData): McObjectId
Add annotation style
Parameters
| Name | Type | Description |
|---|---|---|
| PszName | string | Style Name |
| PszDoubleData | string | Double precision data |
| PszIntData | string | integer data |
pszStringData | string | String data |
| PszIdData | string | ID type data |
Returns
Description
PszDoubleData Double Precision Data
| System Variables | Values | Function Description |
|---|---|---|
| Dimaltf | 143 | Control the multiplier for converting units |
| Dimasz | 41 | Control the size of dimension lines and lead arrows. And control the size of the baseline |
| Dimcen | 141 | Control the marking of circle or arc centers and the drawing of centerlines |
| Dimdle | 46 | When using a small diagonal line instead of an arrow for annotation, set the distance from the dimension line beyond the dimension boundary line |
| Dimdli | 43 | Control the spacing of dimension lines in baseline annotation |
| Dimexe | 44 | Export named annotation styles and their settings to an external file |
| Dimexo | 42 | Specify the distance from the origin of the dimension extension line |
| Dimgap | 147 | Set the distance around the annotation text when the dimension line is broken to conform to the annotation text |
| Dimlfac | 144 | Set the scaling factor for linear annotation measurement values |
| Dimrnd | 45 | Rounds all annotated distances to the specified value |
| Dimscale | 40 | Set the global scale factor applied to the annotation variable (used to specify size, distance, or offset) |
| Dimtfac | 146 | As set through the DIMTXT system variable, specify the scaling factor of the text height of the score and tolerance values relative to the annotation text height |
| Dimtm | 48 | Set the minimum (i.e. lowest) tolerance limit for the annotation text |
| Dimtp | 47 | Set the maximum (i.e. highest) tolerance limit for the annotation text |
| Dimtsz | 142 | DIMTSZ=0 Using standard solid arrows, arrows marked with DIMTSZ>0 are replaced with sloping lines (building markings), and the value of DIMTSZ is the length of this sloping line |
| Dimtvp | 145 | Control the vertical position of the annotation text above or below the dimension line |
| Dimtxt | 140 | Specify the height of the annotation text (unless the current text style has a fixed height) |
| Dimaltrnd | 148 | Rounding conversion annotation unit |
Description
PszIntData integer data
| System Variables | Values | Function Description |
|---|---|---|
| Dimadec | 179 | Control the precision decimal places displayed in the angle annotation |
| Dimalt | 170 | Controls the display of conversion units in annotations |
| Dimaltd | 171 | Control the number of decimal places in the conversion unit |
| Dimalttd | 274 | Set the decimal place for the tolerance value in the conversion annotation unit |
| Dimalttz | 286 | Control the zeroing process of tolerance values |
| Dimaltu | 273 | Set the unit format for the conversion units of all annotation sub styles (excluding angular annotations) |
| Dimaltz | 285 | Control the zeroing process for the annotation values of conversion units |
| Dimaunit | 275 | Set the unit format for angle annotation |
| Dimclrd | 176 | Specify colors for dimension lines, arrows, and dimension leaders |
| Dimctre | 177 | Specify colors for dimension lines, center marks, and centerlines |
| Dimclrt | 178 | Specify the color for the annotation text |
| Dimdec | 271 | Set the number of decimal places displayed in the primary unit of the annotation |
| When the space within the dimension line is insufficient to accommodate both the annotation text and the arrow, this system variable will determine the arrangement of both | ||
| Dimjust | 280 | Control the horizontal position of the annotation text |
| Dimlim | 72 | Generate annotation boundaries as default text |
| Dimsah | 173 | Control the display of dimension line arrow blocks |
| Dimsd1 | 281 | Control whether to hide the first dimension line and arrow |
| Dimsd2 | 282 | Control whether to hide the second dimension line and arrow |
| Dimse1 | 75 | Control whether to hide the first dimension line |
| Dimse2 | 76 | Control whether to hide the second dimension line |
| Dimsoxd | 175 | If there is not enough space within the dimension line, hide the arrow |
| Dimtad | 77 | Control the vertical position of the text relative to the dimension line |
| Dimtdec | 272 | Set the number of decimal places displayed in the tolerance value of the primary unit of the annotation |
| Dimtih | 73 | Controls the position of annotation text for all annotation types (excluding coordinate annotations) within the dimension lines |
| Dimtix | 174 | Draw text between dimension lines |
| Dimtofl | 172 | Controls whether dimension lines are drawn between dimension lines (even if the dimension text is placed outside the dimension lines) |
| Dimitoh | 74 | Control the position of the annotation text outside the dimension line |
| Ditol | 71 | Attach the tolerance in the annotation text |
| Dimtolj | 283 | Set the vertical alignment of tolerance values relative to surface annotation text |
| Dimzin | 78 | Control the zeroing process for the main unit value |
| Dimupt | 288 | Control the option for users to locate text |
| Dimtzin | 284 | Control the zeroing process of tolerance values |
| Dimfrac | 276 | Set score format |
| Dimlunit | 277 | Set units for all annotation types (excluding angular annotations) |
| When the space within the dimension line is insufficient to accommodate both the annotation text and the arrow, this system variable will determine the arrangement of both | ||
| Dimtmove | 279 | Set the movement rules for annotation text |
| Dimazin | 79 | Zero elimination processing for angle annotation |
Description
PszStringData string type data
| System Variables | Values | Function Description |
|---|---|---|
| Dimapost | 4 | Specify the text prefix or suffix (or both) used for converting dimension measurements for all dimension types (excluding angular dimensions) |
| Dimpost | 3 | Specify a text prefix or suffix (or both) for annotating measurement values |
Description
PszIdData ID type data
| System Variables | Values | Function Description |
|---|---|---|
| Dimblk | 342 | Set an arrow for the second endpoint of the dimension line |
| Dimblk1 | 343 | Set an arrow for the first endpoint of the dimension line |
| Dimblk2 | 344 | Set an arrow for the second endpoint of the dimension line |
| Dimldrblk | 341 | Specify the type of leader arrow |
| Dimtxsty | 340 | Specify the text style for the annotation |
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD();
//Clear the current display content
mxcad.newFile();
//Create a new text style
Let textId=mxcad. addTextCtyle ("My Annotation Font", "txt. shx", "gbcbig. shx", 1);
//Create a new annotation style
mxcad.addDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", '3,"%%c<>"', `340,${textId.id}`);
mxcad.drawDimStyle = "MyDimStyle"
mxcad.drawDimAligned(0, 4000, 300, 4500, 150, 4600);
//Put all entities into the current display viewport
mxcad.zoomAll();
//Update viewport display
mxcad.updateDisplay();addImageDefine
▸ addImageDefine(imageUrl, sName?, isConvertBase64?, sourceFileName?, sBase64Data?): McObjectId
Add image definitions to the CAD database for reuse when inserting image objects in the future.
This method is usually used in conjunction with loadImage/drawImage, where the image resources are first loaded into memory, Register the image definition in the database, and finally insert the image into the drawing using drawImage.
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| ImageURL | string | undefined | Image address. |
| SName | string | "" | Image Definition Name. |
| Is the image converted to Base64 data. | |||
| Source FileName | string | "" | Image source file name. |
| SBase64Data | string | "" | Base64 data content. |
Returns
Example
import { MxCpp, McObject } from "mxcad";
const mxcad: McObject = MxCpp.getCurrentMxCAD();
const imagUrl = "https://cdn.pixabay.com/photo/2022/11/15/12/23/winter-7593872_960_720.jpg";
mxcad.loadImage(imagUrl, (imagedata) => {
if (!imagedata) {
console.log("loadImage failed");
return;
}
mxcad.addImageDefine(imagUrl, "winter-7593872_960_720.jpg", true);
mxcad.updateDisplay();
});addLayer
▸ addLayer(string): McObjectId
Add Layer
Parameters
| Name | Type |
|---|---|
string | string |
Returns
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
Mxcad. addLayer ("Layer Name")addLinetype
▸ addLinetype(sName, sLineDefine): McObjectId
Add line type
Parameters
| Name | Type |
|---|---|
sName | string |
sLineDefine | string |
Returns
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
//Define dashed data, "MyLineType" is the line name, "6, -8" is a unit definition of the dashed line, 6 is the length of the solid line, and -8 is the length of the space.
mxcad.addLinetype("MyLineType", "6,-8");
//Design the current line type as' MyLineType '
mxcad.drawLinetype = "MyLineType";
//Draw a dashed line
mxcad.drawLine(0, 30, 100, 30);
//Draw a diagonal dashed line
mxcad.drawLine(200, 30, 300, 130);addLinetypeEx
▸ addLinetypeEx(sName, sLineDefine, sTextStyle?): McObjectId
Add line type
Parameters
| Name | Type | Default value |
|---|---|---|
sName | string | undefined |
sLineDefine | string | undefined |
sTextStyle | string | "" |
Returns
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
//Add a line type with font style
mxcad.addTextStyle("MyLineTypeTextStyle", "txt.shx", "hztxt.shx", 1);
mxcad.addLinetypeEx("MyLineType3", "(12.7,(\"T=MxDraw\",\"S=2.54\",\"L=-5.08\",\"R=0.0\",\"X=-2.54\",\"Y=-1.27\"),-10.08)", "MyLineTypeTextStyle");
mxcad.drawLinetype = "MyLineType3";
mxcad.drawLineWidth = 0;
//Draw a red dotted line with width.
mxcad.drawLine(350, 120, 600, 120);addPatternDefinition
▸ addPatternDefinition(sName, sDefinitionData): void
Add a pattern definition
Parameters
| Name | Type | Description |
|---|---|---|
| SName | string | Pattern Name |
| SDefinitionData | string | Pattern default definition data |
Returns
void
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
//angle, x-origin,y-origin, delta-x,delta-y,dash-1,dash-2, …
//45=angle is the angle of the pattern line
//0=x-origin is the X-coordinate of the point where the first fill line passes through
//0=y-origin is the Y coordinate of the point where the first fill line passes through
//0=delta-x is the X-direction offset of the next fill line relative to the previous line
//0.125=delta-y is the Y-direction offset of the next fill line relative to the previous line
mxcad.addPatternDefinition("MyHatchPattern1", "((45, 0,0, 0,0.125))");
mxcad.drawPatternDefinition = "MyHatchPattern1";
//Define the starting point of a path
mxcad.pathMoveToEx(600, 3300, 0, 0, 0.3);
//The next point on the path
mxcad.pathLineTo(700, 3300);
//The next point on the path
mxcad.pathLineTo(700, 3400);
//The next point on the path
mxcad.pathLineTo(600, 3300);
//Transform the path into a fill, where 80 is the scaling ratio of the fill pattern
mxcad.drawPathToHatch(80);addSystemVarNameForEvent
▸ addSystemVarNameForEvent(aryVarName): void
Register the system variable name that needs to be monitored.
When these system variables are modified, the sysVarChanged event will be triggered, which is suitable for linkage control State synchronization or custom interaction logic.
Parameters
| Name | Type | Description |
|---|---|---|
| AryVarName | string [] | System variable name array. |
Returns
void
Example
const mxcad = MxCpp.getCurrentMxCAD();
mxcad.addSystemVarNameForEvent(["GRIDMODE", "AUTOSNAP"]);addTextStyle
▸ addTextStyle(sName, sFileName, sBigFontFileName, dXScale?): McObjectId
Add Text Style
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
sName | string | undefined | - |
sFileName | string | undefined | - |
sBigFontFileName | string | undefined | - |
| DXScale | number | 1.0 | X-direction scaling ratio |
Returns
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
//Draw text in the specified style
mxcad.addTextStyle("MyTextStyle", "italicc.shx", "gbcbig.shx", 0.7);
mxcad.drawTextStyle = "MyTextStyle";
mxcad.drawColor = new McCmColor(255, 0, 0);
Mxcad.drawText (0, 3000, "Drawing Control Text Test", 100, 0, 0, 1);cadCoord2View
▸ cadCoord2View(pt): McGePoint3d
CAD coordinates to viewport coordinates
Parameters
| Name | Type | Description |
|---|---|---|
| Pt | McGePoint3d (2d. McGePoint3d. md) | Point Object |
Returns
Converted point coordinates
cadCoordLong2View
▸ cadCoordLong2View(l): number
CAD length to viewport length
Parameters
| Name | Type | Description |
|---|---|---|
| L | number | CAD length |
Returns
number
Visual area length
cadToSmallcoord
▸ cadToSmallcoord(pt): McGePoint3d
Small coordinate system for CAD coordinate to drawing correction
Parameters
| Name | Type | Description |
|---|---|---|
| Pt | [McGePoint3d] (2d. McGePoint3d. md) | Object of a point |
Returns
callEvent
▸ callEvent(sEventName, param?): boolean
Call to trigger a system event
Parameters
| Name | Type | Description |
|---|---|---|
sEventName | string | - |
param? | ` Any | Event Parameters |
Returns
boolean
Example
import { MxCpp, McObject } from "mxcad"
//Manually trigger the init event
const mxcad:McObject = MxCpp.getCurrentMxCAD();
mxcad.callEvent("init");clearDwgBackground
▸ clearDwgBackground(): void
Clear the current background drawing object.
Suitable for turning off background display, switching reference images, or reloading background resources.
Returns
void
clearGripDisplay
▸ clearGripDisplay(): void
Clear the displayed grips
Returns
void
clearMxCurrentSelect
▸ clearMxCurrentSelect(): void
Clear all current selections
Returns
void
create
▸ create(config): void
Create and initialize an MxCAD instance.
This method will start the CAD runtime and complete initialization based on the passed configuration. Suitable for embedding a new CAD container in the page, loading custom files, or creating independent instances. If only operating on existing CAD windows on the current page, there is usually no need to manually call this method.
Parameters
| Name | Type | Description |
|---|---|---|
config | [MxCadConfig] (../interfaces/2d. MxCadConfig. md) | The initialization configuration for creating MxCad usually includes information such as canvas, locateFile, fileURL, fontspath, etc. |
Returns
void
Example
import { McObject } from "mxcad";
const mxcad = new McObject();
mxcad.create({
canvas: "#myCanvas",
locateFile: (fileName) => new URL(`/node_modules/mxcad/dist/wasm/2d/${fileName}`, import.meta.url).href,
fileUrl: new URL("../src/assets/test.mxweb", import.meta.url).href,
fontspath: new URL("node_modules/mxcad/dist/fonts", import.meta.url).href,
});createLayout
▸ createLayout(sName): McObjectId
Create Layout
Parameters
| Name | Type |
|---|---|
sName | string |
Returns
deleteLayout
▸ deleteLayout(sName): boolean
Delete Layout
Parameters
| Name | Type |
|---|---|
sName | string |
Returns
boolean
drawArc
▸ drawArc(dCenterX, dCenterY, dRadius, dStartAng, dEndAng): McObjectId
Draw an arc
Parameters
| Name | Type | Description |
|---|---|---|
| DCenterX | number | X coordinate of the center of the circle |
| DCenterY | number | Y coordinate of the center |
| DRadius | number | radius |
| DStartAng | number | Starting angle, in radians |
| DEndAng | number | End angle, in radians |
Returns
Success returns 1, failure returns 0
drawArc2
▸ drawArc2(dStartPointX, dStartPointY, dMidPointX, dMidPointY, dEndPointX, dEndPointY): McObjectId
Draw an arc
Parameters
| Name | Type | Description |
|---|---|---|
| DStartPointX | number | starting point X coordinate |
| DStartPointY | number | Starting point Y coordinate |
| DMidPointX | number | X coordinate of the midpoint |
| DMidPointY | number | Y coordinate of the midpoint |
| DEndPointX | number | End point X coordinate |
| DEndPointY | number | End point Y coordinate |
Returns
drawArc3
▸ drawArc3(dStartPointX, dStartPointY, dEndPointX, dEndPointY, dBulge): McObjectId
Draw an arc
Parameters
| Name | Type | Description |
|---|---|---|
| DStartPointX | number | starting point X coordinate |
| DStartPointY | number | Starting point Y coordinate |
| DEndPointX | number | End point X coordinate |
| DEndPointY | number | End point Y coordinate |
| DBulge | number | convexity |
Returns
drawBlockReference
▸ drawBlockReference(dPosX, dPosY, sBlkName, dScale, dAng): McObjectId
Draw block reference
Parameters
| Name | Type | Description |
|---|---|---|
| DPosX | number | Reference position X coordinate |
| DPosY | number | Reference position Y coordinate |
sBlkName | string | - |
| DScale | number | scaling ratio |
| DAng | number | Rotation angle, in radians |
Returns
Block object ID
drawCircle
▸ drawCircle(dCenterX, dCenterY, dRadius): McObjectId
Draw a circle
Parameters
| Name | Type | Description |
|---|---|---|
| DCenterX | number | X coordinate of the center of the circle |
| DCenterY | number | Y coordinate of the center |
| DRadius | number | radius |
Returns
drawDimAligned
▸ drawDimAligned(dExtLine1PointX, dExtLine1PointY, dExtLine2PointX, dExtLine2PointY, dTextPositionX, dTextPositionY): McObjectId
Draw alignment annotations
Parameters
| Name | Type | Description |
|---|---|---|
| DExtLine1PointX | number | X-coordinate of the starting point of the first ruler line |
| DExtLine1PointY | number | Y coordinate of the starting point of the first ruler line |
| DExtLine2PointX | number | X-coordinate of the starting point of the second ruler line |
| DExtLine2PointY | number | Y coordinate of the starting point of the second ruler line |
| DTextPositionX | number | Text Position X Coordinate |
| DTextPositionY | number | Y coordinate of text position |
Returns
Success returns 1, failure returns 0
drawDimAngular
▸ drawDimAngular(dAngleVertexX, dAngleVertexY, dFirstEndPointX, dFirstEndPointY, dSecondEndPointX, dSecondEndPointY, dTextPointX, dTextPointY): McObjectId
Draw angle annotation
Parameters
| Name | Type | Description |
|---|---|---|
| DAngle VertexX | number | angle vertex X coordinate |
| DAngle VertexY | number | Y-coordinate of angle vertex |
| DFirstEndPointX | number | X-coordinate of the starting point of the first ruler line |
| DFirstEndPointY | number | Y coordinate of the starting point of the first ruler line |
| DSecondEndPointX | number | X coordinate of the starting point of the second ruler line |
| DSecondEndPointY | number | Y coordinate of the starting point of the second ruler line |
| DTextPointX | number | Text Position X Coordinate |
| DTextPointY | number | Text Position Y Coordinate |
Returns
Success returns 1, failure returns 0
drawDimDiametric
▸ drawDimDiametric(dChordPointX, dChordPointY, dFarChordPointX, dFarChordPointY, dLeaderLength): McObjectId
Draw diameter annotation
Parameters
| Name | Type | Description |
|---|---|---|
| DChordPointX | number | Chord endpoint X coordinate |
| DChordPointY | number | chord endpoint Y coordinate |
| DFarChordPointX | number | X coordinate of the far end point of the string |
| DFarChordPointY | number | Y-coordinate of the far end point of the string |
| DLeaderLength | number | lead length |
Returns
Diameter annotation object ID
drawDimOrdinate
▸ drawDimOrdinate(dDefinitionPointX, dDefinitionPointY, dDeaderEndPointX, dDeaderEndPointY, isUseXAxis): McObjectId
Draw linear dimensions for annotation
Parameters
| Name | Type | Description |
|---|---|---|
| DDefinitionPointX | number | Define the coordinates of point X |
| DDefinitionPointY | number | Define the coordinates of point Y |
| DDeaderEndPointX | number | Annotate the X coordinate of the endpoint |
| DDeaderEndPointY | number | Annotate the Y coordinate of the endpoint |
| Is' isUseXAxis' | 'boolean' | labeled along the X-axis direction |
Returns
Linear size object ID
drawDimRadial
▸ drawDimRadial(dCenterX, dCenterY, dChordPointX, dChordPointY, dLeaderLength): McObjectId
Draw radial dimensions for annotation
Parameters
| Name | Type | Description |
|---|---|---|
| DCenterX | number | X coordinate of the center point |
| DCenterY | number | Y coordinate of the center point |
| DChordPointX | number | Chord endpoint X coordinate |
| DChordPointY | number | chord endpoint Y coordinate |
| DLeaderLength | number | Length of annotation line |
Returns
Radial dimension object ID
drawDimRotated
▸ drawDimRotated(dExtLine1PointX, dExtLine1PointY, dExtLine2PointX, dExtLine2PointY, dDimLineLocationX, dDimLineLocationY, dRotationAngle): McObjectId
Draw rotation annotation
Parameters
| Name | Type | Description |
|---|---|---|
| DExtLine1PointX | number | X-coordinate of the starting point of the first ruler line |
| DExtLine1PointY | number | Y coordinate of the starting point of the first ruler line |
| DExtLine2PointX | number | X-coordinate of the starting point of the second ruler line |
| DExtLine2PointY | number | Y coordinate of the starting point of the second ruler line |
| DDimLinePositionX | number | annotation line position X coordinate |
| DDimLinePositionY | number | Y coordinate of annotation line position |
| DRotationAngle | number | Rotation angle, in radians |
Returns
Rotate annotation object ID
drawEllipse
▸ drawEllipse(dCenterX, dCenterY, dMajorAxisX, dMajorAxisY, dRadiusRatio): McObjectId
Draw an ellipse
Parameters
| Name | Type | Description |
|---|---|---|
| DCenterX | number | X-coordinate of ellipse center |
| DCenterY | number | Y coordinate of ellipse center |
| DMajorAxisX | number | long axis X coordinate |
| DMajorAxisY | number | Long axis Y coordinate |
| DRadiusRatio | number | ratio of minor axis to major axis |
Returns
Success returns 1, failure returns 0
drawEllipseArc
▸ drawEllipseArc(dCenterX, dCenterY, dMajorAxisX, dMajorAxisY, dRadiusRatio, dStartAng, dEndAng): McObjectId
Draw an elliptical arc
Parameters
| Name | Type | Description |
|---|---|---|
| DCenterX | number | X-coordinate of ellipse center |
| DCenterY | number | Y coordinate of ellipse center |
| DMajorAxisX | number | long axis X coordinate |
| DMajorAxisY | number | Long axis Y coordinate |
| DRadiusRatio | number | ratio of minor axis to major axis |
| DStartAng | number | Starting angle, in radians |
| DEndAng | number | End angle, in radians |
Returns
drawEntity
▸ drawEntity(entity, isUseDatabaseCurrentProperties?): McObjectId
Draw entities
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| Entity | [McDbEntity] (2d. McDbEntity. md) | undefined | Entity object |
isUseDatabaseCurrentProperties | boolean | false | - |
Returns
Draw Results
Example
import { McDbPolyline, MxCpp } from
let pl = new McDbPolyline();
pl.addVertexAt(new McGePoint3d(100, 100, 100));
pl.addVertexAt(new McGePoint3d(200, 100, 500));
pl.addVertexAt(new McGePoint3d(300, 400, 200));
MxCpp.getCurrentCAD().drawEntity(pl);drawHatch
▸ drawHatch(hatch, dPatternScale?): McObjectId
Draw Fill Object
Parameters
| Name | Type | Default value |
|---|---|---|
hatch | McDbHatch | undefined |
dPatternScale | number | 1.0 |
Returns
Draw object ID
Example
import { MxCADUiPrPoint, MxCADUtility, MxCpp, McGePoint3d } from "mxcad";
async function Mx_TestDrawHatchFormPoint() {
const getPoint = new MxCADUiPrPoint();
GetPoint.setMessage ("\ nSpecify a point inside the filled area:");
getPoint.disableAllTrace(true);
getPoint.setDisableOsnap(true);
let pt = (await getPoint.go()) as McGePoint3d;
if (!pt) return;
let hatch = MxCADUtility.builderHatchFromPoint(pt);
if (!hatch) {
MxFun.acutPrintf ("Closed area not found")
return;
}
let mxcad = MxCpp.getCurrentMxCAD();
Mxcad. addPatternDefinition ("My Pattern", "(45, 0,0, 0,0.125)");
Mxcad.drawPatternDefinition="My Pattern";
mxcad.drawHatch(hatch, 5.0);
}drawImage
▸ drawImage(dPosX, dPosY, dWidth, dHeight, dAng, imageName, isConvertBase64?, dwgImageSizeWidth?, dwgImageSizeHeight?, imageUrl?, sImageBase64?): McObjectId
Draw an image
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| DPosX | number | undefined | X coordinate of image |
| DPosY | number | undefined | Y coordinate of image |
| DWidth | number | undefined | image width |
| DHeight | number | undefined | Image height |
| DAng | number | undefined | Image angle, in degrees |
imageName | string | undefined | - |
isConvertBase64 | boolean | false | - |
dwgImageSizeWidth | number | 1.0 | - |
dwgImageSizeHeight | number | 1.0 | - |
| ImageURL | string | "" | Image path |
sImageBase64 | string | "" | - |
Returns
Example
import { MxCpp } from "mxcad";
async function Mx_Test_DrawImageBase64() {
const getPoint = new MxCADUiPrPoint();
GetPoint.setMessage ("\ nSpecify insertion point:");
let pt = await getPoint.go();
if (!pt) return;
let mxcad = MxCpp.getCurrentMxCAD();
let imagData = "data:image/jpeg;base64,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";
mxcad.loadImageBase64(imagData, "test.jpg", (image) => {
if (!image) {
console.log("loadImage failed");
return;
}
let width = mxcad.mxdraw.viewCoordLong2Cad(100);
let height = (image.height / image.width) * width;
let viewAngle = 0.0;
let id = mxcad.drawImage((pt as any).x, (pt as any).y, width, height, viewAngle, "test.jpg", false, image.width, image.height);
let ent = id.getMcDbEntity();
if (ent) {
ent.trueColor = new McCmColor(255, 255, 255, 160);
}
mxcad.updateDisplay();
});
}drawLine
▸ drawLine(dX1, dY1, dX2, dY2): McObjectId
Draw 2D lines
Parameters
| Name | Type | Description |
|---|---|---|
| DX1 | number | Starting point X coordinate |
| DY1 | number | Starting point Y coordinate |
| DX2 | number | endpoint X coordinate |
| DY2 | number | End point Y coordinate |
Returns
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
mxcad.drawLine(0, 60, 100, 60);drawLine3d
▸ drawLine3d(dX1, dY1, dZ1, dX2, dY2, dZ2): McObjectId
Draw 3D lines
Parameters
| Name | Type | Description |
|---|---|---|
| DX1 | number | Starting point X coordinate |
| DY1 | number | Starting point Y coordinate |
| DZ1 | number | Starting point Z coordinate |
| DX2 | number | endpoint X coordinate |
| DY2 | number | End point Y coordinate |
| DZ2 | number | Z coordinate of endpoint |
Returns
drawMText
▸ drawMText(dPosX, dPosY, sContents, dHeight, dWidth, dRotation, iAttachment): McObjectId
Draw multiple lines of text
Parameters
| Name | Type | Description |
|---|---|---|
| DPosX | number | Text Position X Coordinate |
| DPosY | number | Y coordinate of text position |
sContents | string | - |
| DHeight | number | Text height |
| DWidth | number | Text width |
| DRotation | number | Rotation angle, in radians |
| IAttachment | [AttachmentPoint] (../enums/2d. McDb. AttachmentPoint. md) | Alignment Method |
Returns
Multi line text object ID
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
Mxcad.drawMText (0, -100, "Control:\ \P Multi line Text Test ", 50, 400, 0, 1); let mxcad = MxCpp.getCurrentMxCAD();
mxcad.newFile();
Mxcad.drawMText (0,0, "\ \ A1; square method index: m {\ \ H0.7x; \ \ S ^ 2;}", 15500,0.0,7);
Mxcad.drawMText (0,30, "\ \ A2; Square method superscript: m {\ \ H0.3x; \ \ S2 ^;}", 15500,0.0,7);
mxcad.zoomAll();
mxcad.updateDisplay();drawPathToHatch
▸ drawPathToHatch(dPatternScale?): McObjectId
Convert the path to a fill pattern
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| DPatternScale | number | 1.0 | Pattern scaling ratio |
Returns
Conversion results
Example
import { MxCADUiPrPoint, MxCADUiPrDist, MxCpp } from "mxcad";
//Solid circle
async function Mx_SolidCircle() {
const getCenter = new MxCADUiPrPoint();
GetCenter.setMessage ('Please confirm the center position ');
const center = await getCenter.go();
if (!center) return;
const getRadius = new MxCADUiPrDist();
getRadius.setBasePt(center);// Set the distance base point as the center of the circle
GetRadius.setMessage ('Please enter circle radius');
getRadius.setUserDraw((pt, pw) => {
const r = pt.distanceTo(center);
const circle = new McDbCircle();
circle.center = center;
circle.radius = r;
pw.drawMcDbEntity(circle)
})
const radiusVal = await getRadius.go();
if (!radiusVal) return;
const radius = getRadius.value();
const mxcad = MxCpp.getCurrentMxCAD();
mxcad.pathCircle(center.x, center.y, radius);// Set circular path
mxcad.drawPathToHatch();// Draw a solid circle
}drawPathToPolyline
▸ drawPathToPolyline(): McObjectId
Convert the path to a polyline
Returns
Conversion results
Example
import { MxCpp } from "mxcad"
let mxcad = MxCpp.getCurrentMxCAD();
//Draw an arrow
mxcad.pathMoveToEx(1000, 300, 10, 10, 0);
mxcad.pathLineToEx(1000, 500, 30, 0, 0);
mxcad.pathLineTo(1000, 580);
mxcad.drawPathToPolyline();drawPathToSpline
▸ drawPathToSpline(): McObjectId
Convert the path to a spline curve
Returns
Conversion results
drawPoint
▸ drawPoint(dX, dY): McObjectId
Draw points
Parameters
| Name | Type | Description |
|---|---|---|
| DX | number | X coordinate |
| DY | number | Y coordinate |
Returns
drawSolid
▸ drawSolid(dX1, dY1, dX2, dY2, dX3, dY3, dX4, dY4): McObjectId
Draw entities
Parameters
| Name | Type | Description |
|---|---|---|
| DX1 | number | X coordinate of the first point |
| DY1 | number | Y coordinate of the first point |
| DX2 | number | X coordinate of the second point |
| DY2 | number | Y coordinate of the second point |
| DX3 | number | X coordinate of the third point |
| DY3 | number | Y coordinate of the third point |
| DX4 | number | X coordinate of the fourth point |
| DY4 | number | Y coordinate of the fourth point |
Returns
Entity Object ID
drawText
▸ drawText(dPosX, dPosY, pszText, dHeight, dRotation, horizontalMode, verticalMode): McObjectId
Draw a single line of text
Parameters
| Name | Type | Description |
|---|---|---|
| DPosX | number | Text Position X Coordinate |
| DPosY | number | Y coordinate of text position |
| PszText | string | Text Content |
| DHeight | number | Text height |
| DRotation | number | Rotation angle, in radians |
| HorizontalMode | [TextHorzMode] (../enums/2d. McDb. TextHorzMode. md) | Horizontal alignment method |
| Vertical Mode | [TextVertMode] (../enums/2d. McDb. TextVertMode. md) | Vertical Alignment Method |
Returns
Success returns 1, failure returns 0
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
Mxcad.drawText (0, 1900, "Drawing Control Text Test", 100, 0, 0, 1);endBlockEdit
▸ endBlockEdit(): boolean
Exit block editing status
Returns
boolean
endViewPortEdit
▸ endViewPortEdit(): boolean
Exit viewport editing mode
Returns
boolean
getAllLayoutName
▸ getAllLayoutName(): McGeStringArray
Get all layout names
Returns
getBackgroundEntity
▸ getBackgroundEntity(): McDbBackgroundEntity
Return the currently loaded background object.
This object can be used to further control the display, clearing, or style modification of the background image.
Returns
Current background object instance.
getCooperate
▸ getCooperate(): MxCooperate
Return collaborative work object
Returns
getCurrentDatabaseDrawColor
▸ getCurrentDatabaseDrawColor(): Color
Returns the drawing color set in the current database, which will automatically convert black and white based on the background color.
Returns
Color
Return the drawing color set in the current database, THREE. Color object
getCurrentFileName
▸ getCurrentFileName(): string
Get the current file name
Returns
string
Current file name
getCurrentLayout
▸ getCurrentLayout(): string
Obtain the current layout name
Returns
string
getCurrentLayoutId
▸ getCurrentLayoutId(): McObjectId
Obtain the current layout ID
Returns
getCurrentOpenFileMd5
▸ getCurrentOpenFileMd5(): string
When returning to the current open file in md5 code.
Returns
string
getCurrentOriginaFileName
▸ getCurrentOriginaFileName(): string
Get the current source file name
Returns
string
Current source file name
getDatabase
▸ getDatabase(): McDbDatabase
Retrieve database objects
Returns
Database objects
getImp
▸ getImp(): any
Retrieve internal implementation objects
Returns
any
Internal implementation object
getMxCADViewSpinMatrix
▸ getMxCADViewSpinMatrix(): McGeMatrix3d
Return the rotation matrix of the current viewport with MxCAD
Returns
McGeMatrix3d object
getMxCpp
▸ getMxCpp(): any
Returns the MxCpp object, which will be called in the MxDraw module.
Returns
any
getMxDrawObject
▸ getMxDrawObject(): MxDrawObject
Return the MxDraw object bound to the MxCAD object.
Returns
MxDrawObject
MxDraw object
getSysVarDouble
▸ getSysVarDouble(varName): number
Get floating-point values of system variables
Parameters
| Name | Type | Description |
|---|---|---|
| VarName | string | Variable Name |
Returns
number
Floating point values of variables
getSysVarLong
▸ getSysVarLong(varName): number
Get the integer value of a system variable
Parameters
| Name | Type | Description |
|---|---|---|
| VarName | string | Variable Name |
Returns
number
The integer value of a variable
getSysVarPoint
▸ getSysVarPoint(varName): McGePoint3d
Obtain the point values of system variables
Parameters
| Name | Type | Description |
|---|---|---|
| VarName | string | Variable Name |
Returns
Point values of variables
getSysVarString
▸ getSysVarString(varName): string
Retrieve the string value of a system variable
Parameters
| Name | Type | Description |
|---|---|---|
| VarName | string | Variable Name |
Returns
string
The string value of a variable
getTempDraw
▸ getTempDraw(): McObjectTempDraw
Get temporary drawing manager.
The object returned by this method is used for "temporary drawing" on the current viewport, such as highlighting selected objects, displaying drag and drop previews, dynamic measurement prompts, etc. Its characteristic is that it only displays in the view and does not actually write to the graphics database, making it suitable for UI feedback and auxiliary display.
Returns
To temporarily draw an object, simply call its methods such as addLines/addTriangles/setDrawColor.
Example
import { MxCpp } from "mxcad";
const mxcad = MxCpp.getCurrentMxCAD();
const tempDraw = mxcad.getTempDraw();
tempDraw.clearAll();
tempDraw.setDrawColor(0xFF0000);
tempDraw.addLines(new McGePoint3dArray([new McGePoint3d(0, 0, 0), new McGePoint3d(100, 100, 0)]));getViewBackgroundColor
▸ getViewBackgroundColor(): number
Return the background color of the viewport, 0XFF (red) FF (green) FF (blue)
Returns
number
getViewCADCoord
▸ getViewCADCoord(): Object
Return the display range and CAD coordinates of the current viewport.
Returns
Object
Current viewport display range
| Name | Type |
|---|---|
pt1 | McGePoint3d |
pt2 | McGePoint3d |
pt3 | McGePoint3d |
pt4 | McGePoint3d |
iniAuthorizedService
▸ iniAuthorizedService(sUrl): void
Initialize user authorization service url
Parameters
| Name | Type | Description |
|---|---|---|
| SURL | string | Authorization service URL |
Returns
void
init
▸ init(imp): void
Initial object
Parameters
| Name | Type | Description |
|---|---|---|
| Implement the 'imp' | 'any' | object, and by default, this function will be automatically called by the system |
Returns
void
initMxObject
▸ initMxObject(mxObject): void
Initialize object model
Parameters
| Name | Type | Description |
|---|---|---|
| MxObject | any | Initialize [mxdraw]( https://mxcadx.gitee.io/mxdraw_docs )Created drawing controls |
Returns
void
Description
initRegist
▸ initRegist(sRegist): void
Initialize user registration data
Parameters
| Name | Type | Description |
|---|---|---|
| SRegist | string | Registration data |
Returns
void
insertBlock
▸ insertBlock(sFileUrl, sBlkName, isWorkThread?, fetchAttributes?, isUpdataInsertBlock?, isUpdataSameNameBlock?): Promise<McObjectId>
Plugin block file
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| SFileURL | string | undefined | Network file path This file is in mxweb format |
| SBlkName | string | undefined | The block name of the inserted block |
| IsWorkThread | boolean | true | Whether to use a worker thread to open the file, default to true |
fetchAttributes | number | 0 | 1: EMSCRIPTEN_FETCH_LOAD_TO_MEMORY, Load the drawing data into memory, 0: EMSCRIPTEN_FETCH_LOAD_TO_MEMORY | EMSCRIPTEN_FETCH_PERSIST_FILE | EMSCRIPTEN_FETCH_APPEND, Add the drawing data to IndexedDB |
| IsUpdataInsertBlock | boolean | false | Update existing blocks, default not updated |
| IsUpdataSameNameBlock | boolean | false | During the process of inserting a block, if a block with the same name is found in the original database, will it also be updated? By default, it will not be updated |
Returns
Example
import { McDbBlockReference, MxCADUiPrPoint, MxCpp } from "mxcad";
//Insert block
async function MxTest_InsertBlock() {
let baseUrl = "http://localhost:3000/mxcad/"
//Set block path
let blkFilePath = baseUrl + "tree.mxweb";
//Insert block file
let mxcad = MxCpp.App.getCurrentMxCAD();
let blkrecId = await mxcad.insertBlock(blkFilePath, "tree");
if (!blkrecId.isValid()) {
//Insert block
return;
}
//Set block size
let blkRef = new McDbBlockReference();
blkRef.blockTableRecordId = blkrecId;
let box = blkRef.getBoundingBox();
if (box.ret) {
let dLen = box.maxPt.distanceTo(box.minPt);
if (dLen > 0.00001) {
blkRef.setScale(mxcad.getMxDrawObject().screenCoordLong2Doc(100) / dLen);
}
}
//Specify insertion base point
let getPoint = new MxCADUiPrPoint();
GetPoint.setMessage ("\ Specify insertion base point");
//Dynamically drawing blocks
getPoint.setUserDraw((v, worldDraw) => {
blkRef.position = v;
worldDraw.drawMcDbEntity(blkRef);
});
let pt = await getPoint.go();
if (!pt) return;
blkRef.position = pt;
//Draw blocks
let newBlkRefId = mxcad.drawEntity(blkRef);
if (!newBlkRefId.isValid) {
console.log("insert error");
return;
}
};isBlockEditing
▸ isBlockEditing(): boolean
Is block editing currently in progress
Returns
boolean
isTryVersion
▸ isTryVersion(): boolean
Is the current program a trial version
Returns
boolean
isUselessLayer
▸ isUselessLayer(layerName): boolean
To determine whether a layer is a useful layer in use, call this function to determine before deleting a layer.
Parameters
| Name | Type | Description |
|---|---|---|
| LayerName | string | layer name |
Returns
boolean
True: useful layer, false: useless layer
isViewPortEditing
▸ isViewPortEditing(): boolean
Is the current viewport being edited
Returns
boolean
layoutRename
▸ layoutRename(sName, sToName): boolean
Layout renaming
Parameters
| Name | Type | Description |
|---|---|---|
| SName | string | Layout Name |
| SToName | string | New layout name |
Returns
boolean
loadDwgBackground
▸ loadDwgBackground(sFileUrl, call, color?, isShow?): void
Load another DWG file as the background object for the current drawing.
Commonly used in scenarios such as base image comparison, reference image overlay, and background image display. After successful loading, The background object will participate in the display in the current drawing's background mode.
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| SFileURL | string | undefined | Background file address. |
| Call | (ret: boolean)=>void | undefined | The callback after loading is complete, with a boolean parameter indicating whether the loading was successful. |
| Color | Number | 0 | The background object displays a color that defaults to 0. |
| IsShow | boolean | true | Whether to display background objects. |
Returns
void
Example
import { MxCpp } from "mxcad";
const mxcad = MxCpp.getCurrentMxCAD();
mxcad.loadDwgBackground("./demo/background.dwg.mxweb", (ret) => {
Console.log ("Background loading result:", ret);
});loadImage
▸ loadImage(imageUrl, call, imageFileName?, fileType?): void
Load an external image into the current context for future use.
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| ImageURL | string | undefined | Image path |
| Call | (image: any)=>void | undefined | callback function |
imageFileName | string | "" | - |
fileType | string | "" | - |
Returns
void
Example
import { MxCpp, MxCADUiPrPoint } from "mxcad"
async function Mx_Test_DrawImage() {
const getPoint = new MxCADUiPrPoint();
GetPoint.setMessage ("\ nSpecify insertion point:");
let pt = await getPoint.go();
if (!pt) return;
let mxcad = MxCpp.getCurrentMxCAD();
let imagUrl = "https://cdn.pixabay.com/photo/2022/11/15/12/23/winter-7593872_960_720.jpg";
mxcad.loadImage(imagUrl, (image) => {
if (!image) {
console.log("loadImage failed");
return;
}
let width = mxcad.mxdraw.viewCoordLong2Cad(100);
let height = (image.height / image.width) * width;
//let viewAngle = mxcad.mxdraw.getViewAngle() * 180 / Math.PI;
//let viewAngle = mxcad.database.ucsMatrix.angleXYPlane() * 180 / Math.PI;
//let viewAngle = 15.0;
let viewAngle = 0.0;
let id = mxcad.drawImage((pt as any).x, (pt as any).y, width, height, viewAngle, imagUrl, true, image.width, image.height);
let ent = id.getMcDbEntity();
if (ent) {
ent.trueColor = new McCmColor(255, 255, 255, 160);
// ent.rotate(pt,45 * 3.14159265 / 180.0);
}
mxcad.updateDisplay();
});
}loadImageBase64
▸ loadImageBase64(sImageBase64, imageFileName, call): void
Load Base64 image.
Parameters
| Name | Type | Description |
|---|---|---|
sImageBase64 | string | - |
imageFileName | string | - |
| Call | (image: any)=>void | callback function |
Returns
void
Example
import { MxCpp } from "mxcad";
function selectLocalFile() {
return new Promise((resolve) => {
const input = document.createElement("input");
input.type = "file";
input.accept = "image/*";
input.onchange = (e) => resolve(e.target.files[0]);
input.click();
});
}
function fileToBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsDataURL(file);
});
}
const file = await selectLocalFile();
if (!file) return;
const imagData = await fileToBase64(file);
let mxcad = MxCpp.getCurrentMxCAD();
mxcad.loadImageBase64(imagData, "test.jpg", (image) => {
if (!image) {
console.log("loadImage failed");
return;
}
let width = mxcad.mxdraw.viewCoordLong2Cad(100);
let height = (image.height / image.width) * width;
let viewAngle = 0.0;
let id = mxcad.drawImage(100, 100, width, height, viewAngle, "test.jpg", true, image.width, image.height,"",imagData);
mxcad.updateDisplay();
})makeCurrent
▸ makeCurrent(): void
Set MXCAD as the current CAD object
Returns
void
newFile
▸ newFile(): boolean
Clear the content of the current image and create a new file
Returns
boolean
objectIdToObject
▸ objectIdToObject(lIdIndex): null | McDbObject
Convert lIdInDex to McDbObject object
Parameters
| Name | Type | Description |
|---|---|---|
| LIdIDEX | number | Object ID |
Returns
null | McDbObject
McDbObject object corresponding to ID, returns null if the object does not exist
off
▸ off(name, fun?): void
Turn off event monitoring
Parameters
| Name | Type | Description |
|---|---|---|
| Name | String | Listening Event Name |
fun? | [Function]( https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function )Monitoring events |
Returns
void
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD();
//E: Event function, referring to the function registered in mxcad. on ("selectChange", e)
mxcad.off("selectChange", e);on
▸ on(name, fun): void
Monitor object selection event
Parameters
| Name | Type |
|---|---|
name | "selectChange" |
fun | (ids: McObjectId[]) => void | (ids: McObjectId[]) => void[] |
Returns
void
Example
import { MxCpp, McObject, McObjectId } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD();
mxcad.on("selectChange", (ids: McObjectId[])=> {
if (ids.length == 0) return;
let id = ids[0]
let ent = id.getMcDbEntity()
if(!ent) return
console.log(ent.objectName)
})▸ on(name, fun): void
Monitor file fully open
Parameters
| Name | Type |
|---|---|
name | "openFileComplete" |
fun | () => void |
Returns
void
▸ on(name, fun): void
The mxdraw mxcad program has been loaded and is ready to initialize the CPP program
Parameters
| Name | Type |
|---|---|
name | "init_cpp" |
fun | () => void |
Returns
void
▸ on(name, fun): void
The mxdraw mxcad program has been loaded and triggered when preparing to create an mxdraw object
Parameters
| Name | Type |
|---|---|
name | "init" |
fun | () => void |
Returns
void
▸ on(name, fun): void
Called when loading the initial map, used by mxdad app npm
Parameters
| Name | Type |
|---|---|
name | "init_map" |
fun | (init_param: { map: MxMap ; plugin: MxCADPluginBase }) => void |
Returns
void
▸ on(name, fun): void
Called when loading map layers, used by mxdad app npm
Parameters
| Name | Type |
|---|---|
name | "map_style.load" |
fun | (map: MxMap) => void |
Returns
void
▸ on(name, fun): void
MXdraw object created, triggered when preparing initial related parameters
Parameters
| Name | Type |
|---|---|
name | "init_before_mxdraw" |
fun | (mxdraw: MxDrawObject) => void |
Returns
void
▸ on(name, fun): void
Triggered after mxdraw object creation
Parameters
| Name | Type |
|---|---|
name | "init_mxdraw" |
fun | (mxdraw: MxDrawObject) => void |
Returns
void
▸ on(name, fun): void
Triggered when the MXCAD object is ready to be created
Parameters
| Name | Type |
|---|---|
name | "init_mxcad" |
fun | (mxcad: McObject) => void |
Returns
void
▸ on(name, fun): void
Monitor database modification events
Parameters
| Name | Type |
|---|---|
name | "databaseModify" |
fun | () => void |
Returns
void
▸ on(name, fun): void
System variables have been modified
Parameters
| Name | Type |
|---|---|
name | "sysVarChanged" |
fun | (name: string) => void |
Returns
void
▸ on(name, fun): void
Graphic database initialization
Parameters
| Name | Type |
|---|---|
name | "databaseInitialization" |
fun | () => void |
Returns
void
▸ on(name, fun): void
The layer data has changed
Parameters
| Name | Type |
|---|---|
name | "layerChanged" |
fun | () => void |
Returns
void
▸ on(name, fun): void
The line type data has changed
Parameters
| Name | Type |
|---|---|
name | "lineTypeChanged" |
fun | () => void |
Returns
void
▸ on(name, fun): void
When an object is modified, it will not be notified by default. Configure the Enable Object Modification Event variable to enable status: 1: delete, 2: add, 0: modify
Parameters
| Name | Type |
|---|---|
name | "objectModified" |
fun | (param: { cmd: string ; entitys: { erase: boolean ; id: McObjectId ; status: number }[] }) => void |
Returns
void
openWebFile
▸ openWebFile(sFileUrl, retCall?, isWorkThread?, obj_param?, fetchAttributes?, isFetchTzFile?): boolean
Open network files
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| SFileURL | string | undefined | Network file path |
retCall? | (iRet: number)=>void | undefined | callback function, optional parameter, callback function after opening the file, parameter is the result of opening the file, 0 indicates success, other values indicate failure |
| IsWorkThread | boolean | true | Whether to use a worker thread to open the file, default to true |
obj_param? | object | undefined | - |
fetchAttributes | number | 0 | 1: EMSCRIPTEN_FETCH_LOAD_TO_MEMORY, Load the drawing data into memory, 0: EMSCRIPTEN_FETCH_LOAD_TO_MEMORY | EMSCRIPTEN_FETCH_PERSIST_FILE | EMSCRIPTEN_FETCH_APPEND, Add the drawing data to IndexedDB |
isFetchTzFile | boolean | true | - |
Returns
boolean
Did you successfully open the file
Example
import { MxCpp } from "mxcad";
const mxcad = MxCpp.getCurrentMxCAD();
mxcad.openWebFile("http://localhost:1337/mxcad/file/a9cbed3d3a351b79f24484e87bd78338.DWG.mxweb");pathCircle
▸ pathCircle(dCenX, dCenY, dR, dPrecision?, dWidth?): boolean
Create a path based on a circular object
Parameters
| Name | Type | Default value |
|---|---|---|
dCenX | number | undefined |
dCenY | number | undefined |
dR | number | undefined |
dPrecision | number | 0.0 |
dWidth | number | 0 |
Returns
boolean
pathLineTo
▸ pathLineTo(dX, dY): void
Draw a straight line from the current position to the specified location
Parameters
| Name | Type | Description |
|---|---|---|
| DX | number | X coordinate |
| DY | number | Y coordinate |
Returns
void
pathLineToEx
▸ pathLineToEx(dX, dY, dStartWidth, dEndWidth, dBulge): void
Draw a straight line from the current position to the specified position, while specifying the starting width, ending width, and convexity
Parameters
| Name | Type | Description |
|---|---|---|
| DX | number | X coordinate |
| DY | number | Y coordinate |
| DStartWidth | number | Starting width |
| DEndWidth | number | End width |
| DBulge | number | convexity |
Returns
void
pathMakeClosed
▸ pathMakeClosed(): void
Closed path
Returns
void
Example
import { MxCpp } from "mxcad"
let mxcad = MxCpp.getCurrentMxCAD();
//Use Plyline to display and draw rectangular boxes
//Define the starting point of a path
mxcad.pathMoveTo(0, 300);
//The next point on the path
mxcad.pathLineTo(100, 300);
//The next point on the path
mxcad.pathLineTo(100, 400);
//The next point on the path
mxcad.pathLineTo(0, 400);
//Set the path to closed
mxcad.pathMakeClosed();
//Close the path and generate a rectangular box
mxcad.drawPathToPolyline();pathMakeExclude
▸ pathMakeExclude(isExclude): void
Mark the current path as an exclusion marker, mainly used for filling and drawing. Dig out the closed area composed of this path in the filling process
Parameters
| Name | Type | Description |
|---|---|---|
| IsExclude | boolean | Exclude or not |
Returns
void
Example
//Draw a solid object with a curved boundary filling, and cut a piece in the middle
import { MxCpp, McObject } from "mxcad";
const mxcad:McObject = MxCpp.getCurrentMxCAD()
//Define the starting point of a path
mxcad.pathMoveToEx(440, 3310, 0, 0, 0);
//The next point on the path
mxcad.pathLineTo(480, 3310);
//The next point on the path
mxcad.pathLineTo(480, 3360);
//The next point on the path
mxcad.pathLineTo(450, 3340);
//Fill in the exclusion area with the path definition defined above
mxcad.pathMakeExclude(true);
//Define the starting point of a path
mxcad.pathMoveToEx(400, 3300, 0, 0, 0.3);
//The next point on the path
mxcad.pathLineTo(500, 3300);
//The next point on the path
mxcad.pathLineTo(500, 3400);
//The next point on the path
mxcad.pathLineTo(400, 3300);
mxcad.drawColor = new McCmColor(255, 25, 0);
//Turn the path into a padding
mxcad.drawPathToHatch(1);pathMoveTo
▸ pathMoveTo(dX, dY): void
Move the path to the specified location
Parameters
| Name | Type | Description |
|---|---|---|
| DX | number | X coordinate |
| DY | number | Y coordinate |
Returns
void
pathMoveToEx
▸ pathMoveToEx(dX, dY, dStartWidth, dEndWidth, dBulge): void
Move the path to the specified location, while specifying the starting width, ending width, and convexity
Parameters
| Name | Type | Description |
|---|---|---|
| DX | number | X coordinate |
| DY | number | Y coordinate |
| DStartWidth | number | Starting width |
| DEndWidth | number | End width |
dBulge | number | - |
Returns
void
redo
▸ redo(): void
Reverse rollback, redo.
Returns
void
regen
▸ regen(delayTime?): void
After redrawing all objects on the graph and calling ZoomAll and ZoomW, it may be necessary to delay the call to Regen before it takes effect due to asynchronous execution.
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| DelayTime | number | 0 | execution time |
Returns
void
Example
import { MxCpp, McObject } from 'mxcad'
const mxcad:McObject = MxCpp.getCurrentMxCAD()
//Draw a circle with width
mxcad.addLinetype("CircleLineType", "30,-5,7,-7");
//Design the current line type as' CircleLineType '
mxcad.drawLinetype = ("CircleLineType");
mxcad.drawLineWidth = 40;
mxcad.drawCircle(600, 800, 120);
mxcad.zoomAll();
mxcad.regen();
mxcad.updateDisplay();regenBlockRecord
▸ regenBlockRecord(idBlockRecord): boolean
When redrawing objects in the block table record and modifying the objects in the block table record, if the display effect is not updated in a timely manner, this function needs to be called.
Parameters
| Name | Type | Description |
|---|---|---|
| IdBlockRecord | [McObject Id] (2d. McObject Id. md) | Block Table Record Object |
Returns
boolean
boolean
saveFile
▸ saveFile(filename?, call?, isDownland?, isShowSaveFileDialog?, parameter?): boolean
Save file
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
filename? | string | undefined | New file name for saving as (all saved as files are in mxweb format) |
call? | (data: any)=>void | undefined | callback function, optional parameter, callback function after saving the file, parameter is file data |
| IsDownland | boolean | true | Whether to download files, default to true |
| IsShowSaveFileDialogue | boolean | true | Whether to display the save file dialog box, default is true |
parameter? | object | undefined | - |
Returns
boolean
Has the file been successfully saved
Example
import { MxCpp, McObject, MxTools } from "mxcad"
const mxcad:McObject = MxCpp.App.getCurrentMxCAD()
const fileName = mxcad.getCurrentFileName()
mxcad.saveFile(fileName, (data)=> {
const blob = new Blob([data.buffer], { type: "application/octet-stream" });
}, false, false)saveFileToUrl
▸ saveFileToUrl(sSaveProgramUrl, call, filename?, param?): boolean
Save the file to the server and convert it to a network path for download
Parameters
| Name | Type | Description |
|---|---|---|
| SSaveProgramURL | string | Backend POST request interface, specific implementation of the interface: First download the MxDraw cloud map development package< https://www.mxdraw.com/download.html >And unzip and find MxDrawCloudServer \ Bin \ MxDrawServer \ Windows \ routes \ mxcad \ upload.exe to find the corresponding implementation interface "/savdwg", "/mxcad/savdwg": save dwg file to server "/mxcad/savefile": save mxweb file to server "/mxcad/savepdf": save pdf file to server. If not found, search for the definition of this interface under this project, which must comply with the definition of this interface to be used as a parameter |
| Call | (iResult: number, ServerResult: string)=>void | Save file result callback. The parameters received here should be based on the location where the drawing is saved according to the interface definition, Ref.file is not the complete request path, it is only the name of the saved drawing |
filename? | string | - |
param? | any | - |
Returns
boolean
Has the file been successfully saved
Example
import { MxCpp, McObject } from "mxcad"
//Save DWG file
const mxcad:McObject = MxCpp.getCurrentMxCAD()
MxCpp.getCurrentMxCAD().saveFileToUrl("http://localhost:1337/mxcad/savedwg", (iResult, sserverResult) => {
let ret = JSON.parse(sserverResult);
if (ret.ret == "ok") {
console.log(ret.file)
let saveFileUrl = "http://localhost:1337/mxcad/file/" + ret.file;
MxTools.downloadFileFromUrl(saveFileUrl, ret.file);
}
})
//Save the PDF file.
import { MxCpp, McObject, MxTools } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
MxCpp.getCurrentMxCAD().saveFileToUrl("http://localhost:1337/mxcad/savepdf", (iResult, sserverResult) => {
let ret = JSON.parse(sserverResult);
if (ret.ret == "ok") {
console.log(ret.file)
let saveFileUrl = "http://localhost:1337/mxcad/file/" + ret.file;
MxTools.downloadFileFromUrl(saveFileUrl, ret.file);
}
},"",JSON.stringify({ width: "2000", height: "2000" }));setAttribute
▸ setAttribute(val): boolean
Set global display and run properties.
This method can control some parameters that affect user experience or operational behavior, with common uses including: -Turn on/off undo rollback; -Control the display of coordinate axes; -Adjust display accuracy; -Switch between black and white display modes.
Parameters
| Name | Type | Description |
|---|---|---|
| Val | object | Property configuration object, supports the following common items: 1 Display Precision: Number display precision, ranging from 0 to 1000, with larger values resulting in finer precision; two Enable undo: boolean whether undo/redo is enabled; three ShowCoordinate: boolean Whether to display the XY coordinate axis; four BlackWhiteDisplay: boolean Whether black and white display is enabled. |
Returns
boolean
Example
import { MxCpp } from "mxcad";
//Retrieve the current MxCAD object
const mxcad = MxCpp.getCurrentMxCAD();
//Set global properties: Enable undo function and display coordinate axis
mxcad.setAttribute({ EnableUndo: true, ShowCoordinate: true });setBrowse
▸ setBrowse(browse): void
Set browsing mode Is parambrowse in browsing mode? True is browsing mode, false is editing mode
Parameters
| Name | Type |
|---|---|
browse | boolean |
Returns
void
setCurrentFileName
▸ setCurrentFileName(fileName): void
Set the current file name
Parameters
| Name | Type | Description |
|---|---|---|
| FileName | string | Current file name |
Returns
void
setCurrentLayout
▸ setCurrentLayout(layoutName): boolean
Set the current layout name
Parameters
| Name | Type | Description |
|---|---|---|
| LayoutName | string | Layout Name |
Returns
boolean
setCurrentOriginaFileName
▸ setCurrentOriginaFileName(fileName): void
Set the current source file name
Parameters
| Name | Type | Description |
|---|---|---|
| FileName | string | Current source file name |
Returns
void
setSysVarDouble
▸ setSysVarDouble(varName, val): boolean
Set floating-point values for system variables
Parameters
| Name | Type | Description |
|---|---|---|
| VarName | string | Variable Name |
| Val | number | Floating point value of variable |
Returns
boolean
Whether the variable value has been successfully set
setSysVarLong
▸ setSysVarLong(varName, val): boolean
Set integer values for system variables
Parameters
| Name | Type | Description |
|---|---|---|
| VarName | string | Variable Name |
| Val | number | The integer value of a variable |
Returns
boolean
Whether the variable value has been successfully set
setSysVarPoint
▸ setSysVarPoint(varName, pt): boolean
Set the point values of system variables
Parameters
| Name | Type | Description |
|---|---|---|
| VarName | string | Variable Name |
pt | McGePoint3d | - |
Returns
boolean
Whether the variable value has been successfully set
setSysVarPoint2d
▸ setSysVarPoint2d(varName, pt): boolean
Set 2D point values for system variables
Parameters
| Name | Type | Description |
|---|---|---|
| VarName | string | Variable Name |
pt | McGePoint3d | - |
Returns
boolean
Whether the variable value has been successfully set
setSysVarString
▸ setSysVarString(varName, val): any
Set string values for system variables
Parameters
| Name | Type | Description |
|---|---|---|
| VarName | string | Variable Name |
| Val | string | The string value of the variable |
Returns
any
Whether the variable value has been successfully set
setViewBackgroundColor
▸ setViewBackgroundColor(red, green?, blue?): void
Set the background color of the viewport
Parameters
| Name | Type | Description |
|---|---|---|
| Red | number | red component (0-255) |
green? | number | Green component (0-255) |
blue? | number | Blue component (0-255) |
Returns
void
Example
import { MxCpp, McObject } from "mxcad"
const mxcad:McObject = MxCpp.getCurrentMxCAD()
mxcad.setViewBackgroundColor(255, 255, 255)showLineWeight
▸ showLineWeight(isShow): boolean
Control whether the current viewport displays the line width effect.
Suitable for scenes where you need to view the display effect of line width, debug drawing styles, or observe whether line width is effective in the drawing. After opening, the current view will be refreshed immediately for easy observation of the drawing results.
Parameters
| Name | Type | Description |
|---|---|---|
| IsShow | boolean | Whether to display line width. |
Returns
boolean
Execution results.
Example
import { MxCpp } from "mxcad";
const mxcad = MxCpp.getCurrentMxCAD();
let showLineWeight = false;
function toggleLineWeight() {
showLineWeight = !showLineWeight;
mxcad.showLineWeight(showLineWeight);
}smallcoordToCad
▸ smallcoordToCad(pt): McGePoint3d
Convert the small coordinate system of drawing correction to CAD coordinates
Parameters
| Name | Type | Description |
|---|---|---|
| Pt | McGePoint3d (2d. McGePoint3d. md) | Point Object |
Returns
Converted point coordinates
startBlockEdit
▸ startBlockEdit(idBlockRecord): boolean
Enter block editing mode
Parameters
| Name | Type | Description |
|---|---|---|
| IdBlockRecord | [McObject Id] (2d. McObject Id. md) | ID of the block record |
Returns
boolean
Have you successfully entered the block editing state
Example
import { MxCpp, McDbBlockReference, MxCADUtility, MxCADResbuf, DxfCode } from "mxcad";
async function Mx_StartBlockEdit() {
let retIds = await MxCADUtility.selectEnt(" Select the block reference to be edited ", new MxCADResbuf ([Dxfcode. kElementType," Insert ");
if (retIds.length == 0) {
return;
}
let id = retIds[0];
let ent = id.getMcDbEntity();
if(ent instanceof McDbBlockReference){
MxCpp.mxcad.startBlockEdit((ent as McDbBlockReference).blockTableRecordId);
}
}startViewPortEdit
▸ startViewPortEdit(idBlockRecord): boolean
Start entering viewport editing mode
Parameters
| Name | Type | Description |
|---|---|---|
| IdBlockRecord | [McObject Id] (2d. McObject Id. md) | Viewport record object id |
Returns
boolean
Example
import { MxCpp, McDbViewport, MxCADUtility, MxCADResbuf, DxfCode } from "mxcad";
async function Mx_StartViewPortEdit() {
let retIds = await MxCADUtility.selectEnt(" Select the viewport to be edited ", new MxCADResbuff ([Dxfcode. kElementType," VIEWPORT ");
if (retIds.length == 0) {
return;
}
let id = retIds[0];
let ent = id.getMcDbEntity();
if(ent instanceof McDbViewport){
MxCpp.mxcad.startViewPortEdit(id);
}
}undo
▸ undo(): void
Go back to the previous command or tag
Returns
void
undoIndexIncrease
▸ undoIndexIncrease(): void
Add 1 to the rollback tag index To modify a data object in a non command function, the rollback flag index needs to be incremented by 1, which will record the modification. Otherwise, it may be considered as the previous command modification and skip the current modification rollback record In the command, the rollback tag index will be automatically increased by 1
Returns
void
undoMark
▸ undoMark(): void
Set a rollback flag at the current time
Returns
void
updateDisplay
▸ updateDisplay(isImmediate?, delayTime?): void
update display
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| IsImmediate | boolean | false | Update now |
| DelayTime | number | 0 | Delay update time |
Returns
void
updateLayerDisplayStatus
▸ updateLayerDisplayStatus(): void
Update the display of layers
Returns
void
viewCoord2Cad
▸ viewCoord2Cad(pt): McGePoint3d
Visual area coordinates to CAD coordinates
Parameters
| Name | Type | Description |
|---|---|---|
| Pt | McGePoint3d (2d. McGePoint3d. md) | Point Object |
Returns
Converted point coordinates
viewCoordLong2Cad
▸ viewCoordLong2Cad(l): number
Visual area length to CAD length
Parameters
| Name | Type | Description |
|---|---|---|
| L | number | viewport length |
Returns
number
CAD length
zoomAll
▸ zoomAll(autoRegen?): boolean
Show all
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| AutoRegen | boolean | false | Automatically redraw method after method execution |
Returns
boolean
zoomAngle
▸ zoomAngle(viewangle): void
Set the angle of the display viewport, in PI units
Parameters
| Name | Type | Description |
|---|---|---|
| Viewangle | number | Rotation angle Math PI |
Returns
void
void
zoomCenter
▸ zoomCenter(dCenX, dCenY): void
Move the current display range to the specified position, dCenX, dCenY are DWG drawing coordinates.
Parameters
| Name | Type | Description |
|---|---|---|
| DCenX | number | X coordinate of the center point of the viewport |
| DCenY | number | Y coordinate of the center point of the viewport |
Returns
void
void
zoomScale
▸ zoomScale(scale): void
Scale the current display range, which is relative to the current display range
Parameters
| Name | Type | Description |
|---|---|---|
| Scale | number | scale scaling ratio |
Returns
void
void
zoomW
▸ zoomW(minPt, maxPt): void
Move the current display range to the specified display range
Parameters
| Name | Type | Description |
|---|---|---|
| MinPt | [McGePoint3d] (2d. McGePoint3d. md) | Coordinate 1 McGePoint3d |
| MaxPt | [McGePoint3d] (2d. McGePoint3d. md) | Coordinates 2 McGePoint3d |
Returns
void
void
