2024年6月10日月曜日

ARESからPowerShellのInvoke-WebRequest を使って適当にファイルをダウンロードしてくる

何このアタオカな処理はって感じですが... 

: SHELL

OS コマンドを指定» powershell.exe Invoke-WebRequest -uri "https://cyberjapandata.gsi.go.jp/xyz/std/1/1/0.png" -outfile "c:\temp\std~1~1~0.png"

ARESのSHELLコマンドってのが、コマンドプロンプトへの1行分の処理を行って終了を待って戻ってきます。コマンドプロンプトに powershell.exe とするので PowerShell を1行実行です。ここではInvoke-WebRequest というコマンドレットの実行だけなので引数に処理を全部書いちゃいます。 -Uri ダウンロードするファイル -Outfile 出力先 で行けます。

そこそこ早かったです。

(2024/06/11 追記)

スペースを含むパスを引数にしたいときには、シングルクォートで囲う。

: SHELL

OS コマンドを指定» powershell.exe Invoke-WebRequest -uri ’https://cyberjapandata.gsi.go.jp/xyz/std/1/1/0.png' -outfile  'C:\Users\cadkh\AppData\Local\Temp\ARES Commander Edition_temp\std~0~0~0.png'

盲点であった。


線の太さを一括で変更できますか

線の太さを一括で変更できますか では、図形をポリラインに変換して任意の線の太さを指定する方法が説明されている。

いくつかの決まった値しか指定できないが、図形の線の太さプロパティを変更することでも、線を太くすることは可能である。

  1. システム変数 LWDISPLAY を 1 (オン)にして線の太さを画面で表示させる
  2. 図形を複数選んで、プロパティウィンドウで線の太さを変更する

線の太さを非表示(LWDISPLAY=0)
線の太さを表示(LWDISPLAY=1)

図形のプロパティから、ByBlock, ByLayer, 0.00ミリから2.11ミリまでの線の太さを選択できる。

コマンドラインなら CHPROP [図形のプロパティ]コマンドでも可能。
複数図形を選択し、LW (線の太さ)オプションを選んで新しい線の太さの値を指定する。
コマンドラインからは、システム変数 LWUNITS (線の太さの単位)に従って、ミリメートル単位またはインチ単位で新しい線の太さを指定する。


画層状態管理をLISPで

 画層設定を保存し、別の図面で読み込む方法

LAYER[画層設定]コマンドでは画層の新規作成、設定の変更、削除を行える。

複数の画層のフリーズやロックや色の設定をまとめて保存、復元する画層状態管理という機能がある。


図面に保存した画層状態を拡張子.lasのテキストファイルに出力し他の図面に読み込むことで、画層の設定を他の図面に適用できる。

現在の画層状態を保存 

(layerstate-save  name flag [viewport])
現在の画層状態を name という名前で保存する。
フラグ flag はどのプロパティを保存するかビット和で指定する。
オプションのビューポート viewport の図形名を指定すると、指定したビューポートの画層設定を保存する。

フラグの意味

1 表示/非表示 設定
2 フリーズ 設定
4 ロック 設定
8 印刷 設定
16 ビューポート フリーズ初期設定
32 線色
64 線種
128 線幅 

(layerstate-save "test" 255) は画層のすべての設定を test という名前で保存する。

現在の画層状態を復元 

(layerstate-restore  name [viewport flag])
画層状態 name を図面に復元する。
オプションのビューポート viewport の図形名を指定すると、指定したビューポートの画層優先設定をして復元する。
復元フラグ flag は画層状態に含まれていない画層をどう処理するかを指定する。

復元フラグの意味

1 含まれていない画層は非表示にする
2 含まれていない画層はフリーズにする
4 ビューポートの優先設定にする

(layerstate-restore "test") で画層状態 test を図面に復元する

現在の画層状態を書き出し 

(layerstate-export name file)
画層状態 name をテキストファイル file に書き出す。
書き出されたファイルは、他の図面の画層設定に流用できる。
(layerstate-export "test" "c:/temp/test.las") で c:\temp\test.las ファイルを作成する。

現在の画層状態を読み込み 

(layerstate-import file)
画層状態テキストファイル file を図面に読み込む。
画層状態名は file の2番目のデータに含まれる。
(layerstate-import "c:/temp/test.las") で c:\temp\test.las ファイルを読み込む。
設定が図面に取り込まれるだけで、その復元には (layerstate-restore) の呼び出しが必要。


2024年6月6日木曜日

ポリラインの幅をゼロにする

(IJCADヘルプセンター)ポリラインが太く表示される場合はどうすればよいですか

選択したポリラインの幅をゼロにするには次のコマンドを作ればよい。

;; ポリラインの線幅を0にする
(defun C:PLZERO ( / ss i n obj)
  (if (setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE"))))
    (progn
      (setq i 0 n (sslength ss))
      (while (< i n )
        (setq obj (vlax-ename->vla-object (ssname ss i)))
        (vla-put-ConstantWidth obj 0.0)
        (setq i (1+ i) obj nil)
      )
      (setq ss nil)
    )
  )
)

(ssget)で複数図形選択対話、(sslength)で選択した図形数を取得して、while ループを回して(ssname)で番号指定で図形名を取得するというのが複数図形を処理する鉄板です。覚えてね。

(vlax-ename->vla-object)でオブジェクトとして取得して、ConstantWidth プロパティを 0.0 に設定することによりポリラインのグローバル幅を0にしています。これだけ。

図形リストでやろうとすると大変

図形リストバージョン次の通りになります。わかりやすくするために3つの部分に分けました。
;; 図形リストを使ってポリラインの線幅を0にする
(defun C:PLZERO_EL ( / ss i n el)
  (if (setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE"))))
    (progn
      (setq i 0 n (sslength ss))
      (while (< i n )
        (setq el (entget (ssname ss i)))
        (if (= "LWPOLYLINE" (cdr (assoc 0 el)))
          (plzero0 el)
          (plzero1 el)
        )
        (setq i (1+ i))
      )
      (setq ss nil)
    )
  )
)

;; ライトウェイトポリラインの線幅を0にする
(defun plzero0 ( el / nl )
  (if (assoc 43 el)
    ;グローバル幅(43)があればそれを変える
    (entmod (subst (cons 43 0.0)(assoc 43 el) el))
    ;開始幅、終了幅を全部0にする必要がある
    (progn
      (while el
        (if (or (= 40 (caar el))(= 41 (caar el)))
          (setq nl (cons (cons (caar el) 0.0) nl))
          (setq nl (cons (car el) nl))
        )
        (setq el (cdr el))
      )
      (entmod (reverse nl))
    )
  )
)

;; ヘビーウェイトポリラインの線幅を0にする
(defun plzero1 ( el / )
  ;図形リストは POLYLINE,複数のVERTEX,SEQEND
  (while (/= "SEQEND" (cdr (assoc 0 el)))
    ;開始幅(40)と終了幅(41)を0にする
    (if (assoc 40 el)
      (setq el (subst (cons 40 0.0)(assoc 40 el) el))
    )
    (if (assoc 41 el)
      (setq el (subst (cons 41 0.0)(assoc 41 el) el))
    )
    ;リストを更新
    (entmod el)
    ;次の従属図形の図形リストを取得する
    (setq el (entget (entnext (cdr (assoc -1 el)))))
  )
)

コマンドの部分では、(vlax-ename->vla-object)が(entget)に変わって図形リストを取得している部分と、図形種類(0)がライトウェイトポリライン "LWPOLYLINE" かどうかで進む関数が分岐している部分が違います。

ライトウェイトポリラインの変更ではグローバル幅(43)が設定されている場合は、グローバル幅を変更するだけでよいのですが、グローバル幅が設定されていない場合は、図形リストから複数存在する開始幅(40)と終了幅(41)を検出して0.0に変更する必要があります。

ヘビーウエイトポリラインの変更では、主図形のポリライン図形(POLYLINE)と、従属図形の頂点図形(VERTEX)の開始幅(40)と終了幅(41)を0.0に変更する必要があります。頂点図形を変更するために従属図形の終了マーカー(SEQEND)を検出するwhileループが必要です。

このように、図形種類によって図形リストが大きく変化する場合、オブジェクトを扱ったほうがわかりやすくなります。


2024年5月30日木曜日

うっかり位置情報

iPhoneで写真から位置情報を削除する に、写真アプリを使って複数の写真や動画からまとめて位置情報を削除する方法も、設定のプライバシーでこれから撮影する写真や動画に位置情報を埋め込まない設定も書いてあった!ありがとう見知らぬ人!

しかしよ、既定値でオフにしてくれないかな?こういうのは。と思うよね。
思った人は「いいね👍」

2024年5月27日月曜日

マネージドライブラリは今でもクラスライブラリ(.Net Framework) で作成する

AutoCADのC#,VB.Netのマネージドライブラリ


  • クラスライブラリ(.Net Framework)で作成する
  • ターゲットバージョンは最近は 4.8
  • 拡張子は .dll
  • 参照は、AcMgd.dll, AcCoreMgd.dll, AcDbMgd.dll が必須。後は必要に応じて。
  • Using (Imports)はこの辺が必須。後は必要に応じて。
  • using AutodeskAutoCAD.ApplicationServices;
    using AutodeskAutoCAD.DatabaseServices;
    using AutodeskAutoCAD.EditorInput;
    using AutodeskAutoCAD.Runtime;
AutoCAD の Core か DataBase の Managed library の と覚えるとよい。

IJCAD 2024のC#,VB.Netのマネージドライブラリ


  • クラスライブラリ(.Net Framework)で作成する
  • ターゲットバージョンは最近は 4.8
  • 拡張子は .dll
  • 参照は、GcMgd.dll, GcCoreMgd.dll, GcDbMgd.dll が必須。後は必要に応じて。
  • Using (Imports)はこの辺が必須。後は必要に応じて。
using Itjp.Ijcad.ApplicationServices;
using Itjp.Ijcad.DatabaseServices;
using Itjp.Ijcad.EditorInput;
using Itjp.Ijcad.Runtime;
GrxCAD の Core か DataBase の Managed library の と覚えるとよい。

IJCAD 2023のC#,VB.Netのマネージドライブラリ


  • クラスライブラリ(.Net Framework)で作成する
  • ターゲットバージョンは最近は 4.8
  • 拡張子は .dll
  • 参照は、gmap.dll, gmdb.dll が必須。後は必要に応じて。
  • Using (Imports)はこの辺が必須。後は必要に応じて。
  • using GrxCAD.ApplicationServices;
    using GrxCAD.DatabaseServices;
    using GrxCAD.EditorInput;
    using GrxCAD.Runtime;
GrxCAD の Managed library の Application か DataBase と覚えるとよい。

ARESのC#,VB.Netのマネージドライブラリ


  • クラスライブラリ(.Net Framework)で作成する
  • ターゲットバージョンは最近は 4.8
  • 拡張子は .dll
  • 参照は、TD_Mgd_バージョン.dll, FxCoreMgd_バージョン.dll が必須。後は必要に応じて。
  • Using (Imports)はこの辺が必須。後は必要に応じて。
  • using Teigha.ApplicationServices;
    using Teigha.DatabaseServices;
    using Teigha.EditorInput;
    using Teigha.Runtime;
Teigha DWG の Managed library と、Felix Cad の Core の Managed library の と覚えるとよい。(Felix Cad は グレバートが ARES の前に作っていた CAD製品の名前)

参照するライブラリを変えることと、using 宣言を変えることで、AutoCAD, IJCAD, ARES (おそらく Brics CAD など AutoCAD 系のCADは全部) C# や VB.Net で作成されたマネージドライブラリは動くはずだ。

参照のときにはローカルコピーをする必要はない。

2024年5月26日日曜日

AutoCAD系 カスタマイズについて

 AutoCAD 系 カスタマイズについて

  • プログラミングが必要なもの
  • プログラミングが不要なもの
今回はプログラミングが必要なものを説明します。

何が使えるか、何に使うか

  • LISP
  • C#, VB.Net
  • C++
LISPはCADの組み込みのインタプリタで、コマンドをラッピングして使いやすくしたり、新たにコマンドを作成することも可能です。C++ は CADの高度なカスタマイズが可能です。扱える図形データを追加することも可能です。C#, VB.Net は、多くの人が知っている言語で、外部データベースとの接続など多くのプログラム部品を活用してCADアプリケーションを作成することが可能です。LISPはユーザーインタフェースを扱う部分が弱いので、ダイアログやパレットなどのユーザーインタフェースを利用する場合には C#, VB.Net の利用をお勧めします。

とりあえずLISP

AutoCADに最初からあるプログラミング環境であること、他に何も要らないこと、他のプログラミングを使う場合にも有益な基本が学べることから、とりあえずLISPをやってみることをお勧めします。

Visual Code Editor との連携

Visual Code Editor を使うと、LISP の組み込み関数のバルーンヘルプや、コード入力補完、整形が便利です。さらにオンラインデバッガとしてCADと連携することも可能です。
AutoCAD には、Visual LISP IDE という専用の IDE がありましたが、汎用のシェルプログラミングエディタをIDEとして使うことができるようになりました。

    Gitリポジトリの一括更新

     こんなバッチファイルはいかがでしょうか。 REM gitall.bat - update repositries. for /D %%i in (*.*) do pushd %%i & git stash & git pull & popd コマンドプロ...