goo blog サービス終了のお知らせ 

CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

井解とCivil3Dを連携させて積算することは可能か?

2025-08-16 11:12:06 | Civil3D

井解 (SeiKai) と Civil 3D を連携して積算を行うことは、**技術的には可能です**。ただし、その方法と難易度は、**井解の具体的なバージョン、設定、および利用可能なインターフェース (API やファイル入出力オプション)** に大きく依存します。

主な連携方法とその考え方、プログラム例を以下に示します。

**連携方法の考え方:**

1. **ファイルベースの連携 (最も一般的で実現可能性が高い):**
* Civil 3D で算出した数量 (土量、面積、長さ、構造物数量など) を、井解が読み込める形式 (CSV, TXT, Excel, XML, 土地改良DXFなど) で出力する。
* 出力されたファイルを井解側で読み込み、積算システム内の対応する項目に割り当てる (手動または簡易スクリプト)。
* **利点:** 比較的シンプル。両ソフトの深い知識がなくても実現可能な場合が多い。Civil 3D の標準機能やアドオンで対応可能。
* **欠点:** 完全自動化は難しい。ファイルの受け渡しと割り当て作業が発生する。データ構造が複雑になると管理が煩雑。

2. **API (Application Programming Interface) を利用した直接連携 (高度な自動化):**
* Civil 3D の .NET API (AutoCAD .NET API を含む) を使用して、Civil 3D オブジェクト (横断、土量、線形、構造物など) から直接数量データを抽出・計算するプログラムを作成する。
* 抽出したデータを、井解の API (存在し、公開されていれば) を介して直接井解の積算項目やデータベースに送り込む。
* **利点:** 高度な自動化が可能。人的ミスを削減。複雑なプロジェクトや繰り返し作業に有効。
* **欠点:** 両方のソフトウェアの API に関する深い知識とプログラミングスキルが必要。井解側の API が公開されていてドキュメントが整備されていることが前提。開発・保守コストがかかる。

**プログラム例 (ファイルベース連携 - Python による Civil 3D からの CSV 出力):**

以下の Python スクリプトは、Civil 3D のモデル空間から「区域」オブジェクト (サンプルとして) を収集し、その名前と面積を CSV ファイルに出力する非常に基本的な例です。これは Civil 3D .NET API を IronPython または pyautocad 等を介して利用する概念を示します。

```python
# 必要な参照の追加 (例: AcCoreMgd, AcDbMgd, AcCivRoot, AeccDbMgd, etc.) は環境依存
import clr
clr.AddReference('acmgd')
clr.AddReference('acdbmgd')
clr.AddReference('accoremgd')
clr.AddReference('AeccDbMgd') # Civil 3D 固有のアセンブリ
clr.AddReference('AeccXLandMgd') # 区域など土地関連オブジェクト

import Autodesk.AutoCAD.ApplicationServices as acApp
import Autodesk.AutoCAD.DatabaseServices as acDb
import Autodesk.AutoCAD.EditorInput as acEd
import Autodesk.Civil.DatabaseServices as civDb # Civil 3D オブジェクト
import csv

# AutoCAD 文書とデータベースを取得
doc = acApp.Application.DocumentManager.MdiActiveDocument
db = doc.Database
ed = doc.Editor

# トランザクション開始
with doc.TransactionManager.StartTransaction() as t:
# モデルスペースブロックテーブルレコードを取得
bt = t.GetObject(db.BlockTableId, acDb.OpenMode.ForRead)
btr = t.GetObject(bt[acDb.BlockTableRecord.ModelSpace], acDb.OpenMode.ForRead)

# CSVファイルを開く (パスを適宜変更)
with open('C:/Temp/Civil3D_Areas.csv', 'w', newline='', encoding='utf-8') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(['Area_Name', 'Area_SquareMeters']) # ヘッダー行

# モデルスペース内のすべてのオブジェクトを走査
for objId in btr:
obj = t.GetObject(objId, acDb.OpenMode.ForRead)

# オブジェクトが Civil 3D 区域 (AeccLandParcel) かどうかをチェック
if isinstance(obj, civDb.Parcel): # 区域のクラス名はバージョンにより異なる可能性 (例: AeccLandParcel)
areaName = obj.Name
# 面積を取得 (単位系に注意! m², ft² など)
areaValue = obj.Area # 面積プロパティ。単位はドキュメント設定依存
# CSVに行を書き込み
csvwriter.writerow([areaName, areaValue])

t.Commit() # トランザクションコミット (変更を保存)

ed.WriteMessage("\n区域データをCSVファイルに出力しました。")
```

**井解側での対応 (ファイルベース連携):**

1. **CSV ファイルの準備:** 上記スクリプトを改良し、必要なすべての数量データ (土量計算結果、構造物数量、法面面積、舗装面積など) を抽出して CSV に出力します。列は井解の入力フォーマットに合わせる必要があります。
2. **井解への取り込み:**
* **手動取り込み:** 井解の画面から、該当する積算項目を選択し、CSV ファイルを指定してインポートする機能がある場合、それを使用します。
* **簡易スクリプト/マクロ (井解がサポートしていれば):** 井解側にスクリプト機能があれば、CSV 読み込みと特定の積算項目への割り当てを自動化するスクリプトを作成します。
* **専用変換ツール作成:** CSV から井解が直接読み込めるネイティブフォーマット (井解独自のインポート形式や土地改良DXF等) に変換するツールを別途開発します。

**API 連携の例 (概念レベル):**

API 連携は非常に高度で、Civil 3D API と (存在すれば) 井解 API の両方の詳細な知識が不可欠です。一般的な流れを示します。

```csharp (概念例: C# .NET)
// 1. Civil 3D アプリケーションに接続
using (var civApp = AeccAppServices.AeccApplication) // 接続方法はバージョン依存
{
// 2. アクティブなCivil 3D文書を取得
var civDoc = civApp.ActiveDocument;

// 3. 必要なCivil 3Dオブジェクトを取得 (例: 土量計算結果サーフェス)
AeccVolumeSurface volSurface = ...; // 特定の土量サーフェスを取得するロジック

// 4. 数量を計算・抽出
double cutVolume = volSurface.CutVolume;
double fillVolume = volSurface.FillVolume;
// ... その他の必要な数量

// 5. (仮定) 井解のAPIクライアントライブラリを参照し、接続・認証
using (var seikaiClient = new SeikaiAPIClient("server_address", "api_key"))
{
// 6. 井解側の特定の積算項目(例: 土工)を特定
var earthworkItem = seikaiClient.GetCostItem("土工", "切土");
var fillItem = seikaiClient.GetCostItem("土工", "盛土");

// 7. 抽出したCivil 3Dの数量を井解の項目に設定
earthworkItem.Quantity = cutVolume;
fillItem.Quantity = fillVolume;

// 8. 変更を井解システムに保存
seikaiClient.UpdateCostItem(earthworkItem);
seikaiClient.UpdateCostItem(fillItem);
}
}
```

**重要な注意点と前提条件:**

1. **井解のAPI:** 上記の C# 例は **井解が外部連携用の公開APIを提供していることが絶対前提** です。井解のAPIの有無、仕様、利用方法は、井解のベンダー (株式会社エスイーシーなど) に直接確認する必要があります。一般に公開されていない可能性が非常に高いです。
2. **Civil 3D API:** Civil 3D の API は公開されていますが、非常に複雑で習得に時間がかかります。対象のオブジェクト (区域、横断、土量サーフェス、構造物、管渠など) ごとに適切な API クラスとメソッドを使用する必要があります。
3. **データマッピング:** Civil 3D で算出した「数量」を、井解の積算システム内のどの「項目」「工種」「細目」に割り当てるかというマッピング規則を厳密に定義する必要があります。これが連携の本質的な難しさです。
4. **単位系:** Civil 3D の計算単位 (m, m², m³) と井解で想定している単位が一致しているか確認・変換が必要です。
5. **エラーハンドリング:** ファイルの読み書きエラー、API接続エラー、データ不整合などに対する堅牢なエラーハンドリングが不可欠です。
6. **開発環境:** .NET Framework (C#, VB.NET) が Civil 3D API 開発の主流です。Python (IronPython または pyautocad) も選択肢ですが、機能が制限される場合があります。
7. **ライセンスとサポート:** 商用利用や大規模開発には、各ベンダーのライセンス条項やサポート契約を確認してください。
8. **コストとメリット:** 完全なAPI連携の開発には相当な工数とコストがかかります。プロジェクトの規模、繰り返し回数、人的ミス削減効果などを鑑みて、投資対効果を慎重に評価する必要があります。

**結論と現実的なアプローチ:**

* **まずはファイルベース連携を検討:** 多くの現場では、Civil 3D から CSV や Excel で数量表を出力し、それを井解に手動または簡易スクリプトで取り込む方法が現実的です。Civil 3D の「数量出力ツール」やサードパーティ製アドオン (例: Sincpac-C3D の数量機能) を活用することで出力を効率化できます。井解側のインポート機能を最大限活用します。
* **井解ベンダーへの相談:** 井解と Civil 3D の連携について、**まずは井解の販売代理店またはサポート窓口に直接相談することを強くお勧めします**。彼らが公式にサポートしている連携方法 (専用のアドオン、推奨ファイルフォーマット、API の提供状況など) があるかどうかが最も確実な情報源です。
* **API連携は大規模プロジェクト向け:** 非常に大規模なプロジェクトが連続する、または社内標準化で高い自動化レベルが求められる場合にのみ、API 連携の開発を検討すべきです。その際も、井解 API の利用可能性が最大のハードルとなります。

プログラム例はあくまで概念を示すものです。実際の開発には、Autodesk Civil 3D API ドキュメント、ObjectARX リファレンス、および (もし存在すれば) 井解 API ドキュメントの詳細な調査と、具体的な要件定義に基づいた設計が必須です。

Civil3DとHELIOSを連携させて積算することは可能か?

2025-08-16 10:54:23 | Civil3D

Civil3DとHELIOSを連携させて積算(数量計算)を行うことは**可能**です。ただし、ネイティブな連携機能は存在しないため、以下のいずれかの方法でデータ連携を行う必要があります。

---

### **主な連携方法**
1. **LandXML形式を介したデータ交換**(推奨)
Civil3Dで作成した地形/設計データをLandXMLで出力 → HELIOSで読み込み
2. **カスタムスクリプトによる連携**
.NET APIやPythonを使ってデータを直接変換

---

### **連携手順とサンプルコード**
#### 方法1: LandXMLを介した連携例
**Civil3D側の操作**(LandXMLエクスポート)
```csharp
// Civil3D .NET API サンプル(コマンドライン実行)
[CommandMethod("ExportToLandXML")]
public void ExportToLandXML()
{
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
// 1. 地形サーフェスを選択
TinSurface surface = tr.GetObject(surfaceId, OpenMode.ForRead) as TinSurface;

// 2. LandXML設定
LandXmlSettings settings = new LandXmlSettings();
settings.SurfaceSettings.ExportAsTriangles = true;

// 3. エクスポート実行
LandXml.Export(@"C:\output\surface.xml", settings, surface.ObjectId);
tr.Commit();
}
}
```

**HELIOS側の処理**(Pythonサンプル)
```python
# HELIOS-Pythonスクリプト例
import helios
import landxml

# LandXML読み込み
model = landxml.load("C:/output/surface.xml")

# サーフェスデータ取得
surface = model.get_surface("Surface1")

# 面積・体積計算
volume = surface.calculate_volume(reference_elevation=0.0)
print(f"計算体積: {volume} m³")

# 積算レポート出力
helios.generate_report(
output_format="CSV",
file_path="C:/output/quantity.csv"
)
```

---

#### 方法2: 直接連携(C# .NET API利用)
```csharp
// Civil3D → HELIOS 直接連携サンプル
using Autodesk.Civil.DatabaseServices;
using Helios; // HELIOS APIの参照を追加

public void SendToHelios()
{
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
// Civil3Dデータ取得
TinSurface surface = tr.GetObject(surfaceId, OpenMode.ForRead) as TinSurface;

// HELIOS接続
var heliosApp = new Helios.Application();
heliosApp.Connect();

// サーフェスデータをHELIOSに送信
var heliosSurface = heliosApp.Surfaces.Create();
foreach (Point3d point in surface.Vertices)
{
heliosSurface.AddVertex(point.X, point.Y, point.Z);
}

// 体積計算実行
double volume = heliosSurface.CalculateVolume(
referencePlane: Helios.PlaneType.XY,
elevation: 0.0
);

tr.Commit();
}
}
```

---

### **必要条件**
1. **HELIOS側の設定**
- LandXMLプラグインのインストール
- Pythonスクリプティング環境の有効化
2. **Civil3D側**
- .NET API利用のため開発環境(Visual Studio)
- Civil3D Object Modelへの参照設定

---

### **注意点**
- **座標系の一致**: Civil3DとHELIOSで同一の座標系を設定
- **データ範囲**: 計算対象範囲を両ソフトで一致させる
- **バージョン互換性**: LandXMLスキーマのバージョン差異に注意
- **HELIOS API**: 連携にはHELIOS SDKのライセンスが必要な場合あり

---

### **代替案(プログラム不要)**
1. **CSV経由の連携**
- Civil3Dで点群データをCSV出力
- HELIOSでCSVをインポート
2. **SHPファイル利用**
- Civil3DでSHPエクスポート
- HELIOSでGISデータとして読み込み

> ⚠️ 実際の連携では各プロジェクトのデータ構造に合わせたカスタマイズが必要です。HELIOSの公式ドキュメント「HELIOS Python API Reference」や「Civil3D .NET Developer's Guide」が参考になります。

Civil3D用のDynamo本

2023-07-17 21:11:17 | Civil3D






Dynamo for Civil 3D https://amzn.asia/d/e8wxJKR

和書にはCivil3D用のDynamoの使い方の本が出版されていない。Revit用のDynamoの使い方なら何冊かあるのだが。

この本の著者はAutoCADのプラグインをC#で作成する方法を書いた方(アメリカ人)だ。

先日、この本を注文した。海外から発送されるので、まだ発送の手配がされておらず、いつ届くか分からない。

届いたら翻訳してみたい。


超音波地質探査

2023-04-22 11:05:16 | Civil3D

https://www.google.com/search?q=%E8%B6%85%E9%9F%B3%E6%B3%A2%E5%9C%B0%E8%B3%AA%E6%8E%A2%E6%9F%BB&oq=%E8%B6%85%E9%9F%B3%E6%B3%A2%E5%9C%B0%E8%B3%AA%E6%8E%A2%E6%9F%BB&aqs=chrome..69i57j0i546i649j0i546j0i546i649.14115j0j7&client=ms-android-sharp&sourceid=chrome-mobile&ie=UTF-8#ip=1

超音波地質探査でGoogle検索

他の参考記事
https://question.realestate.yahoo.co.jp/knowledge/chiebukuro/detail/1361089563/

地盤調査で、「スウェーデン式サウンディング試験」と「レイリー波表面探査試験」とではそれぞれにどのような特性やメリット、デメリットがありますか? ハウスメーカーで2階建ての家を建てようとしています。


あるメーカーの営業の方は、「スウェーデン式サウンディング試験」ではなく、「レイリー波表面探査試験」を行うべきで、このメーカーではこの方式を採用しているとのこと。理由は、「スウェーデン式サウンディング試験」では正確な調査ができず、過大な対策工事を余儀なくされる、これに比して「レイリー波表面探査試験」では正確な地盤調査が可能なので、不要な対策工事を避けられる、と主張されています。
一般的に、「スウェーデン式サウンディング試験」は「レイリー波表面探査試験」に比して地盤が弱いとの評価になりがちであるようにも聞きます。正確性といった観点で、どのように考えればよいでしょうか。


あくまでも二つの工法を比較した場合の表現です
スウェーデンの利点は実際にロッドを貫入しますのでロッドに付着した土の様子を実際に見ることができます おおまかですが地下水位の推測もできます 弱点は転石等が多い場合は計測ができないことがあります
地盤が固いとロッドが貫入できないので計測できないわけです

表面波探査は実際に貫入していないので 地盤の種類により支持層の範囲が曖昧になる場合があります

小規模建物の基礎設計ならば どちらの工法が正確であるとの表現は避けるべきだと考えられます
なぜなら地中のことは誰にもわからず調査結果も 地盤全体を考えると推測の域をすぎないからです

正確性にこだわらず、地盤補償等の保険を適用したほうが 知識や経験の無い方々にとっては楽だと思います。
万が一地盤が不等沈下した場合に補償を受けられるように設計することの方が重要だと思います
昔と違って 現在は大手保険会社数社の商品がありますので 都合のよい会社と相談することを勧めます。

LiDARで点群計測

2023-04-11 22:08:40 | Civil3D
DataLabs(本社:東京都中央区)も、2023年4月10日にiPhoneやiPadを使って、配筋検査を自動化する「Modely(モデリー)」の製品版を発売することになりました。
iPhone点群で配筋検査を自動化! 円形配筋にも対応できるDataLabsの「Modely」がリリース | 建設ITブログ

iPhone点群で配筋検査を自動化! 円形配筋にも対応できるDataLabsの「Modely」がリリース | 建設ITブログ

iPhoneなどのLiDARで配筋を点群計測し、クラウドで3D配筋モデル化。鉄筋ピッチやかぶり厚などを計測して配筋検査帳票を自動作成します。クラウド上で発注者とデータ共有する...

建設ITブログ | BIM、i-ConstructionからAI、ロボまでの最新情報

LiDARとは、iPhoneやiPadの上位機種に搭載された3Dスキャン装置で、5m程度離れたものまで点群計測することができます。

この点群をクラウドにアップロードし、検査範囲を画面上でクリックしていすると、その範囲内の配筋を検出して3Dモデルを自動作成します。

その3Dモデルから、鉄筋径や鉄筋ピッチなどを計測して設計値と比較し、配筋検査帳票を自動作成してくれるのです。

とのこと。

要するにiphone、ipadに搭載されている3Dスキャナーで点群データを取得して、3Dモデルを作成できるということだ。ただし5m離れた所までとのこと。

小規模の現場なら土木工事にも応用可能で、もちろんCivil3Dに点群データをインポートして製図できるはずだ。


新型3Dスキャナー「Revopoint RANGE」

2023-03-25 06:57:12 | Civil3D

新型3Dスキャナー「Revopoint RANGE」がクラウドファンディング中。大型物体・人体スキャンもできるプロシューマー向け

新型3Dスキャナー「Revopoint RANGE」がクラウドファンディング中。大型物体・人体スキャンもできるプロシューマー向け

Revopointは、新型3Dスキャナー「Revopoint RANGE」を発売します。本デバイスは、大型物体の3Dスキャン向けプロシューマー向けの3Dスキャナー。現在クラウドファンディング...

Mogura VR News



3Dレーザースキャナー

2023-03-23 20:18:28 | Civil3D

3Dレーザースキャン計測とは

3Dレーザースキャン計測とは

ベステラ株式会社が提供する、3Dレーザー計測について説明しています。

ベステラ株式会社

3Dレーザースキャナーによる点群データの取得はCivil3Dでモデリングするのにかなり役に立つと思われる。
最小ニ乗法などを活用して植物などのノイズをフィルタリングし、より高精度な測量が行える。

任意の曲面をフーリエ変換するPythonプログラム

2023-03-13 03:31:27 | Civil3D
ドローンを使って地表を撮影し、Civil3Dで作図するシーンをイメージして以下の質問を思い付いた。

任意の曲面をフーリエ変換するPythonプログラムを書いて


以下は、任意の曲面をフーリエ変換するPythonプログラムの例です。numpyとmatplotlibのライブラリを使用しています。このプログラムでは、フーリエ変換を2回実行して、元の曲面と復元された曲面を比較します。

import numpy as np import matplotlib.pyplot as plt # 2次元フーリエ変換 def fft2d(surface): return np.fft.fft2(surface) # 逆2次元フーリエ変換 def ifft2d(fourier_surface): return np.fft.ifft2(fourier_surface) # メイン関数 def main(): # 曲面を生成する x = np.linspace(-10, 10, 256) y = np.linspace(-10, 10, 256) xv, yv = np.meshgrid(x, y) surface = np.sin(np.sqrt(xv ** 2 + yv ** 2)) / np.sqrt(xv ** 2 + yv ** 2) # フーリエ変換する fourier_surface = fft2d(surface) # フーリエ逆変換して元の曲面を復元する restored_surface = ifft2d(fourier_surface).real # 結果をプロットする fig, axs = plt.subplots(1, 2, figsize=(8, 4)) axs[0].imshow(surface, cmap="gray") axs[0].set_title("Original Surface") axs[1].imshow(restored_surface, cmap="gray") axs[1].set_title("Restored Surface") plt.show() if __name__ == "__main__": main()

このプログラムは、-10から10までの範囲のxとyの値を持つ256x256のメッシュグリッドを作成し、それに対してsin(sqrt(x^2 + y^2))/sqrt(x^2 + y^2)を適用して、曲面を生成します。その後、生成された曲面に対して2次元フーリエ変換を実行し、フーリエ逆変換によって復元された曲面を計算します。最後に、元の曲面と復元された曲面を2つのサイドバイサイドのサブプロットでプロットします。

以下はPydroidでの実行結果






ドローンで地表を撮影した際に得られた高低差のデータを利用して加工すれば、Civil3Dに自動で作図させることも可能になると思われる。



Civil3Dで自動作図するUiPathのコードをPythonで書くには?

2023-03-12 20:25:22 | Civil3D

Civil3Dで自動作図するUiPathのコードをPythonで書いてください

Civil3DとUiPathの連携をPythonで実現する方法はいくつかありますが、ここではPythonのCOMライブラリであるwin32comを使用した方法を紹介します。

まず、win32comをインストールする必要があります。コマンドプロンプトやターミナルで以下のコマンドを実行してください。

pip install pywin32

次に、以下のコードを参考にして、必要なモジュールをインポートし、Civil3Dを起動して、ドキュメントを開くためのオブジェクトを作成します。

import win32com.client
# Civil3Dのオブジェクトを取得する
app = win32com.client.Dispatch("AutoCAD.Application")
doc = app.ActiveDocument
# 新しいドキュメントを作成する場合
# doc = app.Documents.Add()

次に、UiPathのInvoke Codeアクティビティで実行するような自動作図のコードをPythonに移植します。UiPathのInvoke Codeアクティビティでは、入力引数と出力引数を指定することができますが、Pythonでは関数を定義して、引数を渡すことで同じようなことができます。

以下は、簡単な例として、直線を描く関数を定義する例です。

def draw_line(start_point, end_point):
line = doc.ModelSpace.AddLine(start_point, end_point)
return line

この関数は、Civil3Dのドキュメントのモデルスペースに、指定された始点と終点の座標を持つ直線を追加し、作成された直線オブジェクトを返します。

この関数を呼び出すには、以下のようにします。

start_point = win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, [(0.0, 0.0, 0.0)]) end_point = win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, [(10.0, 0.0, 0.0)]) line = draw_line(start_point, end_point)

ここでは、始点と終点の座標を3つの要素を持つ配列で表し、それをwin32com.client.VARIANTでラップしています。これは、COMオブジェクトのメソッドやプロパティに渡すための形式です。

最後に、作成した自動作図のコードをPythonで記述し、必要な関数やメソッドを呼び出してCivil3Dのドキュメントを操作します。

以上の手順を参考にして、Civil3Dで自動作図するUiPathのコードをPythonで書くことができます。