AcApDocManager

 

AcApDocManager对象是所有文件对象的容器(对于每一个打开的且正在编辑的图形文件都有一个文件对象)。使用宏名为acDocManager的宏可以取得唯一的实例。

 

继承自

AcRxObject

 

Include 文件

Acdocman.h

 

参见

AcApDocument, AcApDocManagerReactor, AcApDocumentIterator

 

成员

 

AcApDocManager 函数

 

AcApDocManager::activateDocument函数

virtual Acad::ErrorStatus

activateDocument(

AcApDocument* pAcTargetDocument,

bool bPassScript = false) = 0;

pAcTargetDocument

指向要转移至的目标文件的输入指针

bPassScript

输入布尔值,表示在转移至另一文件时是否要继续执行脚本

这个函数作用是从当前的 文件中转移至另一文件中。这个函数不会挂起在应用程序下执行的代码。如果是一个正常或空闲的状态则调用者被挂起。如果bPassScript值为Adesk::kTrue,则已经调用了执行改变文件的命令的脚本将继续执行。这个参数允许一个脚本跨文件运行。

 

AcApDocManager::addReactor函数

virtual void

addReactor(

AcApDocManagerReactor* unnamed) = 0;

unnamed

输入增加的AcApDocManagerReactor对象

这个函数向文件管理器中增加一个AcApDocManagerReactor对象。

 

AcApDocManager::appContextNewDocument函数
virtual Acad::ErrorStatus
appContextNewDocument(
const char * pszTemplateName) = 0;

pszTemplateName

输入新建图形文件时要使用的图形模板名称或URL地址

这个函数允许同步访问“新建”图形文件的操作,只能在应用程序中调用。

 

AcApDocManager::closeDocument函数
virtual Acad::ErrorStatus
closeDocument(
AcApDocument* pAcTargetDocument) = 0;

pAcTargetDocument

有效的AcApDocument对象的输入指针

这个函数关闭pAcTargetDocument所指定的 文件。若输入文件不是当前文件,则当前文件仍具有控制权;若输入文件是当前文件,则在这个函数返回之前文件的执行环境就被终止,并且终止正常的命令。

 

AcApDocManager::curDocument函数
virtual AcApDocument *
curDocument() const = 0;
这个函数返回含有当前环境的文件。关联的函数mdiAcitveDocument(),返回MDI的活动文件。curDocument() mdiActiveDocument()可以不同。可以调用curDocument()使一个文件成为当前文件而实际上不激活它。在临时的当前文件下完成acDbDAtabase操作后,调用setCurDocument(acDocManager->mdiActiveDocument())重新设置MDI的活动文件为当前的文件。

 

AcApDocManager::disableDocumentActivation函数 
virtual Acad::ErrorStatus
disableDocumentActivation() = 0;

这个函数将禁止用户转移至另一文件中。结束后,应用程序必须重新激活(使用AcApDocManager::enableDocumentActivation)当一个应用程序命令执行的时间较长时就可以使用这个函数。

若已经处于无效模式则返回一个错误,否则,返回Acad::eOk

 

AcApDocManager::document函数 
virtual AcApDocument *
document(
AcDbDatabase* unnamed) const = 0;

unnamed

一个AcDbDatabase对象的输入指针

这个函数返回含有输入的数据库的文件。所有的数据库都在ObjectARX中建立,当前的数据和任何一个加载的Xref数据库都拥有一个和它们关联的文件。由ObjectARX应用程序建立的数据库将会自动和建立它们的环境文件关联。那么数据库中就会记录这个文件的Undo(撤消)信息。同时对数据库中的对象必须使用这个文件的Transaction Manager(事务管理器)。

 

AcApDocManager::documentCount函数 
virtual int
documentCount() const = 0;

这个函数返回当前开启的文件个数。

 

AcApDocManager::enableDocumentActivation函数 
virtual Acad::ErrorStatus
enableDocumentActivation() = 0;

这个函数将允许用户转移至另一文件中。这个函数用于重新激活调用AcApDocManager::disableDocumentActivation后。

若已经处于无效模式则返回错误,否则,返回Acad::eOk

 

AcApDocManager::inputPending函数
virtual int
inputPending(
AcApDocument* pAcTargetDocument) = 0;

pAcTargetDocument

指向您要查询的是否有未完成的输入的文件的指针

这个函数将指定文件的输入缓冲器的状态,只和AcApDocManager::sendStringToExecute函数联合使用。

返回待处理的特性的数值。返回0表示没有未完成的输入,返回-1表示错误。

 

AcApDocManager::isDocumentActivationEnabled函数 
virtual bool
isDocumentActivationEnabled() = 0;

这个函数显示作用中的文件是否为激活状态。

若为激活状态则返回true,否则,返回false

 

AcApDocManager::lockDocument函数 
virtual Acad::ErrorStatus
lockDocument(
AcApDocument* pDoc,
AcAp::DocLockMode unnamed = AcAp::kWrite,
const char* pGlobalCmdName = NULL,
const char* pLocalCmdName = NULL,
bool prompt = true) = 0;

pDoc

输入要被锁定的文件

unnamed

AcAp::DocLockMode enum枚举)输入的锁定模式

pGlobalCmdName

输入命令名称。每次锁定一个文件都被认为是在acad中另一命令或动作的开始。这个名称由doc管理器反应器返回当作锁定命令的名称,可以为NULL

pLocalCmdName

输入当命令未执行完时显示在命令行的名称,可以为NULL

prompt

输入的提示。由于正对目标文件执行某一命令,文件未被锁定,如果提示为True,就会显示标准的提示符,让用户完成目标文件的操作并锁定文件。如果用户选择取消锁定或提示为False,则锁定失败并返回eLockConflict

这个函数用于为了锁定文件以访问文件资源。文件资源含有和文件关联的所有AcDbDatabases对象、数据库中的AcDbObject对象和所有的AcDbDatabase常驻系统变量。文件资源也含有所有的基于文件的系统变量以及和文件关联的Transaction Manager(事务管理器)。在AcDb::kForRead中的打开AcDbObject或取得系统变量,不必锁定文件,也不必取得系统变量。
注意:kForRead为只读型。
通常应用程序不必总是锁定或解锁当前文件。以addCommand() aceddefun()注册的命令,开始执行时会锁定文件,完成后会解除锁定。可以使用addCommand()函数标签控制。

返回值:

Acad::eOk

锁定成功

Acad::eLockChangeInProgress 

如果锁定文件的请求是由文件锁定切换反应器的回调发出,则不能“嵌套”锁定的请求

Acad::eVetoed

切换锁定被另一应用程序禁止

Acad::eNoDocument

pDocNULL

 

AcApDocManager::mdiActiveDocument函数 
virtual AcApDocument *
mdiActiveDocument() const = 0;

这个函数返回MDI的活动文件。关联的函数mdiAcitveDocument()返回含有当前环境的 文件。curDocument() mdiActiveDocument()可以不同。您可以调用curDocument()使一个文件成为当前文件而实际上不激活它。在临时的当前文件下完成acDbDAtabase操作后,调用setCurDocument(acDocManager->mdiActiveDocument())重新设置MDI的活动文件为当前的文件

 

AcApDocManager::newAcApDocumentIterator函数
virtual AcApDocumentIterator *
newAcApDocumentIterator() = 0;

返回指向AcApDocumentIterator对象的新的指针。

 

AcApDocManager::newDocument函数
virtual Acad::ErrorStatus
newDocument() = 0;

这个函数使用标准的用户交互式界面建立一个新的文件。

注意:文件的建立会挂起活动文件的环境。

 

AcApDocManager::openDocument函数
virtual Acad::ErrorStatus
openDocument() = 0;

这个函数使用标准的用户交互式界面打开一个文件。

 

AcApDocManager::popResourceHandle函数
virtual void
popResourceHandle() = 0;

这个函数使堆栈顶部的资源文件句柄成为当前的,并将它从堆栈中删除。

 

AcApDocManager::pushAcadResourceHandle函数
virtual void
pushAcadResourceHandle() = 0;

这个函数把当前源句柄压入当前文件的源句柄堆栈中并使AutoCAD源文件成为当前的。

 

AcApDocManager::pushResourceHandle函数
virtual void
pushResourceHandle(
HINSTANCE hNewResourceHandle) = 0;

hNewResourceHandle

输入指定句柄作为当前的

这个函数把当前源句柄压入当前文件的源句柄堆栈并使指定句柄成为当前的。

 

AcApDocManager::removeReactor函数
virtual void
removeReactor(
AcApDocManagerReactor* unnamed) = 0;

unnamed

输入要删除的AcApDocManagerReactor对象

这个函数从文件管理器中删除指定的AcApDocManagerReactor对象。

 

AcApDocManager::sendStringToExecute函数
virtual Acad::ErrorStatus
sendStringToExecute(
AcApDocument* pAcTargetDocument,
const char * pszExecute,
bool bActivate = true,
bool bWrapUpInactiveDoc = false,
bool bEchoString = true) = 0;

pAcTargetDocument

要将输入传送至的文件

pszExecute

用于输入的字符串

bActivate

布尔值,表示是否激活目标文件

bWrapUpInactiveDoc

布尔值,表示在转换活动文件时,是否在下一个OnIdle()中等待当前活动文件完成

bEchoString

布尔值,表示是否在命令行中显示的字符串

这个函数在命令行中输入一字符串并在给定的目标文件中执行。

 

AcApDocManager::setCurDocument函数
virtual Acad::ErrorStatus
setCurDocument(
AcApDocument* pDoc,
AcAp::DocLockMode unnamed = AcAp::kNone,
bool activate = false) = 0;

pDoc

输入临时作为当前的文件

unnamed

输入需要锁定的文件的类型。缺省值为空。

activate

输入的布尔值,表示是否激活文件。缺省值为:false或不激活文件

这个函数允许在应用程序环境下运行一外部应用程序使一个文件成为当前文件而实际上不激活它。这个当前状态只有在调用这个API函数的环境时有效。这样可以安全地操作文件数据而实际上使文件不处于最上层或激活状态。缺省的锁定模式参数和活动状态允许锁定和激活文件。这是允许用单一的API函数和调用单独的API函数完成多个步骤的捷径。

如果调用acDocManager->setCurDocument(pDoc, AcAp::kWrite),就可以有效地设置当前文件并锁定它。一旦完成对文件的操作,则必须将它解锁,可以调用acDocManager->unlockDocument(pDoc)进行解锁。

 

AcApDocManager::setDefaultFormatForSave函数
virtual Acad::ErrorStatus
setDefaultFormatForSave(
AcApDocument::SaveFormat format) = 0;

format

输入保存图形时使用的缺省文件格式

这个方法在用SAVEAS(另存为)、SAVE(保存)和QSAVE(快速保存)命令保存一个图形时使用SaveFormat值中的一种来设置文件的使用格式。这里设置了工作区间范围的默认值,然而对于一个文件,用户可以临时选择另外一个值使用。

可能的AcApDocument枚举SaveFormat(保存格式)如下:

名称

用途 (文件扩展名)

kR12_dxf

1

AutoCAD R12/LT2 DXF (*.dxf)

kR13_dwg

4

AutoCAD R13/LT95 Drawing (*.dwg)

kR13_dxf

5

AutoCAD R13/LT95 DXF (*.dxf)

kR14_dwg

8

AutoCAD R14/LT97 Drawing (*.dwg)

kR14_dxf

9

AutoCAD R14/LT97 DXF (*.dxf)

kR15_dwg

12

AutoCAD R15 Drawing (*.dwg)

kR15_dxf

13

AutoCAD R15 DXF (*.dxf)

kR15_Template

14

AutoCAD 2000 Drawing Template File (*.dwt)

kNative

kR15_dwg

当前DWG版本是AutoCAD 2000

kUnknown

-1

无效格式

这个方法可以由用户输入交互式命令直接设置文件格式。如果每次保存数据库时,希望将您的应用程序用当前的保存格式保存,您首先需要调用AcApDocument::formatForSave(),再用返回的SaveFormat值决定调用哪个函数。例如:如果formatForSave()返回kR14_dxf,则调用acdbDxfOutAsR14()将数据库写为Release14DXF文件。

小结:

       您和您的用户都可以设置一个永久的工作区间范围的保存默认值,这个默认值将用于所有保存命令,除了AUTOSAVE(自动保存)。

       只有用户可以临时(在工作区间中并不持久)为特定的文件选择这项设置。

       formatForSave()方法返回用户需要的一个文件保存的格式,它可以是永久的工作区间范围的默认值或临时选择的值。

 

AcApDocManager::unlockDocument函数
virtual Acad::ErrorStatus
unlockDocument(
AcApDocument* pDoc) = 0;

pDoc

输入要被解锁的文件

这个函数用于解锁之前被锁定的一个文件。除了kAutoWrite锁定模式,所有用lockDocument()锁定的文件必须配合相应的unlockDocument()调用进行解锁。除非首先成功调用了lockDocument(),否则不能调用unlockDocument()。不能调用unlockDocument()解锁kAutoWrite模式。

注意kProtectedAutoWritekAutoWrite的一种特殊形式。只有在不知道锁定何时被解锁时才使用kAutoWrite模式锁定。它们会在下一次锁定中自动解锁。然而,如果存在锁定不能被嵌套的锁定请求解锁的一段时间,则使用kProtectedAutoLock。当没有嵌套锁定的危险时,可以调用unlockDocument()。此时kProtectedAutoWrite降级为一个普通的kAutoWrite锁定。

如果解锁成功,则返回Acad::eOk

如果pDoc NULL,则返回Acad::eNoDocument

如果锁定文件的请求是由文件锁定切换反应器的回调发出,则返回Acad::eLockChangeInProgress。不能“嵌套”锁定的请求。

如果还没有锁定文件,则返回Acad::eLockViolation