2024年5月25日土曜日

Visual LISP ~ 図形を画層に振り分けたら線種尺度を設定する

画層のプロパティとして、線色、線種、線幅、印刷スタイルなどはありますが、線種尺度はありません。線種尺度=ByLayerという設定の代わりになりそうなものを考えてみました。 

Visual LISP で作成したので、AutoCAD 系の他のCAD でも使えると思います。

;;; ----------------------------------------------------------

;;; LayLScale.lsp

;;; 画層毎に線種尺度を設定する

;;; (C) Copyrights 2024 Graebert Japan LLC.

;;; ----------------------------------------------------------


;; 画層名と線種尺度のペアを設定(いくらでも追加可能)

(setq #LayLScale '(

    ("MODEL" . 1.0)

    ("MODEL2" . 2.0)

    ("MODEL4" . 4.0)

    ("MODEL8" . 8.0)

    ))


;; 線種尺度を書き換えるコールバック関数

(defun layLscaleReactor( cb data / obj item )

    ; 図形名をVLAオブジェクトに変換

    (if (setq obj (vlax-ename->vla-object (last data)))

        ; VLAオブジェクトは画層と線種尺度が使用できるか

        (if (and (vlax-property-available-p obj 'Layer)

            (vlax-property-available-p obj 'LinetypeScale T))

            ; 図形の画層から線種尺度のペアを取得できるか

            (if (setq item (assoc (vla-get-Layer obj) #LayLScale))

                ; 線種尺度がペアの設定値と一致していないとき

                (if (/= (cdr item) (vla-get-LinetypeScale obj))

                    ; 線種尺度を修正する

                    (vla-put-LinetypeScale obj (cdr item))

                )

            )

        )

    )

    ; VLAオブジェクトを解放する

    (setq obj nil)

)


;; Visual LISP データベース リアクターを設定

(vlr-acdb-reactor nil '(

    (:vlr-objectappended . layLscaleReactor)

    (:vlr-objectmodified . layLscaleReactor)

))

使い方は、図面を開いたときに自動的に読み込まれるLISPファイルとしてどこかに登録してください。AutoCADなら、acad2025doc.lsp ファイルに、(load "LayLScale.lsp") と書くとかですね。 

AutoCAD 2025 のカスタマイズ ことはじめ

AutoCAD 2025 のカスタマイズに必要な資料はこの辺からアクセス。

AutoCAD 2025 カスタマイズ オンライン ヘルプ 英語

https://help.autodesk.com/view/OARX/2025/ENU/

AutoCAD 2025 カスタマイズ オンライン ヘルプ 日本語

https://help.autodesk.com/view/OARX/2025/JPN/

半分くらいは英語のまま提供される

DXFファイルリファレンスも、オンラインヘルプからアクセス可能。

AutoCAD 2025でも、DWGのバージョンはAC1032 (AutoCAD 2018相当)のまま。

メインバージョンはAutoCAD 2018 形式で打ち止めらしい。

My First AutoCAD Plug-in Overview

私の最初のAutoCAD プラグインー概要

https://www.autodesk.com/support/technical/article/caas/tsarticles/ts/6kRFCS0mCalWLwAOpP9pNT.html

.Net (C#かVB.Net) を使ったアプリケーション作成を1歩ずつ説明するコンテンツ(英語のみ)

ObjectARX SDK の入手方法

https://aps.autodesk.com/developer/overview/objectarx-autocad-sdk

ここから無料で入手可能。以前と異なり名前やメールアドレスを聞かれることもなくなった。

AutoCAD Mechanical API の入手方法

https://aps.autodesk.com/developer/overview/autocad-mechanical

ここから無料で入手可能。

AutoCAD 2025 の C++アドイン ARX/CRX/DBX の開発では Visual Studio 2022 と Visual C++ が必要になりました。

C# や VB.Net での開発は、Microsoft .Net Framework 4.8 なので、Visual Studio 2022 必須ではありませんが、C++ での開発が必要なら一緒でよいでしょう。

Windows 専用の Visual LISP 拡張や、VBA (Visual Basic for Automation) は今でも使えます。

LISP エディタとしては、Microsoft Visual Code Editor の利用が推奨されてます。

この流れは止まらないっぽい。

2021年3月31日水曜日

異尺度注釈図形にアタッチされている尺度を知る

 異尺度注釈図形が持っている尺度(文字列)を表示する


;;;

;;; LISTANNOSCALE.LSP

;;;

(defun C:LISTANNOSCALE ( / el id f)

  (setq f T)

  ;異尺度注釈図形を選択

  (if (setq el (entget (car (entsel "異尺度注釈を選択:"))))

    ;拡張ディクショナリを選択

    (if (setq id (cdr (assoc 360 el)))

      ;AcDbContextDataManagerデータを選択

      (if (setq id (cdr (assoc -1 (dictsearch id "AcDbContextDataManager"))))

        ;ACDBANNOTATIONSCALESデータを選択

        (if (setq id (cdr (assoc -1 (dictsearch id "ACDB_ANNOTATIONSCALES"))))

          ;オブジェクトコンテキストデータを取得

          (while (setq el (dictnext id f))

            (if (setq sl (entget (cdr (assoc 340 el))))

              (princ (strcat (cdr (assoc 300 sl)) ","))

              (princ "\nSCALEがありません")

            )

            (setq f nil)

          )

          (princ "\nAcDbObjectContextDataがありません")

        )

        (princ "\nAcDbContextDataManagerがありません")

      )

      (princ "\n拡張ディクショナリがありません")

    )

    (princ "\n図形選択エラー")

  )

  (princ)   

)


2021年3月30日火曜日

標準矢印ブロックのローカル名とグローバル名

ローカル名(日本語)とグローバル名。
英語のローカル名はアンダーバーがない CLOSED, DOT などです。
塗り潰し矢印: ブロックではない
空矢印:_CLOSEDBLANK
閉矢印:_CLOSED
黒丸:_DOT
ティック(太):_ARCHTICK
ティック:_OBLIQUE
開き矢印:_OPEN
白丸1:_ORIGIN
白丸2:_ORIGIN2
90度開き矢印:_OPEN90
30度開き矢印:_OPEN30
小黒丸:_DOTSMALL
空白丸:_DOTBLANK
小空白丸:_SMALL
空白四角:_BOXBLANK
塗り潰し四角:_BOXFILLED
空白データム:_DATUMBLANK
塗り潰しデータム:_DATUMFILLED
波形:_INTEGRAL
なし: _NONE

ローカル名からグローバル名への変換には次の関数が便利です。
const ACHAR* AcDmUtil::globalArrowName(const ACHAR* ローカル名 )

矢印ブロック名から矢印ブロックのオブジェクトIDに変換するには次の関数が便利です。
Acad::ErrorStatus getArrowId(
   const ACHAR * pName,         // グローバル名
   AcDbObjectId& blockId,         // オブジェクトID
   AcDbDatabase* pDb = 0        // 指定しないとCurDoc/WorkingDatabaseで調べる
);

塗りつぶし矢印は、名前指定のときは空文字列で、オブジェクトID は Null で、ハンドル値では 0 になります。


2021年1月26日火曜日

geany for Windowsで半角英数に切り替えても半角カナ入力になってしまう件

 geany for Windowsで半角英数に切り替えても半角カナ入力になってしまうのをどうにかできないか悩んでいたけど一応の解決を見た。

Windowsの設定で、言語の設定から英語を追加する。
英語キーボードを何か追加する。私は 米国 International Qwerty キーボードを追加した。

Geany を起動する。

窓+スペース で、日本語と英語を切り替えることができる。

半角英数を入力するときは、英語で入力する。

かな漢字、全角英数は日本語で入力する。

英語入れておくと、日本語モードで半角/全角キーをたたいたときに半角英数に戻ることができるようになったりする。

WindowsとGTKとgeanyの間で一体何をやっているのだろう? 



2021年1月5日火曜日

定義されているシンボルをテキストファイルとして書き出す

AutoLISP (他、AutoCAD 互換CADのLISP)で、定義されているシンボルをテキストファイルとして書き出します。 


(defun list-all-symbols ( / file fd ls )

  (setq file (getstring T "filename: "))

  (setq fd (open file "w"))

  (foreach it (atoms-family 0)

    (princ it fd) (princ "\n" fd) 

  )

  (close fd)

  (terpri)

)

実行

コマンド: (list-all-symbols )

filename: c:\temp\ijcad.lst

テキストファイルは1行1関数(変数、オートメーションの定数、etc.)になります。

 用途

シンボルの衝突(コンフリクト)がおきていないかチェックするとか

隠し機能を探すとか

関数の説明

atoms-family によって、現在登録されているすべてのシンボルのリストを返します。

type 引数が 0 のときはシンボルのリスト、1のときは文字列のリストになります。

open princ close は、データをテキストファイルとして出力する方法です。

open 関数がファイルをオープンし、戻り値の ファイル識別子を、princ 関数や close 関数に渡すと、開いたファイルへの操作になります。


2021年1月2日土曜日

HYPER-V に OpenSUSE をインストールしたら解像度が1024x768固定になって困った

 HYPER-V に OpenSUSE をインストールしたら解像度が1024x768固定になって困った。パソコン本体に合わせて、1920x1080ピクセルにしたいぞ。

どんぴしゃりの説明がありました。

Hyper-VでopenSUSE Leap 15.0 - おぼえがき (hatenablog.com)

  1. sudo vim /etc/default/grub
  2. GRUB_CMDLINE_LINUX="" の行を探し、GRUB_CMDLINE_LINUX="video=hyperv_fb:1920x1080" に変更して保存、終了。
  3. sudo grub2-mkconfig -o /boot/efi/EFI/opensuse/grub.cfg
  4. sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  5. システム再起動後に、変更が反映される。
ああ、よかった。 

VSCode で ARES の C# クラスライブラリを作成(1)

はじめにVSCodeにC#開発環境を追加しましょう。 VSCodeを実行し機能拡張から C# Dev Kit をインストールします。 関連する C# や .NET Install Tool もインストールされます。 以下の作業で、空のフォルダを作り、.Net が利用可能かどうかを...