明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7033|回复: 12

一起学ObjectARX[ARX读取数据展Cass一般高程点]

[复制链接]
发表于 2014-1-3 17:07:40 | 显示全部楼层 |阅读模式
  1. struct resbuf oSysRb, iSysRb;
  2. ads_real blc, blc1;
  3. acedGetVar("USERR1", &oSysRb);
  4. iSysRb.restype = RTREAL;
  5. iSysRb.resval.rreal = 500;
  6. blc = oSysRb.resval.rreal;
  7. if (blc == 0)
  8. {
  9.     if (acedGetReal("\n请输入比例尺<1:500>", &blc1) != RTNORM)
  10.     {
  11.         iSysRb.resval.rreal = 500;
  12.         acedSetVar("USERR1", &iSysRb);
  13.     }
  14.     acedSetVar("USERR1", &iSysRb);
  15.     blc = iSysRb.resval.rreal;
  16. }

  17. AcDbBlockTable *pBlkTbl;
  18. acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForWrite);
  19. CString blkName;
  20. blkName.Format("%s", "GC200");
  21. if (!pBlkTbl->has(blkName))
  22. {
  23.     acutPrintf("\n当前图形中未包含GC200的块定义!");
  24.     pBlkTbl->close();
  25.     return;
  26. }

  27. double xyzScale = blc * 0.001;
  28. double textH = blc * 0.002;  // 设置文字高度
  29. CString strH;
  30. strH.Format("%.3lf", textH);

  31. char strTag[100];
  32. CString str("height");
  33. strncpy(strTag,(LPCTSTR)str,sizeof(strTag));

  34. int rc, i;
  35. ads_point pt1;
  36. FILE *FP;
  37. char height[80];
  38. double r;

  39. TCHAR *fName;
  40. struct resbuf *rb;
  41. rb = acutNewRb(RTSTR);
  42. int  stat = acedGetFileD("选择txt文件", NULL, "txt;dat",  0, rb);
  43. if ((stat != RTNORM) || (rb == NULL))
  44. {
  45.     acutRelRb(rb);
  46.     return;
  47. }
  48. const size_t nSize = _tcslen(rb->resval.rstring) + 1;
  49. fName =  (TCHAR*)acad_malloc(nSize *  sizeof(TCHAR));
  50. strcpy(fName, rb->resval.rstring);
  51. acutRelRb(rb);

  52. CString filename;
  53. filename.Format("%s", fName);

  54. FP = fopen(filename, "r");    //以只读形式打开文件
  55. do
  56. {
  57.     fscanf(FP, "%d, %lf, %lf, %lf", &i, &pt1[X], &pt1[Y], &pt1[Z]);

  58.     AcGePoint3d blkbasePt (pt1[X], pt1[Y], pt1[Z]);
  59.     AcGePoint3d textPt (pt1[X] + 0.0012 * blc, pt1[Y] - 0.001 * blc, 0.0);
  60.     AcGePoint3d AlimPt (pt1[X] + 0.0012 * blc, pt1[Y], 0.0);
  61.     r = pt1[Z];
  62.     acdbRToS(r, 2, 2, height);

  63.     AcDbObjectId blkDefId;
  64.     pBlkTbl->getAt(blkName, blkDefId);
  65.     AcDbBlockReference *pBlkRef = new AcDbBlockReference(blkbasePt, blkDefId);
  66.     AcDbBlockTableRecord *pBlkTblRcd;
  67.     pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForWrite);
  68.     pBlkTbl->close();

  69.     // 块比例系数
  70.     pBlkRef->setScaleFactors(xyzScale);
  71.     // 扩展数据
  72.     struct resbuf *pRb;
  73.     CString appName = "SOUTH";
  74.     CString typeName = "202101";
  75.     pRb = acutBuildList(AcDb::kDxfRegAppName, appName, AcDb::kDxfXdAsciiString, typeName, RTNONE);
  76.     pBlkRef->setXData(pRb);
  77.     acutRelRb(pRb);

  78.     AcDbObjectId entId;
  79.     pBlkTblRcd->appendAcDbEntity(entId, pBlkRef);
  80.     // 插入属性
  81.     AcDbEntity *pEnt;
  82.     acdbOpenObject(pEnt, entId, AcDb::kForWrite);
  83.     AcDbBlockTableRecord *pBlkDefRcd;
  84.     acdbOpenObject(pBlkDefRcd, blkDefId, AcDb::kForRead);        
  85.     AcDbBlockTableRecordIterator *pItr;
  86.     pBlkDefRcd->newIterator(pItr);
  87.     for (pItr->start(); !pItr->done(); pItr->step())
  88.     {
  89.         pItr->getEntity(pEnt, AcDb::kForRead);
  90.         AcDbAttributeDefinition *pAttDef = new AcDbAttributeDefinition;
  91.         pAttDef = AcDbAttributeDefinition::cast(pEnt);
  92.         AcDbAttribute *pAttr = new AcDbAttribute;
  93.         pAttr->setPropertiesFrom(pAttDef);           
  94.         pAttr->setHorizontalMode(AcDb::kTextLeft);   // 左对齐
  95.         pAttr->setVerticalMode(AcDb::kTextVertMid);  // 左中
  96.         pAttr->setPosition(textPt);       // 文本的位置点
  97.         pAttr->setAlignmentPoint(AlimPt); // 对齐点
  98.         pAttr->setWidthFactor(0.8);       // 宽度比例
  99.         pAttr->setHeight(textH);          // 高度
  100.         pAttr->setTag(strTag);            // 属性标签
  101.         pAttr->setTextString(height);     // 属性值
  102.         // 扩展数据
  103.         struct resbuf *pRb;
  104.         CString appName = "SOUTH";
  105.         CString typeName = "202111";
  106.         pRb = acutBuildList(AcDb::kDxfRegAppName, appName, AcDb::kDxfXdAsciiString, typeName, RTNONE);
  107.         pAttr->setXData(pRb);
  108.         acutRelRb(pRb);
  109.         // 追加属性
  110.         pBlkRef->appendAttribute(pAttr);
  111.         pAttr->close();
  112.     }
  113.     pBlkRef->setLayer("GCD");
  114.     delete pItr;
  115.     pBlkDefRcd->close();
  116.     pEnt->close();
  117.     pBlkRef->close();
  118.     pBlkTblRcd->close();

  119.     rc = feof(FP);
  120. }
  121. while (rc == 0);
  122. fclose(FP);  //关闭文件
  123. acedCommand(RTSTR, "ZOOM", RTSTR, "E", 0);
复制代码
测试文件



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +3 金钱 +30 收起 理由
yfy2003 + 3 + 30 源代码!赞一个!

查看全部评分

发表于 2014-5-15 06:57:27 | 显示全部楼层
本帖最后由 zjsmlzp 于 2014-5-15 07:02 编辑

CAD2005可以加载试用能展高程点(不能自动建GCD图层),但需要名为“GC200”的图块支持(在CASS里找到再往CAD2005里插入一下),CAD2007里不能加载。
发表于 2014-5-15 09:45:56 | 显示全部楼层
老大,如何根据图面三角网查询任意点坐标高程,怎么样将三维多段线生成点表的啊?
发表于 2014-5-15 09:50:37 | 显示全部楼层
根据图面高程内插的不足之处,黄色点为错误的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-8-20 21:26:16 | 显示全部楼层
路过学习!支持楼主!
发表于 2014-9-10 22:38:04 | 显示全部楼层
看来简单的东西 还是lsp来的方便啊
 楼主| 发表于 2014-9-10 22:43:08 | 显示全部楼层
萝卜各有所爱,趁不老,学多点不怕
发表于 2014-11-11 23:42:38 | 显示全部楼层
请教:在vb中如实现已有块添加属性?
我参照帮助文档创建属性块的方法
1.定义块
2.给块定义属性
3.插入这个带属性的块
始终做不出cass这种格式(插入后是属性块且能在对象特征管理里能看到属性,但是双击却提示:不是属性块)
求解惑!
发表于 2014-11-12 09:18:45 | 显示全部楼层
本帖最后由 wmz 于 2014-11-12 09:20 编辑
yuanziyou 发表于 2014-11-11 23:42
请教:在vb中如实现已有块添加属性?
我参照帮助文档创建属性块的方法
1.定义块

    这个已经有人用LISP解决了,我就是照此写了一个与南方CASS完全一样的展绘地形点的。而且运行速度超快,可与南方的PK!
发表于 2014-11-12 11:18:45 | 显示全部楼层
wmz 发表于 2014-11-12 09:18
这个已经有人用LISP解决了,我就是照此写了一个与南方CASS完全一样的展绘地形点的。而且运行速度超快 ...

lisp的方法我已经会了,用vb是因为希望和excel协作,且方便多文档处理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 07:35 , Processed in 0.208192 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表