找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 132|回复: 0

OBJECT ARX 循环创建多线段(提示用户选择线宽,颜色,点)

[复制链接]

1

主题

0

回帖

37

积分

管理员

积分
37
发表于 2024-5-2 22:52:11 | 显示全部楼层 |阅读模式
  1. //创建多段线==================
  2. static ads采用real GetWidth(){
  3. ads采用real width = 0;
  4. if(acedGetReal(采用T("\n输入线宽"),&width) == RTNORM){
  5. return width;
  6. }
  7. else{
  8. return 0;
  9. }
  10. }
  11. static int GetColorIndex(){
  12. int colorIndex = 0;
  13. if(acedSetColorDialog(colorIndex,Adesk::kFalse,256) != IDOK){
  14. return 0;
  15. }
  16. else{
  17. return colorIndex;
  18. }
  19. }
  20. 添加多段线,用户指定点、线宽、颜色
  21. static void TESTaddplcmd(){
  22. int colorIndex = 255;
  23. ads采用real width = 1;
  24. int index = 2;
  25. ads采用point ptStart;
  26. //提示用户输入起始点
  27. if(acedGetPoint(NULL,采用T("\n输入第一点"),ptStart) != RTNORM){
  28. return;
  29. }
  30. ads采用point ptPrevious,ptCurrent;//前一个参考点,当前拾取的点
  31. acdbPointSet(ptStart,ptPrevious);
  32. AcDbObjectId polyId;//多段线的ID
  33. 输入第二点
  34. acedInitGet(NULL,采用T("W C O"));
  35. int rc = acedGetPoint(ptPrevious,采用T("\n输入下一点[宽度(W)颜色(C)]<完成(O)>:"),ptCurrent);
  36. while(rc == RTNORM || rc == RTKWORD){
  37. if(rc == RTKWORD){如果用户输入了关键字
  38. CString kword;
  39. if(acedGetInput(kword.GetBuffer()) != RTNORM)
  40. return;
  41. if(kword.Compare(采用T("W")) == 0){
  42. width = GetWidth();
  43. }
  44. else if (kword.Compare(采用T("C")) == 0){
  45. colorIndex = GetColorIndex();
  46. }
  47. else if(kword.Compare(采用T("O")) == 0){
  48. return;
  49. }
  50. else{
  51. acutPrintf(采用T("\n无效的关键字"));
  52. }
  53. }
  54. 如果用户输入了点
  55. else if(rc == RTNORM){
  56. if(index == 2){
  57. 创建多线段
  58. AcDbPolyline* pPoly = new AcDbPolyline(2);
  59. AcGePoint2d ptGe1,ptGe2;//两个节点
  60. ptGe1[X] = ptPrevious[X];
  61. ptGe1[Y] = ptPrevious[Y];
  62. ptGe2[X] = ptCurrent[X];
  63. ptGe2[Y] = ptCurrent[Y];
  64. pPoly->addVertexAt(0,ptGe1);
  65. pPoly->addVertexAt(1,ptGe2);
  66. 修改多线段的颜色和线宽
  67. pPoly->setConstantWidth(width);
  68. pPoly->setColorIndex(colorIndex);
  69. 添加到模型
  70. polyId = LoadEntity(pPoly);
  71. pPoly->close();
  72. }
  73. else if(index > 2){
  74. 修改多线段
  75. AcDbPolyline* pPoly;
  76. acdbOpenObject(pPoly,polyId,AcDb::kForWrite);
  77. AcGePoint2d ptGe;//增加的节点
  78. ptGe[X] = ptCurrent[X];
  79. ptGe[Y] = ptCurrent[Y];
  80. pPoly->addVertexAt(index - 1,ptGe);
  81. 修改多线段的颜色和线宽
  82. pPoly->setConstantWidth(width);
  83. pPoly->setColorIndex(colorIndex);
  84. //pPoly->setColorIndex(colorIndex);
  85. pPoly->close();
  86. }
  87. index ++;
  88. acdbPointSet(ptCurrent,ptPrevious);
  89. }
  90. acedInitGet(NULL,采用T("W C O"));
  91. rc = acedGetPoint(ptPrevious,采用T("\输入下一点"),ptCurrent);
  92. }
  93. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2025-1-4 13:09 , Processed in 0.106415 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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