土木在线论坛 \ 建筑设计 \ CAD下载及教程 \ [原创]希望大家来侃侃

[原创]希望大家来侃侃

发布于:2003-12-31 20:30:31 来自:建筑设计/CAD下载及教程 [复制转发]
坐标展点原代码。请大家提出宝贵意见。便以修改!!

AcGePoint3d d3pt1;//***定位点***//
char zf<80>; //***高程***//
char layer_tc<20>;//***图层***//
double VW; //***文高***//
// This is command 'ZBZD'
void hzzcyfyzbzd()
{
CString m_path;
struct resbuf blc;
FILE *FP;
double bl;//比例
double r;
int newcolor,i,rc;
ads_point pt1;
blc.restype=RTREAL;//控制主单位值中零的显示方式
blc.resval.rreal=0;
acedSetVar("DIMZIN",&blc);
blc.restype=RTSHORT;//控制命令回显
blc.resval.rint=0;
acedSetVar("CMDECHO",&blc);
blc.restype=RTSHORT;//关闭对象捕捉
blc.resval.rint=0;
acedSetVar("OSMODE",&blc);
CFileDialog chfileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"文本文件(*.TXT)|*.TXT|数据文件(*.DAT)|*.DAT|所有文件(*.*)|*.*||");
chfileDlg.m_ofn.lpstrTitle="输入文件";
if(chfileDlg.DoModal()!=IDOK)return;
m_path=chfileDlg.GetPathName();

bl=500.0;
if(acedGetReal("\n绘图比例 1:<500> ",&bl)==RTCAN)return;
for(i=1;i<4;i++){
if(i==1){
strcpy(layer_tc,"高程层");
newcolor=1;
}else if(i==2){
strcpy(layer_tc,"点号层");
newcolor=3;
}else if(i==3){
strcpy(layer_tc,"点位层");
newcolor=7;
}
AcDbLayerTable *pLayerTble;
acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTble, AcDb::kForWrite);
if (!pLayerTble->has(layer_tc)){
AcDbLayerTableRecord *pLayerTblRcd=new AcDbLayerTableRecord;
pLayerTblRcd->setName(layer_tc);
AcCmColor color;
color.setColorIndex(newcolor);
pLayerTblRcd->setColor(color);
pLayerTble->add(pLayerTblRcd);
pLayerTblRcd->close();
pLayerTble->close();
} else {
pLayerTble->close();
}
}
blc.restype=RTSTR;//设置点号层为当前图层
blc.resval.rstring=layer_tc;
acedSetVar("CLAYER",&blc);
FP=fopen(m_path,"r");//以只读形式打开文件
do{ //...读原始数据...//
fscanf(FP,"%d,%lf,%lf,%lf",&i,&pt1 ,&pt1 ,&pt1 );
strcpy(zf,"gc200.dwg");//块名
VW=bl/1000;
//这里我直接调用CAD命令插入块,不使用ARX来插入块。主要是觉得麻烦!
//可以添加使用ARX插入的代码,展点一定更快!
acedCommand(RTSTR,"INSERT",
RTSTR,zf,//块文件
RT3DPOINT,pt1,//插入块的位置
RTREAL,VW,//缩放比例
RTSTR,"",
RTSTR,"",
0);
r=double(i);
acdbRToS(r,2,0,zf);
VW=bl*0.002;
d3pt1<0>=pt1 +bl*0.001;
d3pt1<1>=pt1 -VW/2.0;
strcpy(layer_tc,"点号层");
Com_Text();//展点号
r=pt1 ;
acdbRToS(r,2,2,zf);
strcpy(layer_tc,"高程层");
Com_Text();//展高程
rc=feof(FP);
}while(rc==0);
fclose(FP);//关闭文件
acedCommand(RTSTR,"ZOOM",RTSTR,"E",0);
}
//****************************************************************//
//************************ 写入文字 ************************//
//****************************************************************//
void Com_Text(){
AcDbText *ptext=new AcDbText(d3pt1,zf,0,VW,0);
ptext->setLayer(layer_tc);
AcDbBlockTable *pblocKTable;
acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pblocKTable,AcDb::kForRead);
AcDbBlockTableRecord *pblocKTableRecord;
pblocKTable->getAt(ACDB_MODEL_SPACE,pblocKTableRecord,AcDb::kForWrite);
AcDbObjectId plineObjId;
pblocKTableRecord->appendAcDbEntity(plineObjId,ptext);
pblocKTable->close();
pblocKTableRecord->close();
ptext->close();
}



全部回复(3 )

只看楼主 我来说两句
  • jiangfeng770717
    厉害厉害
    2004-03-01 13:28:01

    回复 举报
    赞同0
  • yfy2003
    yfy2003 板凳
    是CAD二次开发ARX代码。C++
    希望多交流交流!

    <本贴已被 yfy2003 于 2004-1-1 17:12:23 修改过>
    2004-01-01 16:54:01

    回复 举报
    赞同0
加载更多
这个家伙什么也没有留下。。。

CAD下载及教程

返回版块

52.07 万条内容 · 656 人订阅

猜你喜欢

阅读下一篇

[转帖]解决AutoCAD打印时致命错误的方法

在AutoCAD的安装目录下找到AcPltStamp.arx文件,把它改名或删除。这样再进行打印就不会出错了。该方法对于2002版及2004版均有效。

回帖成功

经验值 +10