Autodesk Community Tips- ADNオープン
Autodesk Community Tipsではちょっとしたコツ、やり方、ショートカット、アドバイスやヒントを共有しています。
ソート順:
Issue .NET 8 に対応した AutoCAD 2025 用の .NET Wizard はありますか?   Solution .NET 8 に対応した AutoCAD 2025 用の .NET Wizard は、https://aps.autodesk.com/developer/overview/autocad ページ、または Github リポジトリ(https://github.com/ADN-DevTech/AutoCAD-Net-Wizards/releases/download/v2025/PluginVsix.zip) からダウンロードすることが出来ます。   インストール AutoCAD 2025 用の .NET Wizard は、従来の .msi インストーラに代わって、VSIX テクノロジを採用した Visual Studio 2022 の機能拡張として、.vsixインストーラで提供されています。 ダウンロードした ZIP には PluginVsix.vsix ファイルが含まれていますので、任意の場所に解凍してダブルクリックすると、VSIX Installer 画面が表示されます。 [Install] ボタンをクリックして画面の指示に従ってインストールしてください。   Visual Studio 2022 がインストールされている必要があります。 AutoCAD 2025 用 .NET Wizard は、GUID を共有していた AutoCAD 2024 以前までの .NET Wizard と異なり、VSIX ベースの Visual Studio 機能拡張なので、AutoCAD 2024 以前のバージョン用に用意されたいずれか 1 つの .NET Wizard と共存インストールと運用が出来ます。   プロジェクト作成 Visual Studio 2022 を起動後に「新しいプロジェクトの作成」を選択して ”autocad” の文字でフィルタリングすると、C# プロジェクト用の「AutoCAD 2025 Plugin CS」と Visual Basic プロジェクト用の「AutoCAD 2025 Plugin VB」テンプレートが表示されます。 開発に使用したい言語のテンプレートを選択して [次へ(N)] で画面を進めると、プロジェクト名の入力とプロジェクトの作成場所を指定出来ます。両者を指定後に  [次へ(N)] をクリックすると、スケルトン プロジェクトが作成されます。 プロジェクト作成時には、NuGet サーバーからオンラインで AutoCAD 2025 用のアセンブリを解決します。NuGet パッケージから転換されたアセンブリは、C:\Users\<username>\.nuget\packages\autocad.net\25.0.1\lib\net8.0 フォルダに配置されます。 C:\Users\<username>\.nuget\packages\autocad.net\25.0.1\lib\net8.0 フォルダに配置されたアセンブリは、自動的にプロジェクトに参照設定されます。   デバッグ .NET Wizard(AutoCAD 2025 Template)で作成されたプロジェクトには、”Acad” デバッグ プロファイルが作成されています。   ”Acad” デバッグ プロファイルには、デバッグ時に起動する acad.exe へのパスが含まれますが、インストールした環境にあわせたパスの見直しはおこなわれていません。このまま、”Acad” デバッグ プロファイルでデバッグを開始するとエラーになってしまいます。   ”Acad” デバッグ プロファイル の acad.exe へのパスを変更するには、作成したプロジェクト フォルダ配下のフォルダ(C# プロジェクト:<project name>\<project name\Properties フォルダ、VB プロジェクト:<project name>\My Project フォルダ)の launchSettings.json を直接開いて、環境にあわせて acad.exe のパスに "executablePath" の値を変更後、launchSettings.jsonを保存してください。 { "profiles": { "AutoCAD_2025_Plugin_CS1": { "commandName": "Project" }, "Acad": { "commandName": "Executable", "executablePath": "C:\\Program Files\\Autodesk\\AutoCAD 2025\\acad.exe" } } }   アンインストール Visual Studio 2022 の [機能拡張(X)] メニューから [Manage Extensions...] をクリックして [機能拡張の管理] ダイアログを表示させたら、「インストール済み」の機能拡張の中から「AutoCAD 2025 Template」を選択して、[アンインストール(U)] ボタンでアンインストール出来ます。
記事全体を表示
Issue AutoCAD を使用していると、テーブル(*Tnn ) / 寸法(*Dnn)/ ハッチング( *Xnn)などの匿名ブロックが作成されています。( nn は図面内で一意になるような数字)   INSERT コマンドや BLOCK コマンドのユーザ インタフェースには匿名ブロック名が表示されないので、カスタマイズ運用時に便利なのですが、この匿名ブロックを AutoCAD .NET API で作成することは出来ますか?   Solution API で(ユーザー定義で)登録することが出来る匿名ブロックの作成では、新しく作成するブロック名に "*U" の名前をつけることで、AutoCAD が図面内で重複しないように数字を付加してブロック名を定義します。 次の C# コードは、円を含む匿名ブロックを作成するものです。   Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; using (Transaction tr = db.TransactionManager.StartTransaction()) { try { // 匿名ブロック定義の作成 BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForWrite); BlockTableRecord blkdef = new BlockTableRecord(); Circle oCirc = new Circle(Point3d.Origin, Vector3d.ZAxis, 10.0); blkdef = new BlockTableRecord(); blkdef.Name = "*U"; bt.Add(blkdef); tr.AddNewlyCreatedDBObject(blkdef, true); blkdef.AppendEntity(oCirc); tr.AddNewlyCreatedDBObject(oCirc, true); ed.WriteMessage("\n匿名ブロック名 : {0}", blkdef.Name); // 匿名ブロック参照の作成 Point3d pt = new Point3d(100.0, 100.0, 0.0); BlockReference blkref = new BlockReference(pt, blkdef.ObjectId); BlockTableRecord model = (BlockTableRecord)tr.GetObject(bt["*MODEL_SPACE"], OpenMode.ForWrite); model.AppendEntity(blkref); tr.AddNewlyCreatedDBObject(blkref, true); tr.Commit(); } catch (Autodesk.AutoCAD.Runtime.Exception ex) { ed.WriteMessage("\n例外エラー : {0}", ex.ToString()); } }
記事全体を表示
Issue 次のような「MS Pゴシック」を持つ文字スタイルを作成したいのですが、TextStyleTableRecord.FileName プロパティへの指定方法がわかりません。 どうすれば「MS Pゴシック」を指定することが出来ますか?   Solution 「MS Pゴシック」フォントは、TrueType Collection ファイルとして「MS ゴシック」や「MS UI Gothic」などと共に定義されています。   定義ファイル名は msgothic.ttc になり、FileName プロパティが要求する .ttf ファイルに合致しないため、同プロパティに指定することが出来ません。   この場合、.次のコードのように、ttf に分解した状態のファイル名で指定することが可能です。   Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; using (Transaction tr = db.TransactionManager.StartTransaction()) { TextStyleTable tbl = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForWrite); if (!tbl.Has("スタイル1")) { TextStyleTableRecord rec = new TextStyleTableRecord(); rec.Name = "スタイル1"; rec.FileName = "MS PGothic.ttf"; tbl.Add(rec); tr.AddNewlyCreatedDBObject(rec, true); } else { ed.WriteMessage("\nスタイル1 文字スタイルは既に登録されています..."); } tr.Commit(); }   また、オンラインヘルプ フォントを割り当てる(.NET) のように  FontDescriptor オブジェクトで指定することも出来ます。  Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; using (Transaction tr = db.TransactionManager.StartTransaction()) { TextStyleTable tbl = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForWrite); if (!tbl.Has("スタイル1")) { TextStyleTableRecord rec = new TextStyleTableRecord(); rec.Name = "スタイル1"; tbl.Add(rec); rec.Font = new FontDescriptor("MS Pゴシック", false, false, 128, 50); tr.AddNewlyCreatedDBObject(rec, true); } else { ed.WriteMessage("\nスタイル1 文字スタイルは既に登録されています..."); } tr.Commit(); }   ご参考: 128 - FontDescriptor.CharacterSet 値:LOGFONT 構造体 の lfCharSet 50 - FontDescriptor.PitchAndFamily 値:LOGFONT 構造体 の lfPitchAndFamily
記事全体を表示
Issue Civil3DのImportSubassembly APIでSubassemblyComposerで作成したサブアセンブリが正しく挿入されmせん。API自体はエラーもなく実行できていますが、挿入したサブアセンブリには作成時に設定したパラメータも表示されず、また形状もSubassemblyComposerで作成したものではなく、「○」の状態となってしまう。 なお、対象のサブアセンブリはツールパレットには読み込まれており、GUIからは正しく図面に挿入することが出来ています。   Solution ImportSubassembly APIの不具合により、正しく挿入ができていない状況と思われます。   ImportSubassemblyの引数に指定しているatcファイルをテキストエディタで開き、ファイル内のDataTypeの記述を編集することでImportSubassembly にて配置をすることが可能となります。   DataType="long" → DataType="Long" DataType="double" → DataType="Double" DataType="bool" → DataType="Bool" DataType="string" → DataType="String"  
記事全体を表示
Issue 複数の 3D ソリッドの底面を XY 平面(Z 座標値 0.0)に一斉に揃えることは出来ますか?   Solution 選択した 3D ソリッドの底辺を Z=0.0 に位置合わせするコードを作成する場合、オブジェクト(Solid3d)の境界ボックス座標を Entity.GeometricExtents プロパティで取得してから、Extents3d.MinPoint.Z で現在の底面の Z 値を取得、次に、XY 平面(Z 値 0.0)からのベクトル(Vector3d)からマトリックス(Matrix3d)を作成後、同マトリックスを反転して、Z 値 0.0 の移動させることで、底面の位置合わせを行うことが出来ます。次の例は、その C# コードとなります。 ご参考:オブジェクトを移動する(.NET) | Autodesk   Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; Database db = Application.DocumentManager.MdiActiveDocument.Database; Document doc = Application.DocumentManager.MdiActiveDocument; using (Transaction tr = db.TransactionManager.StartTransaction()) { PromptSelectionResult psr = doc.Editor.GetSelection(); SelectionSet sset = psr.Value; if (psr.Status == PromptStatus.OK) { Entity ent = null; Extents3d ext; foreach (SelectedObject so in sset) { ent = (Entity)tr.GetObject(so.ObjectId, OpenMode.ForWrite); if(ent.GetRXClass().Name == "AcDb3dSolid") { Solid3d sol = (Solid3d)ent; ext = sol.GeometricExtents; ed.WriteMessage("\nSolid3d Z value = {0}", ext.MinPoint.Z); Point3d pt = new Point3d(0, 0, 0); Vector3d vec = pt.GetVectorTo(new Point3d(0.0, 0.0, ext.MinPoint.Z)); sol.TransformBy(Matrix3d.Displacement(vec).Inverse()); } } } tr.Commit(); }
記事全体を表示
Issue オンラインヘルプ「レイアウトをパブリッシュする(.NET) 」の例では、PublishExecute メソッドを利用して DSD ファイルを使ったバッチ印刷の方法を説明しています。ただし、この例では "DWG to PDF.PC3" を指定してプロッタ環境設定をオーバーライド(上書き)しています。 印刷対象のレイアウトに設定されたページ設定を利用してバッチ印刷する方法はありますか?   Solution PublishDsd メソッドで、定義済みのページ設定(印刷デバイスと設定)を使用してレイアウトを印刷、または、/ファイル出力することが出来ます。この場合、また、DsdData.SheetType の値を SheetType.OriginalDevice に指定することで、プロッタ環境設定(.pc3)を指定せずに連続印刷をおこなうことが可能です。 次のコードは、その C# 例です。 Try Dim collection As DsdEntryCollection = New DsdEntryCollection() Dim entry As DsdEntry entry = New DsdEntry() entry.Layout = "レイアウト1" entry.DwgName = "c:\Temp\Drawing1.dwg" entry.Nps = "Setup1" entry.Title = "Sheet1" collection.Add(entry) entry = New DsdEntry() entry.Layout = "レイアウト1" entry.DwgName = "c:\Temp\Drawing2.dwg" entry.Nps = "Setup1" entry.Title = "Sheet2" collection.Add(entry) Dim dsd As DsdData = New DsdData() dsd.SetDsdEntryCollection(collection) dsd.ProjectPath = "c:\Temp\" dsd.LogFilePath = "c:\Temp\logdwf.log" dsd.SheetType = SheetType.OriginalDevice dsd.NoOfCopies = 1 dsd.SheetSetName = "PublisherSet" dsd.WriteDsd("c:\Temp\publisher.dsd") Dim nbSheets As Integer = collection.Count Using progressDlg As PlotProgressDialog = New PlotProgressDialog(False, nbSheets, True) progressDlg.UpperPlotProgressRange = 100 progressDlg.LowerPlotProgressRange = 0 progressDlg.UpperSheetProgressRange = 100 progressDlg.LowerSheetProgressRange = 0 progressDlg.IsVisible = True Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("BACKGROUNDPLOT", 0) Dim publisher As Autodesk.AutoCAD.Publishing.Publisher = Autodesk.AutoCAD.ApplicationServices.Application.Publisher publisher.PublishDsd("c:\Temp\publisher.dsd", progressDlg) progressDlg.Destroy() End Using Catch ex As Autodesk.AutoCAD.Runtime.Exception MsgBox(ex.Message) End Try End Sub なお、PublishDsd メソッドを使用して DSD ファイルをパブリッシュする前に、BACKGROUNDPLOT システム変数を 0 に設定する必要があります。
記事全体を表示