[请问]如何遍历一条多义线的顶点并将它加到一个resbuf中?
[请问]如何遍历一条多义线的顶点并将它加到一个resbuf中?我想让用户指定一条多义线,并将它作为acedSSGet("F")需要的内容。应该如何把顶点内容加到resbuf中呢?
谢谢!!
应该和
这点里面讲的涵数一样的意思,. 但是我还不会,呵呵,会的朋友请贴个代码参考一下吧
sample下关于扩展数据中有关于resbuf指针的详细用法,贴一下罢
addXdata()
{
AcDbObject* pObj = selectObject(AcDb::kForRead);
if (!pObj) {
acutPrintf("Error selecting object\n");
return;
}
// Get the application name and string to be added to
// xdata.
//
char appName, resString;
appName = resString = '\0';
acedGetString(NULL, "Enter application name: ",
appName);
acedGetString(NULL, "Enter string to be added: ",
resString);
structresbuf*pRb, *pTemp;
pRb = pObj->xData(appName);
if (pRb != NULL) {
// If xdata is present, then walk to the
// end of the list.
//
for (pTemp = pRb; pTemp->rbnext != NULL;
pTemp = pTemp->rbnext)
{ ; }
} else {
// If xdata is not present, register the application
// and add appName to the first resbuf in the list.
// Notice that there is no -3 group as there is in
// AutoLISP. This is ONLY the xdata so
// the -3 xdata-start marker isn't needed.
//
acdbRegApp(appName);
pRb = acutNewRb(AcDb::kDxfRegAppName);
pTemp = pRb;
pTemp->resval.rstring
= (char*) malloc(strlen(appName) + 1);
strcpy(pTemp->resval.rstring, appName);
}
// Add user-specified string to the xdata.
//
pTemp->rbnext = acutNewRb(AcDb::kDxfXdAsciiString);
pTemp = pTemp->rbnext;
pTemp->resval.rstring
= (char*) malloc(strlen(resString) + 1);
strcpy(pTemp->resval.rstring, resString);
// The following code shows the use of upgradeOpen()
// to change the entity from read to write.
//
pObj->upgradeOpen();
pObj->setXData(pRb);
pObj->close();
acutRelRb(pRb);
}
当数据个数不确定时,用上面的方法,当数据个数确定时,用acutBuildList更方便
谢谢!问题解决了!
当数据个数不确定时,用acutBuildList也很方便
struct resbuf *pointlist;
ads_point pt;
for(int i=1; i
pt=XXX;
pointlist= acutBuildList(RTRESBUF, pointlist, RTPOINT, pt, 0);
}
哦,还能这样用,那用acutBuildList确实方便多了,
好像会有异常
页:
[1]