天气与日历 切换到窄版

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

ObjectARX模仿AutoCAD中多段线命令实现颜色,线型,闭合等

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
[code]static void HHAddPoly(void)
        {
                int nColorIndex = 0; // 颜色索引值
                ads_real width = 0;  // 多段线的线宽
                int nIndex = 2;  // 当前输入点的次数
                ads_point ptStart; // 起点
                ads_point ptPrevious;// 前一个参考点
                ads_point ptCurrent; //当前拾取的点
                AcDbObjectId polyId; //多段线ID
       
                // 提示用户输入起点
                if (RTNORM != acedGetPoint(NULL, _T("\n输入第一点:"), ptStart))
                {
                        return ;
                }
               
                // 输入第二点
                acedInitGet(NULL, _T("W C B F"));
                int rc = acedGetPoint(ptStart,_T("\n输入下一点 [宽度(W)/颜色(C)/闭合(B)]<完成(F)>:"), ptCurrent);
                while (RTNORM == rc || RTKWORD == rc)
                {
                        if (RTKWORD == rc) // 如果用户输入了关键字
                        {
                                ACHAR keyWord[20];// 关键字
                                //获取输入的关键字
                                if (RTNORM != acedGetInput(keyWord))
                                {
                                        return;
                                }

                                if (0 == _tcscmp(keyWord, _T("W")))
                                {
                                        width = CAuxiliary::GetWidth();
                                        AcDbPolyline *pPoly = CAuxiliary::GetPolyLine(polyId);
                                        if (NULL == pPoly)
                                        {
                                                return;
                                        }
                                        pPoly->setConstantWidth(width);
                                        pPoly->close();
                                }
                                else if (0 == _tcscmp(keyWord, _T("C")))
                                {
                                        nColorIndex = CAuxiliary::GetColorIndex();
                                        AcDbPolyline *pPoly = CAuxiliary::GetPolyLine(polyId);
                                        if (NULL == pPoly)
                                        {
                                                return;
                                        }
                                        pPoly->setColorIndex(nColorIndex);
                                        pPoly->close();
                                       
                                }
                                else if (0 == _tcscmp(keyWord, _T("B")))
                                {
                                        if (nIndex < 3)
                                        {
                                                acutPrintf(_T("\n输入点个数不足,不能执行闭合操作"));
                                                return;
                                        }

                                        AcDbPolyline *pPoly = CAuxiliary::GetPolyLine(polyId);
                                        if (NULL == pPoly)
                                        {
                                                return;
                                        }
                                        pPoly->setClosed(Adesk::kTrue);
                                        pPoly->close();
                                        return;
                                }
                                else if (0 == _tcscmp(keyWord, _T("F")))
                                {
                                        return;
                                }
                                else
                                {
                                        acutPrintf(_T("\n无效的关键字."));
                                }
                        }
                        else if (RTNORM == rc)  // 用户输入了点
                        {
                                acutPrintf(_T("\n输入点的坐标是(%.2f, %.2f, %.2f)"), ptCurrent[X], ptCurrent[Y], ptCurrent[Z]);
                               
                                if (2 == nIndex)
                                {
                                        // 创建多段线
                                        polyId = CAuxiliary::CreatePolyline(ptStart, ptCurrent, width, nColorIndex);
                                }
                                else if (nIndex > 2)
                                {
                                        //修改多段线
                                        CAuxiliary::AddPolyline(polyId, ptCurrent,nIndex, width, nColorIndex);
                                }       

                                ++nIndex;
                                acdbPointSet(ptCurrent, ptPrevious);//acdbPointSet宏: ads_point 变量值的复制
                        }

                        // 提示用户输入新的节点
                        acedInitGet(NULL, _T("W C B F"));
                        rc = acedGetPoint(ptPrevious, _T("\n输入下一点 [宽度(W)/颜色(C)/闭合(B)]<完成(F)>:"), ptCurrent);
                 }
        }[/code]

 

 

 

 

ObjectARX模仿AutoCAD中多段线命令实现颜色,线型,闭合等
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:45 , Processed in 0.118561 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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