天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 29|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    昨天 11:26
  • 签到天数: 86 天

    [LV.6]常住居民II

    1640

    主题

    207

    回帖

    214748万

    积分

    管理员

    积分
    2147483647
    发表于 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. }
    复制代码

     

     

     

     

    OBJECT ARX 循环创建多线段(提示用户选择线宽,颜色,点)
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-6-2 13:46 , Processed in 0.056627 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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