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. システム再起動後に、変更が反映される。
ああ、よかった。 

2020年12月24日木曜日

IJCAD 2020 .Net サンプル、初歩も初歩

 IJCAD 2020 .Net サンプルの作り方。

  1. Visual Studio 2019 とか使います。
  2. ファイル→新規作成→プロジェクトから、クラスライブラリ(.NET Framework)を選択します。C#とVB.Netはお好みで選んでください。


  3. 参照設定を行います。次の2つのファイルを参照します。
    C:\Program Files\ITJP\IJCAD 2020 PRO\gmap.dll
    C:\Program Files\ITJP\IJCAD 2020 PRO\gmdb.dll
    追加したら、ローカルにコピーしない設定に変更します。
  4. ソースコードは次のようになります。
  5. ビルドしてください。.Net Framework のバージョンは、4.8 にする必要があります。
  6. NETLOADコマンドでロードすれば、コマンドを実行できるようになります。
ソースコードは次のようになります。
using GrxCAD.ApplicationServices;
using GrxCAD.DatabaseServices;
using GrxCAD.EditorInput;
using GrxCAD.Geometry;
using GrxCAD.Runtime;
using GrxCAD.Windows;
using CADApplication = GrxCAD.ApplicationServices.Application;
using CADException = GrxCAD.Runtime.Exception;
namespace CSSample1
{
    public class Class1
    {
        [CommandMethod("CSHELLO")]
        public void cmdCSHello()
        {
            CADApplication.ShowAlertDialog("Hello");
        }
    }
}

 ポイントは、

  • コマンドを定義するクラスは public クラスにしないと、IJCADから呼び出すことができません。
  • コマンドは CommandMethod 属性でコマンド名と実行フラグを与えます。引数、戻り値のない public な変数にする必要があります。
  • 名前空間は、GrxCAD.ApplicationServices などになります。AutoCADの場合は、Autodesk.AutoCAD.ApplicationServices などです。
  • ApplicationクラスとExceptionクラスが名前の衝突を起こすのを避けるために、CADApplication、CADException と再定義するのはおすすめです。
  • ApplicationクラスのShowAlertDialogは警告メッセージボックスを表示する関数です。

 

2020年11月9日月曜日

JW_CADの822a

 JW_CADの822aが公開されていましたが、描かれた図面を読み込んだら、範囲外に怪しい文字図形データが埋め込まれていました。

まだアルファ版なんですかね。

ということなので、JW_CADの8.x対応はもう少し後にしたいと思います。

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

 異尺度注釈図形が持っている尺度(文字列)を表示する ;;; ;;; LISTANNOSCALE.LSP ;;; (defun C:LISTANNOSCALE ( / el id f)   (setq f T)   ;異尺度注釈図形を選択   (if (setq el (entg...