日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

地籍图 cad cass 二次开发 过滤器过滤扩展数据组码1000的解决方案

發(fā)布時(shí)間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 地籍图 cad cass 二次开发 过滤器过滤扩展数据组码1000的解决方案 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

筆者最近在做一個(gè)地籍的項(xiàng)目。單位叫開發(fā)一個(gè)基于cad二次開發(fā)的地籍軟件,方便工作人員繪圖入庫使用。繪圖人員前期作業(yè)主要是采用cass軟件(cad二次開發(fā)的)進(jìn)行作業(yè)。所以一些開發(fā)工作要兼顧到cass軟件的圖形屬性的存儲(chǔ)方式。筆者主要是對(duì)繪圖人員繪制的地籍圖批量導(dǎo)出shp格式的數(shù)據(jù),方便后期入庫使用。cass對(duì)圖形的屬性數(shù)據(jù)存儲(chǔ)方式主要以擴(kuò)展數(shù)據(jù)為主,例如cass編碼。在導(dǎo)入cad數(shù)據(jù)時(shí),要分要素導(dǎo)出,就是將相同cass編碼的數(shù)據(jù)導(dǎo)出到同一個(gè)shp文件中。所以就要使用選擇集過濾具有相同cass編碼的要素。當(dāng)過濾1001組碼的擴(kuò)展數(shù)據(jù)時(shí)都可以成功的過濾,在過濾1000組碼的時(shí)候始終過濾不成功,個(gè)數(shù)為0,最關(guān)鍵的是cass編碼都存儲(chǔ)在1000組碼當(dāng)中。

TypedValue[] acTypValAr = new TypedValue[2];

acTypValAr.SetValue(new TypedValue(1001, "SOUTH"), 0);

acTypValAr.SetValue(new TypedValue(1000, casscode), 1);

SelectionFilter acSelFtr = new SelectionFilter(acTypValAr);
PromptSelectionResult acSSPrompt;

acSSPrompt = acDocEd.SelectAll(acSelFtr);

?if (acSSPrompt.Status == PromptStatus.OK)
??????????????? {
??????????????????? SelectionSet acSSet = acSSPrompt.Value;
??????????????????? Application.ShowAlertDialog("Number of objects selected: " + acSSet.Count.ToString());
??????????????? }
??????????????? else
??????????????? {
??????????????????? Application.ShowAlertDialog("Number of objects selected: 0");
??????????????? }

????????????????????? 這段代碼始終跳到else里。后來經(jīng)過查證確實(shí)autocad不能直接對(duì)1000組碼進(jìn)行選擇集過濾。

經(jīng)過在QQ群里的一番詢問,發(fā)現(xiàn)有些人也遇到過類似的問題,但卻都沒有解決,繞過了這個(gè)問題,用了比較簡單而粗暴的方式去做,就是通過遍歷圖中的每個(gè)圖元的所有擴(kuò)展數(shù)據(jù)去判斷該圖元是否有指定的cass編碼。因?yàn)楣P者這次做的不是針對(duì)個(gè)別圖元進(jìn)行判斷,而是針對(duì)整個(gè)已經(jīng)繪制好的地籍圖批量導(dǎo)出,如果按照群友的說法,顯然運(yùn)行效率會(huì)大大降低。于是繼續(xù)尋找,查了百度,google。最后在autodesk官網(wǎng)的論壇下終于找到了個(gè)較好的解決方案。這個(gè)問題是個(gè)老外提出的,也是個(gè)老外解決的。代碼如下:

private? string curCasscode;

private? void FeatureFilter()
??????? {
??????????? // Get the current document editor獲取當(dāng)前文檔編輯器
??????????? Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor;
??????????? Document doc = Application.DocumentManager.MdiActiveDocument;
??????????? Database db = doc.Database;
??????????????? TypedValue[] acTypValAr = new TypedValue[1];
??????????????? acTypValAr.SetValue(new TypedValue(1001, "SOUTH"), 0);
??????????????? SelectionFilter acSelFtr = new SelectionFilter(acTypValAr);
??????????????? PromptSelectionResult acSSPrompt;
???????????????? using (Transaction tr = db.TransactionManager.StartTransaction())
??????????? {
??????????????? acDocEd.SelectionAdded += OnSelectionAdded;
??????????????? acSSPrompt = acDocEd.SelectAll(acSelFtr); ;
??????????????? acDocEd.SelectionAdded -= OnSelectionAdded;
??????????????? if (acSSPrompt.Status == PromptStatus.OK)
??????????????? {
??????????????????? SelectionSet acSSet = acSSPrompt.Value;
??????????????????? Application.ShowAlertDialog("Number of objects selected: " + acSSet.Count.ToString());
??????????????? }
??????????????? else
??????????????? {
??????????????????? Application.ShowAlertDialog("Number of objects selected: 0");
??????????????? }
??????????????? tr.Commit();
??????????? }
??????????? }
??????? }
??????? void OnSelectionAdded(object sender, SelectionAddedEventArgs e)
??????? {
??????????? ObjectId[] ids = e.AddedObjects.GetObjectIds();
??????????? for (int i = 0; i < ids.Length; i++)
??????????? {
??????????????? DBObject obj = ids[i].GetObject(OpenMode.ForRead);
??????????????? ResultBuffer data = obj.GetXDataForApplication("SOUTH");
??????????????? bool has = false;
??????????????? foreach (TypedValue tv in data)
??????????????? {
??????????????????? if (tv.TypeCode == 1000 && (string)tv.Value == curCasscode)
??????????????????? {
??????????????????????? has = true;
??????????????????????? break;
??????????????????? }
??????????????? }
??????????????? if (!has) e.Remove(i);
??????????? }
??????? }

主體思路:editor提供了SelectionAdded事件,事件可以自定義。在選擇集過濾的時(shí)候,根據(jù)需要,逐個(gè)擴(kuò)展數(shù)據(jù)判斷,過濾出符合要求的要素。

雖然也是逐個(gè)擴(kuò)展數(shù)據(jù)判斷,卻大大提高了運(yùn)行效率,比網(wǎng)友的解決方案要好一些。

總結(jié)

以上是生活随笔為你收集整理的地籍图 cad cass 二次开发 过滤器过滤扩展数据组码1000的解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。