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. Struts2 整合jQuery实现Ajax功能(1)

    技术领域非常多东西流行,自然有流行的道理.这几天用了jQuery,深感有些人真是聪明绝顶,能将那么多技术融合的如此完美. 首先明白个概念: jQuery是什么:是使用javascript语言开发的,用 ...

  2. C#项目的生成事件及批处理文件

    一个C#项目,如果为同一个解决方案的其他项目所引用,则其编译后,会将DLL拷贝到引用项目中:但如果它并不被其他项目引用,但又想编译后能够自动将生成的东西拷贝过去,可以在项目的生成事件中,写上一些批处理 ...

  3. the largest value you actually can transmit between the client and server is determined by the amount of available memory and the size of the communications buffers.

    the largest value you actually can transmit between the client and server is determined by the amoun ...

  4. Grunt学习日记

    Grunt和 Grunt 插件是通过npm安装并管理的, npm是Node.js的包管理器. 第一步:先安装node.js环境 第二步:安装Grunt-CLI 在node.js命令工具中输入npm i ...

  5. [Unity-21] Prefab具体解释

    1.什么是Prefab? Prefab又被称为预设,以下部分来自官网:预置是一种资源类型--存储在项目视图中的一种可反复使用的游戏对象.预置能够多次放入到多个场景中. 当你加入一个预置到场景中,就创建 ...

  6. 学习Flash Builder编程的准备工作

    1. 下载教科书,Essential ActionScript 3.0或者Programming ActionScript 3.0.这将是你的很好的老师.英语不灵的买一本中文版本. 2. 安装Flas ...

  7. POJ2686 Traveling by Stagecoach 状态压缩DP

    POJ2686 比较简单的 状态压缩DP 注意DP方程转移时,新的状态必然数值上小于当前状态,故最外层循环为状态从大到小即可. #include <cstdio> #include < ...

  8. Java 泛型 四 基本用法与类型擦除

    简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...

  9. FreeMarker:什么是 FreeMarker?

    ylbtech-FreeMarker:什么是 FreeMarker? 1.返回顶部 1. FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电 ...

  10. Eclipse 配置 Python 环境

    1.将下载好的Pydev4.5.2(http://sourceforge.net/projects/pydev/files/pydev/  里面有很多版本) 文件夹里的两个文件夹(features+p ...