当掲示板は、AuroCADマクロ屋本舗 の掲示板です。
AutoCADのマクロ に関する質問の前に 【 マクロ使用前の注意事項 】 を、必ずお読みください。

尚、新規投稿フォーム下の【 新規投稿時のお願い 】
を確認の上、新規投稿をお願い致します。
全角のカウントアップ
こんにちは
質問ではないのですが下記マクロの検証お願いできますか

全角のカウントアップが何とか形になったのですがいまいち自信が持てません
いろいろいじってるうちに良くわからなくなりました

LT2017、LT2015、LT2011は動きましたが他のバージョンはどうでしょうか
よろしくお願いします。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;No0;0123456789;;No1;初期値<$(getenv,No1)>^X\;to;1,,,,,,,)$(nth,$(getenv,to),,;No5;$(strlen,$(getenv,No1));$(if,$(<=,$(strlen,$(getenv,No1)),1),;No2;$M="""""""$(substr,$(getenv,No0),$(+,$(substr,$(getenv,No1),$(getenv,No5),1),1),1)""""""";;to;6,;to;2),,,,,,)$(nth,$(getenv,to),,,;No3;$(substr,$(getenv,No0),$(+,$(substr,$(getenv,No1),$(getenv,No5),1),1),1);;No5;$(-,$(getenv,No5),1);;to;3,,,,,)$(nth,$(getenv,to),,,,$(if,$(>,$(getenv,No5),1),;No4;$(substr,$(getenv,No0),$(+,$(substr,$(getenv,No1),$(getenv,No5),1),1),1);;to;4,;to;5),,,,)$(nth,$(getenv,to),,,,,;No3;$(getenv,No4)$(getenv,No3);;No5;$(-,$(getenv,No5),1);;to;5,,,)$(nth,$(getenv,to),,,,,,$(if,$(<=,$(getenv,No5),1),;No2;$(substr,$(getenv,No0),$(+,$(substr,$(getenv,No1),$(getenv,No5),1),1),1)$(getenv,No3);;to;6,;to;3),,)$(nth,$(getenv,to),,,,,,,join;変更する文字を選択(右クリックで初期値変更)=^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;7,setenv;to;0)""",)$(nth,$(getenv,to),,,,,,,,setenv;to;6;select;non;@;non;@;;-ch;p;;;;;;;$(getenv,No2);setenv;No1;$(+,$(getenv,No1),1);;to;1)^M

1.初期値の入力
2.文字選択
以上です
  • chibi-tom
  • 2017/05/01 (Mon) 17:36:00
Re: 全角のカウントアップ
1.初期値の入力 では半角入力なんですね。
2013は動作しました。

凄いですねこれ。


ちなみにですが
2004はjojnコマンドが無い為動かなかったです。
  • とってぃ
  • 2017/05/02 (Tue) 09:00:10
Re: 全角のカウントアップ
とってぃ様
いつもお世話になってます

検証ありがとうございます
>半角入力なんですね。
→やっぱり半角じゃないとだめですか?
LT2017はなぜか全角でも勝手に半角にされるんですよね。
>2004はjojnコマンドが無い為動かなかったです。
→FILLET等他のコマンドでもできそうですが休み明けまで試せません

何はともあれ考えは間違っていないようで安心しました
ありがとうございました。
いまだに評価の遅らせる方法がいまいち理解できていないようです
情けない・・・
  • chibi-tom
  • 2017/05/02 (Tue) 14:21:47
Re: 全角のカウントアップ
joinをoffsetでやってみました。

ついでに、最後の部分をひとまとめにしてみました。


*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;No0;0123456789;;No1;初期値<$(getenv,No1)>^X\;to;1,,,,,,)$(nth,$(getenv,to),,;No5;$(strlen,$(getenv,No1));$(if,$(<=,$(strlen,$(getenv,No1)),1),;No2;$M="""""""$(substr,$(getenv,No0),$(+,$(substr,$(getenv,No1),$(getenv,No5),1),1),1)""""""";;to;6,;to;2),,,,,)$(nth,$(getenv,to),,,;No3;$(substr,$(getenv,No0),$(+,$(substr,$(getenv,No1),$(getenv,No5),1),1),1);;No5;$(-,$(getenv,No5),1);;to;3,,,,)$(nth,$(getenv,to),,,,$(if,$(>,$(getenv,No5),1),;No4;$(substr,$(getenv,No0),$(+,$(substr,$(getenv,No1),$(getenv,No5),1),1),1);;to;4,;to;5),,,)$(nth,$(getenv,to),,,,,;No3;$(getenv,No4)$(getenv,No3);;No5;$(-,$(getenv,No5),1);;to;5,,)$(nth,$(getenv,to),,,,,,$(if,$(<=,$(getenv,No5),1),;No2;$(substr,$(getenv,No0),$(+,$(substr,$(getenv,No1),$(getenv,No5),1),1),1)$(getenv,No3);;to;6,;to;3),)$(nth,$(getenv,to),,,,,,,offset;;^x変更する文字を選択(右クリックで初期値変更)=^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;6;select;non;@;non;@;;-ch;p;;;;;;;$(getenv,No2);setenv;No1;$(+,$(getenv,No1),1);;to;1,id;)""")^M


2013では同じく動きましたが
2004では、アルファベット?の全角「O、P、Q,R」となりました。

ちょっと下位バージョンでは難しいかも??
  • とってぃ
  • 2017/05/02 (Tue) 14:53:40
Re: 全角のカウントアップ
ありがとうございます

>アルファベット?の全角「O、P、Q,R」となりました。
→どこからやってきたのでしょう?
>joinをoffsetでやってみました。
offsetやlengthenで選択しようとするとoffsetできませんや長さが取得できません的な
注意文がコマンドラインに表示されませんか?CADがないので確認できない。
LT2017から?
表示しないようにできるのでしょうか?
>ちょっと下位バージョンでは難しいかも??
→やっぱりそうですよね
  • chibi-tom
  • 2017/05/02 (Tue) 15:12:56
Re: 全角のカウントアップ
拍手! パチパチパチパチ

join版も offset版も LT2018で動きました。

さっき、LT2018にバージョンアップしました。
2017との違いは、まだ判りません。(マクロに影響する仕様の違い)

>ちょっと下位バージョンでは難しいかも??
もう、全バージョン対応マクロなんて、よっぽど簡単なマクロ以外は無理でしょうね。
  • Lon
  • 2017/05/02 (Tue) 17:12:16
Re: 全角のカウントアップ
Lon様

検証ありがとうございます

少し自信が持てました

  • chibi-tom
  • 2017/05/02 (Tue) 17:57:38
Re: 全角のカウントアップ
おはようございます。
offsetで動作するとLT2015とLT2017だとピックボックスで触れるたびに
下記のように "このオブジェクトはオフセットできません。"
と表示されてしまうのです、そこでjoinを使用しました。
filletにしても大丈夫でした。
一応報告まで。変数等で表示できなく出来るのかなぁ

コマンド: offset

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

オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>: *削除*
変更する文字を選択(右クリックで初期値変更)=*削除*
変更する文字を選択(右クリックで初期値変更)=
このオブジェクトはオフセットできません。
このオブジェクトはオフセットできません。
  • chibi-tom
  • 2017/05/08 (Mon) 09:03:44
Re: 全角のカウントアップ
chibi-tomさんのマクロに影響を受けて基数が変えられるカウントアップを考えてみました。

*^C^C$M=setenv;to;0;$(if,$(=,$(getenv,to),0),;nstr;0123456789ABCDEF;;wrt;.;;cnt;初期値<$(getenv,cnt)>^X\$M=;base;基数<$(getenv,base)>^X\;wrt;.;;to;1)$(if,$(=,$(getenv,to),1),;nmb;$(getenv,cnt);;to;2)$(if,$(=,$(getenv,to),2),;quo;$(fix,$(/,$(getenv,nmb),$(getenv,base)));;rmd;$(-,$(getenv,nmb),$(*,$(fix,$(/,$(getenv,nmb),$(getenv,base))),$(getenv,base)));;to;3)$(if,$(=,$(getenv,to),3),$(if,$(>=,$(getenv,quo),$(getenv,base)),;wrt;$(if,$(eq,$(getenv,wrt),.),$(substr,$(getenv,nstr),$(+,$(getenv,rmd),1),1),$(substr,$(getenv,nstr),$(+,$(getenv,rmd),1),1)$(getenv,wrt));;nmb;$(getenv,quo);;to;2,;to;4))$(if,$(=,$(getenv,to),4),-text;non;@;;;$(substr,$(getenv,nstr),$(+,$(getenv,quo),1),1)$(substr,$(getenv,nstr),$(+,$(getenv,rmd),1),1)$(if,$(eq,$(getenv,wrt),.),,$(getenv,wrt));move;l;;non;@;\setenv;to;5)$(if,$(=,$(getenv,to),5),ray;RC:カウントアップ/LC:初期化^X\$M="""$(if,$(getvar,cmdactive),;setenv;cnt;$(+,$(getenv,cnt),1);;wrt;.;;to;1,setenv;to;0)""")^M
  • zukki-
  • 2017/05/09 (Tue) 22:18:11
Re: 全角のカウントアップ
zukki-様

LT2017での動作結果として基数に1を入れるとエラーが出ます
また、"ray;RC:カウントアップ/LC:初期化^X"部分は逆ではないですか?
  • chibi-tom
  • 2017/05/10 (Wed) 11:14:07
Re: 全角のカウントアップ
基数が1だと数を表せないので2以上16以下でお願いします。
RC:カウントアップ/LC:初期化は逆ですね、ありがとうございます。
  • zukki-
  • 2017/05/10 (Wed) 11:36:37
Re: 全角のカウントアップ
一応報告です。

基数に2,10,16進数で試したところ
2013で動作しました。

しかし、chibi-tomさんのマクロ凄いですねー


自分用に単純なマクロに使わせてもらいました。

♪接頭文字付16進数カウントアップ文字編集
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;txt;接頭文字^x\;No0;0123456789ABCDEF;;No1;初期値(数値0~15)<$(getenv,No1)>^X\;to;1,,)$(nth,$(getenv,to),,;No2;$(if,$(<=,$(getenv,No1),15),$(substr,$(getenv,No0),$(+,$(getenv,No1),1),1),0);;to;2,)$(nth,$(getenv,to),,,offset;;^x文字を選択(右クリックで初期値変更)=^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;2;select;non;@;non;@;;change;p;;;;;;;$(getenv,txt)$(getenv,No2);setenv;No1;$(+,$(getenv,No1),1);;to;1,id;)""")^M


なんか他にも使えそうなテンプレートになりそうです。
ほんと凄い。

16進数でカウントアップ連続コピーもいけそうな気がするなー
今度考えてみよーっと
  • とってぃ
  • 2017/05/10 (Wed) 11:44:59
Re: 全角のカウントアップ
zukki-様
>基数が1だと数を表せないので2以上16以下でお願いします。
⇒最初基数の使い方が判らず1を記入してしまった為でした。
>RC:カウントアップ/LC:初期化は逆ですね、ありがとうございます。
⇒自分の使い方の間違いでなくて良かったです。

とってぃ様
ありがとうございます

しかし、まだまだ理解不足なことだらけで・・・
特に評価の遅らせ方はほぼ一発では決まりません

でも今回はお褒めいただいたので良かったです。
今後もよろしくお願いします

  • chibi-tom
  • 2017/05/10 (Wed) 11:59:05
Re: 全角のカウントアップ
遅延評価は
muraさんのところ(http://www.mura.sh/bbs)の掲示板ログのdailangさんの書き込みを見ると
わかると思います。
ざっくり言うと
一回は1個
二回は3個
三回は7個
四回は15個

n回は2^n-1個
になりますが、回数が多くなるならnthで折り返したほうがいいですね。

また、僕も良くわかってないのですがdiesel関数のネストがあると少し変わるようです。
  • zukki-
  • 2017/05/11 (Thu) 08:51:11
Re: 全角のカウントアップ
zukki-様

ありがとうございます。
すごいです。
まだ、自分の知識の無さが良くわかる解説でした。
『勉強します』の一言につきます。

  • chibi-tom
  • 2017/05/11 (Thu) 12:47:13

返信フォーム






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