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问题的更多相关文章

  1. 梦想CAD控件图块COM接口知识点

    梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...

  2. 梦想CAD控件图层COM接口知识点

    梦想CAD控件图层COM接口知识点 一.新建图层 主要用到函数说明: _DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 c#中实现代码 ...

  3. 如何在网页中浏览和编辑DWG文件 梦想CAD控件

    如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...

  4. 梦想CAD控件,用于浏览和编辑DWG文件,在脱离AUTOCAD的情况下独立运行,相当于简易CAD

    (百度百科连接) 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 2010开发,最早从2007年第一个版本完成,经过多年的累积已经非常 ...

  5. 梦想CAD控件COM接口自定义命令

    在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...

  6. 梦想CAD控件网页版关于自定义命令

    在CAD控件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处在线演示. _DMxDrawX::RegistUserCustomCommand 向CAD控件注册一 ...

  7. 梦想CAD控件关于比较问题

    全图比较 怎么比较两个CAD图纸文件修改前后的不同部分呢?在工程图纸设计中,我们更多情况下可能需要对同一张工程图的前后修改部分进行对比,以确定工程图纸的改动部分及追溯原因,本教程演示了几种常见的比较方 ...

  8. 梦想CAD控件文字COM接口知识点

    一.参数绘制文字 在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOU ...

  9. 梦想CAD控件网页版搜索图面上的文字

    在网页中查找到CAD控件图纸上的文字.点击此处在线演示. 主要用到函数说明: _DMxDrawX::NewSelectionSet 实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数. _DM ...

随机推荐

  1. ExtJS ComboBox 下拉列表详细用法

    ExtJS ComboBox 下拉列表详细用法 标签: combobox 2015-06-14 23:23 5171人阅读 评论(2) 收藏 举报  分类: ExtJS(32)    目录(?)[+] ...

  2. lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元

    题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1013 1013: [JSOI2008]球形空间产生器sphere 时间限制: 1 Sec  内 ...

  3. hadoop分布式安装部署具体视频教程(网盘附配好环境的CentOS虚拟机文件/hadoop配置文件)

    參考资源下载:http://pan.baidu.com/s/1ntwUij3视频安装教程:hadoop安装.flvVirtualBox虚拟机:hadoop.part1-part5.rarhadoop文 ...

  4. c# GDI+绘制不同字体的字符串

    一段字符串中可能既有汉字又有字母,对于汉字和字母分别采用不同的字体进行绘制直接po代码了 Bitmap bmp = new Bitmap(iWidth, iHeight); Graphics g = ...

  5. #1543 : SCI表示法

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 每一个正整数 N 都能表示成若干个连续正整数的和,例如10可以表示成1+2+3+4,15可以表示成4+5+6,8可以表示成 ...

  6. CPU卡的读写【转】

    本文转载自:http://blog.csdn.net/logaa/article/details/7465226 一般来说,对存储卡和逻辑加密卡操作,使用接触式IC卡通用读写器:对CPU卡使用CPU卡 ...

  7. Groonga开源搜索引擎——列存储做聚合,没有内建分布式,分片和副本是随mysql或者postgreSQL作为存储引擎由MySQL自身来做分片和副本的

    1. Characteristics of Groonga ppt:http://mroonga.org/publication/presentation/groonga-mysqluc2011.pd ...

  8. memcached知识点梳理

    Memcached概念:    Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HASH表,该表以Key-valu ...

  9. 【附论文】Facebook推面部识别软件 精准度高达97.25%

    论文下载链接:http://pan.baidu.com/s/1gd86HXp 以下转载自36kr. 认脸对于人来说不是什么难事,除非是韩国小姐才需要最强大脑.但是计算机做同样的事情就要困难得多了.不过 ...

  10. Java多线程 -- 正确使用Volatile变量

    Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”:与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少, ...