2017年12月20日水曜日

オブジェクト選択

Autocad操作中に
オブジェクト選択:直前(P)を 私は良く使うのですが、

例:蝶の絵柄を右にコピーするとする 
コピーするとこんな感じ

-------------------------------------------------
ここからが、ちょっと違うこと。
Autocad の COPY で コピーすると、
オブジェクト選択:直前(P) をすると、
最初に選択した要素が選ばれます。

-------------------------------------------------
これが、いろんなCADを使った私からすると、、
使いにくいのです。
ns-menuコマンドで C または (NS_C) で  コピーすると、
オブジェクト選択:直前(P) をすると、
最後にコピーされた要素が選ばれます。

 最後にコピーされたものが選ばれることで、
この要素群に対し上に30mmとか 簡単にできる。
次への 連続した動作が引き継がれます。
-------------------------------------------------
ns-menu で行った操作で、コマンド終了すると、
最後に行った要素群が 直前(P)になるように
処理を掛けています。 
-------------------------------------------------

2017年12月19日火曜日

図面編集時間

Autocadで作図した図面は、
知らぬ間に「図面編集時間」や「最終登録者」「更新日時」等の情報が、登録されます。
特に 「図面編集時間」はリセット出来ない。
図面が出来て、客先等に送信する場合には、
この情報も行っちゃうんです。(@@;)
------------------------------------------------------------------
●例:
 -----------------------------------------------------------------------------
●送信は汎用性のある中間ファイル「DXF」にて送る場合が多いのですが、
DXF変換しても「図面編集時間」等が引き継がれます。(^0^;)

今回は、出来たDXF内の「図面編集時間」、「最終登録者」等を
リセットするプログラムを作りました。
 変換後、できあがったDXFを読んでみると、
-----------------------------------------------------------------------------

-----------------------------------------------------------------------------
↑無くなってるでしょ?\(^O^)/
 -----------------------------------------------------------------------------

以下を メモ帳で開き デスクトップに dxf.lsp で保存
 変換したい図面を読み
[ツール] → [AutoLisp] → [アプリケーションロード]で
デスクトップの dxf.lsp を読み込み
 コマンド DXF で動作します。

読み込んだ図面からコマンド実行で,
デスクトップに 編集時間を削除したDXFファイルができあがります。
↓------ここから

 (defun c:dxf ( / DATA DNAME1 DNAME2 FULLNAME1 HNAME1 MNAME1 OPENFILE1 OPENFILE2 TMP1 TMP8 TXT TXT1 UNAME)
 ;DXFをデスクトップに作成後 編集時間を消して再登録します。
 ;
 (setq data "2000-DXF");下の5種から選べる
 ;
 (VL-LOAD-COM)
 (setvar "CMDECHO" 0)
 (command ".clayer" "0")
 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object)));purge_all
 (command ".zoom" "e")
 (while (= 1 (getvar "cmdactive"))(command pause));コマンド終了まで待つ
 (setq hname1 (getvar "dwgprefix"));図面ホルダー名
 (setq hname1 (strcat "C:\\Users\\"(getenv "USERNAME") "\\Desktop\\"));デスクトップへ
 (setq mname1 (getvar "dwgname"));元ファイル名(変換用ファイル名.dwg)
 (setq fullname1 (strcat hname1 mname1));元のホルダー+ファイル名
 (setq uname (getenv "USERNAME"));ユーザー名
 ;
 (setq dname1 (strcat hname1 (substr mname1 1 (- (strlen mname1) 4) )          ))
 (setq dname2 (strcat hname1 (substr mname1 1 (- (strlen mname1) 4) ) "[0TIME]"))
 ;
 (setq tmp1 (getvar "FILEDIA"))
 (setq tmp8 (getvar "EXPERT"))
 (setvar "FILEDIA" 0)
 (setvar "EXPERT" 2)
 (princ         "\n━━━━━━━━━━━━━━━━━━━━━━━")
 (princ (strcat "\n" dname2 "\n["data"] 形式で保存中"))
 (cond
  ((= data "2000-DXF") (command "_SAVEAS" "DXF" "V" "2000" "" dname2))
  ((= data "2004-DXF") (command "_SAVEAS" "DXF" "V" "2004" "" dname2))
  ((= data "2007-DXF") (command "_SAVEAS" "DXF" "V" "2007" "" dname2))
  ((= data "2010-DXF") (command "_SAVEAS" "DXF" "V" "2010" "" dname2))
  ((= data "2013-DXF") (command "_SAVEAS" "DXF" "V" "2013" "" dname2))
  )
 (while (= 1 (getvar "cmdactive"))(command pause));保存終了まで待つ
 (princ (strcat "\n" dname2 "\n["data"] 形式で保存完了"))
 (princ (strcat "\n" dname2 "\n["data"] 編集時間調査中"))
 (setvar "FILEDIA" tmp1)
 (setvar "EXPERT"  tmp8)
 (command "_SAVEAS" "2000" (strcat "C:\\Users\\"(getenv "USERNAME") "\\Desktop\\変換ファイル削除可.dwg"))
 (setq openfile2 (open (strcat dname1 ".dxf") "w"))
 (setq openfile1 (open (strcat dname2 ".dxf") "r"))
 (setq txt (read-line openfile1))
 (while txt
  (cond
   ((or (= txt "$TDCREATE")(= txt "$TDUCREATE")(= txt "$TDUUPDATE")(= txt "$TDINDWG")(= txt "$TDUSRTIMER"))
    (read-line openfile1)
    (read-line openfile1)
    (read-line openfile1)
    )
   ((= txt uname)
    (write-line "-----" openfile2)
    )
   (T
    (write-line txt openfile2)
    )
   )
  (setq txt (read-line openfile1))
  )
 (close openfile1)
 (close openfile2)
 (princ (strcat "\n" dname1 "\n["data"] 編集時間編集済み"))
 (vl-file-delete (strcat dname2 ".dxf"))
 (command ".delay" 2000);待ち時間
 (if (>= (atof (substr (getvar "ACADVER") 1 4)) 19.1);2014
  (progn
   (command "_.wipeout" "_f" "_off")
   (command-s "_.close" "Y")
   )
  (progn
   (command ".close" "Y")
   )
  )
 (princ)
 )
↑----------------ここまで

2017年12月18日月曜日

キーボードコマンド 割付表

Autocad に 至るまでには
何種類かの汎用Cadを使ってきました。
Autocad を使ってみると使いにくい事ばかり、、
経験のある汎用CADの操作性の良いところ?の
アイデアをこの"ns-menu"に詰め込んでます。

ns-menu キーボードコマンド 割付表です。

 JWWっぽい?キーボード割当にしています。

2017年12月15日金曜日

[機能紹介] 画層一覧

画層一覧のコマンドです
コマンド GA または (NS_GA)

例:画層毎に書かれた図面がある。
実行すると。
[画層処理] [現状の画層情報を保存しました]
[画層一覧] G:画面に配置 / B:画層毎にブロック化 / L:画層一覧
 / H:範囲一覧 / マウス左右=移動 / ESC=決定 / RET=戻

●G:画面に配置 の場合
 画層毎に等間隔で図面上に配置出来ます。
本数:画層名:画層色なども自動で配置されます。

●L:画層一覧 の場合
 画層情報 画層名:画層色:本数他を希望の位置に配置出来ます。

 ● マウス左右 で 現在層を移動させ、濃淡表示でわかりやすく、
高速で切り替える事も出来ます。

画層のダイアログ出して、ロックや非ロック、表示したり、
現在層に移動、、煩わしい作業をしなくても、
マウス左右で一発。これは便利ですよ。

[機能更新] 3Dを2D化

3Dから2D変換には
●「FLATSHOT」 の コマンドがありますが、3D要素のみ
●「FLATTEN」の コマンドは 2D要素のみ

両方を合成したコマンド
コマンド  FLAT または  (ns_FLAT)

[NS-FLAT] FLATSHOTしたい画面に回転しておくこと。
          2D要素=FLATTEN 3D要素=FLATSHOTをして
          コピー登録 C0 に登録します。
フィルターセットにて要素種別を判別。
プログラムを見直して、高速化を行いました。
例:この3D画面から

コマンド  FLAT を行うと
こんな感じになります。
よーく見るとUCSアイコンも平面表示でしょ。


2017年12月13日水曜日

[機能紹介] 高速図面閉じ

Autocadで作業を行っていると、
作図中に参考となる図面を開いたりしていると
いつの間にか、図面を何枚か開いていることがあります。

この例だと、8枚も開いちゃってる。(^0^;)
一枚一枚図面を閉じる(ウィンドうの右上の×)事になるが、
一枚一枚保存しないを押さないと閉じない。

煩雑ですよね?(^0^;)

コマンド nsc または (ns_nsc)
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃[裏窓高速図面閉じ] 現在開いている図面以外を全て閉じます ┃
┃[■ ◆ 注意 ◆ ■] 保存せずに閉じます。よろしいですか?  ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
[高速図面閉じ] [7] 枚 裏窓図面があります
[高速図面閉じ] 全図面閉じは A  裏窓図面閉じは [Y]  キャンセルは [N] 

A か Y を押すだけで、強制閉じ処理。
保存せず、あっという間に閉じてくれます。

2017年12月1日金曜日

[機能紹介] 3D要素

[3D要素] 基準中心選択後、
要素指定で即回転体作成 2点で回転、4点で簡易バルブ作成

例題:このようなバルブの絵があるとする。

コマンド: 3R または (NS_3R)
1.中心線指定
2.フランジ始端
3.フランジ終端
4.スピンドル橋
5.ハンドル端
を入力するだけで、、

この5つの座標だけで計算して、,, 
じゃぁ~~~ん。
簡易バルブの3Dが出来ちゃいます。 
これも見ているだけで、たのしぃっ。