「autocad」カテゴリーアーカイブ

C#:Autodeskのオブジェクトの種類

開発して、Autodeskのオブジェクトの種類が必要となったので自分の閉鎖予定のサイトから
転記した。

Autodesk.AutoCAD.DatabaseServicesnosの種類

Autodesk.AutoCAD.DatabaseServicesとは、
ObjectARX 20○○\inc\AcDbMgd.dllの変数で、単一オブジェクトですかね。

これが、結構多い

“Autodesk.AutoCAD.DatabaseServices.MText”
//マルチテキスト
“Autodesk.AutoCAD.DatabaseServices.DBText”
//文字
“Autodesk.AutoCAD.DatabaseServices.Line”
//ライン
“Autodesk.AutoCAD.DatabaseServices.Polyline”
//ポリライン
“Autodesk.AutoCAD.DatabaseServices.Polyline2d”
//ポリライン2D
“Autodesk.AutoCAD.DatabaseServices.Polyline3d”
//ポリライン3D
“Autodesk.AutoCAD.DatabaseServices.Circle”
//円の種類
“Autodesk.AutoCAD.DatabaseServices.Arc”
//円弧
“Autodesk.AutoCAD.DatabaseServices.Spline”
//スプライン
“Autodesk.AutoCAD.DatabaseServices.Hatch”
//ハッチング
//寸法の種類
“Autodesk.AutoCAD.DatabaseServices.Leader”
//引き出し線
“Autodesk.AutoCAD.DatabaseServices.AlignedDimension”
//長さ寸法
“Autodesk.AutoCAD.DatabaseServices.RotatedDimension”
//回転寸法
“Autodesk.AutoCAD.DatabaseServices.RadialDimension”
//半径寸法
“Autodesk.AutoCAD.DatabaseServices.DiametricDimension”
//直径寸法
“Autodesk.AutoCAD.DatabaseServices.LineAngularDimension2”
//2 本の線で定義される角度寸法
“Autodesk.AutoCAD.DatabaseServices.Point3AngularDimension”
//3 個の点で定義される角度寸法
“Autodesk.AutoCAD.DatabaseServices.ArcDimension”
//3 個の点で定義される角度寸法

このぐらいわかっていれば、変換等に苦労しないかな?

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までのソースがほとんど書き直し。とほほ。
とりあえず、覚書

autocad:ObjectARX 2017デバックができるようになりました

いやーほんと迅速でした。
本家に解決策を教えていただきました。
納得です。
https://knowledge.autodesk.com/support/autocad-map-3d/troubleshooting/caas/sfdcarticles/sfdcarticles/AutoCAD-Map-3D-NET-Development-with-Windows-8-8-1-or-10-crash-with-Visual-studio-in-debug-mode.html#mtc-japanese
これが、答えでした。
続きを読む autocad:ObjectARX 2017デバックができるようになりました