Graebert Japan ヘルプセンター

9/17開催 | 無料オンラインイベント「Graebert neXt Japan 2026」

  1. Home
  2. /
  3. FAQ
  4. /
  5. 開発者向け情報
  6. /
  7. コマンド間のデータ共有について

コマンド間のデータ共有について

ARESのカスタムコマンド間でデータを共有する方法は複数あります。

システム変数 USER

システム変数 USERI1~5、USERR1~5、USERS1~5 を使ってコマンド間でデータを共有することができます。

USERI1~5、USERR1~5 は図面に保存されますが、USERS1~5 は図面に保存されません。

; LISP では setvar 関数と getvar 関数があります
(setvar "USERI1" 10)
(setq num (getvar "USERI1")

(setvar "USERR2" -2415.15)
(setq num (getvar "USERR2")

(setvar "USERS5" "ABCDEFG")
(setq text (getvar "USERS5")

; C++ では fdt_getvar 関数と fdt_setvar 関数があります
	fdt_resbufW rb; // データは fdt_resbufW 構造体に格納されます
	FXAPI()->fdt_getvarW(L"USERS5", &rb);
	FXAPI()->fdt_free(rb.resval.rstring); // 取得した文字データは使用後に解放が必要です。
	rb.resval.rstring = L"You can set any value from constants.";
	FXAPI()->fdt_setvarW(L"USERS5", &rb);

; C# では GetSystemVariable 関数と SetSystemVariable 関数があります
	String text = System.Converter.ToString( Application.GetSystemVariable("USERS5"));
	Application.SetSystemVariable("USERS5", "Sample Data");

INI ファイル

サポートフォルダの ARES Commander 2025.ini ファイルにデータを保存、取得するAPIを提供しています。

; LISP Commander/Standard 共 PCADLSPTOOLS.DLL の 以下の関数が使用できる
(setq num (fx_getcfgint "Jwwin" "SetByLayer" 0))
(Fx_setcfgInt "Jwwin" "SetByLayer" num)
(setq str (fx_getcfgstr "JdLoadFile" "Name" "NAME"))
(fx_setcfgstr "JdLoadFile" "Name" str)

; C++ には fdt_getconfint, fdt_putconfint, fdt_getconfStringW, fdt_putconfstringW 関数があります。
	TCHAR buf[BUFSIZ];
	FXAPI()->fdt_getconfstringW(L"JdLoadFile", L"Name", L"NAME", buf, BUFSIZ);
	FXAPI()->fdt_putconfstringW(L"JdLoadFile", L"Name", buf);

; C# は .Net Frameworkの関数を使用してください

テキストファイルやレジストリへのアクセス

LISPにはテキストファイルの読み書き関数 open close read-line write-line print などがあります。

Visual LISP 拡張のレジストリアクセス関数もあります(Windows 向け ARES のみ)

C++ はテキストファイルのアクセスに標準Cライブラリ、MFCライブラリ、C++ ストリーム入出力を使用できます。

レジストリへのアクセスにはWin32 API や MFCライブラリが使用できます。

拡張データとして図面に保存する

データベースオブジェクトに任意のデータを追加することができます。1つのデータベースオブジェクトに最大16キロバイトのデータが付加できます。

;LISP で既存のデータベース
(setq pt (getpoint "拡張データに追加する点"))
(regapp "SAMPLE_APPID")      ;拡張データ名を図面に登録する必要がある
(setq el (entget (entlast))) ;データベースオブジェクトをリストとして取得する
(setq data (list (cons 1001 "SAMPLE_APPID")(cons 1070 1)(cons 1010 pt)))
(entmod (append el data))    ;データベースオブジェクトに拡張データを追加する

追加したデータを取得します

(setq el (entget (entlast) '("SAMPLE_APPID"))) ;拡張データ付きリストとして取得する
(setq data (cadr (assoc -3 el)))  ;拡張データ名とデータがリストになる
(setq pt (cdr (nth 2 data)))      ;座標データをデータの順序指定で取得する

C++の場合は次のようになります

// 拡張データ名を図面に登録する
	CFxDatabase *pDb = pCmdCtx->GetFxDocument()->GetFxDatabase();
	OdDbRegAppTablePtr pTbl = pDb->getRegAppTableId().safeOpenObject(OdDb::kForWrite);
	if (pTbl->getAt(L"SAMPLE_APPID").isNull())
	{
		OdDbRegAppTableRecordPtr pRec = OdDbRegAppTableRecord::createObject();
		pRec->setName(L"SAMPLE_APPID");
		pTbl->add(pRec);
	}
// 拡張データを図形に追加する
	OdResBufPtr pRbuf = OdResBuf::newRb(OdResBuf::kDxfRegAppName,L"SAMPLE_APPID");
	pRbuf->setNext(OdResBuf::newRb(OdResBuf::kDxfXdInteger16, OdInt16(1)));
	pRbuf->last()->setNext(OdResBuf::newRb(OdResBuf::kDxfXdReal, (double)-1.0));
	OdDbObjectId id = pFxSelSet->GetId(0); // 選択セットからオブジェクトIDを取得
	OdDbEntityPtr pEnt = id.safeOpenObject(OdDb::kForWrite);
        pEnt->setXData(pRBuf);

拡張レコードとして図面に保存する

レイアウトやグループを管理するディクショナリオブジェクトにユーザー固有のデータを格納するオブジェクトを追加することができます。

; 拡張レコードをリストとして用意します
(setq xrec (list (cons 0 "XRECORD")(cons 70 1)(cons 300 "sample")))
; 図面に未登録のデータベースオブジェクトを作成します
(setq obj (entmakex xrec))
; レイアウトやグループを管理するディクショナリオブジェクトに追加します
(dictadd (namedobjdict) "SAMPLE_XOBJ" obj)
; レイアウトやグループを管理するディクショナリオブジェクトから取得します
(setq obj (dictsearch (namedobjdict) "SAMPLE_XOBJ"))

C++の場合は次のようになります。

// ルートディクショナリを取得
OdDbDatabase* pDb = pDoc->GetFxDatabase();
OdDbDictionaryPtr pRoot = OdDbDictionary::cast(
    pDb->getNamedObjectsDictionaryId().safeOpenObject());

// 拡張レコードを取得
OdDbXrecordPtr pRec = OdDbXrecord::cast(pRoot->getAt(L"SAMPLE_XOBJ", OdDb::kForRead));
if (!pRec.isNull())
{
   OdResBufPtr pRb = pRec->rbChain();
   ...
}

// 拡張レコードオブジェクトを作成
OdDbXrecordPtr pRec = OdDbXrecord::createObject();
 OdResBufPtr pRb = OdResBuf::newRb(70, OdInt16(1));
 pRb->last()->setNext(OdResBuf::newRb(300, text));
 ...
 pRec->setFromRbChain(pRb);
 pRoot->setAt(L"SAMPLE_XOBJ", pRec);

短縮URL: https://jp-help.graebert.com/?p=38593

ARES CAD 活用リソース

ARES Commander 2027 リリース

ARES の最新バージョン ARES 2027 がリリースされました。ARES 2027 は、AI・自 動化・BIM・クラウドという、CADの各領域を強化した最新版です。

DWG図面をリンク1つで共有

表示専用リンクを使えば、DWG図面をリンクだけで安全に共有できます。
CADソフトを持っていない相手でもブラウザから閲覧し、コメントやマークアップを追加できます。

DWG図面を無料でオンライン表示

ARES Kudoの無料ビューアーを使えば、DWG図面をブラウザから簡単に表示できます。
インストール不要で図面の確認や計測ができ、コメントやマークアップで共同作業も可能です。