objectarx的achart*怎么char转换成intchar

标题: 签名: 认真关注一件事很难~所以你不成功!截止抓取时间: 717 | 积分:6188 | 排名: | 原创: 248 | 转载: 87 | 译文: 12 | 评论: 160 | 访问量: 311823
此博客下共有: 345 篇文章.
序号标题序号标题
标题: 签名: 事虽微,不为不成;道虽迩,不行不至截止抓取时间: 841 | 积分:13918 | 排名: | 原创: 383 | 转载: 84 | 译文: 8 | 评论: 819 | 访问量: 614608
此博客下共有: 472 篇文章.
序号标题序号标题
标题: 签名: 踏得网:全球视野的互联网新技术(ex:HTML5)搜索和分享引擎截止抓取时间: 034 | 积分:16563 | 排名: | 原创: 403 | 转载: 56 | 译文: 83 | 评论: 356 | 访问量: 1229297
此博客下共有: 539 篇文章.
序号标题序号标题
标题: 签名: 有困难要上,没有困难创造困难也要上!截止抓取时间: 232 | 积分:11849 | 排名: | 原创: 295 | 转载: 29 | 译文: 0 | 评论: 287 | 访问量: 899493
此博客下共有: 322 篇文章.
序号标题序号标题
标题: 签名: C++, Linux系统与编程, TCP/IP, 数据结构与算法, Hadoop与云计算截止抓取时间: 358 | 积分:9329 | 排名: | 原创: 333 | 转载: 50 | 译文: 2 | 评论: 552 | 访问量: 355266
此博客下共有: 383 篇文章.
序号标题序号标题
标题: 签名: Programming for your glory截止抓取时间: 531 | 积分:8104 | 排名: | 原创: 432 | 转载: 88 | 译文: 1 | 评论: 86 | 访问量: 324452
此博客下共有: 519 篇文章.
序号标题序号标题
标题: 签名: 只有技术才能亲近技术本身截止抓取时间: 740 | 积分:6647 | 排名: | 原创: 141 | 转载: 19 | 译文: 0 | 评论: 352 | 访问量: 344795
此博客下共有: 158 篇文章.
序号标题序号标题
标题: 签名: 知及之,仁不能守之,虽得之,必失之。截止抓取时间: 850 | 积分:11235 | 排名: | 原创: 510 | 转载: 0 | 译文: 0 | 评论: 81 | 访问量: 409257
此博客下共有: 509 篇文章.
序号标题序号标题
标题: 签名: 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino截止抓取时间: 116 | 积分:5553 | 排名: | 原创: 227 | 转载: 222 | 译文: 99 | 评论: 56 | 访问量: 211262
此博客下共有: 547 篇文章.
序号标题序号标题
标题: 签名: 欢迎访问我的个人官网:截止抓取时间: 357 | 积分:15449 | 排名: | 原创: 622 | 转载: 14 | 译文: 0 | 评论: 2420 | 访问量: 604548
此博客下共有: 657 篇文章.
序号标题序号标题
标题: 签名: 雕像重生截止抓取时间: 625 | 积分:5576 | 排名: | 原创: 334 | 转载: 3 | 译文: 56 | 评论: 37 | 访问量: 177617
此博客下共有: 405 篇文章.
序号标题序号标题
标题: 签名: Die Luft der Freiheit weht 自由之风永远吹拂.截止抓取时间: 821 | 积分:5804 | 排名: | 原创: 435 | 转载: 27 | 译文: 27 | 评论: 30 | 访问量: 128715
此博客下共有: 492 篇文章.
序号标题序号标题ObjectArx2010图层操作总结
1. 新建一个图层
CLayerOperator定义了NewLayer函数,用于完成图层的新建操作,NewLayer的完整代码如下:
// 新建一个图层
void CLayerOperator::NewLayer(ACHAR* layerName)
&& &//获得当前图形的层表
&& &AcDbLayerTable *pLayerT
&& &acdbHostApplicationServices()
&& &&& &-&workingDatabase()
&& &&& &-&getLayerTable(pLayerTbl,AcDb::kForWrite);
&& &//是否已经包含指定的层表记录
&& &if(pLayerTbl-&has(layerName)){
&& &&& &pLayerTbl-&close();
&& &&& &acedPrompt(_T(&对应名称的图层已经存在!&));
&& &//创建层表记录
&& &AcDbLayerTableRecord *pLayerTblR
&& &pLayerTblRcd=new AcDbLayerTableRecord();
&& &pLayerTblRcd-&setName(layerName);
&& &//将新建的层表记录添加到层表中
&& &AcDbObjectId layerTblRcdId;
&& &pLayerTbl-&add(layerTblRcdId,pLayerTblRcd);
&& &//设置图形的当前图层
&& &acdbHostApplicationServices()
&& &&& &-&workingDatabase()
&& &&& &-&setClayer(layerTblRcdId);
&& &pLayerTblRcd-&close();
&& &pLayerTbl-&close();
NewLayer的具体实现注释已经非常详尽,首先获得当前图形的层表,然后判断层表中是否已经存在指定名称的图层,如果是,则直接返回,否则创建层表记录并将新建的层表记录添加到层表中,最后通过AcDbDatabase类的setClayer函数将新建的图层设置成当前图层。
2.使用图形对话框设置指定图层的颜色
// 使用图形对话框设置指定图层的颜色
void CLayerOperator::SetLayerColor(ACHAR* layerName)
&& &//获得当前图形的层表
&& &AcDbLayerTable *pLayerT
&& &acdbHostApplicationServices()
&& &&& &-&workingDatabase()
&& &&& &-&getLayerTable(pLayerTbl,AcDb::kForRead);
&& &//判断是否包含指定名称的层表记录
&& &if(!pLayerTbl-&has(layerName)){
&& &&& &pLayerTbl-&close();
&& &//获得指定层表记录的指针
&& &AcDbLayerTableRecord *pLayerTblR
&& &pLayerTbl-&getAt(layerName,pLayerTblRcd,AcDb::kForWrite);
&& &//弹出&颜色&对话框
&& &AcCmColor oldColor=pLayerTblRcd-&color();
&& &//图层修改前的颜色
&& &int nCurColor=oldColor.colorIndex();
&& &//用户选择的颜色
&& &int nNewColor=oldColor.colorIndex();
&& &if(acedSetColorDialog(nNewColor,Adesk::kFalse,nCurColor)){
&& &&& &AcCmC
&& &&& &color.setColorIndex(nNewColor);
&& &&& &pLayerTblRcd-&setColor(color);
&& &pLayerTblRcd-&close();
&& &pLayerTbl-&close();
3.删除一个图层
// 删除一个图层
void CLayerOperator::DelLayer(ACHAR* layerName)
&& &//获得当前图形的层表
&& &AcDbLayerTable *pLayerT
&& &acdbHostApplicationServices()
&& &&& &-&workingDatabase()
&& &&& &-&getLayerTable(pLayerTbl,AcDb::kForRead);
&& &//判断是否包含指定名称的层表记录
&& &if(!pLayerTbl-&has(layerName)){
&& &&& &pLayerTbl-&close();
&& &//获得指定层表记录的指针
&& &AcDbLayerTableRecord *pLayerTblR
&& &pLayerTbl-&getAt(layerName,pLayerTblRcd,AcDb::kForWrite);
&& &//为其设置&删除&标记
&& &pLayerTblRcd-&erase();
&& &pLayerTblRcd-&close();
&& &pLayerTbl-&close();
欢迎与本站!
QQ交流群1:
QQ交流群2:ObjectArx2010图层操作总结
4.导出图层到文件中
// 导出图层到文件中
void CLayerOperator::ExportLayers(ACHAR* fileName)
&& &//创建所要导出的文件
&& &CStdioFile f2;
&& &CFileE
&& &if(!f2.Open(fileName,CFile::modeCreate|CFile::modeWrite,&err)){
&& &&& &acutPrintf(_T(&
创建导出文件失败!&));
&& &//获得层表指针
&& &AcDbLayerTable *pLayerT
&& &AcDbLayerTableRecord *pLayerTblR
&& &acdbHostApplicationServices()
&& &&& &-&workingDatabase()
&& &&& &-&getLayerTable(pLayerTbl,AcDb::kForRead);
&& &//使用遍历器访问每一条层表记录
&& &AcDbLayerTableIterator *pI
&& &pLayerTbl-&newIterator(pItr);
&& &f2.WriteString(LayerInfo::FormatTitle());
&& &f2.WriteString(_T(&
&& &for(pItr-&start();!pItr-&done();pItr-&step()){
&& &&& &pItr-&getRecord(pLayerTblRcd,AcDb::kForRead);
&& &&& &//图层信息
&& &&& &LayerInfo layerI&& &
&& &&& &//1.图层的名称
&& &&& &ACHAR *layerN
&& &&& &pLayerTblRcd-&getName(layerName);&& &//使用后需要手动free
&& &&& &layerInfo.layerName=layerN&& &&& &
&& &&& &free(layerName);
&& &&& &//2.图层的颜色
&& &&& &AcCmColor color=pLayerTblRcd-&color();
&& &&& &layerInfo.colorIndex=color.colorIndex();
&& &&& &//3.图层的线型
&& &&& &AcDbLinetypeTableRecord *pLineTypeTblR
&& &&& &acdbOpenObject(pLineTypeTblRcd,
&& &&& &&& &pLayerTblRcd-&linetypeObjectId(),
&& &&& &&& &AcDb::kForRead);
&& &&& &ACHAR* lineTypeN
&& &&& &pLineTypeTblRcd-&getName(lineTypeName);&& &//使用后需要手动free
&& &&& &pLineTypeTblRcd-&close();
&& &&& &layerInfo.typeName=lineTypeN
&& &&& &free(lineTypeName);&& &&& &&& &
&& &&& &//4.图层的线宽
&& &&& &AcDb::LineWeight lineWeight=pLayerTblRcd-&lineWeight();
&& &&& &layerInfo.weight=lineW
&& &&& &//将图层特性写入到文件中
&& &&& &f2.WriteString(layerInfo.ToString());
&& &&& &f2.WriteString(_T(&
&& &&& &pLayerTblRcd-&close();
&& &delete pI
&& &pLayerTbl-&close();
5. 从文件导入图层到模型空间
// 从文件导入图层
void CLayerOperator::ImportLayers(ACHAR* fileName)
&& &//打开所要导入的文本文件
&& &CStdioF
&& &CFileE
&& &if(!f.Open(fileName,CFile::modeRead,&err)){
&& &&& &acutPrintf(_T(&
打开导入文件失败!&));
&& &//读取文件中的每一行数据
&& &CString strLineT
&& &//读取标题行
&& &if(!f.ReadString(strLineText))
&& &while(f.ReadString(strLineText)){
&& &&& &//跳过空行
&& &&& &if(strLineText.IsEmpty())
&& &&& &&& &
&& &&& &LayerInfo layInfo=LayerInfo::LoadByStr(strLineText);
&& &&& &//加载图层到图形数据库
&& &&& &LoadLayer(layInfo);&& &&& &
依据文件信息创建图层时,很可能出现指定的现在没有载入的情况,关于ObjectArx导入线型,网上搜集了很多资料,总结了以下两种方法。
a.使用命令的方式导入线型,具体代码如下:
// 采用命令方式加载一种新的线型
bool CLayerOperator::_CMDLoadLineType(ACHAR* linetype){
&& &AcDbLinetypeTable *pLinetypeT
&& &bool flag1=
&& &acdbHostApplicationServices()
&& &&& &-&workingDatabase()
&& &&& &-&getSymbolTable(pLinetypeTbl, AcDb::kForRead);
&& &if(!pLinetypeTbl-&has(linetype))
&& &&& &flag1=
&& &pLinetypeTbl-&close();
&& &if(!flag1){
&& &&& &if(acedCommand(RTSTR,
&& &&& &&& &_T(&LINETYPE&),
&& &&& &&& &RTSTR,
&& &&& &&& &_T(&L&),
&& &&& &&& &RTSTR,
&& &&& &&& &linetype,
&& &&& &&& &RTSTR,
&& &&& &&& &_T(&&),
&& &&& &&& &RTSTR,
&& &&& &&& &_T(&&),
&& &&& &&& &0)!=RTNORM)
&& &&& &&& &acutPrintf(_T(&
调入线型%s时出现错误!&),linetype);
b.直接使用ObjectArx2010提供的API函数
//加载线型
//数入参数:AcDbDatabase *pDb, 数据库
// const CString linetype 线型名称
AcDbObjectId CLayerOperator::LoadLineType(const ACHAR* linetype,
&& &&& &const ACHAR* fileName,
&& &&& &AcDbDatabase* pDb)
&& &AcDbObjectId lineTypeId=GetLineId(linetype,pDb);
&& &//对应名称的线型已经存在
&& &if(lineTypeId!=0)
&& &&& &return lineTypeId;
&& &//从文件中加载线型
&& &Acad::ErrorStatus es=pDb-&loadLineTypeFile(linetype,fileName);
&& &//如果加载成功
&& &if(es==Acad::eOk){
&& &&& &lineTypeId=GetLineId(linetype,pDb);
&& &}else{//如果加载失败,返回默认的ID
&& &&& &lineTypeId=GetLineId(_T(&Continous&),pDb);&& &&& &
&& &return lineTypeId;
//取得线型ID
//输入参数:AcDbDatabase* pDb, 数据库
// const ACHAR *LineName 线型名称 
AcDbObjectId CLayerOperator::GetLineId(const ACHAR *LineName,
&& &&& &AcDbDatabase* pDb)
&& &AcDbLinetypeTable* pTable=NULL;
&& &AcDbObjectId id=AcDbObjectId::kN
&& &pDb-&getLinetypeTable(pTable,AcDb::kForRead);
&& &if(pTable){
&& &&& &Acad::ErrorStatus Error=pTable-&getAt(LineName,id);
&& &&& &pTable-&close();
读者可以根据实际情况选用,笔者建议在ObjectArx2010开发过程中尽量使用第二种方案。
欢迎与本站!
QQ交流群1:
QQ交流群2:> 学习ObjectArx编写时候遇到的各种有关问题汇总
学习ObjectArx编写时候遇到的各种有关问题汇总
发布时间: & &
浏览:9 & &
回复:0 & &
悬赏:0.0希赛币
学习ObjectArx编写时候遇到的各种问题汇总
学习objectarx遇到的种种问题1.按照2007帮助中的每一步进行之后,在编译的时候出现acutPrintf (_T("\nHello World!"));出现这样的错误: '_T': identifier not found在此页得到回答 tid=2168&extra=page%3D6加这个头文件“TCHAR.h”#include "TCHAR.h"2. rxapi.lib(libinit.obj) : warning LNK4099: PDB 'rxapi.pdb' was not found with 'E:\ObjectARX2007\lib\rxapi.lib' or at 'g:\learnarx\hello\qj\debug\rxapi.pdb'; linking object as if no debug infoqj.exp : warning LNK4070: /OUT:qj.dll directive in .EXP differs from output filename 'G:\learnarx\hello\qj\Debug\qj.arx'; ignoring directive查到此页和此页 boardID=14&ID=57411&page=1说,按道理就是这样的,没有问题3. 现在在加文字 的时候,编译出现了这个错误错误 1 error C2664: 'AcDbText::AcDbText(const AcGePoint3d &,const ACHAR *,AcDbObjectId,double,double)' : cannot convert parameter 2 from 'const char *' to 'const ACHAR *' e:\c\objectarx\temp\temp\qjcreateent.cpp 87 后来查相关的objectARX的帮助,发现是这样的问题AcDbText(const AcGePoint3d& position,const ACHAR* text,AcDbObjectId style = AcDbObjectId::kNull,double height = 0,double rotation = 0);而张帆书上的表达是 char* text所以我修改了一下,不知道有没有用没有用,结果要把字符串改成 (_T(“ddd”)); 才行4. 错误错误 1 fatal error LNK1104: 无法打开文件“rxapi.lib” temp 发现出现了这个错误那就是lib没有引入了,要修改linkerrxapi.lib acdb17.lib acge17.lib acad.lib acedapi.lib& 根据帮助文档的说法,要假如这几个lib5. 错误继续运行,发现有如下问题错误 1 error C2653: 'CCreateEnt' : is not a class or namespace name e:\c\objectarx\temp\temp\acrxentrypoint.cpp 69 错误 2 error C3861: 'CreateLine': identifier not found e:\c\objectarx\temp\temp\acrxentrypoint.cpp 69 错误 3 error C2653: 'CCreateEnt' : is not a class or namespace name e:\c\objectarx\temp\temp\qjcreateent.cpp 12 这个说明刚才的打错了—qjCreateent而非 CcreateEnt(这个是张帆的例题的)6. 错误可以看到出现如下的错误错误 1 fatal error C1083: Cannot open include file: 'arxHeaders.h': No such file or directory e:\c\objectarx\temp\temp\stdafx.h 95 那是因为没有加入inc路径可以右键点击项目后,选到这个inc的选项后加入7. 今天遇到的新的错误是错误 1 error C2065: 'helloWorld' : undeclared identifier g:\work new pc\编程\c++\arx2011\arx2011\arx2011\helloworld.cpp 19 错误 2 error C2365: 'helloWorld' : previous definition was 'formerly unknown identifier' g:\work new pc\编程\c++\arx2011\arx2011\arx2011\helloworld.cpp 34 错误 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int g:\work new pc\编程\c++\arx2011\arx2011\arx2011\helloworld.cpp 41 唉,总是好多错误前两个错误是发现,忘记写这个代码了void helloWorld();然后,又出现了这个错误错误 1 error C2664: 'AcEdCommandStack::addCommand' : cannot convert parameter 5 from 'void' to 'AcRxFunctionPtr' g:\work new pc\编程\c++\arx2011\arx2011\arx2011\helloworld.cpp 20 检查了一下,发现 // register a command with the AutoCAD command mechanism acedRegCmds-&addCommand(_T("HELLOWORLD_COMMANDS"),
_T("Hello"),
_T("Bonjour"),
ACRX_CMD_TRANSPARENT,
helloWorld());这个最后一个的括号,要去掉,太多错误了,郁闷ap apploadacrxGetApiVersion not found in R:\arx2011.arxMake sure the app links with rxapi.lib and export the symbol.AcRxDynamicLinker failed to load 'R:\arx2011.arx'D:\Program Files\AutoCAD 2007\acad.exeUnable to load arx2011.arx file.在CAD中加载后,出现这个问题,是没有写DEF吧所以,最后的代码,就是这样了  #include "stdafx.h"
#include &aced.h&
#include &rxregsvc.h&
#include &TCHAR.h&
void initApp();
void unloadApp();
void helloWorld();
void initApp()
// register a command with the AutoCAD command mechanism
acedRegCmds-&addCommand(_T("HELLOWORLD_COMMANDS"),
_T("Hello"),
_T("Bonjour"),
ACRX_CMD_TRANSPARENT,
helloWorld);
void unloadApp()
acedRegCmds-&removeGroup(_T("HELLOWORLD_COMMANDS"));
void helloWorld()
acutPrintf(_T("\nHello World!"));
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{ switch (msg)
case AcRx::kInitAppMsg:
acrxDynamicLinker-&unlockApplication(pkt);
acrxRegisterAppMDIAware(pkt);
initApp();
case AcRx::kUnloadAppMsg:
unloadApp();
return AcRx::kRetOK;
def文件的就是这样  EXPORTS
acrxEntryPoint PRIVATE
acrxGetApiVersion PRIVATE
今天把这个项目就移到VS2010和CAD2012在X64下的平台会遇到一些问题需要做这三个方面的改进1. inc目录E:\ObjectARX 2012\inc-x64;E:\ObjectARX 2012\%(AdditionalIncludeDirectories)2.linkE:\ObjectARX 2012\lib-x64;%(AdditionalLibraryDirectories)3. link的输入rxapi.acdb18.acge18.acad.%(AdditionalDependencies)4. 然后在右上角的配置管理器中找到x64,加入---------------------------------------------------刚刚用VS2010及WIZARD来建立arx的方法(1)用WIZARD建立,其中我加入了MFC支持,也不知道对不对而后,我就ADD COMMAND,改成my1那么,就去到static void qjchArxLinemy1(void) {
acutPrintf(_T("\nHello World!"));
// Add your code for command qjchArxLine.my1 here }这里加上这句话,然后就可以编译了,但是编译了不能通过,于是,就按照上面64位的操作弄了一遍,不过在编译过程中,经常出现LINK : fatal error LNK1000: Internal error during IncrBuildImage这个错误于是google里面的方法2 第二种:修改链接选项,方法:项目-&属性-&链接器-&常规&& 下面的“启用增量链接”,将“是(/INCREMENTAL)”改为“否(/INCREMENTAL:NO)”,然后确定就可以了。是有效的,很好,然后ARX就可以加载了晚上,又把函数库写大了许多又遇到了一个问题AfxMessageBox("半径过小!");error C2665: “AfxMessageBox”:& 重载中没有一个可以转换所有参数类型查找,得到----------4&&&& if(AfxMessageBox("是否真的要退出当前程序?",MB_YESNO)==IDYES)&& 5&&&& AfxGetMainWnd()-&SendMessage(WM_CLOSE);&& 6&&& }办法1: 将第4行改为:if(AfxMessageBox(_T("是否真的要退出当前程序?"),MB_YESNO)==IDYES)办法2:选择“项目”菜单-&项目属性-&配置属性-&常规-&字符集,改为“未设置”即可。--------- AfxMessageBox(_T("半径过小!")); 11. 好不容易在2008里面把许多程序调好了,结果放到2010里面来,全部一片红第一个错误using namespace Susing namespace System::T//编译中出现.\A.cpp(6) : error C2871: “System”: 具有该名称的命名空间不存在.\A.cpp(7) : error C2653: “System”: 不是类或命名空间名称.\A.cpp(7) : error C2871: “Threading”: 具有该名称的命名空间不存在主要原因是 程序是托管代码,在项目设置中 选择公共语言运行库支持(/clr)项 ,就好了!12错误 1 error D8016: “/clr”和“/Gm”命令行选项不兼容 F:\work new NOTE\c++\0 已经成功的ARX\Delaunay的绘制\arx2011\arx2011\cl arx2011错误 1 error D8016: “/clr”和“/RTC1”命令行选项不兼容 F:\work new NOTE\c++\0 已经成功的ARX\Delaunay的绘制\arx2011\arx2011\cl arx2011于是,在属性C++中的代码生成,找到 基本运行时检查,修改为 默认值困惑了几天的问题错误 3 error C2143: 语法错误 : 缺少“;”(在“&class-head&”的前面) f:\work new note\c++\0 已经成功的arx\arx2008选点画线\test2008\test2008\Qconvex.h 24 Test2008错误 4 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int f:\work new note\c++\0 已经成功的arx\arx2008选点画线\test2008\test2008\Qconvex.h 24 Test2008这个在C++里面一点问题都没有的,导入到arx的编程里面就整天出现这个代码原因应该是 /CLR这个公共语言库的支持问题后来,发现static vector&Point& convex_hull(vector&Point& P);修改为static std::vector&Point& convex_hull(std::vector&Point& P);就可以了,可能是托管代码与否的关系,真郁闷啊然后ref class Qconvex修改为class Qconvex
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 char转换成int 的文章

 

随机推荐