指南
- 开始
- 指南
- 基础绘图
- 交互绘图
- 图纸编辑
- 数据库
- 最佳实践
MxCAD API 文档
- 类
- 2d.Color
- 2d.McAppType
- 2d.McCmColor
- 2d.McDbAlignedDimension
- 2d.McDbArc
- 2d.McDbAttribute
- 2d.McDbAttributeDefinition
- 2d.McDbBlockReference
- 2d.McDbBlockTable
- 2d.McDbBlockTableRecord
- 2d.McDbCircle
- 2d.McDbCurve
- 2d.McDbDatabase
- 2d.McDbDimension
- 2d.McDbEllipse
- 2d.McDbEntity
- 2d.McDbHatch
- 2d.McDbLayerTable
- 2d.McDbLayerTableRecord
- 2d.McDbLine
- 2d.McDbLinetypeTable
- 2d.McDbLinetypeTableRecord
- 2d.McDbMText
- 2d.McDbObject
- 2d.McDbObjectArray
- 2d.McDbPoint
- 2d.McDbPolyline
- 2d.McDbProxyEntity
- 2d.McDbRasterImage
- 2d.McDbRasterImageDef
- 2d.McDbRotatedDimension
- 2d.McDbText
- 2d.McDbTextStyleTable
- 2d.McDbTextStyleTableRecord
- 2d.McGeLongArray
- 2d.McGeMatrix3d
- 2d.McGePoint3d
- 2d.McGePoint3dArray
- 2d.McGeStringArray
- 2d.McGeVector3d
- 2d.McObject
- 2d.McObjectId
- 2d.McRxObject
- 2d.MdGeDoubleArray
- 2d.MxCADResbuf
- 2d.MxCADSelectionSet
- 2d.MxCADUiPrAngle
- 2d.MxCADUiPrBase
- 2d.MxCADUiPrDist
- 2d.MxCADUiPrEntity
- 2d.MxCADUiPrInt
- 2d.MxCADUiPrKeyWord
- 2d.MxCADUiPrPoint
- 2d.MxCADUiPrString
- 2d.MxCADUtilityClass
- 2d.MxCppType
- 2d.MxPropertiesWindowCustom
- 2d.MxPropertiesWindowCustomValue
- 2d.ObjectInheritance
- 3d.MdGeAngleDim
- 3d.MdGeArray1OfInteger
- 3d.MdGeArray1OfPnt
- 3d.MdGeArray1OfReal
- 3d.MdGeArray2OfPnt
- 3d.MdGeArray2OfReal
- 3d.MdGeArrowAspect
- 3d.MdGeAxis
- 3d.MdGeBezierCurve
- 3d.MdGeBezierSurface
- 3d.MdGeBox
- 3d.MdGeBRep
- 3d.MdGeBSplineCurve
- 3d.MdGeBSplineSurface
- 3d.MdGeChamfer
- 3d.MdGeCircle
- 3d.MdGeColor
- 3d.MdGeCompound
- 3d.MdGeCompSolid
- 3d.MdGeCone
- 3d.MdGeCSYS
- 3d.MdGeCSYSR
- 3d.MdGeCylinder
- 3d.MdGeDiameterDim
- 3d.MdGeDimAspect
- 3d.MdGeDir
- 3d.MdGeEdge
- 3d.MdGeEllipse
- 3d.MdGeExplorer
- 3d.MdGeFace
- 3d.MdGeFillet
- 3d.MdGeHGeomPlane
- 3d.MdGeHGeomSurface
- 3d.MdGeHypr
- 3d.MdGeInterpolateBSpl
- 3d.MdGeLengthDim
- 3d.MdGeLight
- 3d.MdGeLine
- 3d.MdGeLineAspect
- 3d.MdGeListIteratorOfListOfShape
- 3d.MdGeListOfShape
- 3d.MdGeLoft
- 3d.MdGeMakeArcOfCircle
- 3d.MdGeMakeFace
- 3d.MdGeMakeThickSolid
- 3d.MdGeMakeWires
- 3d.MdGeMat
- 3d.MdGeMaterialAspect
- 3d.MdGeObject
- 3d.MdGeParab
- 3d.MdGePipe
- 3d.MdGePlane
- 3d.MdGePoint
- 3d.MdGePointsToBSpl
- 3d.MdGePointsToBSplSurface
- 3d.MdGePrism
- 3d.MdGeRadiusDim
- 3d.MdGeRect
- 3d.MdGeRevol
- 3d.MdGeSequenceIteratorOfSequenceOfShape
- 3d.MdGeSequenceOfShape
- 3d.MdGeShape
- 3d.MdGeShell
- 3d.MdGeSolid
- 3d.MdGeSphere
- 3d.MdGeText
- 3d.MdGeTextAspect
- 3d.MdGeTextLabel
- 3d.MdGeTopo
- 3d.MdGeTorus
- 3d.MdGeTransform
- 3d.MdGeTrsf
- 3d.MdGeVec
- 3d.MdGeVertex
- 3d.MdGeWedge
- 3d.MdGeWire
- 3d.MdGeXYZ
- 3d.MxDraw3d
- Color
- McAppType
- McCmColor
- McDbAlignedDimension
- McDbArc
- McDbAttribute
- McDbAttributeDefinition
- McDbBlockReference
- McDbBlockTable
- McDbBlockTableRecord
- McDbCircle
- McDbCurve
- McDbDatabase
- McDbDimension
- McDbEllipse
- McDbEntity
- McDbHatch
- McDbLayerTable
- McDbLayerTableRecord
- McDbLine
- McDbLinetypeTable
- McDbLinetypeTableRecord
- McDbMText
- McDbObject
- McDbObjectArray
- McDbPoint
- McDbPolyline
- McDbProxyEntity
- McDbRasterImage
- McDbRasterImageDef
- McDbRotatedDimension
- McDbText
- McDbTextStyleTable
- McDbTextStyleTableRecord
- McGeLongArray
- McGeMatrix3d
- McGePoint3d
- McGePoint3dArray
- McGeStringArray
- McGeVector3d
- McObject
- McObjectId
- McRxObject
- MdGeAngleDim
- MdGeArray1OfInteger
- MdGeArray1OfPnt
- MdGeArray1OfReal
- MdGeArray2OfPnt
- MdGeArray2OfReal
- MdGeArrowAspect
- MdGeAxis
- MdGeBezierCurve
- MdGeBezierSurface
- MdGeBox
- MdGeBRep
- MdGeBSplineCurve
- MdGeBSplineSurface
- MdGeChamfer
- MdGeCircle
- MdGeColor
- MdGeCompound
- MdGeCompSolid
- MdGeCone
- MdGeCSYS
- MdGeCSYSR
- MdGeCylinder
- MdGeDiameterDim
- MdGeDimAspect
- MdGeDir
- MdGeDoubleArray
- MdGeEdge
- MdGeEllipse
- MdGeExplorer
- MdGeFace
- MdGeFillet
- MdGeHGeomPlane
- MdGeHGeomSurface
- MdGeHypr
- MdGeInterpolateBSpl
- MdGeLengthDim
- MdGeLight
- MdGeLine
- MdGeLineAspect
- MdGeListIteratorOfListOfShape
- MdGeListOfShape
- MdGeLoft
- MdGeMakeArcOfCircle
- MdGeMakeFace
- MdGeMakeThickSolid
- MdGeMakeWires
- MdGeMat
- MdGeMaterialAspect
- MdGeObject
- MdGeParab
- MdGePipe
- MdGePlane
- MdGePoint
- MdGePointsToBSpl
- MdGePointsToBSplSurface
- MdGePrism
- MdGeRadiusDim
- MdGeRect
- MdGeRevol
- MdGeSequenceIteratorOfSequenceOfShape
- MdGeSequenceOfShape
- MdGeShape
- MdGeShell
- MdGeSolid
- MdGeSphere
- MdGeText
- MdGeTextAspect
- MdGeTextLabel
- MdGeTopo
- MdGeTorus
- MdGeTransform
- MdGeTrsf
- MdGeVec
- MdGeVertex
- MdGeWedge
- MdGeWire
- MdGeXYZ
- MxCADResbuf
- MxCADSelectionSet
- MxCADUiPrAngle
- MxCADUiPrBase
- MxCADUiPrDist
- MxCADUiPrEntity
- MxCADUiPrInt
- MxCADUiPrKeyWord
- MxCADUiPrPoint
- MxCADUiPrString
- MxCADUtilityClass
- MxCppType
- MxDraw3d
- MxPropertiesWindowCustom
- MxPropertiesWindowCustomValue
- ObjectInheritance
- 2d.ColorIndexType
- 2d.ColorMethod
- 2d.FetchAttributes
- 2d.McDb.AttachmentPoint
- 2d.McDb.ClipBoundaryType
- 2d.McDb.HatchEdgeType
- 2d.McDb.HatchLoopType
- 2d.McDb.HatchPatternType
- 2d.McDb.HatchStyle
- 2d.McDb.Intersect
- 2d.McDb.LineWeight
- 2d.McDb.TextHorzMode
- 2d.McDb.TextVertMode
- 2d.McObjectIdType
- 2d.MxCADResbufDataType
- 2d.MxCADSelectionSetStatus
- 2d.MxPropertiesWindowCustomValueType
- 3d.MdGe.MxCameraProjection
- 3d.MdGe.MxCF3dFilletShapeEnum
- 3d.MdGe.MxCFDSChamfMode
- 3d.MdGe.MxDimensionArrowOrientation
- 3d.MdGe.MxDimensionTextHorizontalPosition
- 3d.MdGe.MxDimensionTextVerticalPosition
- 3d.MdGe.MxDisplayMode
- 3d.MdGe.MxFontAspect
- 3d.MdGe.MxGAJoinTypeEnum
- 3d.MdGe.MxGAShapeEnum
- 3d.MdGe.MxGFTrihedron
- 3d.MdGe.MxHorizontalTextAlignment
- 3d.MdGe.MxKindOfDimension
- 3d.MdGe.MxNameOfColor
- 3d.MdGe.MxNameOfMaterial
- 3d.MdGe.MxOffsetModeEnum
- 3d.MdGe.MxShapeEnum
- 3d.MdGe.MxTextPath
- 3d.MdGe.MxTypeOfAngle
- 3d.MdGe.MxTypeOfAngleArrowVisibility
- 3d.MdGe.MxTypeOfColor
- 3d.MdGe.MxTypeOfDisplayText
- 3d.MdGe.MxTypeOfLightSource
- 3d.MdGe.MxTypeOfLine
- 3d.MdGe.MxTypeOfMaterial
- 3d.MdGe.MxTypeOfReflection
- 3d.MdGe.MxV3dTypeOfOrientation
- 3d.MdGe.MxVerticalTextAlignment
- 枚举
- ColorIndexType
- ColorMethod
- FetchAttributes
- McDb.AttachmentPoint
- McDb.ClipBoundaryType
- McDb.HatchEdgeType
- McDb.HatchLoopType
- McDb.HatchPatternType
- McDb.HatchStyle
- McDb.Intersect
- McDb.LineWeight
- McDb.TextHorzMode
- McDb.TextVertMode
- McObjectIdType
- MdGe.MxCameraProjection
- MdGe.MxCF3dFilletShapeEnum
- MdGe.MxCFDSChamfMode
- MdGe.MxDimensionArrowOrientation
- MdGe.MxDimensionTextHorizontalPosition
- MdGe.MxDimensionTextVerticalPosition
- MdGe.MxDisplayMode
- MdGe.MxFontAspect
- MdGe.MxGAJoinTypeEnum
- MdGe.MxGAShapeEnum
- MdGe.MxGFTrihedron
- MdGe.MxHorizontalTextAlignment
- MdGe.MxKindOfDimension
- MdGe.MxNameOfColor
- MdGe.MxNameOfMaterial
- MdGe.MxOffsetModeEnum
- MdGe.MxShapeEnum
- MdGe.MxTextPath
- MdGe.MxTypeOfAngle
- MdGe.MxTypeOfAngleArrowVisibility
- MdGe.MxTypeOfColor
- MdGe.MxTypeOfDisplayText
- MdGe.MxTypeOfLightSource
- MdGe.MxTypeOfLine
- MdGe.MxTypeOfMaterial
- MdGe.MxTypeOfReflection
- MdGe.MxV3dTypeOfOrientation
- MdGe.MxVerticalTextAlignment
- MxCADResbufDataType
- MxCADSelectionSetStatus
- MxPropertiesWindowCustomValueType
- 2d.MxCadConfig
- 2d.MxCADUI
- 3d.MxDraw3dConfig
- 3d.WasmConfig
- 接口
- 模块
3. 动态绘制
动态绘制
CAD绘制图形的过程中我们需要能够动态观察到绘制过程,在该过程中的动态绘制不会改变图形类,但能动态设置图形的大小、方向等,可以帮助用户更快捷地绘制目标图形。
动态绘制函数
在上一节我们介绍到在绘制图形的过程中我们会使用 MxCADUiPrBase类 来实现UI交互,该类中提供了一个方法 setUserDraw(),该方法就是为了解决上述需求实现动态绘制的函数。
我们通过在 MxCADUiPrBase类 中调用 setUserDraw() 方法设置交互过程的动态绘制调用对象。其中,setUserDraw() 有两个回调参数:
currentPoint:currentPoint为一个 McGePoint3d 三维点对象,返回值是当前鼠标所在点坐标。
pWorldDraw:pWorldDraw为一个 McEdGetPointWorldDrawObject 动态绘制调用对象,可根据用户设置动态绘制目标图形,但使用该对象动态绘制的图像对象在结束调用时会全部清除。
import { MxCADUiPrPoint, McDbLine } from "mxcad"
const getPoint = new MxCADUiPrPoint()
getPoint.go().then((point)=> {
getPoint.setUserDraw((pt, pw)=> {
// pt:currentPoint 就是鼠标所在图纸位置的坐标
// pw:pWorldDraw 是提供了一些动态绘制方法的对象
if(!point) return
const line =new McDbLine(point ,pt)
// 动态绘制了一条线
pw.drawMcDbEntity(line)
})
// 等待鼠标点击期间会执行上面的动态绘制函数中的回调函数
getPoint.go()
})
功能函数
我们可以直接从mxcad中导出以draw开头的函数, 每一个函数对应着一个动态绘制图形的功能。这些功能存在一些命令行交互(输入参数、关键词),类似大部分CAD中绘制图形的功能,我们可以通过默认的命令去调用这些函数,也可以选择导出调用,具体操作可参考命令行教程。
mxcad 提供的交互绘制对应图形的函数以及命令列表: | 函数 | 命令 | 说明 | |------|------|------| | drawLine | Mx_Line | 绘制直线 | | drawArc | Mx_Arc | 绘制圆弧 | | drawCircle | Mx_Circle | 绘制圆 | | drawEllipse | Mx_Ellipse | 绘制椭圆 | | drawEllipticalArc | Mx_EllipseArc | 绘制椭圆弧 | | drawMText | | 绘制多行文本 | | drawText | | 绘制多行文本 | | drawPolygon | Mx_Polygon | 绘制正多边形 | | drawPolyLine | Mx_Pline | 绘制多义线 | | drawRectang | Mx_Rectang | 绘制矩形 |
:::tip 提示 在ESM模块化的情况下,你需要引入对应的函数才能调用对应的命令。 :::
演示
效果:
在命令行输入“Mx_Arc”命令,点击enter键执行命令
再根据命令行输出的提示步骤绘制圆弧
:::demo
import { McObject, drawArc } from "mxcad"
import { MxFun } from "mxdraw"
export default () => {
const mxcad = new McObject()
mxcad.create({
canvas: "#myCanvas",
locateFile: (fileName: string)=> {
// CDN 加载必须使用wasm/2d-st中的资源、因为github的限制无法使用wasm/2d 资源
// 需要使用wasm/2d需要遵循浏览器同源策略或使用其他手段规避浏览器同源策略
return "https://unpkg.com/mxcad/dist/wasm/2d-st/" + fileName
},
// 加载字体的目录位置
fontspath: self.location.origin + "/mxcad_docs/fonts",
// 加载转换后的图纸文件
fileUrl: self.location.origin + "/mxcad_docs/test2.mxweb",
onOpenFileComplete:()=>{
const inputBox: any = document.getElementById("myInput")
const cmdWindow: any = document.getElementById("myArea")
// 监听命令行输入
let inputText = ""
inputBox.oninput = () => {
inputText = inputBox.value
}
inputBox.onkeydown = (e) => {
MxFun.setCommandLineInputData(inputText, e.keyCode)
if (e.keyCode === 13) inputText = inputBox.value = ""
}
// 显示命令行消息变化
MxFun.listenForCommandLineInput(({
msCmdTip,
msCmdDisplay,
msCmdText
}) => {
inputText = msCmdText
cmdWindow.value = msCmdDisplay + "\n" + msCmdTip
cmdWindow.scrollTop = cmdWindow.scrollHeight
})
// 注册命令
MxFun.addCommand("Mx_Arc", async () => drawArc());
}
})
return (<div style="height: 650px; overflow: hidden;">
<div style="height: 500px; overflow: hidden;"><canvas id="myCanvas"></canvas></div>
<div style="width: 100%;height: 150px;margin:10px 0px">
<textarea style="width: 100%;height: 100px;background-color: #000;color: #fff;border-radius: 5px" id="myArea" readonly="true"></textarea>
<input style="width:100%;height:30px;background-color: #000;color: #fff;" id="myInput"/>
</div>
</div>)
}
:::
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论