梦想CAD控件关于id与handle问题
ID和句柄具有各自的特点:
(1) ID:在一个任务中,本次任务中都是独一无二的。在不同的任务中,同一个图形对象的ID可能不同。
(2) 句柄:在一个任务中,不能保证每个对象的句柄都唯一,但是在一个图形数据库中所有对象的句柄都是唯一的。句柄随DWG图形一起保存,在两次任务期间同一对象的句柄是相同的。
一、实体id返回实体对象
IMxDrawDatabase::ObjectIdToObject
实体id返回实体对象,具体详细如下:
参数 | 说明 |
---|---|
[in] LONGLONG lId |
实体id |
JS代码中绘一个直线,得到直线id,再调该得到直线对象,然写扩展数据的例子。
function DoCommandEventFunc(iCmd)
{
if (iCmd == 1)
{
var mxOcx = document.all.item( "MxDrawXCtrl" );
mxOcx.focus();
var point1 = mxOcx.GetPoint( null , "n 点取开始点:" );
if (point1 == null )
{
return ;
}
var point2 = mxOcx.GetPoint(point1, "n 点取结束点:" );
if (point1 == null )
{
return ;
}
// 直线的id
var lineId = mxOcx.DrawLine(point1.x,point1.y,point2.x,point2.y);
// 为新写的直线写一个字符串扩展数据
var database = mxOcx.GetDatabase();
var ent = database.ObjectIdToObject(lineId);
if (ent == null )
{
return ;
}
var exData = mxOcx.Call( "Mx_NewResbuf" , "" );
exData.AddString( "TestApp" ,1001);
exData.AddString( "用户的扩展数据内容。。。" ,1000);
ent.SetXData(exData);
}
}
|
JS代码得到插入块的位置:
mxOcx.DrawColor = 0;
//创建一个图层,名为"BlockLayer"
mxOcx.AddLayer ( "BlockLayer" );
//设置当前图层为"BlockLayer"
mxOcx.LayerName = "BlockLayer" ;
var sBlkName = "Tree" ;
//用户需要出入图块的路径 控件程序在磁盘的文件路径
var sBlkFile = mxOcx.GetOcxAppPath() + "\\Blk\\树.dwg" ;
//向控件数据库中插入一个图块,不用它插入匿名块
mxOcx.InsertBlock(sBlkFile, "Tree" );
//绘制块引用对象
//参数一为插入点的X坐标;参数二为插入点的Y坐标;
//参数三为图块名;参数四为图块缩放比例;参数五为图块的旋转角度
var myblock=mxOcx.DrawBlockReference(0, 3600, "Tree" , 1, 0) ;
var blkref = mxOcx.ObjectIdToObject(myblock);
var myposition=blkref.Position;
alert(myposition.x );
alert(myposition.y);
|
JS代码镜像一个实体:
var lineid= mxOcx.DrawLine(0, 0, 100, 0);
var pt1 = mxOcx.NewPoint();
pt1.x = -200;
pt1.y = -200;
var pt2 = mxOcx.NewPoint();
pt2.x = 200;
pt2.y = 200;
var database = mxOcx.GetDatabase();
var ent = database.ObjectIdToObject(lineid);
ent.Mirror(pt1,pt2);
|
C#代码插入非等比例的图块:
String sBlkPath = axMxDrawX1.GetOcxAppPath() + "\\Blk\\树.dwg" ;
axMxDrawX1.InsertBlock(sBlkPath, "MyBlkName" );
Int64 iID = axMxDrawX1.DrawBlockReference(100, 100, "MyBlkName" , 0.2, 0);
MxDrawBlockReference blkRef = (MxDrawBlockReference) axMxDrawX1.ObjectIdToObject(iID);
MxDrawScale3d scale = new MxDrawScale3d();
scale.sx = 1;
scale.sy = 2;
scale.sz = 1;
blkRef.ScaleFactors = scale;
|
JS代码填充图案如何从文件加载图案定义:
主要用到函数说明:
IMxDrawHatch::LoadPatternDefinition
从文件加载图案定义,详细说明如下:
参数 | 说明 |
---|---|
[in] BSTR pszFileName |
图案定义文件 |
[in] BSTR pszName |
图案名称 |
[in] DOUBLE dPatternScale |
缩放比例,默认传1.0 dPatternAngel -角度,默认传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);
|
二、实体句柄返回实体对象
IMxDrawDatabase::HandleToObject
给一个实体的句柄,返回实体的对象,具体详细如下:
参数 | 说明 |
---|---|
[in] BSTR handle |
实体的句柄 |
C#代码得到多线的端点,并成填充对象:
private void TestFill(String sHandle)
{
MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
MxDrawMcDbObject obj = database.HandleToObject(sHandle);
if (obj == null )
return ;
if (obj is MxDrawPolyline)
{
MxDrawPolyline poly = (MxDrawPolyline)obj;
int i = 0;
for (; i < poly.NumVerts; i++)
{
MxDrawPoint pt = (MxDrawPoint)poly.GetPointAt(i);
double dBulge = poly.GetBulgeAt(i);
if (i == 0)
axMxDrawX1.PathMoveTo(pt.x, pt.y);
else
axMxDrawX1.PathLineToEx(pt.x, pt.y, 0.0, 0.0, dBulge);
}
if (i >= 3)
{
axMxDrawX1.PathMakeClosed();
axMxDrawX1.DrawPathToHatch(1.0);
}
}
}
|
三、把实体id转成实体句柄
IMxDrawDatabase::ObjectIdToHandle
把实体id转成实体句柄。
四、把实体的句柄转成实体id
IMxDrawDatabase::HandleToObjectId
把实体的句柄转成实体id。
六、得到对象的句柄
IMxDrawMcDbObject::Handle
得到对象的句柄。
梦想CAD控件关于id与handle问题的更多相关文章
- 梦想CAD控件图块COM接口知识点
梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...
- 梦想CAD控件图层COM接口知识点
梦想CAD控件图层COM接口知识点 一.新建图层 主要用到函数说明: _DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 c#中实现代码 ...
- 如何在网页中浏览和编辑DWG文件 梦想CAD控件
如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2 是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...
- 梦想CAD控件,用于浏览和编辑DWG文件,在脱离AUTOCAD的情况下独立运行,相当于简易CAD
(百度百科连接) 梦想绘图控件5.2 是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 2010开发,最早从2007年第一个版本完成,经过多年的累积已经非常 ...
- 梦想CAD控件COM接口自定义命令
在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...
- 梦想CAD控件网页版关于自定义命令
在CAD控件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处在线演示. _DMxDrawX::RegistUserCustomCommand 向CAD控件注册一 ...
- 梦想CAD控件关于比较问题
全图比较 怎么比较两个CAD图纸文件修改前后的不同部分呢?在工程图纸设计中,我们更多情况下可能需要对同一张工程图的前后修改部分进行对比,以确定工程图纸的改动部分及追溯原因,本教程演示了几种常见的比较方 ...
- 梦想CAD控件文字COM接口知识点
一.参数绘制文字 在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOU ...
- 梦想CAD控件网页版搜索图面上的文字
在网页中查找到CAD控件图纸上的文字.点击此处在线演示. 主要用到函数说明: _DMxDrawX::NewSelectionSet 实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数. _DM ...
随机推荐
- jdk、jre、spring、java ee、java se
1 java se.java ee和java me 这三个是java的标准.java se是根本,java ee建立在java se上,用于server.java me是java se的子集,用于终端 ...
- P1198 [JSOI2008]最大数(线段树)
P1198 [JSOI2008]最大数(线段树) 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值 ...
- Python Tricks(十九)—— switch 的实现
python 原生语法不支持 switch,体现了 Python 大道至简的设计思路,有时为了避免啰嗦的 if elif等判断语句,我们可以用字典来代替 switch 的各分支,也即建立表达式和操作的 ...
- Spring MVC标签<mvc: annotation-driven />小结 原
转自:https://my.oschina.net/u/1156626/blog/881483 mvc:annotation-driven的作用 Spring 3.0.x中使用了mvc:annotat ...
- ubuntu/linuxmint更换163源及常用软件PPA源记录
一.163源使用说明 (具体见:http://mirrors.163.com/,不推荐linuxmint更换源!!!) 以Wily(15.10)为例, 编辑/etc/apt/sources.list文 ...
- 【转载】批量部署系统之kickstart
一.安装各服务: ftp服务提供软件软件源,tftp提供引导文件,dhcp提供PXE文件位置,syslinux提供PXE文件 [root@node1~]# yum -y installtftp-ser ...
- MySQL基础 — 详细安装
MySQL--安装 打开MySQL 5.5 安装文件开始: 点击Next 打上勾,再点击Next 点击Custom,说明如下: Typical(典型安装) Installs the mo ...
- codeforces 949C - Data Center Maintenance【tarjan】
首先转换图论模型,把某个客户一个终端的维修时间(+1)%h之后和另一个终端维修时间一样,这样的两个终端连一条有向边,表示推后一个终端就必须推后另一个 然后tarjan缩点,一个scc里的终端是要一起推 ...
- bzoj 2165: 大楼【Floyd+矩阵乘法+倍增+贪心】
1<<i的结果需要是long long的话i是long long是没用的--要写成1ll<<i--我别是个傻子吧 虽然写的是二进制贪心,但是我觉得二分可能更好写吧(但是会慢) ...
- bzoj 1704: [Usaco2007 Mar]Face The Right Way 自动转身机【贪心+差分】
首先O(n^3)的贪心很好想,就是枚举k然后从前往后扫,扫到反就翻转区间 然后考虑优化掉翻转区间维,就是搞成差分的形式,在翻转区间的尾部打上标记,再用一个变量维护当前的翻转次数,加到当前状态上来判断是 ...