この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

指定画層非表示 
AutoCAD2015LTで使用しておりました首記マクロが動かない為
修正をしていただけないでしょうか。
※本日、Hamu様にご指導をいただきましたようにlispでないと不可能でしょうか。

使用しているCADは、IJ CAD2025PROです。
※TdMacros.lspは、読み込んでいます。
本サイトの78-指定画層非表示[非表示順序記憶 UNDO機能付]です。


*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;lay;$(getvar,clayer);;sw;0;;to;1,offset;;^X非表示画層を選択:$(if,$(getenv,sw),[前画層表示(R)],)^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;1;select;@;non;@;;setenv;sw;$(+,$(getenv,sw),1);;to;2,setenv;to;4)""",,,)$(nth,$(getenv,to),,,_ai_molc;@;setenv;la$(getenv,sw);$M="""$(getvar,clayer)""";clayer;$(getenv,lay);setenv;to;3,,)$(nth,$(getenv,to),,,,expert;5;-layer;of;$(getenv,la$(getenv,sw));;expert;$(getvar,expert);setenv;to;1,)$(nth,$(getenv,to),,,,,$(if,$(getenv,sw),-layer;ON;$(getenv,la$(getenv,sw));;,)setenv;sw;$(if,$(<,$(-,$(getenv,sw),1),0),0,$(-,$(getenv,sw),1));;to;1)^M



コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <0>: 0

コマンド:
SETENV 変数名を入力: lay
値 <SUNPO>: SUNPO

コマンド:
SETENV 変数名を入力: sw
値 <0>: 0

コマンド:
SETENV 変数名を入力: to
値 <0>: 1

コマンド:
SETENV 変数名を入力: ; エラー: 関数は取り消されました

コマンド:
コマンド: setenv
変数名を入力: to
値 <1>: 0

コマンド: offset

現在の設定: 元のオブジェクトを消去=いいえ 画層=元のオブジェクト OFFSETGAPTYPE=0
オフセット距離を指定 または [通過点(T)/消去(E)/画層(L)] <通過点>:

オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>: ^X非表示画層を選択:^X*キャンセル*
  • まさ
  • 2025/09/22 (Mon) 23:46:58
Re: 指定画層非表示 
$(nth,を複数用いている。
""" """ を使った評価遅延がある。
^X を用いている。

私が前回挙げた、ダメな要素が3つも入っています。(1つでもダメなのに)

また、これらが入っていなくても、このような長文マクロは動かない可能性が高いです。
Maxで200文字くらいが限界?
(そのマクロは641文字あります。全角文字は2文字でカウント)

IJCADで、AutoCAD用のマクロを使用するのは、マジで気を付けましょう。
運よく、エラーが無く動いたとしても、AutoCADとは違う結果になっている事が有るからです。
前回も「UCSを含んているマクロはダメ」と書きましたが、
一見、正常に処理された様に見えて、間違った処理をされています。
それに気が付かないと、間違った図面を書いてしまうことになります。

マクロを全てLISPに移植するのは大変だと思いますが、やるしかないでしょう。
ちなみにLISPでも、AutoCAD用に作られたものはIJCADではエラーになったり、違う結果になったりするので注意が必要です。
  • Hamu
  • 2025/09/23 (Tue) 08:03:03
Re: 指定画層非表示 
生成AIを使ってみました。

Google Gemini と Copilot に下記の様に質問しました。


autocad用の下記のdieselマクロを、同じ様な機能のautolispコードに移植して欲しいです。
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;lay;$(getvar,clayer);;sw;0;;to;1,offset;;^X非表示画層を選択:$(if,$(getenv,sw),[前画層表示(R)],)^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;1;select;@;non;@;;setenv;sw;$(+,$(getenv,sw),1);;to;2,setenv;to;4)""",,,)$(nth,$(getenv,to),,,_ai_molc;@;setenv;la$(getenv,sw);$M="""$(getvar,clayer)""";clayer;$(getenv,lay);setenv;to;3,,)$(nth,$(getenv,to),,,,expert;5;-layer;of;$(getenv,la$(getenv,sw));;expert;$(getvar,expert);setenv;to;1,)$(nth,$(getenv,to),,,,,$(if,$(getenv,sw),-layer;ON;$(getenv,la$(getenv,sw));;,)setenv;sw;$(if,$(<,$(-,$(getenv,sw),1),0),0,$(-,$(getenv,sw),1));;to;1)^M
  • Hamu
  • 2025/09/24 (Wed) 09:57:21
Re: 指定画層非表示 (Gemini)
Google Geminiが作ったコードが↓

(defun c:MOL ()
(setq sw (getvar "expert"))
(setvar "expert" 5)
(setq la (getvar "clayer"))
(setvar "clayer" "0")
(setvar "expert" sw)
(prompt "\n非表示にするオブジェクトを選択: ")
(setq ss (ssget))
(if ss
(progn
(setq n 0)
(repeat (sslength ss)
(setq ent (ssname ss n))
(setq entlist (entget ent))
(setq layname (cdr (assoc 8 entlist)))
(command "-layer" "off" layname "")
(setq n (1+ n))
)
)
)
)

(defun c:MOLR ()
(setq sw (getvar "expert"))
(setvar "expert" 5)
(command "-layer" "on" "*" "")
(setvar "expert" sw)
(princ)
)

(princ "\n::: MOL (選択した画層を非表示) と MOLR (全画層表示) をロードしました。 :::")
(princ)
  • Hamu
  • 2025/09/24 (Wed) 09:58:27
Re: 指定画層非表示 (Copilot)
Copilotが作ったコードが↓

(defun c:ToggleLayerVisibility ( / to sw clayer lay laName layObj)
;; 環境変数の取得
(setq to (getenv "to"))
(setq sw (getenv "sw"))

;; 初期化(必要に応じて)
(if (not to) (setenv "to" "0"))
(if (not sw) (setenv "sw" "0"))

;; 現在の画層を保存
(setq clayer (getvar "clayer"))
(setenv "lay" clayer)

;; トグル用画層名の生成(例: la0, la1, la2)
(setq laName (strcat "la" sw))

;; 画層オブジェクト取得
(setq layObj (tblsearch "layer" laName))

(if layObj
(progn
;; 表示状態のトグル
(if (= (cdr (assoc 70 layObj)) 0)
(command "-layer" "off" laName "")
(command "-layer" "on" laName "")
)

;; swの更新
(setq swNew (itoa (max 0 (- (atoi sw) 1))))
(setenv "sw" swNew)
(setenv "to" "1")
)
(prompt (strcat "\n画層 " laName " が見つかりません。"))
)
(princ)
  • Hamu
  • 2025/09/24 (Wed) 09:59:33
Re: Re: 指定画層非表示 (Copilot)
Hamu様

お忙しい中ありがとうございました。
  • まさ
  • 2025/09/24 (Wed) 19:56:56

返信フォーム






プレビュー (投稿前に内容を確認)