明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: mxdwg

梦想mxdraw浏览,编辑控件

  [复制链接]
发表于 2014-12-23 08:51:43 | 显示全部楼层
刚路过,见一回顶一回
 楼主| 发表于 2015-5-12 17:00:49 | 显示全部楼层

1.1        控件数据库        3
1.1.1        数据库概述        3
1.2        数据库初始化        4
1.3        创建和组织数据库        4
1.4        保存数据库        4
1.5        插入一个数据库        4
1.6        设置当前数据库值        5
1.6.1        数据库颜色值        5
1.6.2        数据库线型值        5
1.6.3        数据库线型比例值        5
1.6.4        数据库层值        5
1.7        打开和关闭数据库对象        6
1.8        删除对象        6
1.9        删除数据库对象        7
1.10        添加对象指定数据        7
1.10.1        扩展数据        7
1.10.2        扩展字典        7
1.11        对象的关闭        7
1.12        实体对象        8
1.12.1        实体简介        8
1.12.2        实体的共同属性        8
1.13        容器对象        10
1.13.1        符号表        11
1.13.2        字典        12
1.14        扩展记录        12

1.1控件数据库
数据库是控件最重要的部分,所有图形信息都储存在数据库中,因此掌握数据库是控件开发的基础。数据库对象包括实体、块表记、符号表记录和字典,正是数据库对象组成了数据库。数据库的结构如下图:


1.1.1数据库概述
控件数据库中存储了构成图形的对象和实体。图形是存储在数据库中对象的集合,基本的数据库对象包括实体、符号表和字典。实体是一种指定类型的数据库对象,它在控件屏幕上有图形表示,实体的例子有直线、圆、圆弧、文字、曲线和椭圆等。用户在屏幕上可以看见实体并且可以对它进行操作。
符号表和字典是用来存储数据库对象的容器对象,这两种对象都可以将一个符号名映射到一个数据库对象。控件数据库包括固定数目的符号表,每一个符号表包含了一种特定类的实例作为符号表记录。符号表的例子如层表(McDbLayerTable,包含层表记录)和块表(McDbBlockTable,包含块表记录),所有实体都属于块表记录。
字典提供了一个比符号表更加通用的容器对象来存储对象,一个字典可以包含任何McDbObject类或其他子类的对象。
在一个使用控件过程中,可以装入多个数据库,其中每一个对象都有自己的句柄和对象ID。这个唯一的句柄用来在一个特定的数据库中识别对象,而唯一的对象ID用来在同一时间装入的数据库中识别对象。
对象ID只存在于编辑过程中,而句柄可以保存在图形中。与对象ID相比,当在一个编辑过程中装入多个数据库时,句柄不一定是唯一的。
通过对象ID,用户可以获得一个实际数据库对象的指针,这样用户就可以对对象执行操作。用户可以通过下面的方法获得对象ID:
建一个对象并将它添加到数据库中。数据库会赋予对象一个对象ID并且返回给用户。
使用一个遍历器来遍历一组对象。McDb库提供了一些遍历器来浏览不同类型的容器对象(McDbDictionaryIterator和McDbObjectIterator)。
查询一个选择集。当选择了一个对象后,用户可以询问选择集来获得所选择对象的实体名列表,然后将这些实体名转换成对象ID。
由实体名柄得到实体ID
由实体名得到实体ID
1.2数据库初始化
控件数据库中包含了以下元素:
A.符号表和对应类如下:
块表                        McDbBlockTable
层表                        McDbLayerTable
线型表                        McDbLinetypeTable
文本样式表                McDbTextStyleTable
一些符号表中已经包含了一个或多个记录。如层表中有一个记录0层,块表中有个*MODEL_SPACE记录,而线型表中包含一个记录:CONTINUOUS。
B.命名对象字典。
1.3创建和组织数据库
用户可以使用new命令创建一个数据库,使用delete命令删除一个数据库
可以使用下面的函数读取一个图形文件:
Mcad::ErrorStatus McDbDatabase::readDwgFile(LPCTSTR filename);
注意:一定不要删除由Mx::mcdbHostApplicationServices()->workingDatabase()函数返回的数据库,因为它返回的是当前工作的数据库。
1.4保存数据库
要保存一个数据库,可以使用McDbDatabase::saveAs()函数。
1.5插入一个数据库
McDbDatabase::insert()函数将一个数据库复制到调用这个成员函数的数据库中。
如果两个数据库合并时发生冲突(例如两个数据库有相同的线型名),则在控件中使用目标数据库的数据。
下面的函数与标准的图形插入命令等价:
Mcad::ErrorStatus McDbDatabase::insert(McDbObjectId& blockId, LPCTSTR pBlockName, McDbDatabase* pDb);
这个函数将实体从输入数据库的模型空间复制到指定的块表记录中,同时返回新块表记录的ID。
1.6设置当前数据库值
如果用户没有指定一个实体的属性(例如颜色和线型),则实体的属性使用数据库的当前属性。下面我们将对数据库的属性作一个详细介绍。
1.6.1数据库颜色值
如果实体的颜色没有指定,则实体的颜色将使用存储在CECOLOR系统变量中的数据库当前颜色值。下面的函数可以用来设置和获得数据库当前的颜色值:
Mcad::ErrorStatus McDbDatabase::setCecolor(const McCmColor& color);
McCmColor McDbDatabase::cecolor() const;
1.6.2数据库线型值
下面的函数可以用来设置和获得数据库当前的线型值:
Mcad::ErrorStatus McDbDatabase::setCeltype(McDbObjectId);
McDbObjectId McDbDatabase::celtype() const;
1.6.3数据库线型比例值
在数据库中有2个线型比例设置:
A.当前实体的线型比例,保存在CELTSCALE系统变量中
B.当前图形的线型比例,保存在LTSCALE系统变量中
全局的LTSCALE设置在图形重新生成时使用,可以使用下面的函数来设置或获取这些值:
Mcad::ErrorStatus McDbDatabase::setLtscale(double);
double McDbDatabase::ltScale() const;
Mcad::ErrorStatus McDbDatabase::setCeltscale(double);
double McDbDatabase::celtscale() const;
Mcad::ErrorStatus McDbDatabase::setPsltscale(Mdesk::Boolean);
Mdesk::Boolean McDbDatabase::psltscale() const;
1.6.4数据库层值
下面的函数可以用来设置和获取数据库当前的层值:

Mcad::ErrorStatus McDbDatabase::setClayer(McDbObjectId);
McDbObjectId McDbDatabase::clayer() const;
1.7打开和关闭数据库对象
每一个数据库对象都可以通过下面3种方式来获得:
通过对象句柄
通过对象ID
通过C++实例指针
当控件没有运行时,图形保存在文件系统中,而包含在DWG文件中的对象是通过它的句柄来识别的。
当图形打开后,图形信息可以通过McDbDatabase对象来访问。在数据库中每一个对象都有一个对象ID,这个对象ID保存在当前编辑过程中,从McDbDatabase的创建直到删除,对象ID一直存在。对象打开函数将对象ID作为参数,返回一个McDbObject对象指针。这个指针在对象被删除前一直有效。
可以使用Mx::mcdbOpenObject()函数来打开对象,该函数的原型如下:
Mcad::ErrorStatus mcdbOpenMcDbObject (McDbObject*& obj, McDbObjectId id, McDb::OpenMode mode, Mdesk::Boolean openErasedObject = Mdesk::kFalse);
Mcad::ErrorStatus mcdbOpenObject(T_OBJECT*& pObj, McDbObjectId id, McDb::OpenMode mode, bool openErased = false);
可以使用下面的函数通过句柄获取对象ID,函数原型如下:
Mcad::ErrorStatus McDbDatabase::getMcDbObjectId(McDbObjectId& retId,Mdesk::Boolean createIfNotFound, const McDbHandle& objHandle, Mdesk::UInt32 xRefId=0);
当然,也可以打开一个对象,然后获得此对象的句柄。
pObject->getMcDbHandle(handle);
mds_name与对象ID作用是相同的,在McDb库中提供了两个单独的函数在mds_name和McDbObjectId之间转换,函数原型如下:
mcdbGetAdsName(mds_name& objName, McDbObjectId objId);
mcdbGetObjectId(McDbObjectId& objId, mds_name objName);
可以使用如下几种方式打开对象:
kForRead:读方式。如果对象没有被以写方式打开,它可以被最多256个使用者以读方式打开。
kForWrite:写方式。如果一个对象没有被打开,则它可以被以写方式打开,否则打开对象的操作将失败。
1.8删除对象
可以使用McDbObject::new()函数来创建一个McDbObject对象的实例并将它添加到数据库中。当对象刚被创建还没有添加到数据库中时,用户可以删除它,但是,一旦对象被添加到了数据库,用户就不能删除该对象,而由控件来管理数据库对象的删除工作。
1.9删除数据库对象
数据库中的任何对象都可以使用下面的函数删除:
Mcad::ErrorStatus McDbObject::erase(Mdesk::Boolen Erasing = Mdesk::kTrue);
对数据库对象和实体来说,使用erase()函数将会有不同的结果。当数据库对象被擦除时,该对象的相关信息都被从字典中删除,如果使用erase(kFalse)恢复对象,相关信息不能自动恢复,必须使用setAt()函数将想关信息重新添加到字典中。当用户擦除一个实体时,它仅仅在块表记录中作了一个被擦除的标记,可以使用erase(kFalse)恢复对象。
1.10添加对象指定数据
用户可以在自己的应用程序中使用2种机制来添加对象指定数据,这2种机制如下:
扩展数据(xdata)
扩展记录
1.10.1扩展数据
下面对扩展数据作详细介绍。
扩展数据是一个结果缓冲区链表,应用程序可以访问这个链表。数据是通过从1000~1071的DXF组码相关联的。
这种机制可以节省空间,并且使得向对象添加数据变得很容易。但是,扩展数据大小必须限制在16K以内,而且必须是属于DXF组码的数据类型。
可以使用McDbObject::xData()函数获得在对象中复制扩展数据的链表,该函数的原型如下:
virtual resbuf* McDbObject::xData(const char* regappname = NULL) const;
也可以使用McDbObject::setXData()函数来设置对象的扩展数据,该函数的原型如下:
virtual Mcad::ErrorStatus McDbObject::setXData(const resbuf* xdata);
1.10.2扩展字典
每个对象都可以有一个扩展字典,它包含一个任意的McDbObject对象序列。
1.11对象的关闭
对象打开后,当操作完成时,不在使用对象时,控件要求必须关闭对象,关闭对象调用McDbObject::close() 函数,像这样调用:
pObject->close();
因为有这样的要求,便常常在使用控件过程中,很容易忘记关闭对象,建议使用智能指针的方式打开对象,而对象的关闭会在智能指针释放的时候自动调用。
智能针指的使用例如:
打开一个实体:
McDbObjectPointer<McDbEntity> spEnt(id,McDb::kForRead);
if(spEnt.openStatus() != Mcad::eOk)
        continue;
打开当前数据库中的模型空间
McDbBlockTableRecordPointer spBlkTabRec(MCDB_MODEL_SPACE,
        McDbCurDwg(),McDb::kForRead);
if(spBlkTabRec.openStatus() != Mcad::eOk)
{
        return retId;
}
1.12实体对象
1.12.1实体简介
实体是具有图形表示的数据库对象,实体的例子有直线、圆、圆弧、文本、曲线和椭圆等。
实体组成了控件图形,用户在控件中的操作都是对实体进行的,可见实体具有非常重要的地位。在控件中绝大部分实体都是从McDbEntity中派生出来的,而McDbEntity是从McDbObject中派生出来的。
1.12.2实体的共同属性
所有实体都有一些共同的属性,这些属性可以通过相同的成员函数来获得或修改,当然,这些属性也可以被用户命令修改。实体的共同属性如下:
&#61548;颜色
&#61548;线型
&#61548;线型比例
&#61548;可见性
&#61548;层
&#61548;线宽
当用户添加一个实体到块表记录中时,控件会自动将用户没有指定的实体属性设为缺省值。
1.12.2.1颜色
实体的颜色可以通过0~256的数字值来指定和读取,也可以通过McCmColor类的实例来指定和读取,McCmColor类可以用来扩展颜色模型。McCmColor类可以用来表示真彩色中的任何一种色彩。
颜色值1~7代表的标准颜色如下:
1红 2黄 3绿 4青 5蓝 6紫红 7白或黑
颜色值7对应的颜色与控件背景颜色有关。如果背景是黑,则7对应的颜色是白,反之则对应的颜色是黑。
还有一些颜色值代表了一些特殊的含义:
0:指定实体的颜色为BYBLOCK。即实体继承当前块表记录中块参照的颜色值,如果实体直接处于模型空间或图纸空间块表记录中,则实体的颜色就是黑或白。
256:指定实体的颜色为BYLAYER。实体使用其所在层的颜色。
257:实体无颜色。这种情况仅在实体刚刚实例化,在被赋予0~256之间颜色值或被添加到数据库并使用数据库的当前颜色值之前才会出现。
可以使用下面的函数来设置或查询实体的颜色:
Mcad::ErrorStatus McDbEntity::setColorIndex(Mdesk::Uint16 color);
Mdesk::Uint16 McDbEntity::colorIndex() const;
Mcad::ErrorStatus McDbEntity::setColor(const McCmColor& color, Mdesk::BooleandoSubents = true);
McCmColor McDbEntity::color() const;
1.12.2.2线型
当一个实体被创建时,它的线型被设置为NULL。当实体被添加到数据库后,如果没有这个实体指定的线型,则该实体的线型将被设置成数据库的当前线型值。这个缺省的线型值存放在CELTYPE系统变量中。线型可以通过名称字符串或在实体所在数据库的McDbLineTypeTableRecord的对象ID来指定。
可以使用下面的函数用实体名或对象ID来指定实体的线型:
Mcad::ErrorStatus McDbEntity::setLinetype(const char* newVal);
Mcad::ErrorStatus McDbEntity::setLinetype(McDbObjectId newVal);
下面的函数返回实体的线型名:
LPCTSTR  McDbEntity::linetype() const;
下面的函数返回线型符号表记录的对象ID:
McDbObjectId McDbEntity::linetypeId() const;
1.12.2.3线型比例
当一个实体被创建时,它的线型比例被设置成一个无效值。当对象被添加到数据库中后,如果没有为这个实体指定线型比例,则该实体的线型比例将被设置成数据库的当前线型比例值。这个缺省的线型比例值存放在CELTSCALE系统变量中。
可以使用下面的函数来设置或查询一个实体的线型比例值:
Mcad::ErrorStatus McDbEntity::setLinetypeScale(double newVal);
Double McDbEntity::linetypeScale() const;
当实体被重新生成后,它的有效线型比例是实体自身线型比例和全局数据库线型比例的乘积。对于非图纸空间的实体,它的线型比例可按如下方法计算:
effltscale = ent->linetypeScale() * ent->database()->ltscale();
1.12.2.4可见性
如果指定一个实体不可见,则不管数据库中其他设置如何,该实体都将不可见。其他因素也可能导致实体不可见,例如:如果实体所在层被关闭或冻结,则该实体不可见。实体可见或不可见可以用一个变量McDb::Visibility来表示,它的值可以是kInvisible或kVisible。
可以用下面的函数来设置或查询一个实体的可见性:
Mcad::ErrorStatus McDbEntity::setVisibility(McDb::Visibility newVal);
McDb::Visibility McDbEntity::visibility() const;
1.12.2.5层
所有实体都在某一个层上。在数据库中,最少包含一个层(初始情况下是0层)。和线型一样,用户可以为一个实体指定所在的层。如果用户不为实体指定层,则系统将会把这个实体添加到缺省层上。
每一个层有自己相关的属性,这此属性包括冻结/解冻、打开/关闭、锁定/解锁、颜色、线型和视口。当一个实体的颜色或线型是BYLAYER时,实体上的相关属性将会使用层的属性。
可以使用下面的函数来设置或查询一个实体所在的层:
Mcad::ErrorStatus McDbEntity::setLayer(const char* newVal);
Mcad::ErrorStatus McDbEntity::setLayer(McDbObjectId newVal);
下面的函数返回当前实体所在层的名称:
LPCTSTR McDbEntity::layer() const;
下面的函数返回实体所在层的对象ID:
McDbObjectId McDbEntity::layerId() const;
1.13容器对象
容器对象在图形文件初始化时,就已经存在了
容器对象包括符号表、字典、组和扩展记录。下面介绍如何向符号表、字典和组中添加实体,怎样使用遍历来查询容器的内容,以及怎样创建和使用自己的字典和扩展记录来管理应用程序数据和对象。
1.13.1符号表
符号表具有这样的功能:它可以包含数据库对象,这些数据库对象能够通过一个字符串关键字来搜索。用户可以向这些容器中添加实体,也可以使用遍历来浏览容器以查找所需的内容。
1.13.1.1符号表和字典的异同
符号表和字典在本质上有相同的功能。字典为用户提供了和符号表类似的机制来保存和恢复带有相关关键字的对象。当创建一个新的图形时,它就创建了一个命名对象字典,这个字典可以看作是图形中实体对象的容器列表。用户可以创建任意数量的对象并将它们添加到命名对象字典中。
符号表和字典的一个重要区别是符号表记录不能由ObjectARX应用程序直接删除,而一个字典所包含的对象则可以直接被删除。
1.13.1.2符号表介绍
在符号表记录和字典中使用的名称必须遵循以下规则:
A.名称可以有任意长度,但是在控件中用户输入的符号名不能超过255个字符。
B.保留了使用名称中的大小写的权力,但是并没有在比较中区分大小写。
C.除了逗号、单引号、分号、和等号之外,名称可以由任何Windows NT文件名中可以使用的字符组成。数据库中包含以下符号表:
块表(McDbBlockTable; BLOCK)
层表(McDbLayerTable: LAYER)
文本样式表(McDbTextStyleTable; STYLE)
线型表(McDbLinetypeTable: LTYPE)
每一个表都包含相应的McDbSymbolTableRecord类的子类。
每一个符号表都提供了一个getAt()函数来查找指定名称的记录。另外还有has()和add()函数,前者可以用来判断一个记录名是否已经包含在符号表中,后者用来向符号表中添加一个新记录。
1.13.1.3块表
在数据库中的实体通常属于一个块表记录。缺省情况下,块表包含1个记录:*MODEL_SPACE 。

1.13.1.4层表
在缺省情况下,层表中包含0层一个层。
下面是一些常用的设置和查询层特性信息的函数:
冻结和解冻:当一个层被冻结时,该层的图形将不能重新生成。
void McDbLayerTableRecord::setIsFrozen(Mdesk::Boolean);
Mdesk::Boolean McDbLayerTableRecord::isFrozen() const;
打开和关闭:当一个图层被关闭时,该层的图形将不再显示。
void McDbLayerTableRecord::setIsOff(Mdesk::Boolean);
Mdesk::Boolean McDbLayerTableRecord::isOff() const;
锁定和解锁:在控件中,用户不能修改在一个锁定层上的实体,也不能在应用程序中以write()函数打开实体。
void McDbLayerTableRecord::setIsLocked(Mdesk::Boolean);
Mdesk::Boolean McDbLayerTableRecord::isLocked() const;
颜色:当一个实体的颜色被设置成BYLAYER时,可以通过setColor()函数来设置实体的颜色。
void McDbLayerTableRecord::setColor(const AcCmColor &color);
AcCmColor McDbLayerTableRecord::color() const;
线型:当一个实体的线型是BYLAYER时,可以通过setLinetypeObjedtId()函数来设置实体的线型。
void McDbLayerTableRecord::setLinetypeObjectId(McDbObjectId);
McDbObjectId McDbLayerTableRecord::linetypeObjectId() const;
1.13.1.5遍历器
每一个符号表都有一个相应的遍历器,用户可以使用newIterator()函数创建新的遍历器对象,用来浏览整个表内的所有对象。在使用完这个遍历器之后,一定要删除它。
另外,块表中还有一个可以用来操作其实体的遍历器。
1.13.2字典
要创建一个新的字典,用户需要创建一个McDbDictionary的实体,将这个实例添加到数据库中并在它的主对象中注册。可以使用McDbDictionary类的setAt()函数来将对象添加到字典和数据库中。

1.14扩展记录
扩展记录允许用户添加应用程序指定的辅助数据。因为在定义用户自己的类时可以选择扩展数据。一个扩展记录是一个McDbxrecord类的实例,而McDbxrecord类是从McDbObject类派生的。扩展数据的声明是由一个结果缓冲区的形式定义的,它是一个数据列表,其中每一项包含了一个DXF组码和相应的数据。下面将会介绍DXF组码的含义。
对于用户保存在一个扩展记录中的数据的量原则上是没有限制的,扩展记录可以从属于任何其他对象,包括扩展字典的任何对象、命名对象字典、其他字典或其他扩展记录。
McDbxrecord类提供了两个函数用来设定和获取扩展记录:
Mcad::ErrorStatus McDbXrecord::setFromRbChain(resbuf& pRb, McDbDatabase* auxDb = NULL);
Mcad::ErrorStatus McDbXrecord::rbChain(resbuf** ppRb, McDbDatabase* auxDb = NULL) const;
 楼主| 发表于 2015-5-12 17:02:41 | 显示全部楼层
谷歌,火狐浏览器当中浏览和编辑DWG文件
V5.2版        1
1、 google chrome浏览器:        3
2、 Firefox 浏览器:        4

1、google chrome浏览器:

1)安装一个扩展就可以使chrome支持activex了,名字叫ActiveX for Chrome ,下载地址: https://chrome.google.com/extens ... pmdbemgglaponefajn/


2)把需要访问的网址,加入插件设置中
如下: 点击“选项”



需要访问的网址,加入插件设置中


3)运行效果




2、Firefox 浏览器:
1)打开firefox。

2)打开https://addons.mozilla.org/zh-CN ... all&x=0&y=0,找到与本地浏览器版本相匹配的IE Tab组件。

3)然后点“add to firefox”。



4)安装完成后,重新启动firefox

打开firefox,并在其“工具”菜单------""“IE Tab选项”中加入使用控件的网址






5)最终运行效果:

 楼主| 发表于 2015-5-12 17:11:14 | 显示全部楼层
控件2014.12.23 安卓开发最新更新

发布时间:2014-12-23 11:16:11

下载地址:

http://www.mxdraw.com/MxDraw6.0Android(20141223)TryVersion.exe


安卓手机上的apk安装包:

http://www.mxdraw.com/MxDrawApp60.apk


安卓快速入门文档:

http://www.mxdraw.com/AndroidDev.doc


1. 增加MxDrawSample例子,演示如果在非全屏下使用控件开发

2. 完善开发文档,按文档内容,如何搭建android的控件开发环境

3. 修改一堆其它问题
 楼主| 发表于 2015-5-12 17:12:29 | 显示全部楼层
控件2015.03.12最新更新

发布时间:2015-03-12 14:39:43

下载地址:

http://www.mxdraw.com/index.php? ... ;catid=41&id=40

1. 增加控件状态栏文字,自定义功能,
  
    C++接口为 :   CStatusBarInformationReactor::CreateProgressBarText
    COM接口,自定义事件:CString Mx_SendStatustText(DOUBLE dX, DOUBLE dY, DOUBLE dZ);

2. 增加对dwg文件读写用户信息函数,如下:
  
   LPCTSTR getTitle();
   void setTitle(
   LPCTSTR title);


LPCTSTR getSubject() const;
  void setSubject(
   LPCTSTR subject);


LPCTSTR getAuthor() const;
  void setAuthor(
   LPCTSTR author);

LPCTSTR getKeywords() const;
  void setKeywords(
   LPCTSTR keywords);

3. 完善控件的插入函数,可以一次性把一个dwg文件中所有图块,都导入到当前图纸上,方便使用
  
     例如: C# 把dwg文件所有图块引入到当前图纸中..
     axMxDrawX1.InsertBlock("G:\\pt1000.dwg", "");只需要调一次,把pt1000.dwg中的所有图块都插进来了,不要重复多次调用。
   
     axMxDrawX1.InsertBlock("G:\\pt1000.dwg", "");
      axMxDrawX1.DrawBlockReference(0, 0, "地测1000_探峒a", 1.0, 0.0);
      axMxDrawX1.ZoomAll();
     

4. 增加一个绘制外部引用函数Mx::addNewXRefDefBlock
    COM接口,自定义函数 Mx_AddNewXRefDefBlock
    例如: 增加外部参照代码
    void CTestCommands::InsertXRefDefBlock()
     {
         McDbObjectId recId = Mx::addNewXRefDefBlock(Mx::mcdbCurDwg(),_T("block.dwg"),_T("testxref"));

        McDbBlockReference* pBlkRef = new McDbBlockReference;
         pBlkRef->setBlockTableRecord(recId);
         pBlkRef->setPosition(McGePoint3d(100,100,0));

        MrxDbgUtils::addToCurrentSpaceAndClose(pBlkRef);
     }
  

5. Mx_WriteJpgToURL函数,增加让用户指定范围参数


6. 完善LoadLinetypeFromFile函数,支持动态从服务器上加载线型文件


7. 增加对点样式的显示,与修改
    例如: 设置点样式.
             // 设置点样式,为67.,具体的值,可以看autocad帮助
            axMxDrawX1.SetSysVarLong("PDMODE", 67);
             // 设置点大小,0.0表示它随屏幕
            axMxDrawX1.SetSysVarDouble("PDSIZE", 0.0);
             // 重新生成,所有实体。,
            axMxDrawX1.Regen();


8. 增加对ucs坐标的保存与读取


9. 修正保存dwg文件后,有个别文字位置发生少量偏移问题


10.修改镜向圆弧夹点显示不对问题


11.并增加把镜向圆弧变成非镜向圆弧函数McDbArc::correctMirror


12.修正浏览模式下,还能进行属性编辑的错误


13.增加,网上打开dwg文件时,对dwg文件路径加密的功能


14.增加动画时可以设置多个时钟的功能


15.增加工具条文件定义中,工具条按钮的图标可以直接从bmp文件加载,bmp文件也可以是个网络路径


15 增加菜单文件定义中,菜单按钮的图标可以直接从bmp文件加载,bmp文件也可以是个网络路径


16.修改个别填充中有文字框时,显示不对问题

17 修改一堆其它细节上的错误
 楼主| 发表于 2015-5-12 17:13:31 | 显示全部楼层
控件2015.05.07最新更新

发布时间:2015-05-07 11:46:12


下载地址:

  http://www.mxdraw.com/index.php? ... ;catid=41&id=42

1. 增加菜单动态加载函数,MxDraw::ReLoadMenu
  

2. 完善控件的射线接口,MxDrawRay
  

3. 完善控件的导角功能,可以导圆弧,pl线的导角


4. 完善控件的离散功能,比如样条线,离散后变成一堆的圆弧,而不像以前那样,变成直线


5. 完善图层操作界面,增加线型预览显示,和打印选项控制


6. 打印接口,增加一个给定中心点缩放比例打印的函数,名为:MxDrawPrint::Print2
  

7. 增加PICKSTYLE系统变量的支持,选择时对同一个组的对象是否也被选中做控制.
  

8. 完善Mx_Explodeb函数,支持把文字打碎成曲线


9. 自定义实体,绘制时,增加对象选中显示,不选中不显示的控制接口 McGiSetJustDrawHighlight
  

10. 修正在有些图上修改点划线在开始位置,显示效果不对问题


11. 增加一个C#绘制自定义实体,实现双线绘制的例子samples\CSharpCustomEntity\CSharpCustomEntity.sln
  

12. 增加闪烁函数,控制闪烁次数的功能


13. 完善填充的COM接口函数,并增加从文件加载填充图案的接口,如下:
        // 修改新绘的填充的图案从文件中加载.
                 String sPatternFile = axMxDrawX1.GetOcxAppPath() + "\mx.pat";
                 String sPatternName = "ANSI35";

                MxDrawHatch hatch = (MxDrawHatch)axMxDrawX1.ObjectIdToObject(id);
                 hatch.LoadPatternDefinition(sPatternFile, sPatternName, 300.0, 0.0);


发表于 2015-5-13 09:24:42 | 显示全部楼层
不错的控件,去掉水印就好了
 楼主| 发表于 2015-5-13 09:47:31 | 显示全部楼层
在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法

[MXDRAW CAD控件文档]

下面帮助的完整例子,在控件安装目录的Sample\Ie\ iedemo.htm中.

1.主要用到函数说明

A.ImplementCommandEventFun
控件的命令事件函数,与用户交互的操作,需要放到命令事件函数内实现,这样控件才能保证正常的Windows 消息循环被处理。

B.ImplementMouseEventFun
控件的鼠标事件函数,可以用JS程序里,响应鼠标事件,详细说明如下:
void MouseEvent(LONG lType, DOUBLE dX, DOUBLE dY, LONG* lRet);

LONG lType         事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 5是鼠标左键释放 6是鼠标右键释放 7是鼠标中键按下 8是鼠标中键释放 9是鼠标中键双击 10是鼠标中键滚动
DOUBLE dX         事件发生时的鼠标X坐标,文档坐标
DOUBLE dY         事件发生时的鼠标Y坐标,文档坐标
LONG* lRet         lRet 返回非0,消息将不在往下传递

C.DrawLine
用于在DWG图上绘制一条直线,详细说明如下:
参数         说明
DOUBLE dX1         直线的开始点x坐标
DOUBLE dY1         直线的开始点y坐标
DOUBLE dX2         直线的结束点x坐标
DOUBLE dY2         直线的结束点y坐标

D.IMxDrawSelectionSet::SelectAtPoint2
返回一点坐标下面的实体对象,可以设置过滤条件,返回某层,某类型等属性的对象。

2.JS中实现代码说明

A.在网页中引用控件,
clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2是控件的GUID.
控件程序可以做成CAB安装包,并可进行数据签名,方便网页中自动安装下载.
详细参考例子:http://www.mxdraw.com/iedemo.html
   <object classid="clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2" id="MxDrawXCtrl"  codebase="http://www.mxdraw.com/MxDrawX.CAB#version=1,0,0,1" width=100% height=90%>
                          <param name="_Version" value="65536">
                          <param name="_ExtentX" value="24262">
                          <param name="_ExtentY" value="16219">
                          <param name="_StockProps" value="0">
                        <!-- <param name="DwgFilePath" value="http://www.mxdraw.com/downland/test.dwg"> -->
                        <param name="IsRuningAtIE" value="1">
                        <param name="EnablePrintCmd" value="1">

                        <param name="ShowStatusBar" value="1">
                        <param name="ShowMenuBar" value="1">
                        <param name="ShowToolBars"  value="1">
                        <param name="ShowCommandWindow" value="1">
                        <param name="ShowModelBar" value="1">
                        <param name="IniFilePath" value="AutoActive=N,LoadMrx=PropertyEditor.mrx">

                        <param name="ToolBarFiles" value="MxDraw-ToolBar.mxt,MxDraw-ToolBar-DrawParam.mxt,MxDraw-ToolBar-Draw.mxt,MxDraw-ToolBar-Edit.mxt">

  </object>
<script>

B.设置命令事件回调函数
document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;

C.设置鼠标事件回调函数
document.getElementById("MxDrawXCtrl").ImplementMouseEventFun = MouseEvent;

D.在命令事件交互绘制一条直线
该事件将会被,网页中的myclick按钮点击触发,如下:
function myclick()
{
        document.getElementById("MxDrawXCtrl").DoCommand(1);
}
下面是绘制直线代码:

function DoCommandEventFunc(iCmd)
{
     // 命令事件ID.
            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;
                }
         // 绘制一条直线.
         mxOcx.DrawLine(point1.x,point1.y,point2.x,point2.y);
               
        }
}

E.在鼠标事件中得到鼠标点击的对象.
function MouseEvent(dX,dY,lType)
{
     // 4是鼠标左键双击
        if(lType == 4)
        {
          // 得到网页的中的控件对象   
                var axMxDrawX1 = document.getElementById("MxDrawXCtrl");
         // 创建一个选择集对象
                var ss = axMxDrawX1.CallCustomFunction("Mx_NewSelectionSet","");
         // 创建一个点对象
                var pt = axMxDrawX1.CallCustomFunction("Mx_NewPoint","");
         // 创建一个过滤条件对象
          var fil = axMxDrawX1.CallCustomFunction("Mx_NewResbuf","");
               
         // 把鼠标点击坐标,赋值给点对象.
pt.x = dX;
         pt.y = dY;
               
          // 在该点处构造选择集.
          ss.SelectAtPoint2(pt,fil);
               
          // ss.Coune是选择集中对象数目
                if(ss.Count > 0)
                       {
                  // 得到选择集中的第一个点对象.
                            var ent = ss.Item(0);

                  // 输出信息.
                            alert("点击了" + ent.ObjectName + "对象");
                }
                  // 取消后面的命令。
                axMxDrawX1.SendStringToExecute("");
                return 1;
      
        }
        return 0;
}
 楼主| 发表于 2015-5-13 09:48:57 | 显示全部楼层
ps122hb 发表于 2015-5-13 09:24
不错的控件,去掉水印就好了

 楼主| 发表于 2015-8-10 10:43:16 | 显示全部楼层
安卓开发最新更新发    下载地址:http://www.mxdraw.com/index.php? ... ;catid=41&id=45
安卓快速入门文档:http://www.mxdraw.com/AndroidDev.doc

1. 增加,旋转,缩放,移动工具按钮

2. 修改一堆细节错误.



您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 06:56 , Processed in 0.139502 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表