bai_cai101 发表于 2005-11-20 16:05:00

<P>我顶!!问题解决不了我就不让它沉下去了!!板主!帮帮我了!????</P>

bai_cai101 发表于 2005-12-8 16:04:00

<P>我顶!!!</P>

lange 发表于 2005-12-12 13:53:00

//找到新建文件<BR>AcApDocument* pDoc=NULL;<BR>AcApDocumentIterator* pDocIter;<BR>pDocIter = acDocManager-&gt;newAcApDocumentIterator();<BR>for ( ; !pDocIter-&gt;done(); pDocIter-&gt;step())<BR>{<BR>&nbsp;&nbsp; if( !strcmp(pDocIter-&gt;document()-&gt;fileName(), "新建文件名") )<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDoc = pDocIter-&gt;document();<BR>&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp; }<BR>}<BR>delete pDocIter;<BR>//设成活动文档<BR>if( pDOC)<BR>&nbsp;&nbsp;&nbsp; acDocManager-&gt;activateDocument(pDoc);<BR>

pglyxq 发表于 2005-12-22 17:40:00

bai_cai101 发表于 2006-1-6 08:18:00

<P>我试了,怎么不行啊!我用的是VC6。0,ARX2000,编译通过,但在CAD2002中运行却没有一点反应!!!WHY??</P>

binbinxx 发表于 2006-1-10 21:04:00

<P class=signature>AcDbDatabase(</P>
<P class=signatureIn>bool buildDefaultDrawing = true,</P>
<P class=signatureInEnd>bool noDocument = false);</P>
<TABLE class=argumentList>
<TBODY>
<TR vAlign=baseline>
<TD class=argumentName>buildDefaultDrawing</TD>
<TD class=argumentDescription>Boolean specifying whether or not to build an empty object</TD></TR>
<TR vAlign=baseline>
<TD class=argumentName>noDocument</TD>
<TD class=argumentDescription>Boolean specifying whether or not to associate this database to the current document</TD></TR></TBODY></TABLE>第二个参数

zfbj 发表于 2006-1-19 16:02:00

<P>现在工作时间没法上网,偶然路过,发现这个问题居然让老弟如此伤神,实在不忍,特整理一个工程贴上来供参考,其实这个工程也没什么特别的,下面是创建该工程的过程。希望你能结合老金的文章好好理解,因为我再来看这个帖子的几率不大…</P>
<P>(1)使用ObjectARX向导创建一个新工程;<BR>(2)注册一个命令NewDoc,其实现函数为:<BR>void ZffTempNewDoc()<BR>{<BR>&nbsp;static char pData[] ="acad.dwt"; <BR>&nbsp;acDocManager-&gt;executeInApplicationContext(CreateDoc, (void *)pData); <BR>}<BR>(3)将下面的函数复制到ZffTempNewDoc函数的前面:<BR>void CreateDoc( void *pData) <BR>{ <BR>&nbsp;AcApDocument* pDoc = acDocManager-&gt;curDocument(); <BR>&nbsp;if (acDocManager-&gt;isApplicationContext()) <BR>&nbsp;{ <BR>&nbsp;&nbsp;acDocManager-&gt;appContextNewDocument((const char *)pData); <BR>&nbsp;} <BR>&nbsp;else <BR>&nbsp;{<BR>&nbsp;&nbsp;acutPrintf("\nERROR To Create Doc!\n"); // 这一行老金有个笔误,后一个引号用了中文的,我已经改过来了<BR>&nbsp;}<BR>} <BR>(4)编译链接程序,启动AutoCAD 2002,执行NewDoc命令即可创建一个新文件,没有对话框的出现。</P>

glhu3 发表于 2006-2-6 13:42:00

//<BR>// ObjectARX defined commands, created by&nbsp; , ,
<P></P>
<P>#include "StdAfx.h"<BR>#include "StdArx.h"<BR>#include "dbsymtb.h"<BR>#include "dbents.h"</P>
<P>//-----------------------------------------------------------------------------<BR>// This is command 'NEWDOC, by&nbsp; , , <BR>void ACADnewdoc()<BR>{<BR>#ifdef OARXWIZDEBUG<BR>&nbsp;acutPrintf ("\nOARXWIZDEBUG - ACADnewdoc() called.");<BR>#endif // OARXWIZDEBUG</P>
<P>&nbsp;// TODO: Implement the command<BR>&nbsp;static char pData[] ="acad.dwt"; <BR>&nbsp;acDocManager-&gt;executeInApplicationContext(CreateDoc, (void *)pData);</P>
<P>&nbsp;AcDbDatabase *pdb =acdbHostApplicationServices()-&gt;workingDatabase();</P>
<P>&nbsp;AcDbBlockTable *pBtbl;<BR>&nbsp;&nbsp;&nbsp; pdb-&gt;getSymbolTable(pBtbl, AcDb::kForRead);</P>
<P>&nbsp;&nbsp;&nbsp; AcDbBlockTableRecord *pBtblRcd;<BR>&nbsp;&nbsp;&nbsp; pBtbl-&gt;getAt(ACDB_MODEL_SPACE, pBtblRcd,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcDb::kForWrite);<BR>&nbsp;&nbsp;&nbsp; pBtbl-&gt;close();</P>
<P>&nbsp;&nbsp;&nbsp; AcDbCircle *pCir1 = new AcDbCircle(AcGePoint3d(1,1,1),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcGeVector3d(0,0,1),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.0),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *pCir2 = new AcDbCircle(AcGePoint3d(4,4,4),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcGeVector3d(0,0,1),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.0);<BR>&nbsp;&nbsp;&nbsp; pBtblRcd-&gt;appendAcDbEntity(pCir1);<BR>&nbsp;&nbsp;&nbsp; pCir1-&gt;close();<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; pBtblRcd-&gt;appendAcDbEntity(pCir2);<BR>&nbsp;&nbsp;&nbsp; pCir2-&gt;close();<BR>&nbsp;&nbsp;&nbsp; pBtblRcd-&gt;close();</P>
<P>}</P>
<P>void CreateDoc( void *pData) <BR>{ <BR>&nbsp;AcApDocument* pDoc = acDocManager-&gt;curDocument(); <BR>&nbsp;if(acDocManager-&gt;isApplicationContext()) <BR>&nbsp;{<BR>&nbsp;&nbsp;acDocManager-&gt;appContextNewDocument((const char *)pData); <BR>&nbsp;} <BR>&nbsp;else<BR>&nbsp;&nbsp;acutPrintf("\nERROR To Create Doc!\n");<BR>}</P>
<P><BR><BR>----------------------------------------------<BR>QQ:224310836,bai_cai101@163.com!欢迎交流!! </P>
<P>----------------------------------------------------------------</P>
<P>上述代码执行后,圆并未画在新建出来的DWG文挡上,而画在了前一个DWG文挡上,这样新建的DWG并不是当前的WorkingDatabase</P>

glhu3 发表于 2006-2-6 13:59:00

//<BR>// ObjectARX defined commands, created by&nbsp; , ,
<P></P>
<P>#include "StdAfx.h"<BR>#include "StdArx.h"<BR>#include "dbsymtb.h"<BR>#include "dbents.h"</P>
<P>//-----------------------------------------------------------------------------<BR>// This is command 'NEWDOC, by&nbsp; , , <BR>void ACADnewdoc()<BR>{<BR>#ifdef OARXWIZDEBUG<BR>&nbsp;acutPrintf ("\nOARXWIZDEBUG - ACADnewdoc() called.");<BR>#endif // OARXWIZDEBUG</P>
<P>&nbsp;// TODO: Implement the command<BR>&nbsp;static char pData[] ="acad.dwt"; <BR>&nbsp;acDocManager-&gt;executeInApplicationContext(CreateDoc, (void *)pData);</P>
<P>&nbsp;AcDbDatabase *pdb =acdbHostApplicationServices()-&gt;workingDatabase();</P>
<P>&nbsp;AcDbBlockTable *pBtbl;<BR>&nbsp;&nbsp;&nbsp; pdb-&gt;getSymbolTable(pBtbl, AcDb::kForRead);</P>
<P>&nbsp;&nbsp;&nbsp; AcDbBlockTableRecord *pBtblRcd;<BR>&nbsp;&nbsp;&nbsp; pBtbl-&gt;getAt(ACDB_MODEL_SPACE, pBtblRcd,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcDb::kForWrite);<BR>&nbsp;&nbsp;&nbsp; pBtbl-&gt;close();</P>
<P>&nbsp;&nbsp;&nbsp; AcDbCircle *pCir1 = new AcDbCircle(AcGePoint3d(1,1,1),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcGeVector3d(0,0,1),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.0),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *pCir2 = new AcDbCircle(AcGePoint3d(4,4,4),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcGeVector3d(0,0,1),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.0);<BR>&nbsp;&nbsp;&nbsp; pBtblRcd-&gt;appendAcDbEntity(pCir1);<BR>&nbsp;&nbsp;&nbsp; pCir1-&gt;close();<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; pBtblRcd-&gt;appendAcDbEntity(pCir2);<BR>&nbsp;&nbsp;&nbsp; pCir2-&gt;close();<BR>&nbsp;&nbsp;&nbsp; pBtblRcd-&gt;close();</P>
<P>}</P>
<P>void CreateDoc( void *pData) <BR>{ <BR>&nbsp;AcApDocument* pDoc = acDocManager-&gt;curDocument(); <BR>&nbsp;if(acDocManager-&gt;isApplicationContext()) <BR>&nbsp;{<BR>&nbsp;&nbsp;acDocManager-&gt;appContextNewDocument((const char *)pData); <BR>&nbsp;} <BR>&nbsp;else<BR>&nbsp;&nbsp;acutPrintf("\nERROR To Create Doc!\n");<BR>}</P>
<P><BR><BR>----------------------------------------------<BR>QQ:224310836,bai_cai101@163.com!欢迎交流!!</P>
<P>---------------------------------------------------------------------</P>
<P>该例新建的DWG文挡不是当前的WorkingDatabase的指针,而是前一个。希望作者</P>
<P>或哪位高手解决一下这个问题。</P>

houlinbo 发表于 2007-8-15 11:28:00

Try<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Dim cadApp As AcadApplication = GetObject(, "AutoCAD.Application.17")<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Dim olDb As Database = HostApplicationServices.WorkingDatabase<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Dim db As Database = New Database(True, False)<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;HostApplicationServices.WorkingDatabase = db<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Dim trans As Transaction = db.TransactionManager.StartTransaction()<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForWrite)<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Dim br As Circle = CreateCircle(db, bt)<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;db.SaveAs("d:\ff.dwg", DwgVersion.AC1015)<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;HostApplicationServices.WorkingDatabase = olDb<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;trans.Commit()<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;trans.Dispose()<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Dim cadDoc As AcadDocument = cadApp.Documents.Open("d:\ff.dwg")<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;cadDoc.WindowState = Common.AcWindowState.acMax<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;cadDoc.Application.ZoomExtents()<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Catch ex As Exception<br/><br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;End Try<br/>&nbsp; &nbsp; End Sub<br/>
页: 1 2 3 [4] 5
查看完整版本: 如何自动新建一个DWG并置为当前!