ObjectArx創建指定塊

ObjectArx創建自定義塊

一. 目的
? ? ??仿照AutoCad的Block命令,實現簡版創建塊功能!

二.? 開發環境
Win7操作系統,AutoCad2012, VS2008, ObjectArx_SDK_2012

三. 相關函數簡介
1)?int?acedSSGet (const ACHAR *str, const void *pt1,const void *pt2, const struct resbuf *filter,ads_name ss);??

選擇集,個人理解:就是讓你一次可以選擇多個實體,與之相似的acedEntSel()一次只能選擇一個實體

2) int acedSSName (const ads_name ss, AdInt32 i, ads_name entres)

既然選擇了多個實體,我怎么得到其中的每一個實體呢?次函數即可讓你得到選擇實體中的任一個,參數二相當于索引,參數三就是還回的實體名

3)Acad::ErrorStatus acdbGetObjectId(AcDbObjectId& objId,const ads_name objName);

通過實體名獲取實體ID,與之相同的另外幾個函數(指針,句柄,ads_name之間的轉換)
acdbopenAcDbEntity,objectid,getAcDbObject,acdbGetObjectid,acdbGetAdsName等

四.代碼實現流程
1) 首先我們得獲取實體,保存這些實體的ID,實現代碼:

void MyBlock::GetPickEntity(AcDbObjectIdArray &idObjectArray)
{
?ads_name adsName;
?AdInt32 ssLen;
?acedSSGet(NULL, NULL, NULL, NULL, adsName);
?acedSSLength(adsName, &ssLen);
?idObjectArray.removeAll();
?for (INT32 i = 0; i < ssLen; i++)
?{
? ads_name entityName;
? acedSSName(adsName, i, entityName);
? AcDbObjectId entityID;
? acdbGetObjectId(entityID, entityName);
? idObjectArray.append(entityID);?
?}
?acedSSFree(adsName);
}

2) 從當前塊表中查看是否已存在此塊名記錄,沒有則創建新的塊表記錄,將選擇的實體Clone一份,插入到新的
塊表記錄中,切記,關閉所有的數據庫對象,實現代碼(代碼有點渣):
Acad::ErrorStatus MyBlock::CreateBlock(const CString &strBlockName, const AcDbObjectIdArray &idObjectArray)
{
?AcDbBlockTable *pBlockTable = NULL;
?Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead);
?if (Acad::eOk != es)
?{
? return es;
?}
?if (Adesk::kTrue == pBlockTable->has(strBlockName))
?{
? pBlockTable->close();
? return es;
?}
?AcDbBlockTableRecord *pBlockTableRcd = new AcDbBlockTableRecord();
?es = pBlockTableRcd->setName(strBlockName);
?es = pBlockTableRcd->setOrigin(AcGePoint3d::kOrigin);
?es = pBlockTable->upgradeOpen();
?if (Acad::eOk != es)
?{
? pBlockTableRcd->close();
? pBlockTable->close();
? return es;
?}
?es = pBlockTable->add(pBlockTableRcd);
?if (Acad::eOk != es)
?{?
? pBlockTable->close();
? pBlockTableRcd->close();
? return es;
?}
?pBlockTable->close();
?AcGeMatrix3d mat;
?mat.setToIdentity();
?for (INT32 i = 0; i < idObjectArray.length(); i++)
?{
? AcDbEntity *pEntity = NULL;
? es = acdbOpenAcDbEntity(pEntity, idObjectArray.at(i), AcDb::kForRead);
? if (Acad::eOk != es)
? {
? ?acDocManager->unlockDocument(curDoc());
? ?pBlockTableRcd->close();
? ?return es;
? }

? AcDbEntity *pNewEntity = AcDbEntity::cast(pEntity->clone());
? es = pBlockTableRcd->appendAcDbEntity(pNewEntity);
? if (Acad::eOk != es)
? {
? ?acDocManager->unlockDocument(curDoc());
? ?pBlockTableRcd->close();
? ?pEntity->close();
? ?pNewEntity->close();
? ?return es;
? }
? pEntity->close();
? pNewEntity->close();
?}
?pBlockTableRcd->close();
?return es;
}
三).創建非模式對話框,繼承自CAcUiDialog類!
具體添加一些控件與消息響應以及還未完成的非模式對話框銷毀(DestoryWindow)就不一一敘述了!

五. 成果截圖
1)執行自定義命令,點擊拾取,我這里選擇3條邊與一個圓,總共4個對象,joke為新塊名,然后點擊創建

2)在命令提示符輸入指令insert,即可預覽剛才創建的新塊

3)點擊確定,即可在Cad工作區添加此塊,然后可點擊顏色,如下:

4)這里我先則藍色,即可改變剛才插入新塊的顏色:

六. 源碼
源碼地址:http://download.csdn.net/detail/u012158162/9795717

七 后序:
A. 由于個人技術原因以及剛接觸Cad與ObjectArx幾天,其中難免有些胡說八道,請見諒!
B. 程序中修改塊的顏色存在Bug,以及沒對MFC的對話框銷毀做處理!
C. 祝大家學習是艱辛的,生活是快樂的!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447640.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

告訴你中國著名的40個四大是什么?

中國著名的40個四大 一、四大江南才子&#xff1a;唐伯虎、文征明、祝枝山、徐禎卿&#xff1b; 二、四大才女&#xff1a;蔡文姬、班昭&#xff08;又說上官婉兒&#xff09;、卓文君、李清照&#xff1b; 三、四大名著&#xff1a;《三國演義》、《西游記》、《水滸傳》、《…

解決:Dockerfile 中執行 tar 命令始終報錯:tar: /xx/xx: Cannot stat: No such file or directory tar: Exiting with

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. docker 執行 build &#xff0c; dockerfile 中有一行命令&#xff1a; RUN tar -zcvP -f clientOne.tar /root/jiangyu/projects/…

ObjectArx創建自定義實體

ObjectArx創建自定義實體 一。目的在ObjectArx中已經有了許多實體&#xff0c;如AcDbLine,AcDbCircle,AcDbArc等&#xff0c;但在用戶使用Cad時&#xff0c;會有一些對他們來講常用的“實體“&#xff0c;如一扇門&#xff0c;如果我們能提供一個“門實體“&#xff0c;讓用戶能…

開車人千金難買的知識!(組圖)

開車的人千金難買的知識: 前言&#xff1a; 一、 發動機是怎樣被您自己開壞的 二、 變速箱是怎樣被您自己開壞的 三、 排水口&#xff08;很重要您肯定不知道的&#xff09; 四、 離合 五、 水箱 六、 方向助力 七、 空調 八、底盤 九、愛車是如何被自己撞壞的&#x…

如何在 IDEA 啟動多個 Spring Boot 工程實例

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一個工程啟動多個實例&#xff0c;分別占用不同的端口。 step 1 在IDEA上點擊Application右邊的下三角 ,彈出選項后&#xff0c;點擊Ed…

安裝micro/go-micro

創建文件夾&#xff0c;拉取相關包 mkdir golang.org cd golang.org mkdir x cd x git clone https://github.com/golang/net.git git clone https://github.com/golang/crypto.git git clone https://github.com/golang/sys.git git clone https://github.com/golang/…

剎車八個技巧 教你踩得又穩又好

駕車加速行駛&#xff0c;這是誰都可以做到的。但是如果我們不能夠正確地操作剎車&#xff0c;汽車有可能在一瞬間變成事故的兇器&#xff0c;因此&#xff0c;也許我們可以說剎車技術是駕駛汽車的境界之一。以下為大家列舉八種剎車技巧&#xff0c;如果全部掌握的話&#xff0…

springcloud 注解 @EnableDiscoveryClient 與 @EnableEurekaClient 的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 在使用 Spring Cloud feign 服務發現時提到兩種注解&#xff1a; EnableDiscoveryClient、EnableEurekaClient 。 spring cloud 中 disc…

開車路上怎樣趕走瞌睡蟲?網友支招如何防路困

春困秋乏&#xff0c;秋天時不時來個哈欠打個盹也是人之常情&#xff0c;可是如果您正在路上開車可就是危險之極的事情了&#xff01;要知道&#xff0c;這在路上開快車不是最危險的&#xff0c;最危險的是走神&#xff0c;而打瞌睡更是要命的&#xff01;可這打瞌睡是身體疲乏…

重啟 docker 服務、Docker 重啟

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 我的情況 &#xff1a;重啟阿里云 ECS 服務器后&#xff0c;一切服務都停止了。 重啟 XXX 服務通用命令&#xff1a;service xxx re…

25歲肥胖!美研究:晚年恐出現病態肥胖

如果您現在剛好25歲&#xff0c;最好注意一下現在的體重&#xff0c;因為美國紐約大學最新研究發現&#xff0c;如果在25歲這個年齡&#xff0c;您的體重是超重的&#xff0c;10年后肥胖的機率會比較高&#xff0c;男生恐怕高到23.1%&#xff0c;女生高到46.9%&#xff0c;而年…

linux 查看 CPU 使用率

1&#xff1a;top 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 top -bn 1 -i -c top命令可以看到總體的系統運行狀態和cpu使用效率 %us: 表示用戶空間程序的cpu使用效率 %sy:表示…

新研究:長壽又健康的秘訣

最近對南加州一個退休社區&#xff0c;成千上萬90歲以上者的一項具有里程碑意義的研究&#xff0c;指出了長壽的可能因素。吸煙致使壽命縮短&#xff0c;運動使人活得更長。即使從事非運動的方式&#xff0c;保持活躍的生活&#xff0c;也會延長壽命。肥胖不好&#xff0c;但過…

解決: service endpoint with name xxx already exists ( docker 已刪除的容器卻依舊存在)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 啟動服務報錯如題 確認 我已經 docker rm -f XXX 了。也確認 各個容器端口并不重復。 重新啟動容器服務依舊報錯&#xff1a; 粗…

廣州駕考科目三電子考16日全面啟動

駕考科目三人工考“短暫復出” 增加13天過渡期&#xff0c;16日全面啟動電子考 南方日報訊(記者/趙琦玉 通訊員/交宣)昨日&#xff0c;廣州駕考科目三電子考試新政在實施2天之后&#xff0c;陡然“剎車”進行調整。從昨日起至本月15日共13天的過渡期內&#xff0c;已預約科目三…

解決:There was an unexpected error (type=Internal Server Error,..). No instances available for XXX

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.我的情況&#xff1a; 實踐 springCloud , 啟動了注冊中心 eureka、也啟動了 服務生產者、服務消費者。 eureka 端口&#xff1a; 1…

延長汽車壽命的6個良好習慣

怎樣最大程度的使用你的汽車涉及到許多東西&#xff0c;比如保養維護&#xff0c;還有良好的駕駛習慣。很多人對正確的維護保養對延長汽車壽命的重要性已很了解&#xff0c;所以我們這里集中談一談什么是良好的駕車習慣。駕車習慣和方式決定了汽車的預期壽命&#xff0c;換另一…

springCloud - 第3篇 - 消費者調用服務 ( RestTemplate + Ribbon )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、新建 ribbon 工程&#xff1a; 1. file - new - module 2. spring Initializr - module SDK 選擇自己的 JDK &#xff0c;其余的可…

延長汽車使用壽命,拋棄六大用車壞習慣

汽車使用越來越普及&#xff0c;因為用車習慣問題導致汽車壽命減短&#xff0c;因錯誤用車習慣導致傷車、損車的例子比比皆是。而用車習慣得當與否&#xff0c;直接關系到汽車的使用壽命。例如發動機&#xff0c;如果保養得當&#xff0c;開50萬~60萬公里都沒問題。汽車使用越來…

解決:Whitelabel Error Page This application has no explicit mapping for /error...UnknownHostException

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 我的情況 &#xff1a; springcloud 實踐&#xff0c;啟動 ribbon 工程后&#xff0c;請求接口報錯&#xff1a; Whitelabel Error…