AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CADを考える:属性
前回は、独自要素の表データについて考えてみました。独自要素として他に考えられるものとしては、例えば、塗り潰しをもっと簡易に扱うための、三角形塗り潰し、四角形塗り潰し、等があるかもしれません。ですが、ハッチング(塗り)で実現は可能です。但し、DXFファイルで保存する際には、あった方が便利だと判断した場合には、実装するのも良いかもしれません。また、Jw_cadにあるような円ソリッド図形(扇形・弓形・円環)等も考えられます。しかし、DXFやSXFにそれそのものな要素はありません。が、JWW形式データとしてのやり取りを重要視する場合には、そういった要素データを実装するのも良いかもしれません。その他、種々様々な要素データが考えられますが、キリがないのでこの辺りにしておきます。
 
SXF仕様では、その他の機能として、「属性付加機構」というものがあります。図形に属性(図形が持つ意味)を付けることが出来る仕組みのことで、「SXF Ver.3.1 属性セット策定ガイドライン」にまとめられています。それによると、
 属性・・・図形情報に与える各種の意味情報
      例えば、線分に「鉄筋」という属性を付けて
      その線が鉄筋を意味する、という事になる
 属性セット・・・属性の扱い方までを取り決めたもの
 
 属性セットは用途別に分類されていて
   「図面データ交換補助セット」
   「図面管理セット」
   「図面高度利用セット」
 があり、そのガイドラインでは「図面高度利用セット」を対象とする
 
 属性セットを策定する際の注意点として
 
・利用する分野で一般的であると判断でき、業界全体で広く活用できること
・特定のアプリケーションに依存しないこと
・与える目的が明確であること
 属性セットを策定する際に、どの業務を効率化するのかの着目点として
 
・専用 CAD と呼ばれているような、特定の分野向けのアプリケーションが既に実現している処理
・従来人間が図面から読み取っていた処理
・図面からしか計算できない処理
 属性セットを策定する際の必要な知識として
 
・対象となる分野の業務に関する知識
・CAD ソフトウェア等のアプリケーションの機能に関する知識
・Ver.3.1 の仕様に関する知識
のように記載されています。正直、話が広すぎて、具体的な例も無い状態では、実際のところよく分かりません。
 
属性の具体的な表現方法として、
  ・属性ファイル用(ATRF)
    1つの図形に複数の属性を付けることが可能
  ・単一属性用(ATRU)
    共通属性セット以外では利用不可
  ・文字フィーチャ用(ATRS)
    共通属性セット以外では利用不可
があるとの事。
「共通属性セット」については、「SXF Ver.3.1 仕様書・同解説附属書 共通属性セット編」を参照せよとの事です。属性付加機構については、「SXF Ver.3.1仕様書・同解説附属書属性付加機構編」にも詳しく掲載されています。
 
「SXF Ver.3.1仕様書・同解説附属書共通属性セット編.pdf」は
  ・背景色属性セット
    異CAD間での背景色の交換を行うための仕様
  ・表題欄属性セット
    図面表題内で扱う、事業名・工事名・契約区分・図面名・図面番号
     図面総数・図面種別・尺度・年月日・会社名・事務所名
  ・フィーチャ定義属性セット
    画像(ファイル名)・等高線(等高線の高さ)
について記載されています。
 
「SXF Ver.3.1仕様書・同解説附属書属性付加機構編.pdf」では、属性付加機構の仕様について記載されています。
 
属性の表し方
属性名  :図形に与える属性の名称
属性値  :図形に与える属性の内容
属性タイプ:予め定める文字列で、属性の性質を示す
単位:予め定める文字列で、属性が数値である場合の単位を示す
・属性名には属性付加機構で予め定める既定義属性名と、システムで任意に使用することのできる任意属性名とがあり、既定義属性名を使用する場合は属性タイプと単位を省略することができる。また、既定義属性名を持つ属性を「既定義属性」と呼ぶ。
・単位は省略可能で、省略された場合はデフォルト単位が採用される。
※属性付加機構で使用する既定義属性名、属性タイプ、単位の一覧は 5 属性情報一覧を参照のこと。
 
 
属性付加機構の種類
・属性ファイル用属性付加機構(ATRF)
・単一属性用属性付加機構(ATRU)
・文字フィーチャ用属性付加機構(ATRS)
ただし、単一属性用属性付加機構(ATRU)および文字フィーチャ用属性付加機構(ATRS)は、原則として共通属性セット以外では利用してはならない。
これについては上記でも記載がある通りです。つまり通常の属性付加は ATRF方式、つまり、属性指定は属性ファイルで行うという事ですね。
 
 
属性付加機構の適用
・属性付加機構は、「幾何要素/表記要素」および「部分図、複合曲線以外の構造化要素」に適用する。
・属性付加機構を適用したことにより作成された作図グループ用複合図形定義/配置フィーチャは、図形がグループ化されているとは解釈しない。
・図形をグループ化し、そのグループに属性を付与する場合は、通常の作図グループとして定義し、その作図グループ用複合図形定義/配置フィーチャに、属性付加機構を適用する。
つまり属性指定は、属性を付けたい要素を作図グループにしてしまい、以下に記載がありますが、その作図グループ名称を属性用のものにしてしまう、という事ですね。
例えば「AutoCAD」での属性=属性定義+属性文字列では、属性を付けたい図形をブロック化して、その中で、属性定義、属性文字列を付けておく、というような事を行いますが、これとは手法がかなり違う感じです。
また、他のCADでは、要素データIDに対して別リスト化された属性一覧から参照させる、というものもあるかもしれませんが、その手法とも異なります。
 
属性付加のため作図グループ化を行ったものは、作図グループとして扱わない、というのも何だか奇妙な具合ですが・・・。通常の作図グループ同様、「作図グループ定義1つに対し、1度のみ配置可能」という制約もあるのでしょうし。この辺りは、データ構造としては、余り気にしなくてよさそうな感じがします。
 
あと、ある1つの図形として作図グループ化したものに対して属性を指定する場合は、更にそれを属性付加機構の作図グループにする、という事ですが、属性付加機構の作図グループは、複数の要素を持つ事が可能なのか?というのは、いまひとつ謎ではあります。
 
 
属性ファイル
・属性ファイルは1図面ファイルにつき1ファイルのみ使用できるものとする。
・属性ファイル名は以下の通りとし、図面が存在するフォルダと同一フォルダに存在しなければならない。
   図面ファイル名.SAF
属性ファイルについては、SXF形式ファイル保存の際に、そういうファイルを保存すれば良いとして通常はデータ内部に属性データを抱えておく、という手法と、ファイルを最初から用意しておき、常時、そのファイルを参照する手法、という2パターンが考えられます。
 
以下、属性付加機構での作図グループ名称の指定方法についてです。
 
属性ファイル用属性付加機構
属性ファイルを利用して図形に属性を付与する場合は、作図グループ名称を以下の通りに命名する。
$$ATRF$$図形識別番号$$属性ファイル名
 ATRF:属性ファイル用の属性付加機構であることを示す接頭語
 図形識別番号:SXFファイル中の図形を識別するための任意の
      番号で、図面ファイル中で一意でなければならない
 属性ファイル名:属性が存在する属性ファイルの名称(省略可)
属性ファイルは1つのみ、とあるのに、(省略可とありますが)属性ファイル名の指定が存在する意味がよく分かりません。
 
 
【特別な属性値】
図面中に作成される文字列には、例えば土工量計算に利用される横断図に作成される断面積のように、その文字列の内容をそのまま属性値として採用したい場合があり、このような場合には、属性値として
    “$$$”
を指定する。
SXF対応ソフトウェアは、属性値として“$$$”が指定されている場合、実際の属性値は文字列が示す内容を採用しなければならない。
尚、この属性値は、どのような属性タイプが指定されていても有効であるが、文字列に付与されている属性にのみ指定できるものとする。
文字列のみ、とありますが、これは文字要素データのみ、ではなくて、文字列のデータ項目内容を持つ要素データのみ、と解釈して良いのでしょうか?さもないと各種寸法値などは属性値にもっていけなくなってしまいますので。
 
逆に、属性ファイルで指定した属性値を、その要素の文字列内容に反映させる、という事は出来ないのだろうか?と思ってしまいますが(Jw_cadでの参照文字列のようなもの)、そういった記述は無いようです。
 
 
【図形識別番号のみの付与】
図形識別番号は、前述のとおりSXFファイル中に作成されている図形と、属性ファイル中に定義されている属性との対応をとるためのものであり、原則として一対となっていなければならないが、以下の場合にのみ図形識別番号だけを図形に付与する(=対となる図形識別番号が属性ファイル中に存在しない)ことができる。
ターゲット属性の属性値である図形識別番号で示される、ターゲット先となる図形に付与する場合で、ターゲット先の図形には属性が不要な場合
ターゲット属性というのは、何らかの関係がある別の要素を参照させたい場合、その別の要素データの図形識別番号を指定する事が出来る属性名称の事のようです。
例えば、長方形と、その長方形の面積を示す文字が作図されている場合、長方形に属性付加を行い(図形認識番号=100)、文字に属性付加を行い(図形認識番号=101)、
 
100
  属性〜
  属性名:ターゲット(INN) 属性値:101
  属性〜
101
  属性名:面積(ARE) 属性値:$$$
のような関連性を付けたい場合に利用するようです。
 
で、「図形識別番号のみの付与」というのは、上記の属性ファイル内での「101」以降が存在しない場合、という事に相当するようです。ただ、そういう事が仕組みとしては可能、というだけで、意味を持たせない指定方法による効果というのはどういうものなのだろうか?という疑問はあります。
 
また、上記のような、長方形の図形+面積を意味する文字要素データの関連付けを行うような場合、CAD上で長方形を拡大縮小変形させた場合に面積値も変動するでしょうけれども、そのような場合に、自動的に文字要素データの文字列内容をそれに合わせて変化させるのか? つまり、属性を付加している図形は、その属性の意味に応じて、要素データの内容(文字要素データの文字列内容?)を変化させなければならないシステムを構築せねばならない、という事は、付け得る属性全ての意味を把握し、そのアルゴリズムを実装せねばならない、となってくると、CADシステム作成には相当な負荷が掛かってくるような感じがしますね。
 
 
単一属性付加機構
図形にただ一つの属性を与える場合は、属性ファイルを利用することが冗長である場合があることから、以下の命名規約を定める。
$$ATRU$$図形識別番号$$図形名称$$属性名$$属性値$$属性タイプ$$単位
 ATRU:単一属性用の属性付加機構であることを示す接頭語
 図形名称:図形を識別するための、任意の文字列。
    一意である必要はない。
・図形名称以降は省略可(ただし、例えば図形名称を省略して属性名を記述する、というような途中省略はできない)。
共通属性セット以外では利用不可、との事なので、通常利用は不可でしょう。
 
 
文字フィーチャ用属性付加機構
文字フィーチャは、図面に記載される文字列そのものが属性値であることが多く、属性名だけを付与できれば良い場合が多いことから、属性ファイルを使用せずに属性名を付与する機構として以下の命名規約を定める。
$$ATRS$$図形識別番号$$属性名$$属性タイプ$$単位
 ATRS:文字フィーチャ用の属性付加機構であることを示す接頭語
・属性タイプ、単位は省略可(ただし属性タイプを省略して単位を記述することはできない)。
共通属性セット以外では利用不可、との事なので、通常利用は不可でしょう。
 
この後は、属性ファイルの内容、属性の内容について具体的な事が記載されています。属性ファイルそのものは、属性データを構築しておけば取り合えずSXF形式ファイルの入出力を実装するまでは余り考えなくても良いと思います。属性付加は、作図グループとして行いますから、そこで記述する図形識別番号に対する属性内容の一覧を管理するデータを構築すれば良いと思われます。
 
 
それでは、属性データ内容について考えます。属性付加は、属性を付けたい要素データを作図グループとし、そのグループ名称を上記のように
$$ATRF$$図形識別番号$$属性ファイル名
 又は $$ATRF$$図形識別番号
$$ATRU$$図形識別番号$$図形名称$$属性名$$属性値$$属性タイプ$$単位
 又は $$ATRU$$図形識別番号$$図形名称$$属性名$$属性値$$属性タイプ
 又は $$ATRU$$図形識別番号$$図形名称$$属性名$$属性値
 又は $$ATRU$$図形識別番号$$図形名称$$属性名
 又は $$ATRU$$図形識別番号$$図形名称
 又は $$ATRU$$図形識別番号
$$ATRS$$図形識別番号$$属性名$$属性タイプ$$単位
 又は $$ATRS$$図形識別番号$$属性名$$属性タイプ
 又は $$ATRS$$図形識別番号$$属性名
として(但し、共通属性セット以外は ATRF使用)、
以下の属性データを作成する、という事にします。
UnitData.pas
TAttributeData = record  // 属性
 name : string ;     // 属性名
 value : string ;    // 属性値
 atype : string ;    // 属性タイプ
 aunit : string ;    // 単位
end;
 
TAttibuteList = record  // 属性リスト
 zid : integer ;     // 図形識別番号
 Number: Integer ;    // 属性の数
 att : array of TAttributeData ; // 属性
end;
 
TDataClass = class
 public
  { Public 宣言 }
  ・・・
  zAtt : array of TAttibuteList ; // 属性リスト
  zAttN : Integer ;        // 数
属性リストのデータは、図形データと一緒にメモリ初期化・解放をするものとします。勿論、属性リストだけを簡単にメモリ解放できるよう、TDataClassには「procedure DataClearAttribute ;」を追加しています。
 
属性を付加するためには、まず、属性付加のための作図グループを作成します。下記の場合は、図形識別番号は「100」となります。
CData.AddFZukeiDef('$$ATRF$$100',3);
 
次に、作図グループを配置します。部分図Aの中に配置します。作図グループですので、配置位置は(0,0)、0°、尺度1:1固定となります。
CData.AddDataFZukei('部分図A',0,'$$ATRF$$100',0,0,0,1,1);
 
属性用の作図グループ「$$ATRF$$100」に、図形を登録作図します。下記ではBスプライン曲線を作図しています。
CData.AddDataBspline('$$ATRF$$100', 1,10,5,3, 30,5, lx,ly);
 
属性を付加します。ただのテストなので下記のようにしています。
CData.AddDataAttribute(100, '曲線タイプ','Bスプライン','STR','');
属性を複数付加する場合は、同じように記述していきます。
 
なお、ここでは、内容が正しいかどうか等のチェックは行っていません。
 
ここではまだ実装していませんが、CADシステム的には、既に作図してある要素データを選択し、それに対して属性を付加したいという場合ですが
1)作図グループを作成
2)選択した要素データがどこにあるかをチェックし、部分図ならその部分図の中に作図グループを配置
3)選択した要素データを作図グループ内へ移動
4)属性を付加
のような流れになるでしょう。
そのため、部分図や作図グループや作図部品を複数またがるような選択は出来ない操作体系にしておく必要はあるでしょう。
 
属性名・属性タイプ・単位にどんなものが使えるのか、については、以下「SXF Ver.3.1仕様書・同解説附属書属性付加機構編」より抜粋です。
 









 
 
それでは、ここまでのテストプログラムです。実行ファイル、gdiplus.dll、gdipフォルダは入っていません。ソースのみです。
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
CADを考える
 ▲PREV
 ▼NEXT
M7
Jw_cad
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.