home link download back number special issue

HMDT - Special Issue / Sketch BP / 円弧ツールのドローオブジェクトの保存と読み込み


- Modification -

円弧ツールのドローオブジェクトの保存と読み込み

ドローオブジェクトの保存と読み込みに必要なもの

ここでは、円弧ツールで描いたドローオブジェクトを保存することを考えよう。

前の節で考察している通り、円弧のドローオブジェクトを一意に決定するには、領域と弧の象元の情報が必要。そのうち、領域の情報は親クラスである SKTGraphic が保存してくれる。だから、弧の象元の情報だけ取り扱えばいいんだ。

SKTGraphic では、オブジェクトの保存と読み込みに、propertyListRepresentationloadPropertyListRepresentation: をオーバーライドするんだ。

Sketch/DocumentModel.subproj/SKTGraphic.h
- (NSMutableDictionary *)propertyListRepresentation;
- (void)loadPropertyListRepresentation:(NSDictionary *)dict;

このメソッドの中で、弧の向きを読み書きしてやるんだ。具体的には、NSDictionary の中に入れたり、読み出したりする。


円弧ツールのドローオブジェクトの保存と読み込みの実装

実装は比較的簡単。


キーワード

ドローオブジェクトの情報は NSDictionary の中に入れらるんで、そのためのキーワードを設定する。

Sketch/DocumentModel.subproj/SKTArc.m (created by mkino)
NSString *SKTArcDirectionKey = @"ArcDirect";

このキーワードは、外部へ公開する必要はなし。SKTArc だけが使えればいいんだ。もちろん、ユニーク性は保証しないといけないけど。


書き込み(propertyListRepresentation

書き込みをするには propertyListRepresentation をオーバーライドする。

Sketch/DocumentModel.subproj/SKTArc.m (created by mkino)
- (NSMutableDictionary *)propertyListRepresentation {
    NSMutableDictionary *dict = [super propertyListRepresentation];
    [dict setObject:[NSNumber numberWithInt:[self direction]] 
             forKey:SKTArcDirectionKey];
    return dict;
}

まず、親の propertyLisRepresentation を呼び出してやる。その後、弧の情報である _direction を NSDictionary に設定する。さっきのキーワード SKTArcDictionaryKey と共にね。


読み出し(flipHorizontally, flipVertically

続いて読み出し。これも、まぁ、似たような感じ。

Sketch/DocumentModel.subproj/SKTArc.m (created by mkino)
- (void)loadPropertyListRepresentation:(NSDictionary *)dict {
    id obj;
    
    [super loadPropertyListRepresentation:dict];

    obj = [dict objectForKey:SKTArcDirectionKey];
    if (obj) {
        [self setDirection:[obj intValue]];
    }
}

まず、親の loadPropertyListRepresentation を呼んで、必要な情報を読ませる。その後、SKTArcDirectionKey に対応するオブジェクトを読み出す。nil じゃなかったら、intValue を取り出して、setDirection してやるんだ。


実際に、ドローオブジェクトの情報が書き出されたファイルは、こんな感じ。

{
    DrawDocumentVersion = 1; 
    GraphicsList = (
        {
            ArcDirect = 2; 
            Bounds = "{{77, 166}, {53, 72}}"; 
            Class = Arc; 
            DrawsFill = NO; 
            DrawsStroke = YES; 
            FillColor = <040b7479 70656473 74726561 6d8103e8 
                         84014084 8484074e 53436f6c 6f720084 
                         84084e53 4f626a65 63740085 84016303 
                         84026666 010186>; 
            StrokeColor = <040b7479 70656473 74726561 6d8103e8 
                           84014084 8484074e 53436f6c 6f720084 
                           84084e53 4f626a65 63740085 84016303 
                           84026666 000186>; 
            StrokeLineWidth = 1.00; 
        }
    ); 

'ArcDirect' っていう項目が、弧の象元を表しているんだ。


- ソースコードのダウンロード -

HMDT - Download / Sketch BP


Home | Link | Download | Back Number | Speciall Issue

Sketch BP

mailto: mkino@xd5.so-net.ne.jp

HMDT