こんな感じ
Entity acEnt = tr.GetObject(obj.ObjectId, OpenMode.ForWrite) as Entity;
if (acEnt != null)
{
switch (acEnt.GetType().ToString())
{
case “Autodesk.AutoCAD.DatabaseServices.Polyline”:
文字列でオブジェクトを分ける視覚的に有利でした
switch (objects[j].GetRXClass().Name)
{
case “AcDbLine”:
//ラインの種類
こんな方法も使える。
「機器のつぶやき」カテゴリーアーカイブ
objectarx:2017の利用って変わったようだ
C#で開発していたので、2013から書き直した
autocad objectarxで最も利用されるライブラリの他に
C:\Program Files\Autodesk\AutoCAD 2017\Map\ManagedMapApi.dll
これを参照すれば、FDO以外は、利用できる。
全てここにライブラリあるので昔は、DLが必要だったと思うが便利になった。
Map 3dがプラグインで動作しているようなので、利用価値は高い。
昔は、(cast)でほぼほぼ行けたはずだけど、今は行けないな。ガックシ
後は、あまりサンプルが無かったので、とりあえず
これだけでいい
using Autodesk.Gis.Map;
using Autodesk.Gis.Map.ObjectData;
using Autodesk.Gis.Map.Utilities;
//オブジェクトテーブルの用意
MapApplication mapApp = HostMapApplicationServices.Application;
//現在開いているマップオブジェクトのテーブルを取得
Autodesk.Gis.Map.ObjectData.Tables odTables = mapApp.ActiveProject.ODTables;
・・・
//オブジェクトテーブルのレコードの全てを取得
using (Autodesk.Gis.Map.ObjectData.Table odTable2 = odTables[obtbname])
{
using (Records odrecords = odTable2.GetObjectTableRecords(Convert.ToUInt32(i1), acSSObj.ObjectId,
Autodesk.Gis.Map.Constants.OpenMode.OpenForRead, false))
{
//レコードフィールドに変換
Record odRecord = odrecords[i1];
//レコードフィールド列を入れるて構造を取得
MapValue mapval = odRecord[fieldint];
・・・
ここ迄ネストでないとCLRのデットロックを、起こすか
正常に動作しない。
Map 3dは、マネージモードなので、従来のように、autodeskのサンプルの連続したオブジェクト渡しだと
全くダメダメでした。
MapValueは、 Autodesk.Gis.Map.Utilitiesのオブジェクトだけど、早めにdispose
させたほうが、数万データはいけるけど、そのまま渡していたら、デットロックや落ちる。
なので、mapval.StrValueは、中にを精査してSystem変数で抱えた方が、うまく動作する。
using ステートメントが確実、メソッドの呼び出し中に例外でも Dispose が必ず呼び出されます。
tryよりある意味、動作は安定する。
昔は、
using (Transaction acTrans = db.TransactionManager.StartTransaction())
のトランザクションをネストしたり、関数で飛ばしけど、今それやったら、落ちる。
2011から、2013までのソースがほとんど書き直し。とほほ。
とりあえず、覚書
スパムチェックサイト
最近見つけた、スパムIPのチェックサイト
いい感じに発見してくれる。
http://whatismyipaddress.com/blacklist-check