Archicad二次开发——元素

1、获取指定元素

Archicad通过guid获取指定元素

获取guid的方法:在样例代码的browser control里可以获得选中构件的guid

获取指定元素的样例:

				API_Element  element;
				GSErrCode    err;

				BNZeroMemory(&element, sizeof(API_Element));
				element.header.guid = GSGuid2APIGuid(GS::Guid("BACF8F36-631C-469C-A298-4DACB418D444"));
				err = ACAPI_Element_Get(&element);
				if (err==NoError)
				{
					MessageBox(ACAPI_GetMainWindow(), APIGuidToString(element.header.guid).ToCStr(), "title", 0);
				}

2、获取指定类型的元素

				//1、获取指定类型的所有元素
				GS::Array<API_Guid> elemList;
				ACAPI_Element_GetElemList(API_WallID, &elemList);
				DBPrintf("number of wall on the active floor: %ld", elemList.GetSize());

3、获取关联的元素,如山墙、多边形节点

				API_Element     element;
				API_ElementMemo memo;
				GSErrCode       err;

				BNZeroMemory(&element, sizeof(API_Element));
				BNZeroMemory(&memo, sizeof(API_ElementMemo));

				element.header.typeID = API_ObjectID;
				element.header.variationID = APIVarId_SymbStair;
				err = ACAPI_Element_GetDefaults(&element, &memo);
				if (err == NoError) {
					/* do what you want */
				}

				ACAPI_DisposeElemMemoHdls(&memo);

4、遍历全部类型的数据

GS::Array<API_Guid> elemList;
				GSErrCode err = ACAPI_Element_GetElemList(API_WallID, &elemList);
				if (err==NoError)
				{
					for (Int32 i = 0; i < elemList.GetSize(); ++i) {
						API_Element element;
						BNZeroMemory(&element, sizeof(API_Element));
						element.header.guid = elemList[i];
						if (ACAPI_Element_Get(&element) == NoError) {
							DBPrintf("墙的variationID: %d\n", element.header.variationID);
						}
					}
				}

5、加上过滤器,然后遍历元素

GS::Array<API_Guid> elemList;
				ACAPI_Element_GetElemList(API_WallID, &elemList, APIFilt_OnActFloor);
				for (GS::Array<API_Guid>::ConstIterator it = elemList.Enumerate(); it != nullptr; ++it) {
					API_Element element;
					BNZeroMemory(&element, sizeof(API_Element));
					element.header.guid = *it;
					if (ACAPI_Element_Get(&element) == NoError) {
						/* do what you want */
						MessageBox(ACAPI_GetMainWindow(), APIGuidToString(element.header.guid).ToCStr(), "title", 0);
					}
				}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值