過去ログ
キーワード 条件 表示

Delphi 遅延バインディング グループ作成  izawa - 2025/05/02(Fri) 14:37 No.6197

const
 acAlignmentMiddleLeft = 9;
var
 app: OleVariant;
 doc: OLeVariant;
 vpt1, vpt2, vpt3 : OleVariant;
 txt : OleVariant;
 line : OleVariant;
 grp : OleVariant;
 ents : OleVariant;
 mspc: OleVariant;
 head, s, grpName : string;
 cnt, i, j, entCnt: integer;
 sl: TStringList;
 grpFlag: boolean;
begin
 if isBcadActive then begin
  App := GetActiveOleObject(gbProgID);

  SetForegroundWindow(app.HWND);
  Doc := App.ActiveDocument;
  Mspc := Doc.ModelSpace;

  vpt1 := VarArrayCreate([0, 2], varDouble);
  vpt2 := VarArrayCreate([0, 2], varDouble);
  vpt3 := VarArrayCreate([0, 2], varDouble);
  ents := varArrayCreate([0, 0], varDispatch);
  entCnt := 0;

  // LINE を作成
  vpt1[0] := 10; vpt1[1] := 6; vpt1[2] := 0;
  vpt2[0] := 80; vpt2[1] := 6; vpt2[2] := 0;
  line := mspc.AddLine(vpt1, vpt2);
  Inc(entCnt);
  VarArrayReDim(ents, entCnt-1);// 添字の上限を変更
  ents[entCnt-1] := line;

  // TEXT を作成
  vpt3[0] := 10; vpt3[1] := 10; vpt3[2] := 0;
  txt := mspc.AddText('GROUP_TEST', vpt3, 2.5);
  txt.Alignment := acAlignmentMiddleLeft;
  txt.TextAlignmentPoint := vpt3;
  Inc(entCnt);
  VarArrayReDim(ents, entCnt-1);// 添字の上限を変更
  ents[entCnt-1] := txt;

  // 重複しないグループ名を作成
  head := 'TEMP'; // グループ名 TEMP00 〜 TEMP99 を想定
  cnt := Doc.Groups.Count;
  grpFlag := False;
  if cnt = 0 then begin
   grpFlag := True;
   grpName := head + '00';
  end
  else begin
   sl := TStringList.Create();
   try
    for i := 0 to cnt-1 do
     sl.Add(UpperCase(Doc.Groups.Item[i].Name)+#9);
    sl.Sorted := True;
    Memo1.Lines.Assign(sl);
    for i := 0 to sl.Count-1 do begin
     for j := 0 to 99 do begin
      s := head + Format('%.2d', [j]) + #9;
      if sl.IndexOf(s)<0 then begin
       grpName := Trim(s);
       grpFlag := True;
       break;
      end;
     end;
     if grpFlag then break;
    end;
   finally
    sl.Free;
   end;
  end;

  // グループを作成
  if grpFlag then begin
   grp := Doc.Groups.Add(grpName);
   // すでに同じグループ名が存在するときは図形が追加される
   grp.AppendItems(VarArrayRef(ents));
  end;
 end;
※半角スペース2個を全角スペースに置換しています。

Re: Delphi 遅延バインディング グループ作成  izawa - 2025/05/02(Fri) 16:09 No.6198

同じように、SelectionSet への図形の追加は、
  ss.AddItems(VarArrayRef(ents));
ですね。


Delphi 遅延バインディング 座標(配列)の受け渡し  izawa - 2025/05/01(Thu) 10:46 No.6195

>>同じ内容の VBA コードは他の CAD でもすんなりと動くのですが・・・。
>Delphi でも事前バインディングであれば動きますね。
>http://www.izawa-web.com/txt/Unit96.pas
回答が、過去ログ 2023年8月にありました。↓
|Delphi レイトバインディングで動きました。
|var
|vpts : OleVariant;
|....
|vpts := varArrayCreate([0, 5], varDouble);
|vpts[0] := 100;
|vpts[1] := 100;
|vpts[2] := 200;
|vpts[3] := 200;
|vpts[4] := 300;
|vpts[5] := 100;
|LWPline := mspc.AddLightWeightPolyline(VarArrayRef(vpts));
|VarArrayRef が必要みたいです。

ss.SelectByPolygon(acSelectionSetFence, VarArrayRef(vpts), filterType, filterData);
のように、VarArrayRef() を使うと、すんなりと動きました。

Re: Delphi 遅延バインディング 座標(配列)の受け渡し  izawa - 2025/05/01(Thu) 10:49 No.6196

遅延バインディングに慣れてしまうと、事前バインディングには戻れませんね。


Re:部品リスト.exe Ver.2.12a  izawa - 2025/04/24(Thu) 20:56 No.6180

・DELETE キーで複数セルの削除後の UNDO 処理を修正
http://izawa-web.com/buhinlist/buhinlist2.html
nanoCAD 5 用
・DELETE キーで複数セルの削除後の UNDO 処理を修正
・[普通に作成] 時、フォームの最小化を追加
http://izawa-web.com/nanocad/ncadtools.html

Re:部品リスト.exe Ver.2.13  izawa - 2025/04/27(Sun) 10:51 No.6187

・改行ピッチの設定が消えていたのを修正しました。

Re:部品リスト.exe Ver.2.14  izawa - 2025/04/27(Sun) 16:47 No.6188

・属性のタグ名を指定して、属性文字の一括変更を追加しました。
 ※選択するブロック数 x ブロック内の属性数が多いとかなり時間がかかります。

Re:部品リスト.exe Ver.2.15  izawa - 2025/04/28(Mon) 14:11 No.6189

>※選択するブロック数 x ブロック内の属性数が多いとかなり時間がかかります。
あまりに遅いので改良しました。
若干速くなりましたが、LISP 関数も使えるようにしました。(ロード機能はありません)
LISP だと一瞬です。
どういう理由か、IJCAD 2025 では期待どおりに動きません。他のバージョンだと素直に動くのですが。
これは、LISP 関数が悪いわけではなく、exe から SendCommand することに問題があるようです。

Re:部品リスト.exe Ver.2.15a  izawa - 2025/04/28(Mon) 16:22 No.6190

nanoCAD 5 でのコマンド終了待ちがうまく動かないので、LISP 関数を LISP コマンドに変更しました。
IJCAD 2025 では期待どおりではありませんが、なんとか動きました。

Re:部品リスト.exe Ver.2.15b  izawa - 2025/04/29(Tue) 11:18 No.6191

・[属性文字の一括変更]をほんの少しだけ速くしました。
 外部からの通信、操作なので exe 単体ではこれが精一杯の速さです。

Re:部品リスト.exe Ver.2.15c  izawa - 2025/04/29(Tue) 12:05 No.6192

・[属性文字の一括変更]が IJCAD, ZWCAD で動かなくなったのを修正しました。
 フィルターのバリアント型の型指定をちゃんとしないとダメみたいです。

Re:部品リスト.exe Ver.2.12a  izawa - 2025/04/29(Tue) 12:09 No.6193

filterType := VarArrayCreate([0, 1], varSmallInt);
filterData := VarArrayCreate([0, 1], varVariant);
filterType[0] := 0;
filterData[0] := 'INSERT';
filterType[1] := 66;
filterData[1] := SmallInt(1); // ←これ

Re:部品リスト.exe Ver.2.15d  izawa - 2025/04/30(Wed) 20:55 No.6194

・[TEXT 作成] が動かなくなっていたのを修正しました。
 改造途中のままでした・・・。
 「罫線内」、「線上点」のチェックボックスが関係するのは、[TEXT 作成] のみです。
 [普通に作成] は、上記チェックボックスに関係なく、ごく普通に TEXT を作成します。


Windows 11 Snipping Tool 「表としてコピー」  izawa - 2025/04/26(Sat) 21:03 No.6185

「CAD 日記」さんに情報があったので試してみました。感謝します。
http://www.izawa-web.com/cadocr/SnippingTool2.html

Re: Windows 11 Snipping Tool 「表としてコピー」  izawa - 2025/04/26(Sat) 21:16 No.6186

「CAD 日記」さん↓
https://caddiary.com/?p=6246


ncad B-IN : DXF/DWG ファイルの簡易閲覧、挿入ツール Ver.1.32  izawa - 2025/04/26(Sat) 14:38 No.6184

・[PASTE] ボタンを [1/1 挿入] ボタンに変更
 DXF->DWG 変換なしで挿入可能にしました。
 ODA File Converter は DWG 閲覧のみの使用になりました。
http://izawa-web.com/nanocad/ncadtools.html


ncadDensetsuMini Ver.1.64  izawa - 2025/04/26(Sat) 11:51 No.6183

・ブロックの挿入時に、キャンセル(選択図形の解除)を追加しました。
http://izawa-web.com/nanocad/ncadtools.html


nanoCAD 5 : DXFIN  izawa - 2025/04/25(Fri) 16:50 No.6181

nanoCAD 5 では DXF ファイルを INSERT できないので、その代替
// uses ... ComObj, ActiveX, nanoCAD_TLB, OdaX_TLB;
var
 fname: TFileName;
 App: InanoCadApplication;
 Doc: InanoCadDocument;
 vpt: oleVariant;
 idisp: IDispatch;
 ent: AcadEntity;
begin
 if OpenTextFileDialog1.Execute then begin
  fname:= OpenTextFileDialog1.FileName;
  if FindNcadApp(App, False) then begin
   Doc := App.ActiveDocument;
   if UpperCase( ExtractFileExt(fname)) = '.DXF' then begin
    vpt:= VarArrayCreate([0,2], VarDouble);
    vpt[0]:= 0; vpt[1]:= 0; vpt[2]:= 0;
    //Function Import(FileName As String, InsertionPoint, ScaleFactor As Double) As ObjeVarct
    idisp:= Doc.Import(fname, vpt, 1.0);
    ent:= idisp as AcadEntity;
    if ent.EntityName = 'AcDbBlockReference' then begin
     SetForegroundWindow(App.HWND_);
     doc.SendCommand('copybase' + #13 + 'SI' + #13 + 'L' + #13#13 + '0,0' + #13);
     doc.SendCommand('erase' + #13 + 'SI' + #13 + 'L' + #13#13);
     doc.SendCommand('pasteclip' + #13);
    end;
   end;
  end;
 end;
end;

Re: nanoCAD 5 : DXFIN  izawa - 2025/04/25(Fri) 17:36 No.6182

;; LISP 版(nanoCAD 5 専用)
(vl-load-com)
(defun c:-dxfin()
(sub_dxfin T)
(princ)
)
(defun c:dxfin()
(sub_dxfin nil)
(princ)
)
(defun sub_dxfin(cmdline / doc fname vpt )
(if cmdline
(setq fname (getstring T "\nDXF ファイル名 : "))
(setq fname (getfiled "DXF ファイルを選択" "" "dxf" 8))
)
(if (findfile fname)
(progn
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq vpt (vlax-3d-point 0 0 0))
(vla-import doc fname vpt 1.0)
(command "copybase" "SI" "L" "" (list 0.0 0.0 0.0))
(command "erase" "SI" "L" "")
(command "pasteclip")
)
)
)


nanoCAD Events  izawa - 2025/04/23(Wed) 21:44 No.6177

イベントでコマンド終了が取得できるのか、やってみた結果↓
http://www.izawa-web.com/image/ncadEvents.png
キャンセルで終わると、Delphi では EndCommand は検出できない。
・・・という結果になりました。

Re: nanoCAD Events  izawa - 2025/04/24(Thu) 10:35 No.6178

ThisWorkbook に Public WithEvents NcadApp As InanoCADApplication
を追加しても、コンパイルで
「オブジェクトはオートメーションイベントを発生させることはできません.」
エラーになります。
同じことを IJCAD (GstarCAD) でやってみると、
Public WithEvents GcadApp As GcadApplication
を追加するだけで、イベントが使えるようになります。
http://www.izawa-web.com/image/ExcelGcadEvents.png

Re: nanoCAD Events  izawa - 2025/04/24(Thu) 18:08 No.6179

コマンドが実行中であるかの判断
過去ログ 2024/05/21 に書いていました↓
|コマンド実行中であるかを判断は、ActiveX 経由で IsQuiescent を使ったほうがスマートです。
|ncadState := ncad.GetState as InanoCADState;
|if ncadState.IsQuiescent then result := 0 // ready
|else result := 1; // busy


すべての文字スタイルを "Standard" に  izawa - 2025/04/23(Wed) 19:15 No.6176

文字スタイルが 20 個以上あるファイルをもらったので作ってみました。
某 CAD で DWG を読み込んで保存すると、連番の文字スタイルがたくさん作成されてしまうようです。

すべての TEXT、属性の文字スタイルを "Standard" に変更後、パージ
http://www.izawa-web.com/lsp/STPURGE.lsp


DWGCONVERT  izawa - 2025/04/23(Wed) 11:25 No.6175

IJCAD、GstarCAD の標準コマンド。DWG ファイルバージョンを一括で変換できます。
ODA File Converter はフォルダごとですが、ファイル単位でも変換できます。
ドラッグ&ドロップが使いやすいです。
ライセンスの期限切れでも使えました。


| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |