52226


現在、IJCAD 6.4 Pro（C++）からIJCAD 2018 Pro（C#）へカスタマイズコマンドの移植を行っています。

旧環境の方で、ハッチを作成しているコマンドがございます。  
そのコマンド内で、標準コマンド「.HATCH」を実行しています。

[code]

    ads_command(RTSTR, ".HATCH",
                RTSTR, "ANSI31",
                RTSTR, "100",
                RTSTR, "0",
                RTENAME, entParent,
                RTSTR, "",
                RTNONE);
    
[/code]

※entParentはこちらを呼び出す前に作成した閉じたポリラインの図形名

同じことを新環境でやろうと考え、以下の2つを行いました。

①acedCmdを用いて、同じように標準コマンド「.HATCH」を行った。

[code]

    ResultBuffer req = new ResultBuffer();
    req.Add(new TypedValue((int)ResultCode.RTSTR, ".Hatch"));
    req.Add(new TypedValue((int)ResultCode.RTSTR, "ANSI31"));
    req.Add(new TypedValue((int)ResultCode.RTSTR, "100"));
    req.Add(new TypedValue((int)ResultCode.RTSTR, "0"));
    req.Add(new TypedValue((int)ResultCode.RTENAME, entParent));
    req.Add(new TypedValue((int)ResultCode.RTSTR, ""));
    acedCmd(req.ResbufObject);
    
[/code]

※entParentはこちらを呼び出す前に作成した閉じたポリラインのObjectId

②Hatchオブジェクトを用いて、同形式のハッチを作成した。

[code]

    Document doc = Application.DocumentManager.MdiActiveDocument;
    Database db = doc.Database;
    Hatch hatch = new Hatch();
    hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31");
    hatch.PatternScale = 100;
    hatch.PatternAngle = 0;
    ObjectIdCollection objIds = new ObjectIdCollection();
    objIds.Add(entParent);
    hatch.Associative = true;
    hatch.AppendLoop(HatchLoopTypes.Default, objIds);
    hatch.EvaluateHatch(true);
    using (Transaction tx = db.TransactionManager.StartTransaction())
    {
        BlockTable bt = tx.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
        ObjectId modelspaceObjectId = blockTable[BlockTableRecord.ModelSpace];
        BlockTableRecord btr = tx.GetObject(modelspaceObjectId, OpenMode.ForWrite) as BlockTableRecord; 
        btr.AppendEntity(hatch);
        tx.AddNewlyCreatedDBObject(hatch, true);
        tx.Commit();
    }
    
[/code]

※entParentはこちらを呼び出す前に作成した閉じたポリラインのObjectId

①では、ハッチが作成されず、②ではハッチは作成されたが、オブジェクトタイプが旧環境とは異なり「ブロック参照」ではなく「ハッチング」となってしまいました。

調べてみたところ、  
IJCAD 6.4 Proで「HATCH」コマンドを行った際に作成されるのは「ブロック参照」になりますが、IJCAD 2018
Proで「HATCH」コマンドを行った際に作成されるのは「ハッチング」になります。

その後の処理でハッチがブロック参照であることを前提としている処理があるため、新環境でもハッチを「ブロック参照」として作成したいと考えております。

そこで下記の方法を行うと考えています。

1.ハッチングを作成する。

2.ハッチングを分解し、線分にする。

3.分解してできた全線分を名無しのブロックにする。

上記の方法でもできるかと考えております。※未検証

ただし、標準的な方法があれば、その方法を実装したいと考えております。  
これ以外に標準的な方法がございましたら、教えていただけないでしょうか？

□旧環境  
OS：Windows7  
IJCAD：IJCAD 6.4 Pro  
VisualStudio：Microsoft Visual C++ 6.0  
言語：C++

□新環境  
OS：Windows10  
IJCAD：IJCAD 2018 Pro  
VisualStudio：Visual Studio 2017  
言語：C#


CC BY-SA 4.0
2019-01-22T05:59:51.713
52197
2019-01-23T02:01:54.063
2019-01-22T06:03:49.193
3060
31605
question
.net ijcad
IJCAD 2018 Proで、IJCAD 6.4 Proで「HATCH」コマンドを行った時と同じ結果にしたい


IJCAD2018では、ハッチングのようなブロック参照を作成するような標準機能はありません。  
お考えの通り、ハッチングオブジェクトを分解してブロック化する必要があります。

ただ、ブロック参照にしてしまうとハッチングとしての機能が失われてしまいますので、  
この移植の際に、ブロック参照ではなくハッチングを扱う処理に変更した方が良いと思います。


CC BY-SA 4.0
2019-01-23T02:01:54.063
52226
2019-01-23T02:01:54.063
52197
answer