CAD填充图案从文件加载图案定义
原创
©著作权归作者所有:来自51CTO博客作者MxCAD的原创作品,请联系作者获取转载授权,否则将追究法律责任
1、在上一篇文章中介绍了在CAD图纸中由闭合区域一点绘制一个填充对象,那么这篇文章将介绍填充图案从文件加载图案定义。
2、实现思路:首先我们先在控件视区的闭合区域点取一点,然后利用DrawHatchFromPoint方法在当前控件显示范围内搜缩闭合区域,然后用该闭合区域创建填充对象。定义填充图案的文件名,再通过ObjectIdToObject方法由实体id返回实体对象,最后通过LoadPatternDefinition方法从文件加载图案定义就可以啦。
3、主要用到函数说明:
(1)_DMxDrawX::DrawHatchFromPoint
根据一个点,在当前控件显示范围内搜缩闭合区域,然后用该闭合区域创建填充对象,详细说明如下:
参数
| 说明
|
DOUBLE dX | 开始搜索点X值 |
DOUBLE dY | 开始搜索点y值 |
DOUBLE dPatternScale | 图案缩放比例 |
(2)IMxDrawDatabase::ObjectIdToObject
实体id返回实体对象,具体详细如下:
参数
| 说明
|
[in] LONGLONG lId | 实体id |
(3)IMxDrawHatch::LoadPatternDefinition
从文件加载图案定义,详细说明如下:
参数
| 说明
|
[in] BSTR pszFileName | 图案定义文件 |
[in] BSTR pszName | 图案名称 |
[in] DOUBLE dPatternScale | 缩放比例,默认传1.0 dPatternAngel -角度,默认传0.0 |
c#代码实现如下:
MxDrawUiPrPoint getPoint = new MxDrawUiPrPoint();
getPoint.message = "点取一点:";
if (getPoint.go() != MCAD_McUiPrStatus.mcOk)
return;
MxDrawPoint pt = getPoint.value();
axMxDrawX1.PatternDefinition = "SOLID";
Int64 id = axMxDrawX1.DrawHatchFromPoint(pt.x, pt.y, 1.0);
if (id == 0)
return;
// 修改新绘的填充的图案从文件中加载.
String sPatternFile = axMxDrawX1.GetOcxAppPath() + "\mx.pat";
String sPatternName = "ANSI35";
MxDrawHatch hatch = (MxDrawHatch)axMxDrawX1.ObjectIdToObject(id);
hatch.LoadPatternDefinition(sPatternFile, sPatternName, 300.0, 0.0);
js代码实现如下:
var getPoint = mxOcx.NewComObject("IMxDrawUiPrPoint");
getPoint.message = "点取一点";
if (getPoint.go() != 1) {
return;
}
var frstPt = getPoint.value();
if (frstPt == null)
return;
mxOcx.PatternDefinition = "SOLID";
var id = mxOcx.DrawHatchFromPoint(frstPt.x, frstPt.y, 1.0);
if (id == 0)
return;
// 修改新绘的填充的图案从文件中加载.
var sPatternFile = mxOcx.GetOcxAppPath() + "\\mx.pat";
var sPatternName = "ANSI35";
var hatch = mxOcx.ObjectIdToObject(id);
hatch.LoadPatternDefinition(sPatternFile, sPatternName, 300.0, 0.0);