04 2013 档案

摘要:AcDbPolyline* pLine = new AcDbPolyline;......AcDbObjectId idPline = AddToCurrentSpace(pLine);ads_name namepLine;acdbGetAdsName(namepLine, idPline);acedSSSetFirst(namepLine, NULL);这样不行,是不是因为 namepLine 只是一个实体的名字,而不是选择集呢?怎么转换为选择集呢?[hr]选中实体的话,应该用acedSSGet而不是acedSSSetFirst另外 pLine 在加入database之后需要close..用 阅读全文
posted @ 2013-04-14 13:32 编号一百零二 阅读(584) 评论(0) 推荐(1) 编辑
摘要:#include "dblayout.h"#include "acaplmgr.h"#include "dbplotsetval.h"#include "dbplotsettings.h"/*To query the all the available plot configurations you should use plotDeviceList()method of AcDbPlotSettingsValidator class.And to get the list of available media n 阅读全文
posted @ 2013-04-14 13:31 编号一百零二 阅读(1022) 评论(0) 推荐(1) 编辑
摘要:ads_queueexpr( _T("(command\"_POINT\" \"1,1,0\")") );该函数CAD未公开,使用时提前声明下就可以了。可以参考帮助文件中:Tips and Techniques 。acDocManager->sendStringToExecute(curDoc(), _T("_POINT 2,2,0 "));该函数在Arx帮助中有详细说明。acedCommand(RTSTR, _T("_POINT"), RTSTR,_T("5,5,0" 阅读全文
posted @ 2013-04-14 13:30 编号一百零二 阅读(699) 评论(0) 推荐(1) 编辑
摘要:举例一个在模态对话框中选择点并显示点的功能。在“选择点”按钮的单击事件中,隐藏对话框,提示用户在图形窗口中选择一个点,然后重新显示该对话框,其处理函数为:void CArxDialog::OnButtonPoint()//点击按钮响应函数{// 隐藏对话框把控制权交给AutoCADBeginEditorCommand();// 提示用户输入一个点ads_point pt;if (acedGetPoint(NULL, "\n输入一个点:", pt) == RTNORM){// 如果点有效,继续执行CompleteEditorCommand();m_strXPt.Format( 阅读全文
posted @ 2013-04-14 13:29 编号一百零二 阅读(716) 评论(0) 推荐(1) 编辑
摘要:总是需要在自定义控件上显示DWG图形,如在一个对话框上动态浏览一个DWG图形,于是写了一个控件,专门用来动态浏览DWG,这个控件从CStatic中派生,运用AcGs类库中的AcGsView,AcGsDevice,AcGsModel来协作显示DWG图形。从CStatic派生,使用方便,只要在对话框中放一个CStatic,然后把CStatic的对象名换成fcGsPreviewCtrl即可。fcGsPreviewCtrl.h/********************************************************************日 期: 2007/10/08文件 名: 阅读全文
posted @ 2013-04-14 13:27 编号一百零二 阅读(980) 评论(1) 推荐(0) 编辑
摘要:AcDbViewTableRecord GetCurrentView(){AcDbViewTableRecord view;struct resbuf rb;struct resbuf wcs, ucs, dcs; // 转换坐标时使用的坐标系统标记wcs.restype = RTSHORT;wcs.resval.rint = 0;ucs.restype = RTSHORT;ucs.resval.rint = 1;dcs.restype = RTSHORT;dcs.resval.rint = 2;// 获得当前视口的“查看”模式acedGetVar("VIEWMODE", 阅读全文
posted @ 2013-04-14 13:23 编号一百零二 阅读(636) 评论(0) 推荐(2) 编辑
摘要:实际上,AutoCAD对于用户自定义命令 (C:xxx) 和她原装的命令并不是一视同仁,而是有亲有疏。具体表现在C:xxx定义的命令:1〉用 (Command) 或者 (VL-CmdF) 函数不能引用。2〉从菜单项引发的用户自定义命令,执行之后不能用回车重复调用。3〉命令反应器不能跟踪。这显然是不方便的,为了克服这个问题,我们曾经探讨了多个行之有效的方法。而目前,Visual LISP 也提供了一种新的解决方案,关键功能函数是 (VLAX-Add-Cmd)。(VLAX-Add-Cmd “命令名”函数名 [“命令别名” 命令标志码])作用:将一个用户函数以内部命令身份加入到AutoCAD命令集之 阅读全文
posted @ 2013-04-14 13:22 编号一百零二 阅读(1012) 评论(0) 推荐(0) 编辑
摘要:#include "StdAfx.h"#include "StdArx.h"#include "stdafx.h"#include "resource.h"#include "acutads.h"#include "dbents.h"#include "dbpl.h"#include "MALLOC.h"#include "STDLIB.h"#include "acedads.h"#include 阅读全文
posted @ 2013-04-14 13:21 编号一百零二 阅读(798) 评论(0) 推荐(0) 编辑
摘要:// DoubleClickEdit.h: interface for the CDoubleClickEdit class.//////////////////////////////////////////////////////////////////////////By freejsutin 2005-08-17#include "AcDblClkEdit.h" //for dinfine AcDbDoubleClickEdit#pragma comment (lib ,"AcDblClkEditPE.lib")#include "ac 阅读全文
posted @ 2013-04-14 13:19 编号一百零二 阅读(718) 评论(0) 推荐(0) 编辑
摘要:大多数ObjectARX函数在处理选择集和实体时,都用名字来识别选择集或实体,该名字用一个长整型对来表示的,并对AutoCAD来维护。在ObjectARX中,该名字的类型为ads_name。在对选择集或实体进行操作之前,ObjectARX应用程序必须通过调用一个返回其名字的库函数来得到选择集或实体名字。注意:选择集和实体的名字是不稳定的,它们仅仅在AutoCAD当前图形工作时有效。如果从AutoCAD退出或切换到另一个图形时其值就会丢失。对于选择集来说,它也是与当前图有关联的,所以其名字的不稳定性不会影响选择集。但是对于实体就不一样了,因为它是被存放在图形数据库中的,名字的不稳定性要影响到对实 阅读全文
posted @ 2013-04-14 13:18 编号一百零二 阅读(613) 评论(0) 推荐(0) 编辑
摘要:AcDbEntity 是所有具有图形表现的数据库对象的基类。它由AcDbObject派生。创建自定义实体包括以下步骤:1.从AcDbEntity派生一个自定义类;2.重载所有必要的AcDbObject函数;3.重载要求的AcDbEntity函数;4.重载支持自定义功能的其它函数;5.如果要支持MATCHPROP命令,执行AcDbMatchProperties作为扩展协议;6.如果要为自定义实体创建拖曳序列,执行自定义的AcEdJig。(1)必须重载的AcDbEntity函数当从AcDbEntity派生自定义类时,下述函数必须重载:virtual Adesk::Boolean worldDraw 阅读全文
posted @ 2013-04-14 13:15 编号一百零二 阅读(2496) 评论(0) 推荐(0) 编辑
摘要:objectarx 加载菜单-ObjectARX中右键(快捷)菜单的实现方法:网上看到好像网友问到在AutoCAD窗口中实现右键菜单的方法,觉得这种技术很实用,在许多开发应用中都能用得到,所以就写了这篇文章,以供大家参考。由于本人水平有限,不对之处敬请原谅。 右键菜单,也叫快捷菜单,在Windows编程中叫上下文(context)菜单。ObjectARX本身提供了一套处理上下文菜单的机制。在ObjectARX类库中有一个名为AcEdUIContext的类,此类负责在ObjectARX应用中的上下文菜单中添加自己的菜单项,而原菜单项不会被破坏,这也是此种方法的优点之一。用AcEdUIConte. 阅读全文
posted @ 2013-04-14 13:14 编号一百零二 阅读(632) 评论(0) 推荐(0) 编辑
摘要:本例子主要是讲如何在ARX开发中,使用CAD的状态栏中的进度条,主要由以下几个步骤组成,还是比较简单的。acedSetStatusBarProgressMeter(_T("Test Progress Bar"), 0, 100);//上面一句,是设置进度条的提示语,并肯设置进度条的范围。 for(int i =0; i <= 100; i++) { Sleep(100); acedSetStatusBarProgressMeterPos(i); //上面一句,是设置进度条当前的位置,随着位置的变化,才有进度条的效果 }acedRestoreStatusBar();// 阅读全文
posted @ 2013-04-14 13:12 编号一百零二 阅读(512) 评论(0) 推荐(0) 编辑
摘要:本实例主要是讲Hook技术在CAD中的使用方法。Hook技术就是所谓钩子技术,在CAD的二次开发过程中,有很多的情况,是需要使用钩子技术的(尽管CAD已经提供了强大的反应器技术),由于CAD也是基于MFC开发的应用程序,我们也可以像HOOK其它应用程序一样的方法来HOOKCAD,但有些时候,一些消息不知道怎么回事,会HOOK不到。比如:按下SHIFT键。 不管怎么样,CAD还是把HOOKCAD消息的处理方法封装了一下。很好用,主要有以下几种:// Define callback function for apps that want windows messagestypedef void ( 阅读全文
posted @ 2013-04-14 13:11 编号一百零二 阅读(1218) 评论(0) 推荐(0) 编辑
摘要:本实例主要是描述如何用ARX定制CAD的右键菜单,CAD的右键菜单可以分为很多类,但没有选中实体时的菜单只有一类(defaultContextMenu),然而你可以为每一个实体类型定义一个右键菜单类型。整个CAD中针对每个类(objectContextMenu)的处理方法都是这样的,类似于扩展协议一样,如果每一类实体没有自己定义扩展协议,则按CAD默认的处理方法。ContextMenu主要包括的就是defaultContextMenu 和 objectContextMenu,在我们软件中,也用到了这个类型,主要的核心就是,你必须继承一个父类,并且实现三个方法:AcEdUIContext类,并且 阅读全文
posted @ 2013-04-14 13:09 编号一百零二 阅读(1001) 评论(0) 推荐(0) 编辑
摘要:在这个例子中,ARX向我们展示了ACDBTABLE类的一些基本操作方法,ACDBTABLE类是ACAD2005及其以后的产品,应该是说ACDBDATATABLE的升级产品,AcDbDataCell,AcDbDataTable,AcDbDataColumn在ACAD2004中就已经出现。AcDbTable 功能很强大的。从最基本的,能设置表格的行、列数目,行、列高度(废话,这是最基本的),还能设置文字样式,每个单元格的前、背景颜色,文字的线宽,文字的可见性,文字的旋转。表格线的样式,颜色,线宽,可见性。还可以设置自动缩放。合并与拆分单元格。选定子区域(就是选择一部分);还有自定义实体的夹点等等一 阅读全文
posted @ 2013-04-14 13:08 编号一百零二 阅读(1799) 评论(0) 推荐(0) 编辑
摘要:本文档主要是针对于自定义实体(基于Amodeler::Body)与Objectarx中的AcDb3dSolid实体之间的转换。1. 从Amodeler::Body到AcDb3dSolid的转换a) 传统的方式:由于Amodeler::Body中,你可以迭代得到它的基本几何元素(面、线、点、表面等),你可以根据这些数据,对应生成AcDb3dSolid应该要包括的基本几何元素,从而实体转换。b) 中间文本方式:我们都知道Amodeler和ACAD都是基本ACIS几何内核的,而ACIS几何内核都可以用SAT文件来描述,所以,我们可以把Amodeler或ACAD中的几何模型导出成SAT文件,然后再导入 阅读全文
posted @ 2013-04-14 13:07 编号一百零二 阅读(900) 评论(0) 推荐(0) 编辑
摘要:2D Arrangement类型简介:给定一组平面曲线,2D Arrangement能够将这组曲线所组成的图形细分成顶点、边和面这些最基本的几何单位。其中给定的曲线能够相互相交,甚至能自相交。其组成的图形在2D Arrangemen 中描述成双边连接数据结构(doubly-connected edge list data-structure (D CEL for short))即把一条边变成两条半边来描述,其中,这个数据结构包含了对顶点、边、面的描述。如上图,通过线段构造的2D Arrangements表现成了顶点(vn)、边(un)、面(fn)的形式。 其中f0是一个没有被包装的面(un_b 阅读全文
posted @ 2013-04-14 13:06 编号一百零二 阅读(1935) 评论(0) 推荐(0) 编辑
摘要:目的:实现夹点操作过程中,一系列要控制的功能(比如:各个夹点的提示语、夹点样子、对应的动态标注等)。我们都知道,CAD的自定义实体中支撑用户自定义夹点的接口(getGripPoints和moveGripPointsAt)。而CAD支持的夹点对象就是AcDbGripData类。所以,如果需要依靠夹点操作这一套机制来实现我们要的一些功能,就需要研究研究这个类,否则就要自己写了(这样,复杂,并且有些效果并不一定能实现)。庆幸的是,ARX为AcDbGripData内置了一系列的回调函数(其实就是钩子函数来获取二次开发者对其的一些行为的定义),下面,我们就来慢慢的剖析这个类。在这其中,我们只需要知道以下 阅读全文
posted @ 2013-04-14 13:04 编号一百零二 阅读(1137) 评论(0) 推荐(0) 编辑
摘要:一、模块介绍:模块AsdkHlrApi17是用来帮助计算AutoCAD图形的消隐线的,它返回一些线实体,用户程序可以决定是否把这些返回线实体加入当前的图形数据库或其它的数据库。该模块主要由Cyrille Fauvel & Phil Holcombe两个Autodesk Developer Consulting Group中的大牛于1999年编写。二、HlrApi模块中,类的介绍:1. AsdkHlrControl枚举enum AsdkHlrControl{kProject =0x0001, //----- 是不是线实体都投影到一个平面kShowAll =0x0002, //-----是 阅读全文
posted @ 2013-04-14 13:03 编号一百零二 阅读(917) 评论(0) 推荐(0) 编辑
摘要:何谓代理对象?当主应用程序没有加载时,打开了存在该应用程序中定义的对象的DXF或DWG文件,ACAD就必须为其创建一个代理对象,并支持对其很简单、基本的操作既然没有加载主应该程序,那么代理对象怎么知道,该对象对应的图形应该怎么显示?需要说明的是,DWG文件中,通常都保存了,最后一次WORLDDRAW或SAVEAS接口用来显示的图元信息,所以,代理对象不需要知道实体的图形如何显示,只需要把其对应的图园信息当一个块包来显示就得了。打开了拥有代理对象DWG文件怎么保存?保存分为两种了1. 当保存的时候,不存在文件转换时(也就是DWG文件打开,还是存回DWG文件,同理也可以用于DXF),代理对象按二进 阅读全文
posted @ 2013-04-14 13:02 编号一百零二 阅读(660) 评论(0) 推荐(0) 编辑
摘要:作者:阿门首先,介绍一个WINDOWS的字符集,WINDOWS所支持的字符集包括两种,多字节和宽字符(UNICODE),而在WIN2K及其以上内核中,都是使用宽字符来实现的,但也保留了多字节支持的API接口,这个实现的原理,其实是收到多字节后,把其转换为宽字符,再传下内核对象处理的。还有一点需要说明,Mircosoft将COM从16位转换成32位时,规定了将需要字符串的方法只接受UNICODE字符串。下面先介绍一下两个宏运行时库头文件定义UNICODE环境的宏 UNICODEWindows头文件定义UNICODE环境的宏 _UNICODEMicrosoft公司提供的C运行时库与ANSI标准C运 阅读全文
posted @ 2013-04-14 13:00 编号一百零二 阅读(812) 评论(0) 推荐(0) 编辑
摘要:CGAL使用心得作者:李浩首先我说说我研究CGAL的背景,由于,早一阵子,有一个需求,需要求出在一堆二维线中(包括直线和弧线),找出所有的最小区域和最大外包。如下图所示。在这两个图形中,要快速的找到每一个最小的封闭区域和一个由这些最小封闭区域组成的一个最大封装区域。这样的算法,有,像最常见的建构多边形TOPO,然后用雷达扫描法,可以求出来。但是,这么多的算法开源库,让我下了使用开源库来解决这个问题的决心,很快我就锁定了CGAL这个强大的图形算法库。很快的我发现,CGAL里的ARRANGEMENT能够实现类似需求的功能,就这样,我开始慢慢的对ARRANGEMENT进行研究。但研究CGAL的应用, 阅读全文
posted @ 2013-04-14 12:59 编号一百零二 阅读(5714) 评论(0) 推荐(3) 编辑
摘要:近期,由于项目的需要做一套撤销恢复机制,特地研究了一下AutoCAD(下文称为ACAD)的撤销恢复机制,ACAD的撤销和恢复是无限次的,也是就说,只要是同在一个会话(打开到关闭的一个过程)中的操作你都可以撤销到原来的状态或者是重做刚才被撤销的状态。而要实现整个一套机制的基础就包涵了所要说的三个主人公了。这篇文件就用来说明这三者之间的关系。从ACAD R13 Release版本起,为了处理数据库对象在内存生存周期而设计了一套方案。这个方案为每一个对象都引用了两个部分的内容。第一部分,就是数据库对象本身,它是能够常驻内存并且,如果内存需要释放的话它也能被换页到磁盘上,第二部分是一个叫做桩(stub 阅读全文
posted @ 2013-04-14 12:57 编号一百零二 阅读(1044) 评论(0) 推荐(0) 编辑
摘要:作者:阿门很早以前就想整理一份这样的资料,趁着这次公司要召开研发大会 需要交一篇论文,就写下来了。截了一部分,贴上来让大家指正指正,呵呵。为公司软件实现的撤销恢复机制就不贴出来了,呵呵。。顺便贺下 公司的第一届研发大会。期待。。。转载请注明。。ACAD平台的撤销恢复机制主要就是以ACAD中执行的命令为单位的,下面将从使用这一套机制入手,来试着来分析这一套机制。如果想使用和了解ACAD的撤销恢复机制,必然要从自定义实体入手,因为,ACAD中所有的操作其实就是对DWG中数据对象的一些操作,只不过是以命令为单位来组织一个操作中的操作对象,所以ACAD的撤销恢复机制的针对对象都是ACAD的数据库对象, 阅读全文
posted @ 2013-04-14 12:56 编号一百零二 阅读(1151) 评论(0) 推荐(0) 编辑
摘要:最近,有一个这样的需求,所以把解决方法给贴出来一下。首先,cad判断图纸是否被修改过,是根据一个变量的值来判断的,这个变量就是 DBMOD,很多人肯定会想到,那我把这个变量的值给修改成0或者是-1不就行了吗? 很不幸告诉你,这个变量是只读的。那么怎么办呢? 幸好桌子公司还挺厚道的,导出了一个接口给我们来修改database的这个flag,只不过是在官方的sdk文档里没有给出来而已,这个接口的原型如下://声明设置数据库模式的函数extern long acdbSetDbmod(AcDbDatabase * pDb, long newVal);这个函数在我以前的blog文章中也提到过,按照我上面 阅读全文
posted @ 2013-04-14 12:51 编号一百零二 阅读(1878) 评论(1) 推荐(0) 编辑