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)
 )
↑----------------ここまで

0 件のコメント:

コメントを投稿