创建文字样式

//创建文字样式
//resultId,返回的字体样式ID
//csTsName,字体样式名称
//szFlNm,字体文件
//szBigFlNm,大字体文件
//dTextSize,文字高度
//xScale,宽度因子
//返回值:CAD定义的错误状态码
Acad::ErrorStatus GOLD_EXPORT CreateTextStyle(AcDbObjectId& resultId,
const CString csTsName,
const CString szFlNm,
const CString szBigFlNm,
double dTextSize=3.0,
double xScale=1.0,
AcDbDatabase* pDB=acdbHostApplicationServices()->workingDatabase());
Acad::ErrorStatus CreateTextStyle(AcDbObjectId& resultId,
const CString csTsName,
const CString szFlNm,
const CString szBigFlNm,
double dTextSize,
double xScale,
AcDbDatabase* pDB)
{
resultId.setNull();

AcDbTextStyleTable *pTsTbl;
Acad::ErrorStatus es=pDB->getSymbolTable(pTsTbl,AcDb::kForWrite);
if(es != Acad::eOk)
{
return es;
}
es=pTsTbl->getAt(csTsName,resultId);
if(es==Acad::eOk)
{
pTsTbl->close();
return es;
}
AcDbTextStyleTableRecord *pTstRcd = new AcDbTextStyleTableRecord;
pTstRcd->setName(csTsName);
pTstRcd->setFileName(szFlNm);
pTstRcd->setBigFontFileName(szBigFlNm);
pTstRcd->setTextSize(dTextSize);
pTstRcd->setXScale(xScale);
es=pTsTbl->add(resultId,pTstRcd);
pTstRcd->close();
pTsTbl->close();

return es;
}

发表在 ObjectArx | 留下评论

C++字体安装与卸载

代码下载:http://pan.baidu.com/share/link?shareid=1574173637&uk=721859502

核心代码:

void CFontConfigDlg::OnBnClickedBtnInstall()
{
//安装字体
CString strFullPath = _T(“”);
CString strFileName = _T(“”);
CString strFontName = _T(“”);
if (!GetTtfFontFile(strFullPath, strFileName, strFontName))
{
return;
}

CString strSysPath = GetSysFontPath();
CString strSysFile = strSysPath + strFileName;

if (PathFileExists(strSysFile))
{
MessageBox(_T(“系统字体已存在!”), _T(“提示”), MB_OK|MB_ICONWARNING);
return;
}

if (!CopyFile(strFullPath, strSysFile, FALSE))
{
MessageBox(_T(“复制字体文件失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

//添加字体到系统字体表
int nFontNum = AddFontResource(strSysFile);
if (nFontNum <= 0)
{
MessageBox(_T(“AddFontResource失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

//永久字体注册
HKEY phkResult;
DWORD RegResult;
LONG Rlt = RegCreateKeyEx(HKEY_LOCAL_MACHINE,_T(“SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts”),
0, _T(“REG_SZ”), 0, KEY_WRITE, 0, &phkResult, &RegResult);
if (Rlt != ERROR_SUCCESS)
{
MessageBox(_T(“注册表键值创建失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

//CString转BYTE*
int nLength = strFileName.GetLength();
string sFileName = strFileName.GetBuffer(nLength);
BYTE* m_byte=(BYTE*)sFileName.c_str();
Rlt = RegSetValueEx(phkResult, strFontName, 0, REG_SZ, m_byte, nLength);
if (Rlt != ERROR_SUCCESS)
{
MessageBox(_T(“注册表键值设置失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

Rlt = RegCloseKey(phkResult);
if (Rlt != ERROR_SUCCESS)
{
MessageBox(_T(“注册表键值关闭失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

MessageBox(_T(“注册字体成功!”), _T(“提示”), MB_OK|MB_ICONINFORMATION);
}

void CFontConfigDlg::OnBnClickedBtnUnins()
{
//卸载字体
CString strFullPath = _T(“”);
CString strFileName = _T(“”);
CString strFontName = _T(“”);
if (!GetTtfFontFile(strFullPath, strFileName, strFontName))
{
return;
}

CString strSysPath = GetSysFontPath();
CString strSysFile = strSysPath + strFileName;
if (!PathFileExists(strSysFile))
{
MessageBox(_T(“系统字体文件不存在!”), _T(“提示”), MB_OK|MB_ICONWARNING);
return;
}

//删除注册表
HKEY registryKey;
LONG Rlt = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T(“SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts”), 0, KEY_ALL_ACCESS, &registryKey);
if (Rlt != ERROR_SUCCESS)
{
MessageBox(_T(“注册表键值打开失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

Rlt = RegDeleteValue (registryKey, strFontName);
if (Rlt != ERROR_SUCCESS)
{
MessageBox(_T(“注册表键值删除失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

Rlt = RegCloseKey(registryKey);
if (Rlt != ERROR_SUCCESS)
{
MessageBox(_T(“注册表键值关闭失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

//从系统字体表移除字体
if (!RemoveFontResource(strSysFile))
{
MessageBox(_T(“RemoveFontResource失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

if (!DeleteFile(strSysFile))
{
MessageBox(_T(“DeleteFile失败!”), _T(“提示”), MB_OK|MB_ICONERROR);
return;
}

::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

MessageBox(_T(“卸载字体成功!”), _T(“提示”), MB_OK|MB_ICONINFORMATION);
}

CString CFontConfigDlg::GetSysFontPath()
{
TCHAR sWinDir [MAX_PATH];
GetWindowsDirectory(sWinDir,MAX_PATH);
CString sFontDir(sWinDir);
sFontDir += _T(“\\Fonts\\”);

return sFontDir;
}

BOOL CFontConfigDlg::GetTtfFontFile(CString& strFullPath, CString& strFileName, CString& strFontName)
{
strFullPath = _T(“”);
strFileName = _T(“”);

GetDlgItemText(IDC_TTF_PATH, strFullPath);
GetDlgItemText(IDC_FONT_NAME, strFontName);

if (strFullPath.IsEmpty())
{
MessageBox(_T(“请选择字体文件!”), _T(“提示”), MB_OK|MB_ICONWARNING);
return FALSE;
}

if (!PathFileExists(strFullPath))
{
MessageBox(_T(“字体文件不存在!”), _T(“提示”), MB_OK|MB_ICONWARNING);
return FALSE;
}

int nIndex = strFullPath.ReverseFind(‘\\’);
strFileName = strFullPath.Right(strFullPath.GetLength() – nIndex – 1);

return TRUE;
}

发表在 C++ | 留下评论

枚举所有的实体类型

//枚举所有的实体类型
void ListEntClass()
{
AcRxDictionaryIterator* pIter=acrxClassDictionary->newIterator(AcRx::kDictCollated);
std::auto_ptr<AcRxDictionaryIterator> spIter(pIter);
for (;!spIter->done();spIter->next())
{
AcRxObject* pObj=spIter->object();
if(!pObj->isKindOf(AcRxClass::desc()))
{
continue;
}
AcRxClass* pClass=AcRxClass::cast(pObj);
if(!pClass->isDerivedFrom(AcDbEntity::desc()))
{
continue;
}
acutPrintf(_T(“\nname=%s,dxfName=%s”),pClass->name(),pClass->dxfName());
}
}

发表在 ObjectArx | 留下评论

.NET Reflector经典破解版

.NET Reflector经典破解版

.NET Reflector 7.0.0.420 Crack

查看C#代码的神器

下载:http://yun.baidu.com/share/link?shareid=3807284115&uk=721859502&third=0

发表在 C#, 实用软件 | 留下评论

分享两款C#代码保护工具(破解版)

产品1:DNGuard_Trial 版本:2.90

下载:http://yun.baidu.com/share/link?shareid=786223164&uk=721859502&third=0

优点:加密的文件,基本上安全无毒,即使360也认为安全。

缺点:没有破解版,加密的文件只能使用30天。

产品2:Xenocode 版本:2009

下载:http://yun.baidu.com/share/link?shareid=788158741&uk=721859502&third=0

优点:有破解版,加密的文件可以无限制使用。

缺点:加密的文件可能报毒,测试了一下,36款杀毒软件有5款报毒,360也认为有病毒(不过这个可以忽略不计,但问题是现在装360的人太多了,哎)。

 

发表在 C# | 留下评论

ObjectARX代码片段

一  在ARX中禁用AutoCAD的某个命令
以LINE命令为例,在程序中加入下面的一句即可禁用LINE命令:
acedCommand(RTSTR, “undefine”, 
RTSTR, “line”,
RTNONE);
下面的语句则可恢复LINE命令的定义:
acedCommand(RTSTR, “redefine”, 
RTSTR, “line”,
RTNONE);
二 在对话框中预览DWG文件
使用acdbDisplayPreviewFromDwg函数,具体的方法为:
char fileName[100];
strcpy(fileName, “C:\\test.dwg”);
bool es;
HWND pWnd;
CFrameWnd *pFrame (CFrameWnd*)GetDlgItem(IDC_PICTURE); 
 es acdbDisplayPreviewFromDwg(fileName, pFrame->m_hWnd);
上面的代码将在一个Picture控件中显示指定的图形。
另外,需要包含“dbmain.h”头文件。 
四 获得当前数据库
在ARX编程中,经常需要使用当前数据库,例如需要获得当前图形中设置的文字样式、标注样式等。
要获得当前数据库,都可以直接使用下面的方法:
AcDbTextStyleTable *pTextStyleTAble;
AcDbObjectId textstyleId;
textstyleId=acdbHostApplicationServices()->workingDatabase()->textstyle();
如果用acadCurDwg来代替acdbHostApplicationServices()->workingDatabase(),也能得到同样的结果。
六 在ARX打开文件
在AutoCAD中打开图形,并且显示在图形窗口中,可以使用acedSyncFileOpen()函数。需要注意的是,这个函数只能在单文档模式中工作,
用户可以在AutoCAD“选项”对话框的“系统”选项卡中进行设置,或者在主函数中添加下面的语句:
acrxDynamicLinker->registerAppNotMDIAware(pkt);
具体的函数如下:
//加载模板文件
void LoadTemplate()
{
char fname[50];
strcpy(fname,”E:\\TMCAD\\TMCADtukuang\\A3.DWG”);

#ifndef _ACAD2000
Acad::ErrorStatuses;  
es acedSyncFileOpen(fname);
#else 
acDocManager->appContextOpenDocument(fname);
#endif
}下面的方法则打开指定位置的DWG文件。
void OpenDoc( void *pData)
{
AcApDocument* pDoc acDocManager->curDocument();
if (acDocManager->isApplicationContext()) 
{
 acDocManager->appContextOpenDocument((const char *)pData);

else
{
 acutPrintf(“\nERROR To Open Doc!\n”);
}
}

// This is command ‘OPEN1’
void ZffOPENopen1()
{
// 直接打开系统中存在的某个图形文件G:\AutoCAD图形\wen2.dwg
static char pData[] “G:\\AutoCAD图形\\wen2.dwg”; 
acDocManager->executeInApplicationContext(OpenDoc, (void *)pData);


//  Function name    SetCurLayer
//  Description        设置当前层
//  Return type        Acad::ErrorStatus 
//  Argument         const char* lpLayerName
//  Argument         AcDbDatabase* pDb 
 Acad::ErrorStatus SetCurLayer( const   char  lpLayerName, AcDbDatabase  pDb   )
 {
   AcDbDatabase  pCurDb   pDb;
    if  (pCurDb  ==  NULL)
       pCurDb   acdbHostApplicationServices() -> workingDatabase();

   AcDbLayerTableRecordPointer spRecord(lpLayerName, pCurDb, AcDb::kForRead);
   Acad::ErrorStatus es   spRecord.openStatus();
    if  (es  ==  Acad::eOk)
     {
       es    pCurDb -> setClayer(spRecord -> objectId());
   
    return  es;

//功能描述:选择指定图层上的所有实体!


// 函数名称:selectEntityInLayer
// 函数类型:Acad::ErrorStatus 
// 返回值:  正常:Acad::eOk
// 功能描述:选择指定图层上的所有实体!
// 函数作者:Darcy
// 创建日期:200X-XX-XX
// 参数列表:
// 变量名:nLayerName     变量类型:const char*           变量说明:(输入)图层名
// 变量名:nIDs           变量类型:AcDbObjectIdArray&    变量说明:(输出)图层中实体的对象标识符集合

Acad::ErrorStatus selectEntityInLayer( const   char  nLayerName,AcDbObjectIdArray  nIDs)
 {
   Acad::ErrorStatus es   Acad::eOk;

   ads_name ents;
    struct  resbuf  rb;
   rb acutNewRb(AcDb::kDxfLayerName);
   rb -> restype ;
   rb -> resval.rstring char )nLayerName;
   rb -> rbnext NULL;
   acedSSGet( ” ” ,NULL,NULL,rb,ents);
    long  entNums ;
   acedSSLength(ents, entNums);
    if  (entNums  ==   )
       es   Acad::eInvalidInput;
    else 
      {
        for  long       entNums  ++ )
         {
           AcDbObjectId  objId;
           ads_name      ent;
           acedSSName(ents,a,ent);
           acdbGetObjectId(objId, ent);
           nIDs.append(objId);
       
   
   acedSSFree(ents);
   acutRelRb(rb);

    return  es;
     

生成新组
//生成新组(sGroupName)
//追加数组中所有实体到该组中
//组名字   Id数组
int createGroup(CString sGroupName,
                                  const AcDbObjectIdArray *idArr)
{
   AcDbGroup       *pGroup new AcDbGroup((LPSTR)(LPCTSTR)sGroupName);
   AcDbObjectId     groupObjectId;
   AcDbDictionary  *pGroupDict NULL;   acdbHostApplicationServices()->workingDatabase()
       ->getGroupDictionary(pGroupDict, AcDb::kForWrite);
   pGroupDict->setAt(sGroupName, pGroup, groupObjectId);
   pGroupDict->close();
     pGroup->close();
   acdbOpenObject(pGroup, groupObjectId, AcDb::kForWrite);
   for (int 0; idArr->length(); i++)
   {
       groupObjectId idArr->at(i);
       pGroup->append(groupObjectId);   
   }
   pGroup->close();
   return TRUE;
}
功能:新建一个图层
参数:LayerName — 图层名,LayerColor — 颜色名
返回:图层ID
//==========================================================
AcDbObjectId CreateNewLayer(CString LayerName, AcCmColor LayerColor)
{
   // 获得当前图形数据库的符号表
   AcDbLayerTable *pLayerTable;
   acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTable,
       AcDb::kForWrite);
   // 生成新的图层表记录
   AcDbLayerTableRecord *pLayerTableRecord new AcDbLayerTableRecord;
   pLayerTableRecord->setName(LayerName);        // 设置图层名
   pLayerTableRecord->setColor(LayerColor);    // 设置图层颜色
   AcDbObjectId layerId;
   pLayerTable->add(layerId,pLayerTableRecord);
   // 关闭图层表和图层表记录
   pLayerTable->close();
   pLayerTableRecord->close();
   return layerId;
}

//==========================================================
功能:在指定图层上新建一条直线
参数:见注释
返回:直线ID
//==========================================================
AcDbObjectId CreateLine( double x1,double y1,double z1,  // 起点坐标
                    double x2,double y2,double z2,  // 终点坐标
                    AcDbObjectId layer)                   // 直线所在图层
{
   AcGePoint3d StartPt(x1,y1,z1);    // 起点
   AcGePoint3d EndPt(x2,y2,z2);    // 终点
   AcDbLine *pLine new AcDbLine(StartPt,EndPt);
   // 获得当前图形数据库的符号表
   AcDbBlockTable *pBlockTable;
   acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable,
       AcDb::kForRead);
   // 获得符号表中的模型空间块表记录指针,用于添加对象
   AcDbBlockTableRecord *pBlockTableRecord;
   pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
   pBlockTable->close();
   // 将直线添加到模型空间块表记录中
   AcDbObjectId lineId;
   pLine->setLayer(layer,Adesk::kTrue);    // 设置直线所在图层
   pBlockTableRecord->appendAcDbEntity(lineId,pLine);
   // 关闭块表记录指针和直线指针
   pBlockTableRecord->close();
   pLine->close();
   // 返回直线ID号
   return lineId;
}

//函数名称:getPointAtDistInGeCurve
//函数类型:Acad::ErrorStatus 
//返回值:
//功能描述:返回曲线上距起点某距离值处的点。
//变量名:pGeCurve 变量类型:const AcGeCurve3d 变量说明:
//变量名:dist 变量类型:double 变量说明:
//变量名:point 变量类型:AcGePoint3d& 变量说明:
//备 注:
Acad::ErrorStatus getPointAtDistInGeCurve(const AcGeCurve3d pGeCurve,double dist,AcGePoint3d& point)
{
Acad::ErrorStatus es Acad::eOk;

if pGeCurve != NULL )
{
AcGePoint3d spt;
double pa=0.,datumParam=0.;
//距离从起点起算!
Adesk::Boolean posParamDir=Adesk::kTrue;

pGeCurve->hasStartPoint(spt); 

datumParam pGeCurve->paramOf(spt);;

pa pGeCurve->paramAtLength(
datumParam,
dist,
posParamDir
);

point=pGeCurve->evalPoint(pa);
}
else
es Acad::eInvalidInput;

return es;

判断点是否在圆弧上

BOOL
IsAtArc(CAD_POINT firstPt,CAD_POINT secondPt,
double radius,double direct,int More,CAD_POINT thePt)

{
CAD_POINT centerPt,sectionPt;
CAD_POINT startPt,endPt;
double startAngle,endAngle,chordAngle,vertAngle;
double intLine,chordLine;

sectionPt.x (firstPt.x secondPt.x)/2;
sectionPt.y (firstPt.y secondPt.y)/2;

chordLine sqrt( pow( (secondPt.x-firstPt.x),2 pow( (secondPt.y-firstPt.y),2 );
intLine sqrt((radius*radius-chordLine*chordLine/4) );

chordAngle ads_angle(asDblArray(firstPt),asDblArray(secondPt)); //弦线的角度

if(direct>=0)//左偏
{
startPt=firstPt;
endPt=secondPt;
vertAngle=chordAngle+Pai/2;
}
else if(direct<0)//右偏
{
startPt=secondPt;
endPt=firstPt;
vertAngle=chordAngle-Pai/2;
}

if(More<=0)//小圆弧
{
centerPt.x=sectionPt.x+intLine*cos(vertAngle);
centerPt.y=sectionPt.y+intLine*sin(vertAngle);
}
else//大圆弧
{
centerPt.x=sectionPt.x-intLine*cos(vertAngle);
centerPt.y=sectionPt.y-intLine*sin(vertAngle);
}

if(fabs(centerPt.distanceTo(thePt)-radius)>1.0E-8)
return FALSE;
startAngle ads_angle(asDblArray(centerPt),asDblArray(startPt)); 
endAngle ads_angle(asDblArray(centerPt),asDblArray(endPt)); 

AcDbArc *pArc=new AcDbArc(centerPt,radius,startAngle,endAngle);
AcDbLine *pLine=new AcDbLine(centerPt,thePt);
AcGePoint3dArray Points;
pLine->intersectWith(pArc,AcDb::kOnBothOperands,Points);
if(Points.isEmpty()) return FALSE;

return TRUE;
}

发表在 ObjectArx | 留下评论

ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008+ObjectArx2008)

转载:http://www.cnblogs.com/greatverve/archive/2010/05/31/objectarx-helloworld.html

在一个做CAD二次开发的公司做Web开发,感觉可提升的空间很小。
有必要研究一下公司的产品开发,以利发展。

一、首先安装好vs05与cad2008
安装cad的时候也没有什么特别,加载到虚拟光驱,安装过程中有个错误提示,不影响继续。

 

二、安装ObjectArx2008直接打开解压缩到某个目录即可。
比如C:\ObjectARX 2008
然后打开C:\ObjectARX 2008\utils\ObjARXWiz目录,运行ArxWizards.msi
这样在新建C++项目的时候会出现ObjectARX项目,如图

 

三、包含文件
工具->选项->项目和解决方案->VC++目录,如图所示:
包含文件(添加图中前两个目录即可)

库文件(添加图中前两个目录即可)

 

四、新建ObjectARX项目,完成后添加MFC支持,如图所示:

然后直接点finish
打开acrxEntryPoint.cpp点击左上角的a>按钮,然后新建一个命令。如图:

只需要修改Internation Name与Localized Name为testcmd即可
添加完成后,会在acrxEntryPoint.cpp中自动添加一句如下的代码:

然后添加一句AfxMessageBox(_T(“this is a test command.”));

 

五、加载与运行
在项目中win32\debug目录下,把ArxProject2.arx复制到桌面,注意先生成一下。
打开cad08输入命令:ap打开加载对话框。
找到.arx文件即可加载。如图:

然后输入自己的命令testcmd就能运行了。如图:

发表在 ObjectArx | 留下评论

acedCommand实现缩放到对象

转载:http://objectarx.net/home.php?mod=space&uid=20326&do=index

缩放以便尽可能大地显示一个或多个选定的对象并使其位于视图的中心

经过实验,发现该选项可以缩放任意的图形(所有基本cad图形以及自定义实体),即使自定义实体没有重载实现

virtual Acad::ErrorStatus subGetGeomExtents(AcDbExtents& extents) const;

也可以进行缩放。
注1:猜测原因可能是cad绘制图形的时候,在内部记录了图形的一些基本要素(点,线等)
注2:在arx和com接口中都提供了zoomWindow()和zoomExtents(),却没有提供“缩放到对象”的接口

尝试使用acedCommand实现对任意实体的”对象缩放“,代码片段如下:

void ZoomToEntity(const AcDbObjectId& objId)

{

        ads_name en;

        if(Acad::eOk != acdbGetAdsName(en, objId)) return;

        acedCommand(RTSTR, _T(“ZOOM”), RTSTR, _T(“O”), RTENAME, en, RTSTR, _T(“”), 0);

}

复制代码

注1:参数中的空字符串_T(“”)等价于按空格键(相当于取消继续选择对象)
注2:如果不希望在acedCommand执行的过程中,出现命令执行过程提示,可以设置cad系统变量CMDECHO等于0
注3:下面的2段引用文字来源于acedCommand命令帮助说明

An empty string (“”) or null string is equivalent to a space entered from the keyboard.

 

If the AutoCAD system variable CMDECHO is set to 0, the data sent by acedCommand() is not displayed; otherwise, the command and its input values are echoed at the AutoCAD Command prompt

【问题】
acedCommand函数不能用于非模态对话框(modeless dialog),详情参考:
arxdoc.chm->Developer’s Guide->Advanced Topics->The Multiple Document Interface->Application Execution Context->Code Differences under the Application Execution Context

如果有哪位高手知道其它的方法,欢迎回复~~

发表在 ObjectArx | 标签为 | 留下评论

AutoCAD 2010(64位/32位)注册机

64位注册机下载:cad2010zcj.64.zip

32位注册机下载:cad2010zcj.32.zip

强调一下win7及以上版本的系统必须右键以管理员身份运行。否则注册不成功。

点击注册机中的“mem patch”(60%以上失败的用户找到我,发现都是没有点这个,强调必须点)

序列号:

356-72378422

666-98989898

400-12345678
productkey:001B1

安装使用方法:
1、运行setup,填写cad序列号 ,一直到安装完成;
2、启动AutoCAD 2010,这里会提示需要激活。

CAD2010注册

3:把申请码复制下来,打开注册机(注意区分32位还是64位的)(切记:如果是Vista或windows7系统,请务必右键单击注册机,以管理员身份运行!),粘贴申请码,点击注册机中的“mem patch”(60%以上失败的用户找到我,发现都是没有点这个,强调必须点),稍后提示成功,再点“Generate”生成激活码。

32位注册机

CAD2010注册机

64位注册机

CAD2010注册

4:把注册机中得到的激活码复制后粘贴到AutoCAD2010的激活对话框中,点“下一步”。提示“激活成功”!

5:恭喜你,激活成功。

发表在 CAD实用软件 | 标签为 , , , , | 62条评论

CAD系统变量(参数)大全

转载:http://blog.sina.com.cn/s/blog_768f3f570101f17z.html

所谓系统变量就是一些参数,这些参数有些是可以在“选项”或其他对话框中进行设置的,有些这必须通过在命令行输入变量名进行设置,当然对于高手来说,还可以通过二次开发程序来进行控制。

CAD有很多的变量,例如fill或fillmode控制填充的显示,attmode控制块属性的显示,等等,了解一些常用的系统变量,当你的图纸出现一些问题时,你可以对出现问题的原因有些初步的判断,并可以通过修改变量设置快速解决。在CAD(无论是AUTOCAD还是浩辰CAD等其他CAD)的帮助中通常有可以系统变量的介绍,随时到帮助查询也非常方便。我在网上看到一个CAD系统变量大全,放到这里,希望对您了解系统变量的作用有点帮助。

CAD的系统变量非常多,我们不可能记住所有变量的作用,我会用红色将一些大家可能会用到的变量标示出来,如果这个变量在对话框中无法设置,建议大家关注或记住,其他变量大家如果有需要时可以再查帮助或打开这篇博文里来查一查。

 

cad系统变量大全(变量名称 –说明)

A 系统变量

acadlspasdoc 0 仅将 acad.lsp 加载到 autocad 任务打开的第一个图形中; 1 将 acad.lsp 加载到每一个打开的图形中

acadprefix 存储由 acad 环境变量指定的目录路径(如果有的话),如果需要则附加路径分隔符

acadver 存储 autocad 的版本号。这个变量与 dxf 文件标题变量 $acadver 不同,”$acadver” 包含图形数据库的级别号

acisoutver 控制 acisout 命令创建的 sat 文件的 acis 版本。acisout 支持值 15 到 18、20、21、30、40、50、60 和 70。

aflags 设置 attdef 位码的属性标志:0无选定的属性模式:1.不可见 2.固定4.验证.8.预置

angbase 类型:实数; 保存位置:图形 初始值:0.0000 相对于当前 ucs 将基准角设置为 0 度。

angdir 设置正角度的方向 初始值:0;从相对于当前 ucs 方向的 0 角度测量角度值。0 逆时针 1 顺时针

apbox 打开或关闭 autosnap 靶框。当捕捉对象时,靶框显示在十字光标的中心。0 不显示靶框 1 显示靶框(这个在选项对话框可以设置)

aperture 以像素为单位设置靶框显示尺寸。靶框是绘图命令中使用的选择工具。初始值:10 (这个在选项对话框可以设置)

area area 既是命令又是系统变量。存储由area 计算的最后一个面积值。

  attdia 控制 insert 命令是否使用对话框用于属性值的输入:0.给出命令行提示 1.使用对话框

attmode 控制属性的显示:0 关,使所有属性不可见;1.普通,保持每个属性当前的可见性;2.开,使全部属性可见

attreq 确定 insert 命令在插入块时默认属性设置。0.所有属性均采用各自的默认值;1.使用对话框获取属性值

auditctl 控制 audit 命令是否创建核查报告 (adt) 文件:0.禁止写 adt 文件 1.写 adt 文件

aunits 设置角度单位:0.十进制度数 1.度/分/秒 2.百分度 3.弧度 4.勘测单位 (单位对话框里可以设置)

auprec 设置所有只读角度单位(显示在状态行上)和可编辑角度单位(其精度小于或等于当前 auprec 的值)的小数位数。 (单位对话框里可以设置)

autosnap 0.关(自动捕捉);1.开 2.开提示 4.开磁吸 8.开极轴追踪 16 开捕捉追踪 32 开极轴追踪和捕捉追踪提示 (状态栏可以设置,这个主要在二次开发程序中使用)

B 系统变量

backz 以绘图单位存储当前视口后向剪裁平面到目标平面的偏移值。viewmode 系统变量中的后向剪裁位打开时才有效。

bindtype 控制绑定或在位编辑外部参照时外部参照名称的处理方式:0.传统的绑定方式 1.类似“插入”方式

  blipmode 控制点标记是否可见。blipmode 既是命令又是系统变量。使用 setvar 命令访问此变量:0.关闭 1.打开

BLOCKEDITLOCK 禁止打开块编辑器和编辑动态块定义。0.指定可以打开块编辑器 1.指定不可以打开块编辑器

BLOCKEDITOR 反映块编辑器是否已打开。0.指示块编辑器未打开 1.指示块编辑器已打开

C 系统变量

cdate 设置日历的日期和时间,不被保存。

cecolor 设置新对象的颜色。有效值包括 bylayer、byblock 以及从 1 到 255 的整数。

celtscale 设置当前对象的线型比例因子

celtype 设置新对象的线型。初始值:“bylayer”

celweight 设置新对象的线宽:1.线宽为“bylayer”;2.线宽为“byblock”;3.线宽为“default”。

chamfera 设置第一个倒角距离。初始值: 0.0000

chamferb 设置第二个倒角距离。初始值: 0.0000

chamferc 设置倒角长度。初始值: 0.0000

chamferd 设置倒角角度。初始值: 0.0000

chammode 设置 autocad 创建倒角的输入方法:0.需要两个倒角距离 1.需要一个倒角距离和一个角度

circlerad 设置默认的圆半径:0.表示无默认半径。初始值:0.0000

clayer 设置当前图层。初始值:0

cmdactive 存储位码值,此位码值指示激活的是普通命令、透明命令、脚本还是对话框。

cmddia 输入方式的切换:0.命令行输入 1.对话框输入

cmdecho 控制在 autolisp 的 command 函数运行时 autocad 是否回显提示和输入:0.关闭回显 1.打开回显

cmdnames 显示当前活动命令和透明命令的名称。例如 line’zoom 指示zoom 命令在line 命令执行期间被透明使用。

cmljust 指定多线对正方式:0.上 1.中间 2.下。初始值:0

cmlscale 初始值:1.0000(英制)或 20.0000(公制)控制多线的全局宽度。

cmlstyle 设置 autocad 绘制多线的样式。初始值:”standard”

compass 控制当前视口中三维指南针的开关状态:0.关闭三维指南针 1.打开三维指南针

coords 0.用定点设备指定点时更新坐标显示 1.不断地更新绝对坐标的显示 2.不断地更新绝对坐标的显示

cplotstyle 控制新对象的当前打印样式。

cprofile 显示当前配置的名称。

ctab 返回图形中当前(模型或布局)选项卡的名称。通过本系统变量,用户可以确定当前的活动选项卡。

cursorsize 按屏幕大小的百分比确定十字光标的大小。初始值:5 (选项对话框可以设置)

cvport 设置当前视口的标识码。

D 系统变量

date 存储当前日期和时间。

dbmod 用位码指示图形的修改状态:1.对象数据库被修改 4.数据库变量被修改 8.窗口被修改 16.视图被修改

dctcust 显示当前自定义拼写词典的路径和文件名。

dctmain 显示当前的主拼写词典的文件名。

deflplstyle 指定图层 0 的默认打印样式。

defplstyle 为新对象指定默认打印样式。

delobj 控制创建其他对象的对象将从图形数据库中删除还是保留在图形数据库中:0.保留对象 1. 删除对象

demandload 当图形包含由第三方应用程序创建的自定义对象时,指定 autocad 是否以及何时按需加载此应用程序。

diastat 存储最近一次使用的对话框的退出方式:0.取消 1.确定

dimadec 1.使用 dimdec 设置的小数位数绘制角度标注;0-8 使用 dimadec 设置的小数位数绘制角度标注。(前面带dim的变量都是标注相关的变量,在标注样式对话框在属性框里都可以设置这些参数)

dimalt 控制标注中换算单位的显示:关.禁用换算单位开.启用换算单位

dimaltd 控制换算单位中小数位的位数。

dimaltf 控制换算单位乘数。

dimaltrnd 舍入换算标注单位。

dimalttd 设置标注换算单位公差值小数位的位数。

dimalttz 控制是否对公差值作消零处理。

dimaltu 为所有标注样式族(角度标注除外)换算单位设置单位格式。

dimaltz 控制是否对换算单位标注值作消零处理。dimaltz 值为 0 – 3 时只影响英尺-英寸标注。

dimapost 为所有标注类型(角度标注除外)的换算标注测量值指定文字前缀或后缀(或两者都指定)。

dimaso 控制标注对象的关联性。

dimassoc 控制标注对象的关联性。

dimasz 控制尺寸线、引线箭头的大小。并控制钩线的大小。

dimatfit 当尺寸界线的空间不足以同时放下标注文字和箭头时,本系统变量将确定这两者的排列方式。

dimaunit 设置角度标注的单位格式:0.十进制度数 1.度/分/秒 2.百分度 3.弧度

dimazin 对角度标注作消零处理。

dimblk 设置尺寸线或引线末端显示的箭头块。

dimblk1 当 dimsah 系统变量打开时,设置尺寸线第一个端点的箭头。

dimblk2 当 dimsah 系统变量打开时,设置尺寸线第二个端点的箭头。

dimcen 控制由 dimcenter、 dimdiameter 和 dimradius 命令绘制的圆或圆弧的圆心标记和中心线图形。

dimclrd 为尺寸线、箭头和标注引线指定颜色。同时控制由 leader 命令创建的引线颜色。

dimclre 为尺寸界线指定颜色。

dimclrt 为标注文字指定颜色。

dimdec 设置标注主单位显示的小数位位数。精度基于选定的单位或角度格式。

dimdle 当使用小斜线代替箭头进行标注时,设置尺寸线超出尺寸界线的距离。

dimdli 控制基线标注中尺寸线的间距。

dimdsep 指定一个单字符作为创建十进制标注时使用的小数分隔符。

dimexe 指定尺寸界线超出尺寸线的距离。

dimexo 指定尺寸界线偏移原点的距离。

dimfit 旧式,除用于保留脚本的完整性外没有任何影响。dimfit 被 dimatfit 系统变量和 dimtmove 系统变量代替。

dimfrac 在 dimlunit 系统变量设置为:4(建筑)或 5(分数)时设置分数格式,0.水平 1.斜 2.不堆叠

dimgap 当尺寸线分成段以在两段之间放置标注文字时,设置标注文字周围的距离。

dimjust 控制标注文字的水平位置。

dimldrblk 指定引线箭头的类型。要返回默认值(实心闭合箭头显示),请输入单个句点 (.)。

dimlfac 设置线性标注测量值的比例因子。

dimlim 将极限尺寸生成为默认文字。

dimlunit 为所有标注类型(除角度标注外)设置单位制。

dimlwd 指定尺寸线的线宽。其值是标准线宽。-3.bylayer -2.byblock 整数代表百分之一毫米的倍数

dimlwe 指定尺寸界线的线宽。其值是标准线宽。-3 bylayer -2 byblock 整数代表百分之一毫米的倍数

dimpost 指定标注测量值的文字前缀或后缀(或者两者都指定)。

dimrnd 将所有标注距离舍入到指定值。

dimsah 控制尺寸线箭头块的显示。

dimscale 为标注变量(指定尺寸、距离或偏移量)设置全局比例因子。同时还影响 leader 命令创建的引线对象的比例。

dimsd1 控制是否禁止显示第一条尺寸线。

dimsd2 控制是否禁止显示第二条尺寸线。

dimse1 控制是否禁止显示第一条尺寸界线:关.不禁止显示尺寸界线开.禁止显示尺寸界线

dimse2 控制是否禁止显示第二条尺寸界线:关.不禁止显示尺寸界线开.禁止显示尺寸界线

dimsho 旧式,除用于保留脚本的完整性外没有任何影响。

dimsoxd 控制是否允许尺寸线绘制到尺寸界线之外:关.不消除尺寸线开.消除尺寸线

dimstyle dimstyle 既是命令又是系统变量。作为系统变量,dimstyle 将显示当前标注样式。

dimtad 控制文字相对尺寸线的垂直位置。

dimtdec 为标注主单位的公差值设置显示的小数位位数。

dimtfac 按照 dimtxt 系统变量的设置,相对于标注文字高度给分数值和公差值的文字高度指定比例因子。

dimtih 控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内的位置。

dimtix 在尺寸界线之间绘制文字。

dimtm 在 dimtol 系统变量或 dimlim 系统变量为开的情况下,为标注文字设置最小(下)偏差。

dimtmove 设置标注文字的移动规则。

dimtofl 控制是否将尺寸线绘制在尺寸界线之间(即使文字放置在尺寸界线之外)。

dimtoh 控制标注文字在尺寸界线外的位置:0或关.将文字与尺寸线对齐 1或开.水平绘制文字

dimtol 将公差附在标注文字之后。将 dimtol 设置为“开”,将关闭 dimlim 系统变量。

dimtolj 设置公差值相对名词性标注文字的垂直对正方式:0.下 1.中间 2.上

dimtp 在dimtol 或 dimlim 系统变量设置为开的情况下,为标注文字设置最大(上)偏差。dimtp 接受带符号的值。

dimtsz 指定线性标注、半径标注以及直径标注中替代箭头的小斜线尺寸。

dimtvp 控制尺寸线上方或下方标注文字的垂直位置。当 dimtad 设置为关时,autocad 将使用 dimtvp 的值。

dimtxsty 指定标注的文字样式

dimtxt 指定标注文字的高度,除非当前文字样式具有固定的高度。

dimtzin 控制是否对公差值作消零处理。

dimunit 旧式,除用于保留脚本的完整性外没有任何影响。dimunit 被 dimlunit 和 dimfrac 系统变量代替。

dimupt 控制用户定位文字的选项。0光标仅控制尺寸线的位置 1或开光标控制文字以及尺寸线的位置

dimzin 控制是否对主单位值作消零处理。

dispsilh 控制“线框”模式下实体对象轮廓曲线的显示。并控制在实体对象被消隐时是否绘制网格。0.关 1.开

distance 存储 dist 命令计算的距离。

donutid 设置圆环的默认内直径。

donutod 设置圆环的默认外直径。此值不能为零。

dragmode 控制拖动对象的显示。

dragp1 设置重生成拖动模式下的输入采样率。

dragp2 设置快速拖动模式下的输入采样率。

 dwgcheck 在打开图形时检查图形中的潜在问题。(打开非AutoCAD保存的DWG图纸是否出现提示信息,设置为0,不显示信息。)

  dwgcodepage 存储与 syscodepage 系统变量相同的值(出于兼容性的原因)。(各种不同语言必须使用对应的代码页,如果代码页存储错误,可能导致文字显示乱码,这个变量是一个只读变量,就是我们自己无法设置。)

dwgname 存储用户输入的图形名。

dwgprefix 存储图形文件的驱动器/目录前缀。

dwgtitled 指出当前图形是否已命名:0.图形未命名 1.图形已命名

E 系统变量

edgemode 控制 trim 和 extend 命令确定边界的边和剪切边的方式。

 elevation 存储当前空间当前视口中相对当前 ucs 的当前标高值。(如果你绘制任何图形都有Z坐标,请用此变量进行设置)

expert 控制是否显示某些特定提示。

explmode 控制 explode 命令是否支持比例不一致 (nus) 的块。

extmax 存储图形范围右上角点的值。

extmin 存储图形范围左下角点的值。

extnames 为存储于定义表中的命名对象名称(例如线型和图层)设置参数。

F 系统变量

facetratio 控制圆柱或圆锥 shapemanager 实体镶嵌面的宽高比。设置为 1 将增加网格密度以改善渲染模型和着色模型的质量。

facetres 调整着色对象和渲染对象的平滑度,对象的隐藏线被删除。有效值为 0.01 到 10.0。

 filedia 控制与读写文件命令一起使用的对话框的显示。(如果打开和保存文件时不出对话框,只出命令行,请输入此变量,并将数值设置为1)

filletrad 存储当前的圆角半径。

 fill或fillmode 指定图案填充(包括实体填充和渐变填充)、二维实体和宽多段线是否被填充。(如果填充不显示,请输入此命令,将数值设置为1)

fontalt 在找不到指定的字体文件时指定替换字体。

fontmap 指定要用到的字体映射文件。

frontz 按图形单位存储当前视口中前向剪裁平面到目标平面的偏移量。

fullopen 指示当前图形是否被局部打开。

G 系统变量

gfang 指定渐变填充的角度。有效值为 0 到 360 度。

gfclr1 为单色渐变填充或双色渐变填充的第一种颜色指定颜色。有效值为“rgb 000, 000, 000”到“rgb 255, 255, 255”。

gfclr2 为双色渐变填充的第二种颜色指定颜色。有效值为“rgb 000, 000, 000”到“rgb 255, 255, 255”。

gfclrlum 在单色渐变填充中使颜色变淡(与白色混合)或变深(与黑色混合)。有效值为 0.0(最暗)到 1.0(最亮)

gfclrstate 指定是否在渐变填充中使用单色或者双色. 0.双色渐变填充 1.单色渐变填充

gfname 指定一个渐变填充图案。有效值为 1 到 9。

gfshift 指定在渐变填充中的图案是否是居中或是向左变换移位.0.居中 1.向左上方移动

gridmode 指定打开或关闭栅格。0.关闭栅格 1.打开栅格(可在状态栏设置)

gridunit 指定当前视口的栅格间距(x 和 y 方向)。(可在栅格和捕捉设置对话框中设置)

gripblock 控制块中夹点的指定。0.只为块的插入点指定夹点 1.为块中的对象指定夹点

gripcolor 控制未选定夹点的颜色。有效取值范围为 1 到 255。(可在“选项”对话框中进行设置)

griphot 控制选定夹点的颜色。有效取值范围为 1 到 255。

griphover 控制当光标停在夹点上时其夹点的填充颜色。有效取值范围为 1 到 255。

gripobjlimit 抑制当初始选择集包含的对象超过特定的数量时夹点的显示。

grips 控制“拉伸”、“移动”、“旋转”、“缩放”和“镜像夹点”模式中选择集夹点的使用。

gripsize 以像素为单位设置夹点方框的大小。有效的取值范围为 1 到 255。

griptips 控制当光标在支持夹点提示的自定义对象上面悬停时,其夹点提示的显示.

H 系统变量

halogap 指定当一个对象被另一个对象遮挡时,显示一个间隙。

handles 报告应用程序是否可以访问对象句柄。因为句柄不能再被关闭,所以只用于保留脚本的完整性,没有其他影响

hideprecision 控制消隐和着色的精度。

hidetext 指定在执行 hide 命令的过程中是否处理由 text、dtext 或 mtext 命令创建的文字对象。

highlight 控制对象的亮显。它并不影响使用夹点选定的对象。

hpang 指定填充图案的角度。

hpassoc 控制图案填充和渐变填充是否关联.

hpbound 控制 bhatch 和 boundary 命令创建的对象类型。

hpdouble 指定用户定义图案的双向填充图案。双向将指定与原始直线成 90 度角绘制的第二组直线。

hpname 设置默认填充图案,其名称最多可包含 34 个字符,其中不能有空格。

hpscale 指定填充图案的比例因子,其值不能为零。(可在填充对话框中进行设置)

hpspace 为用户定义的简单图案指定填充图案的线间隔,其值不能为零。

hyperlinkbase 指定图形中用于所有相对超链接的路径。如果未指定值,图形路径将用于所有相对超链接。

I 系统变量

imagehlt 控制亮显整个光栅图像还是光栅图像边框。

indexctl 控制是否创建图层和空间索引并保存到图形文件中。

inetlocation 存储 browser 命令和“浏览 web”对话框使用的 internet 网址。

insbase 存储 base 命令设置的插入基点,以当前空间的 ucs 坐标表示。

insname 为 insert 命令设置默认块名。此名称必须符合符号命名惯例。

insunits 为从设计中心拖动并插入到图形中的块或图像的自动缩放指定图形单位值。

insunitsdefsource 设置源内容的单位值。有效范围是从 0 到 20。

insunitsdeftarget 设置目标图形的单位值有效范围是从 0 到 20。

intersectioncolor 指定相交多段线的颜色。

intersectiondispla 指定相交多段线的显示。

isavebak 提高增量保存速度,特别是对于大的图形。isavebak 控制备份文件 (bak) 的创建。

isavepercent 确定图形文件中所能允许的耗损空间的总量。

isolines 指定对象上每个面的轮廓线的数目。有效整数值为 0 到 2047。

lastangle 存储相对当前空间当前 ucs 的 xy 平面输入的上一圆弧端点角度。

lastpoint 存储上一次输入的点,用当前空间的 ucs 坐标值表示;如果通过键盘来输入,则应添加 (@) 符号。

lastprompt 存储回显在命令行的上一个字符串。

layoutregenctl 指定“模型”选项卡和布局选项卡上的显示列表如何更新。

lenslength 存储当前视口透视图中的镜头焦距长度(单位为毫米)。

 limcheck 控制在图形界限之外是否可以创建对象。

limmax 存储当前空间的右上方图形界限,用世界坐标系坐标表示。

limmin 存储当前空间的左下方图形界限,用世界坐标系坐标表示。

lispinit 指定打开新图形时是否保留 autolisp 定义的函数和变量,或者这些函数和变量是否只在当前绘图任务中有效

locale 显示用户运行的当前 autocad 版本的国际标准化组织 (iso) 语言代码。

localrootprefix 保存完整路径至安装本地可自定义文件的根文件夹。

logfilemode 指定是否将文本窗口的内容写入日志文件。

logfilename 为当前图形指定日志文件的路径和名称。

logfilepath 为同一任务中的所有图形指定日志文件的路径。

loginname 显示加载 autocad 时配置或输入的用户名。登录名最多可以包含 30 个字符。

  ltscale 设置全局线型比例因子。线型比例因子不能为零。(可在线型资源管理器中设置)

lunits 设置线性单位。1 科学 2 小数 3 工程 4 建筑 5 分数

luprec 设置所有只读线性单位和可编辑线性单位(其精度小于或等于当前 luprec 的值)的小数位位数。

lwdefault 设置默认线宽的值。默认线宽可以以毫米的百分之一为单位设置为任何有效线宽

lwdisplay 控制是否显示线宽。设置随每个选项卡保存在图形中。0 不显示线宽 1 显示线宽

lwunits 控制线宽单位以英寸还是毫米显示。0 英寸 1 毫米

M 系统变量

maxactvp 设置布局中一次最多可以激活多少视口。maxactvp 不影响打印视口的数目。

maxsort 设置列表命令可以排序的符号名或块名的最大数目。如果项目总数超过了本系统变量的值,将不进行排序。

mbuttonpan 控制定点设备第三按钮或滑轮的动作响应。

measureinit 设置初始图形单位(英制或公制)。

measurement 仅设置当前图形的图形单位(英制或公制)。

menuctl 控制屏幕菜单中的页切换。

menuecho 设置菜单回显和提示控制位。

menuname 存储菜单文件名,包括文件名路径。

mirrtext 控制 mirror 命令影响镜像时文字的显示方式。0 保持文字方向 1 镜像显示文字

modemacro 在状态行显示字符串,诸如当前图形文件名、时间/日期戳记或指定的模式。

mtexted 设置应用程序的名称用于编辑多行文字对象。默认设置为“.”,使用CAD默认的编辑器,可以设置成notepad,使用记事本作为编辑器,也可以设置成oldeditor,使用旧版的编辑器,等等。

mtextfixed 控制多行文字编辑器的外观.控制是否采用所见及所得相关效果,详细讲解见博客相关文档。

mtjigstring 设置当mtext命令使用后,在光标位置处显示样例文字的内容。

mydocumentsprefix 保存完整路径至当前登录用户的“我的文档”文件夹。

N 系统变量

nomutt 禁止显示信息,即不进行信息反馈(如果通常情况下并不禁止显示这些信息)。

O 系统变量

obscuredcolor 指定遮掩行的颜色。

obscuredltype 指定遮掩行的线型。

offsetdist 设置默认的偏移距离。

offsetgaptype 当偏移多段线时,控制如何处理线段之间的潜在间隙。

olehide 控制 autocad 中 ole 对象的显示。

olequality 控制嵌入 ole 对象的默认质量级别。

olestartup 控制打印嵌入 ole 对象时是否加载其源应用程序。加载 ole 源应用程序可以提高打印质量。

orthomode 限制光标在正交方向移动。

osmode 使用位码设置“对象捕捉”的运行模式

osnapcoord 控制是否从命令行输入坐标替代对象捕捉。

P 系统变量

paletteopaque 控制窗口透明性。

paperupdate 控制 autocad r14 或更早版本中创建的没有用 autocad 2000 或更高版本格式保存的图形的默认打印设置

pdmode 控制如何显示点对象。(可以在点样式对话框中设置)

pdsize 设置显示的点对象大小。(可以在点样式对话框中设置)

peditaccept 抑制在使用pedit时,显示”选取的对象不是多段线”的提示。

 pellipse 控制由 ellipse 命令创建的椭圆类型。可以设置创建适用于轴测图的椭圆或普通椭圆。

perimeter 存储由 area、dblist 或 list 命令计算的最后一个周长值。

pfacevmax 设置每个面顶点的最大数目。

pickadd 控制后续选定对象是替换还是添加到当前选择集。在“选项”对话框和属性框(CTRL+1)都可以设置。

pickauto 控制“选择对象”提示下是否自动显示选择窗口。

  pickbox 以像素为单位设置对象选择目标的高度。(在“选项”对话框中可以设置)

pickdrag 控制绘制选择窗口的方式。

pickfirst 控制在发出命令之前(先选择后执行)还是之后选择对象。(在“选项”对话框中可以设置)

pickstyle 控制编组选择和关联填充选择的使用。(在“选项”对话框中可以设置)

platform 指示 autocad 工作的操作系统平台。

plinegen 设置如何围绕二维多段线的顶点生成线型图案。

plinetype 指定 autocad 是否使用优化的二维多段线。

plinewid 存储多段线的默认宽度。

plotrotmode 控制打印方向。

plquiet 控制显示可选对话框以及脚本和批处理打印的非致命错误。

polaraddang 包含用户定义的极轴角。

polarang 设置极轴角增量。值可设置为 90、45、30、22.5、18、15、10 和 5。

polardist 当 snaptype 系统变量设置为 1(极轴捕捉)时,设置捕捉增量。

polarmode 控制极轴和对象捕捉追踪设置。

polysides 为 polygon 命令设置默认边数。取值范围为 3 到 1024。

popups 显示当前配置的显示驱动程序状态。

projectname 为当前图形指定工程名称。

projmode 设置修剪和延伸的当前“投影”模式。

proxygraphics 指定是否将代理对象的图像保存在图形中。

proxynotice 在创建代理时显示通知。0 不显示代理警告 1 显示代理警告

proxyshow 控制图形中代理对象的显示。

proxywebsearch 指定 autocad 是否检查 object enabler。

psltscale 控制图纸空间的线型比例。

pstylemode 指示当前图形处于“颜色相关打印样式”还是“命名打印样式”模式。

pstylepolicy 控制对象的颜色特性是否与其打印样式相关联。

psvpscale 为所有新创建的视口设置视图比例因子。

pucsbase 存储定义正交 ucs 设置(仅用于图纸空间)的原点和方向的 ucs 名称。

Q 系统变量

qtextmode 控制文字如何显示。

R 系统变量

rasterpreview 控制 bmp 预览图像是否随图形一起保存。

refeditname 显示正进行编辑的参照名称。

regenmode 控制图形的自动重生成。

rememberfolders 控制标准的文件选择对话框中的“查找”或“保存”选项的默认路径。

reporterror 控制如果 autocad 异常结束时是否可以寄出一个错误报告到autodesk.

roamablerootprefix 保存完整路径至安装可移动自定义文件的根文件夹。

rtdisplay 控制实时 zoom 或 pan 时光栅图像的显示。存储当前用于自动保存的文件名。

S 系统变量

savefilepath 指定 autocad 任务的所有自动保存文件目录的路径。

savename 在保存当前图形之后存储图形的文件名和目录路径。

savetime 以分钟为单位设置自动保存的时间间隔。(选项对话框中可以设置)

screenboxes 存储绘图区域的屏幕菜单区显示的框数。

screenmode 存储指示 autocad 显示模式的图形/文本状态的位码值。

screensize 以像素为单位存储当前视口的大小(x 和 y 值)。

sdi 控制 autocad 运行于单文档还是多文档界面。偶尔会有人用到。

shadedge 控制着色时边缘的着色。

shadedif 以漫反射光的百分比表示,设置漫反射光与环境光的比率(如果 shadedge 设置为 0 或 1)。

shortcutmenu 控制“默认”、“编辑”和“命令”模式的快捷菜单在绘图区域是否可用。

shpname 设置默认的形名称(必须遵循符号命名惯例)。

sigwarn 控制打开带有数字签名的文件时是否发出警告。

sketchinc 设置 sketch 命令使用的记录增量。

skpoly 确定 sketch 命令生成直线还是多段线。

snapang 为当前视口设置捕捉和栅格的旋转角。旋转角相对当前 ucs 指定。(栅格和捕捉设置对话框中可以设置)

snapbase 相对于当前 ucs 为当前视口设置捕捉和栅格的原点。(栅格和捕捉设置对话框中可以设置)

snapisopair 控制当前视口的等轴测平面。0 左 1 上 2 右

snapmode 打开或关闭“捕捉”模式。(状态栏可以设置)

snapstyl 设置当前视口的捕捉样式。

snaptype 设置当前视口的捕捉类型。

snapunit 设置当前视口的捕捉间距.

solidcheck 打开或关闭当前 autocad 任务中的实体校验。

sortents 控制 opti****** 命令的对象排序操作(从“用户系统配置”选项卡中执行)。

splframe 控制样条曲线和样条拟合多段线的显示。

splinesegs 设置每条样条拟合多段线(此多段线通过 pedit 命令的“样条曲线”选项生成)的线段数目。

splinetype 设置 pedit 命令的“样条曲线”选项生成的曲线类型。

standardsviolation 指定当创建或修改非标准对象时,是否通知用户当前图形中存在标准违规。

startup 控制当使用 new 和 qnew 命令创建新图形时是否显示“创建新图形”对话框。

surftab1 为 rulesurf 和 tabsurf 命令设置生成的列表数目。

surftab2 为 revsurf 和 edgesurf 命令设置在 n 方向上的网格密度。

surftype 控制 pedit 命令的“平滑”选项生成的拟合曲面类型。

surfu 为 pedit 命令的“平滑”选项设置在 m 方向的表面密度。

surfv 为 pedit 命令的“平滑”选项设置在 n 方向的表面密度。

syscodepage 指示由操作系统确定的系统代码页。

T 系统变量

tabmode 控制数字化仪的使用。关于使用和配置数字化仪的详细信息,请参见tablet 命令。

target 存储当前视口中目标点的位置(以 ucs 坐标表示)。

tdcreate 存储创建图形的当地时间和日期。

tdindwg 存储所有的编辑时间,即在保存当前图形之间占用的总时间。

tducreate 存储创建图形的通用时间和日期。

tdupdate 存储最后一次更新/保存图形的当地时间和日期。

tdusrtimer 存储用户消耗的时间计时器

tduupdate 存储最后一次更新/保存图形的通用时间和日期。

tempprefix 包含用于放置临时文件的目录名(如果有的话),带路径分隔符。

texteval 控制处理使用 text 或 -text 命令输入的字符串的方法。

textfill 控制打印和渲染时 truetype 字体的填充方式。

textqlty 设置打印和渲染时 truetype 字体文字轮廓的镶嵌精度。

textsize 设置以当前文本样式绘制的新文字对象的默认高度(当前文本样式具有固定高度时此设置无效)。

textstyle 设置当前文本样式的名称。

 thickness 设置当前的三维厚度。

tilemode 将“模型”选项卡或最后一个布局选项卡置为当前。

tooltips 控制工具栏提示的显示:0 不显示工具栏提示 1 显示工具栏提示

tracewid 设置宽线的默认宽度。

trackpath 控制显示极轴和对象捕捉追踪的对齐路径。

trayic****** 控制是否在状态栏上显示系统托盘.

traynotify 控制是否在状态栏系统托盘上显示服务通知.

traytimeout 控制服务通知显示的时间长短(用秒)。有效值范围为 0 到 10。

treedepth 指定最大深度,即树状结构的空间索引可以分出分支的最大数目。

treemax 通过限制空间索引(八叉树)中的节点数目,从而限制重生成图形时占用的内存。

trimmode 控制 autocad 是否修剪倒角和圆角的选定边。

tspacefac 控制多行文字的行间距(按文字高度的比例因子测量)。有效值为 0.25 到 4.0。

tspacetype 控制多行文字中使用的行间距类型。

tstackalign 控制堆叠文字的垂直对齐方式。

tstacksize 控制堆叠文字分数的高度相对于选定文字的当前高度的百分比。有效值为 25 到 125。

U 系统变量

ucsaxisang 存储使用 ucs 命令的 x、y 或 z 选项绕轴旋转 ucs 时的默认角度值。

ucsbase 存储定义正交 ucs 设置的原点和方向的 ucs 名称。有效值可以是任何命名 ucs。

ucsfollow 用于从一个 ucs 转换到另一个 ucs 时生成平面视图。

ucsicon 使用位码显示当前视口的 ucs 图标。

ucsname 存储当前空间当前视口的当前坐标系名称。如果当前 ucs 尚未命名,则返回一个空字符串。

ucsorg 存储当前空间当前视口的当前坐标系原点。该值总是以世界坐标形式保存。

ucsortho 确定恢复正交视图时是否同时自动恢复相关的正交 ucs 设置。

ucsview 确定当前 ucs 是否随命名视图一起保存。

ucsvp 确定视口的 ucs 保持不变还是作相应改变以反映当前视口的 ucs 状态。

ucsxdir 存储当前空间当前视口中当前 ucs 的 x 方向。

ucsydir 存储当前空间当前视口中当前 ucs 的 y 方向。

undoctl 存储指示 undo 命令“自动”和“控制”选项状态的位码值。

undomarks 存储“标记”选项放置在undo 控制流中的标记数目。

unitmode 控制单位的显示格式。

V 系统变量

viewctr 存储当前视口中视图的中心点。该值用 ucs 坐标表示。

viewdir 存储当前视口的观察方向。用 ucs 坐标表示。它将相机点描述为到目标点的三维偏移量。

viewmode 使用位码值存储控制当前视口的“查看”模式。

viewres  圆或弧的显示分辨率,控制圆或弧显示成多边形的段数。

viewsize 按图形单位存储当前视口的高度。

viewtwist 存储当前视口的视图扭转角。

visretain 控制依赖外部参照的图层的可见性、颜色、线型、线宽和打印样式(如果 pstylepolicy 设置为 0)。

vsmax 存储当前视口虚屏的右上角。该值用 ucs 坐标表示。

vsmin 存储当前视口虚屏的左下角。该值用 ucs 坐标表示。

W 系统变量

whiparc 控制圆和圆弧是否平滑显示。

wmfbkgnd 控制 autocad 对象在其他应用程序中的背景显示是否透明。

wmfforegnd 控制 autocad 对象在其他应用程序中的前景色指定。

worlducs 指示 ucs 是否与 wcs 相同。0. ucs 与 wcs 不同 1. ucs 与 wcs 相同

worldview 确定响应 3dorbit、dview 和 vpoint 命令的输入是相对于 wcs(默认)还是相对于当前 ucs。

writestat 指示图形文件是只读的还是可写的。开发人员需要通过 autolisp 确定文件的读写状态。

X 系统变量

xclipframe 控制外部参照剪裁边界的可见性。0 剪裁边界不可见 1 剪裁边界可见

 xedit 控制当前图形被其他图形参照时是否可以在位编辑。0 不能在位编辑参照 1 可以在位编辑参照(选项对话框中可以设置。)

xfadectl 控制正被在位编辑的参照的褪色度百分比。有效值从 0 到 90

xloadctl 打开/关闭外部参照的按需加载,并控制是打开参照图形文件还是打开参照图形文件的副本。

xloadpath 创建一个路径用于存储按需加载的外部参照文件临时副本。

xrefctl 控制 autocad 是否写入外部参照日志 (xlg) 文件。0 不写入记录文件 1 写入记录文件

xrefnotify 控制更新或缺少外部参照时的通知。

Z 系统变量

zoomfactor 接受一个整数,有效值为 0 到 100。数字越大,鼠标滑轮每次前后移动引起改变的增量就越多。

上面应该是AUTOCAD的系统变量,在浩辰CAD等其他软件中支持大部分变量,至少标红的这些肯定都支持,其他变量可能回有一点出入。

发表在 CAD技巧 | 标签为 | 留下评论

CAD中图层冻结和图层关闭区别

转载:http://blog.sina.com.cn/s/blog_678d34f80100y9bc.html

冻结的图层被隔离,不能被选中进行操作;而关闭的图层是被隐藏,能被选中进行操作(例如:Ctrl+A或是快速选择时就能选中关闭的图层,对其进行删除、复制等各种操作)

    二者相同之处:进行图层冻结或关闭后,在图面上看不见相应的图层。打印时,若不对冻结和关闭和图层分别进行解冻和打开,则相应图层无法打印。

发表在 CAD技巧 | 标签为 , | 留下评论

CAD扩展工具( Express Tools)主要命令及其功能介绍

AutoCAD提供了不少好用的扩展工具,在安装的时候注意要选上Express Tool,这些工具才能装上,低版本的安装中有些叫Bonus。有些国产CAD的扩展工具比AutoCAD更丰富,例如浩辰CAD,不仅几乎有AutoCAD全部的扩展工具,还有根据用户的提出需求增加的几十种工具。

CAD的扩展工具分为几大类:图层管理、图块编辑、文字编辑、标注编辑、文件管理、特殊绘图工具等等,有些工具非常方便,可以有效提高你的操作效率。在后期的版本中,有些扩展工具的功能逐步变成了常规功能,例如图层工具现在在格式菜单中也能调用,云线、区域覆盖(wipeout)、快速引线等功能已经成为基本绘图命令,放到常规功能菜单中去了。下面简单介绍一下一些常用的功能。

图层工具:很多已经是CAD的基本命令,但很多命令,大家还没怎么用过。

LMAN:图层状态管理器,可以将图层的状态保存起来,随时进行切换。也可以将图层状态写入文件或从文件中加载文件

LAYMCH:图层匹配,可以将对象的图层匹配为其他对象的图层。

LAYCUR:设置为当前层,将选择对象移动到当前层上。

LAYISO:图层隔离,点选或框选对象,只显示选择对象的图层,将其他图层关闭,可以简化图形,方便操作

LAYFRZ:图层冻结,选择一个或多个对象,冻结对象所在图层

LAYOFF:关闭图层,选择一个或多个对象,关闭对象所在图层

LAYLCK:锁定图层,选择一个或多个对象,锁定对象所在图层
LAYULK:图层解锁, 选择一个或多个对象,解除对象所在图层的锁定

LAYON:打开所有图层,将所有被关闭的图层打开

LAYTHW:图层解冻,将所有被冻结的图层解冻

文字工具:

TEXTFIT:文字拟合,设置文字的宽度,压缩或拉伸文字

TEXTMASK:文字遮罩,可以生成遮罩来遮挡文字后面的重叠对象

CHT:文字批量修改,可以批量修改多个文字的各种特性

TXTEXP:文字分解,将文字分解为图形对象,如果文字是作为设计的一部分,可以使用这种功能将文字炸开成线,避免在不同的环境下打开文字发生变化。另外还可以通过将操作系统的字体炸开,获取文字的轮廓线,得到空心文字或利用文字轮廓线建模。浩辰CAD的有相同功能,叫文字轮廓线,命令不太一样。

ARCTEXT:弧形文字,可以沿弧线书写文字

RTEXT:远程文字或动态文字,可以链接TXT文本文件中的文字,TXT文件内容修改,图纸中内容自动更新,也可以利用DIESEL语句来定义一些动态文字,例如日期、保存时间、图纸名等等,动态文字的功能跟CAD的字段类似。

图块工具:

BURST:将属性转换为文字,将属性块中的属性转换成普通文字。如果用常规的分解(炸开),图块的属性炸开后会显示属性的标签,而不是属性的值,用这个功能可以直接将图块的属性值分解出来。

BLOCKREPLACE:图块替换,可以用另外图块替换选定的图块。

BLOCKTOXREF:图块转换为外部参照,外部参照通过绑定可以转换为图块,图块通过这个功能也可以转换为图块。

NCOPY:复制嵌套对象,可以选择将图块中的图形单独复制出来而不用炸开图块。

GATTE:修改图块属性的属性文字内容,因为CAD现在双击属性块就可以编辑属性,而且还提供了BATTMAN这样批量修改属性的工具,这个工具在扩展工具菜单中看不到了,但命令还在。

BCOUNT:图块数量,可以统计整个图纸或选定对象中图块的数量,将以列表的形式显示在命令历史中。这个命令在菜单中也找不到,但只要安装了扩展工具,都可以运行。

XL1ST:查询Block、Xref内部文件

 

编辑工具:

MSTRETCH:多重选框作Stretch(拉伸)

MOCORO:移动复制旋转,同步移动复制旋转比例调整

EXTRIM:扩展修剪,可以一次性修剪一个封闭对象内或外的所有对象

MPEDIT:多重对象单击,作Edit编辑(菜单中没有此命令)

XPLODE:超级分解:分解对象并指定分解后的特性(菜单中没有此命令)

FLATTEN:变平,去掉所有选择对象的Z坐标,三维对象也会被变成平面对象。

OVERKILL:删除重合对象。这个命令除了可以去除一些重叠的多余数据外,还可以处理部分重叠的直线或多段线,避免重叠部分影响后续的编辑,

绘图工具:

SUPERHATCH:超级填充,可以将图片、图块、外部参照等作为填充单元进行填充,还可以很方便地生成和边界匹配的区域覆盖(wipeout)以遮挡图块后面的图形。

BREAKLINE:绘制折断线。

 

文件工具:

MOVEBAK:移动备份文件,可以将BAK文件移动到一个指定的目录

PLT2DWG:将PLT文件转换回DWG,这个PLT文件必须是矢量的HPGL格式的文件。

 

其他工具:

ALIASEDIT:别名编辑,可以在对话框中编辑命令的快捷键,比直接编辑PGP文件更加直观

SYSVDLG:系统变量编辑器,可以查询和编辑图中的系统变量,还可以将图纸的系统变量保存或读取保存的系统变量文件。在浩辰CAD中这个工具还有比较的功能,可以知道两张图纸的系统变量有何不同,当某装图纸出现显示效果异常时用这个工具有时可以定位问题。

MKLTTYPE:制作线型,LIN线型文件中的线型是用简单的文字定义的,虽然很简单,但对于一个普通的设计者来说还是很困难的,利用制作线型工具,可以画好一到两个单元,可以包含线、文字,然后通过选择这些图形就可以轻松地定义一种线型。

我用了一下国产浩辰CAD,发现扩展工具比AutoCAD多了很多,很多功能都非常使用,例如文字格式刷、线上写字,文字递增复制、文字对齐、图块统计、对齐工具、分布工具、面积求和、统计求和、二维布尔运算、自动增强表格、图纸防修改、图纸对比、批量文件清理,还提供了一个专门的浩辰工具箱,这个工具箱挺适合给排水或暖通设计人员使用的,画系统图挺方便的。

上面只是并未将CAD所有的扩展工具一一列出,大家如果有兴趣可以挨个的试一下,你一定会找到你心仪的小工具。

发表在 CAD实用软件 | 留下评论

区域在区域内

// Function name : RgnInRgn
// Descrīption : is Region1 in Region2?
// Return type : bool
// Argument : const AcDbRegion* pRegion1
// Argument : const AcDbRegion* pRegion2
bool RgnInRgn(const AcDbRegion* pRegion1,const AcDbRegion* pRegion2)
{
if (pRegion1==NULL||pRegion2==NULL) return false;

AcDbObjectPointer< AcDbRegion > spRegion1;
AcDbObjectPointer< AcDbRegion > spRegion2;
if (spRegion1.create()!=Acad::eOk)
{
acdbFail(“\n内存不足”);
return false;
}
if (spRegion2.create()!=Acad::eOk)
{
acdbFail(“\n内存不足”);
return false;
}

if ((spRegion1->copyFrom(pRegion1)!= Acad::eOk)||
(spRegion2->copyFrom(pRegion2)!= Acad::eOk))
{
acdbFail(“\n无法复制对象”);
return false;
}

bool bResult=false;
if(spRegion1->booleanOper(AcDb::kBoolIntersect, spRegion2.object()) == Acad::eOk)
{
if ((spRegion2->isNull()==Adesk::kTrue)&&(spRegion1->isNull()!=Adesk::kTrue)){
   double area1,area0;
   spRegion1->getArea(area1);
   pRegion1->getArea(area0);

   if ((area0 – area1) < AcGeContext::gTol.equalPoint())
     bResult=true;
}
}

return bResult;
}

发表在 ObjectArx | 标签为 , | 留下评论

CAD旋转实体

#ifndef PI
#define PI 4*atan(1.0)//提高pi的精度
#endif

double dRotation=PI/2.0;//旋转角度为90度

AcGeVector3d axis=AcGeVector3d::kZAxis;//旋转轴一般设定为Z轴,二维的

//情况下

AcGePoint3d pt(0.0,0.0,0.0);//旋转中心为原点

AcGeMatrix3d mat;
    mat.setToRotation(dRotation,axis,pt);

AcDbEntityPointer spEnt(objId,AcDb::kForWrite);

Acad::ErrorStatus es=spEnt.openStatus();
 if(es!=Acad::eOk)
 {
  return es;
 }

spEnt->transformBy(mat);

发表在 ObjectArx | 标签为 , , , | 留下评论

显示标准的 AutoCAD 颜色选择对话框

在LISP中

函数:

acad_colordlg

功能:

显示标准的 AutoCAD 颜色选择对话框

语法:

(acad_colordlg colornum [flag])

参数:

colornum

整数,其取值范围是 0-256 (包括 0 和 256),它用于指定颜色对话框的缺省的颜色代码。

flag

如可选参数 flag 设为 nil,禁用“随层”和“随块”按钮;省略 flag 参数或将其设为非 nil 值,则可启用“随层”和“随块”按钮。

colornum 为 0 时代表 BYBLOCK(随块),为 256 时代表 BYLAYER(随层)。

返回值:

用户所选择的颜色代码,如果用户取消该对话框则返回 nil。

示例:

下列代码提示用户选择一种颜色,如果不选则指定绿色为缺省颜色:

(acad_colordlg 3)
在ObjectARX中

/* 显示颜色设置对话框. 用户按下OK按钮放回TRUE,否则返回FALSE
 * nColor : 默认颜色,用户如果按下OK选择了颜色,则记录选择的颜色
 * bAllowMetaColor : 如果为TRUE 则虚拟的”BYLAYER”和 “BYBLOCK”将会显示
 * nCurLayerColor : “BYLAYER”对应的颜色索引,一般为256
 */

Adesk::Boolean acedSetColorDialog(int& nColor, Adesk::Boolean bAllowMetaColor,
    int nCurLayerColor);

发表在 ObjectArx | 标签为 , , , | 留下评论

acedSSGet使用关键字

转载至:http://www.xdcad.net/forum/thread-667788-1-1.html

void MyCustomCommand()
 
{
 
  // save the old callback function
 
  resbuf* (*oldFunc) (const ACHAR*);
 
  acedSSGetKwordCallbackPtr(&oldFunc);
 
 
 
  // set own callback function
 
  acedSSSetKwordCallbackPtr(ssCallback);
 
  // let the user make a selection
 
  ads_name ss;
 
  // this is the keyword list
 
  // to use local and global keywords:
 
  ACHAR kwordlist[] = { _T(“LInes CIRcles _ LInes CIRcles”) };
 
 
 
  if (RTNORM != acedSSGet(_T(“_:K”), NULL, kwordlist, NULL, ss)) {
 
    // cancel
 
  } else {
 
    acutPrintf(_T(“\nDone.”));
 
    acedSSFree(ss);
 
  }
 
  // restore old callback function
 
  acedSSSetKwordCallbackPtr(*oldFunc);
 
}
 
Now the callback that is executed when the keyword is selected:
 

// Callback function for acedSSGet()
 
resbuf* ssCallback(const TCHAR* kword)
 
{
 
  // kword contains the global keyword
 
  acutPrintf(_T(“\nCallback: ‘%s'”), kword);
 
 
 
  // result to return
 
  // NULL: no changes on selection set
 
  resbuf *result = NULL;
 
 
 
  if (!wcscmp(kword, _T(“LInes”))) {
 
    // select all lines (just for testing)
 
    AcDbObjectIdArray objIds;
 
    getLines(objIds);
 
    // create resbuf containing single
 
    // enames from object id array
 
    result = getResbuf(objIds);
 
  } else if (!wcscmp(kword, _T(“CIRcles”))) {
 
    // select all circles (just for testing)
 
    AcDbObjectIdArray objIds;
 
    getCircles(objIds);
 
    // create resbuf containing a selection set
 
    ads_name ss;
 
    acedSSGet(_T(“X”), NULL, NULL,
 
      acutBuildList(RTDXF0, _T(“CIRCLE”), RTNONE),
 
      ss);
 
    result = acutBuildList(RTPICKS, ss, RTNONE);
 
  } else {
 
    // return an error message
 
    result = acutBuildList(RTSTR, _T(“\nUnknown error”), RTNONE);
 
  }
 
  return result;
 
}
 
And finally some additional methods for this specific sample:
 

resbuf* getResbuf(AcDbObjectIdArray ids)
 
{
 
  resbuf *result = NULL, *temp1, *temp2;
 
  ads_name ename;
 
  int length = ids.length();
 
 
 
  for (int i = 0; i < length; ++i) {
 
    acdbGetAdsName(ename, ids[i]);
 
    temp2 = acutBuildList(RTENAME, ename, RTNONE);
 
    if (result == NULL) {
 
      result = temp2;
 
    } else {
 
      temp1->rbnext = temp2;
 
    }
 
    temp1 = temp2;
 
  }
 
 
 
  return result;
 
}
 
 
 
void getLines(AcDbObjectIdArray& ids)
 
{
 
  // select all lines from model space
 
  // (without any error checking)
 
  AcDbBlockTable *pTable;
 
  AcDbBlockTableRecord *pModelSpace;
 
  AcDbBlockTableRecordIterator *pIter;
 
  AcDbEntity* pEnt;
 
 
 
  acdbHostApplicationServices()->workingDatabase()->
 
    getBlockTable(pTable, AcDb::kForRead);
 
  pTable->getAt(ACDB_MODEL_SPACE, pModelSpace, AcDb::kForRead);
 
  pTable->close();
 
  pModelSpace->newIterator(pIter);
 
  pModelSpace->close();
 
 
 
  for (; !pIter->done(); pIter->step()) {
 
    pIter->getEntity(pEnt, AcDb::kForRead);
 
    if (pEnt->isKindOf(AcDbLine::desc()))
 
      ids.append(pEnt->objectId());
 
    pEnt->close();
 
  }
 
 
 
  delete pIter;
 
}
 
 
 
void getCircles(AcDbObjectIdArray& ids)
 
{
 
  // select all circles from model space
 
  // (without any error checking)
 
  AcDbBlockTable *pTable;
 
  AcDbBlockTableRecord *pModelSpace;
 
  AcDbBlockTableRecordIterator *pIter;
 
  AcDbEntity* pEnt;
 
 
 
  acdbHostApplicationServices()->workingDatabase()->
 
    getBlockTable(pTable, AcDb::kForRead);
 
  pTable->getAt(ACDB_MODEL_SPACE, pModelSpace, AcDb::kForRead);
 
  pTable->close();
 
  pModelSpace->newIterator(pIter);
 
  pModelSpace->close();
 
 
 
  for (; !pIter->done(); pIter->step()) {
 
    pIter->getEntity(pEnt, AcDb::kForRead);
 
    if (pEnt->isKindOf(AcDbCircle::desc()))
 
      ids.append(pEnt->objectId());
 
    pEnt->close();
 
  }
 
 
 
  delete pIter;
 
}

发表在 ObjectArx | 标签为 , , , , | 留下评论

获取多行文字中的文字内容

CString strMText=_T(“”);
int EnumMText(AcDbMTextFragment * pFragment, void *pData)
{
 strMText+=pFragment->text;
 return 0;
}
//获取多行文字中的文字内容
CString GetMText(AcDbMText* pText)
{
 strMText=_T(“”);
 pText->explodeFragments(EnumMText,pText,NULL);
 return strMText;
}

发表在 ObjectArx | 标签为 , , , | 留下评论

样条曲线转换为多段线

样条曲线拟合

//定义PI
#ifndef PI
#define PI 4*atan(1.0)//提高pi的精度
#endif
bool getSplineSamplePoints(AcDbSpline *&spline, AcGePoint3dArray &pnts)
{
assert(spline != NULL);
AcGePoint3d orgPt;
spline->getStartPoint(orgPt);
pnts.append(orgPt);
double dStartParam=0.0;
spline->getStartParam(dStartParam);
double dEntParam=0.0;
spline->getEndParam(dEntParam);
double dDist=0.0;
spline->getDistAtParam(dEntParam,dDist);
int nNum=(int)dDist/0.005;
if(nNum<25)
{
nNum=25;
}

if(nNum>10000)

{

nNum=10000;

}
for(int i=0;i<nNum;i++)
{
double dTmpParam=0.0;
spline->getParamAtDist(dDist*(i+1)/nNum,dTmpParam);
spline->getPointAtParam(dTmpParam,orgPt);
pnts.append(orgPt);
}
return pnts.logicalLength()>2;
}
AcGePoint2d convert3dPointTo2d(AcGePoint3d pt)
{
AcGePoint2d pm;
pm.set(pt.x,pt.y);
return pm;
}
//获取三个点构成的夹角
double GetIntersectionDngle(AcGePoint2d pt1,AcGePoint2d pt2,AcGePoint2d pt3)
{
AcGeVector2d vt1=pt1-pt2;
AcGeVector2d vt2=pt3-pt2;
return vt1.angleTo(vt2);
}
//获取三个点构成的夹角
double GetIntersectionDngle(AcGePoint3d pt1,AcGePoint3d pt2,AcGePoint3d pt3)
{
return GetIntersectionDngle(convert3dPointTo2d(pt1),convert3dPointTo2d(pt2),convert3dPointTo2d(pt3));
}
//删除构成直线的三个点中间的点
//dMinAngle,构成的夹角最小值,默认为0.5度
void RemovePointBetweenLine(AcGePoint3dArray &pnts,double dMinAngle=PI-0.5*PI/180.0)
{
AcGePoint3dArray rcPts;
if(pnts.logicalLength()<=2)
{
return;
}
rcPts.append(pnts.at(0));
rcPts.append(pnts.at(1));
for(int i=2;i<pnts.logicalLength();i++)
{
AcGePoint3d pt1=rcPts.at(rcPts.logicalLength()-2);
AcGePoint3d pt2=rcPts.at(rcPts.logicalLength()-1);
AcGePoint3d pt3=pnts.at(i);
double dAngle=GetIntersectionDngle(pt1,pt2,pt3);
if(dAngle>=dMinAngle&&dAngle<=PI)
{
rcPts.setAt(rcPts.logicalLength()-1,pt3);
}
else
{
rcPts.append(pt3);
}
}
pnts.setLogicalLength(0);
pnts.append(rcPts);
}
// 功能:将选择集转换为实体ID数组
// 参数: ssName,选择集
// ObjIds,实体ID数组
// 返回:
void SSToIds(AcDbObjectIdArray& ObjIds,ads_name ssName)
{
AcDbObjectId ObjId;
ads_name EntName;
long nLength=0;
acedSSLength(ssName,&nLength);

for(int nLen=0; nLen<nLength; nLen++)
{
acedSSName(ssName,nLen,EntName);
acdbGetObjectId(ObjId,EntName);
ObjIds.append(ObjId);
}
}
// 功能:添加实体到块表记录中
// 参数: pEnt:待添加的实体指针
// btrID,AcDbBlockTableRecord的ID
// 返回: 实体的ObjectID,如果插入失败返回一个空的ObjectId
AcDbObjectId AppendEntity(AcDbEntity* pEnt,const AcDbObjectId btrID)
{
AcDbObjectId resultId;
resultId.setNull();

AcDbBlockTableRecord* pBlkRec = NULL;//打开表
Acad::ErrorStatus es = acdbOpenObject(pBlkRec, btrID, AcDb::kForWrite);
if (es != Acad::eOk)
{
acutPrintf(_T(“\n 打开模型空间失败!%s”),acadErrorStatusText(es));
return resultId;
}

es = pBlkRec->appendAcDbEntity(resultId,pEnt);//添加实体
if (es != Acad::eOk)
{
acutPrintf(_T(“\n 添加对象到模型空间失败!%s”),acadErrorStatusText(es));
pBlkRec->close();
return resultId;
}
es=pBlkRec->close();

return resultId;
}
Acad::ErrorStatus ToPLine(AcDbSpline *spline)
{
AcGePoint3dArray pnts;
bool rc=getSplineSamplePoints(spline,pnts);
if(!rc)
return Acad::eInvalidInput;
RemovePointBetweenLine(pnts);
AcDbPolyline* pLine=new AcDbPolyline(pnts.logicalLength());
for(int i=0;i<pnts.logicalLength();i++)
{
pLine->addVertexAt(i,convert3dPointTo2d(pnts.at(i)));
}
AppendEntity(pLine,spline->blockId());
pLine->close();
return Acad::eOk;
}
Acad::ErrorStatus ToPLine(AcDbObjectId id)
{
AcDbObjectPointer<AcDbSpline> spLine(id,AcDb::kForRead);
if(spLine.openStatus()!=Acad::eOk)
return spLine.openStatus();
return ToPLine(spLine.object());

}
void ToPLine()
{
Acad::ErrorStatus es=eOk;
resbuf* rb = acutBuildList(RTDXF0, _T(“SPLINE”), 0);
ads_name ssName;
acutPrintf(_T(“\n请选择样条曲线:\n”));
int rc=acedSSGet(NULL, NULL,NULL,rb,ssName);
if(rc!=RTNORM)
{
acutRelRb(rb);
return;
}
AcDbObjectIdArray ids;
SSToIds(ids,ssName);
acedSSFree(ssName);
AcDbObjectId id;
for(int i=0;i<ids.logicalLength();i++)
{
id=ids.at(i);
ToPLine(id);
}
}

发表在 ObjectArx | 标签为 , , , | 留下评论

注册扩展属性

Acad::ErrorStatus RegisterApp(AcDbDatabase* pDb, const TCHAR * pAppName)

{

AcDbRegAppTable* pAppTable;

Acad::ErrorStatus es;
// get the RegAppTable

if((es = pDb->getRegAppTable(pAppTable,AcDb::kForWrite)) != Acad::eOk)

return es;
// if RegAppTable has application already – fine

if(pAppTable->has(pAppName))

{

pAppTable->close();

return Acad::eOk;

}
AcDbRegAppTableRecord* pAppTableRecord = new AcDbRegAppTableRecord();

pAppTableRecord->setName(pAppName);
if((es = pAppTable->add(pAppTableRecord)) != Acad::eOk)

{

delete pAppTableRecord;

pAppTable->close();

return es;

}

pAppTableRecord->close();

pAppTable->close();

return es;

}

发表在 ObjectArx | 标签为 , , | 留下评论

ObjectARX所有版本下载地址(新增2014下载地址)

ARX/DBX工程一键创建,ObjectArx二次开发必备工具,一键生成支持AutoCAD2004~AutoCAD2014的ObjectArx/Dbx工程 

转载至:http://www.objectarx.net/forum.php?mod=viewthread&tid=1173

2014(32位和64位版本)
ObjectARX 2014 SDK
ObjectARX 2014 帮助文档

2013
(32位和64位版本)
ObjectARX 2013 SDK
ObjectARX 2013 帮助文档
2012(32位和64位版本)

http://download.autodesk.com/esd/objectarx/2012/ObjectARX_2012_Win_64_and_32Bit.exe
2011(32位和64位版本)
http://download.autodesk.com/esd/objectarx/2011/ObjectARX_2011_Win_64_and_32Bit.exe

2010(32位和64位版本)
http://download.autodesk.com/akdlm/esd/dlm/objectarx/ObjectARX_2010_Win_64_and_32Bit.exe
2009(32位和64位版本)
http://download.autodesk.com/esd/objectarx/2009/ObjectARX_2009_Win_64_and_32Bit.exe
2008
32位版本:
http://download.autodesk.com/esd/objectarx/2008/ObjectARX_2008_32Bit.exe
64位版本:
http://download.autodesk.com/esd/objectarx/2008/ObjectARX_2008_64Bit.exe
2007
-Core
http://download.autodesk.com/esd/objectarx/2007/Arx_Core.exe
-SDK
http://download.autodesk.com/esd/objectarx/2007/Arx_All.exe
2006
-Core
http://download.autodesk.com/WebPub/autocad/oarx2006/Arx_Core.exe
-SDK
http://download.autodesk.com/WebPub/autocad/oarx2006/Arx_All.exe
2005
-Core
http://download.autodesk.com/WebPub/Developer/autocad/Arx_Core2005.exe
-SDK
http://download.autodesk.com/WebPub/Developer/autocad/Arx_All2005.exe
2004
-Core
http://download.autodesk.com/WebPub/autocad/oarx/arx_core.exe
-SDK
http://download.autodesk.com/WebPub/autocad/oarx/arx_sdk.exe
2002
-Core
http://download.autodesk.com/pub/objectarx/objectarx_2002/K030.arx.plus.core.zip
-SDK
http://download.autodesk.com/pub/objectarx/objectarx_2002/K030.arx.plus.all.zip
2000
-Core
http://download.autodesk.com/pub/objectarx/ObjectArxCore.exe
-SDK
http://download.autodesk.com/pub/objectarx/ObjectArxSDK.exe
R14
-SDK
http://download.autodesk.com/Pub/developer/sdk/obarxsdk.exe

发表在 ObjectArx | 标签为 , , | 一条评论