Grossa Speaks Final

コンピュータに関するテーマを
気の向くまま取り上げています。
(時々雑談...)

DenSien MakeSlide.lsp

2010年05月14日 | CAD
;***************************************

;***************************************

;;DenSien(電気図作成支援アプリケーション)

;;File Name "MakeSlide.lsp"

;;Command Name "mls"

;;

;;By Kim Grossa

;;Ver1.0 April ,2010

;;

;;Action "Slideファイルの作成"

;;

;;;;How to Use

;;(1)MakeSlide.dclを使用

;;(2)DOSLib.drxのロードを使用しない

;; (BricsCadVersion8用のDOSLibがサポートされなくなったため)

;;

;;THANKS To

;;http://www.afralisp.net/

;;http://www.jefferypsanders.com/autolisp.html

;;http://web2.airmail.net/terrycad/Tutorials/MyDialogs.htm

;;http://en.wiki.mcneel.com/default.aspx/McNeel/DOSLib.html

;***************************************

;***************************************

;

;-----Start of File-----



;------------------

;初期設定 InitSet

;------------------

(defun InitSet()

(setq SIENDIR "C:\\Program Files\\Bricsys\\Bricscad\\")

(setq DENBURODIR (strcat SIENDIR "DenSien\\DenBuroV1_1\\"))

(setq QUITFLAG 99)

(setq ItemNum "0")

(setq SelectedDIR NIL)

(setq dwglocal NIL)

(setq sldlocal NIL)

);defun





;-------------------------------------

;ポップアップリストの設定 SetPopList

;-------------------------------------

(defun SetPopList()

;ディレクトリー(フォルダ)の設定

; DirListの初期値 "  S21一般配線" ;sStr=1

; "S31機器" ;sStr=2

; "S41一般用照明" ;sStr=3

; "S41防災用照明" ;sStr=4

; "S42コンセント" ;sStr=5

; "S43点滅器" ;sStr=6

; "S44開閉器_計器" ;sStr=7

; "S45配電盤_分電盤等" ;sStr=8

; "S51情報" ;sStr=9

; "S51電話" ;sStr=10

; "S52ナースコール" ;sStr=11

; "S52警報_呼出_表示" ;sStr=12

; "S53電気時計" ;sStr=13

; "S54インターホン" ;sStr=14

; "S54拡声_映像" ;sStr=15

; "S55テレビ共同受信" ;sStr=16

; "S56駐車場管制" ;sStr=17

; "S61自動火災報知" ;sStr=18

; "S62共同住宅用警報" ;sStr=19

; "S63非常警報" ;sStr=20

; "S64消火" ;sStr=21

; "S65自動閉鎖" ;sStr=22

; "S66ガス漏れ警報" ;sStr=23

; "S67無線通信補助" ;sStr=24

; "S68監視カメラ" ;sStr=25

; "S69機械警備" ;sStr=26

; "S70避雷" ;sStr=27

; "S80屋外" ;sStr=28

; "SK1計器" ;sStr=29

; "SK2受変電" ;sStr=30

; "SK3制御盤" ;sStr=31

; "SK4変圧器" ;sStr=32



(setq DirList (list "")) ;;ディレクトリのリストをクリア

(setq DirList (vl-directory-files DENBURODIR "*.*" -1)) ;;-1 フォルダのみ 0 ファイル、フォルダ 1 ファイルのみ

(setq DirList (cdr DirList)) ;リストの1行目を取り除く

);defun





;--------------------------------------------------

;選択されたディレクトリリストの項目を取得 GetItem

;--------------------------------------------------

(defun GetItem()

(setq ItemNum (get_tile "DirList")) ;;リストから選択した項目を取得

);defun





;------------------------------------------

;DWGファイルのリストを取得 GetDWGFileList

;------------------------------------------

(defun GetDWGFileList()

(setq SelectedDIR (nth (atoi ItemNum) DirList)) ;;ブロックのディレクトリを取得

(setq DWGDir (strcat DENBURODIR SelectedDIR))

(setq dwglocal (vl-directory-files DWGDir "*.dwg" 1)) ;;-1 フォルダのみ 0 ファイル、フォルダ 1 ファイルのみ

);defun





;------------------------------------------

;SLDファイルのリストを取得 GetSLDFileList

;------------------------------------------

(defun GetSLDFileList()

(setq SelectedDIR (nth (atoi ItemNum) DirList)) ;;ブロックのディレクトリを取得

(setq SLDDir (strcat DENBURODIR SelectedDIR))

(setq sldlocal (vl-directory-files SLDDir "*.sld" 1)) ;;-1 フォルダのみ 0 ファイル、フォルダ 1 ファイルの

);defun





;--------------------------------------

;DWG,SLDファイルの数を取得 GetFileNum

;--------------------------------------

(defun GetFileNum()

(setq dwgamu (length dwglocal)) ;;dwgファイルの数を取得



(setq sldamu (length sldlocal)) ;;sldファイルの数を取得



(cond

((and (= sldamu 0) (= dwgamu 0))

(alert "SLD,DWGファイルがありません。フォルダを変更して下さい。") ;;sld,dwgファイルが両方ともない場合

(setq fFileName 77)

)

((= sldamu 0)

(alert "SLDファイルがありません。SLDファイルを作成します。") ;;sldファイルがない場合

(setq fFileNum 88)

)

((= dwgamu 0)

(alert "DWGファイルがありません。フォルダを変更して下さい。") ;;dwgファイルがない場合

(setq fFileNum 77)

)

((/= dwgamu sldamu)

(alert "SLDファイルとDWGファイルの数がちがいます。終了します。") ;;dwgファイルとsldファイルの数がちがう場合

(setq fFileNum 99)

)

((= dwgamu sldamu) ;;dwgファイルとsldファイルの数が同じ場合

(alert "すでにSLDファイルがあります。フォルダを変更して下さい。")

(setq fFileNum 1)

)

);cond



);defun





;---------------------------

;SLDファイルの作成 MakeSLD

;---------------------------

(defun MakeSLD()

(GetItem)

(GetDWGFileList)

(GetSLDFileList)

(setq fFileNum NIL)

(GetFileNum)



(if (= fFileNum 99) ;;dwgファイルとsldファイルの数がちがう場合

(exit)

);if



(if (= fFileNum 88) ;;sldファイルがない場合

(progn

(setq dnum 0)

(setq dmax dwgamu)

(princ "dmax= ")(princ dmax)(terpri)

(princ "dwgamu= ")(princ dwgamu)(terpri)

(while (<dnum dmax) (princ "dnum= ")(princ dnum)(terpri)

(setq DWGFName (strcat DWGDir "\\" (nth dnum dwglocal)))

(princ "DWGFName= ")(princ DWGFName)(terpri)

(setq SLDFName DWGFName)

(setq SLDFName (vl-string-subst ".sld" ".dwg" SLDFName))

(command "_open" DWGFName "")

(command "_mslide" SLDFName "")

(command "_close" "")

(setq dnum (+ dnum 1))

);while

(alert "SLDファイルの作成が終わりました。")

);progn

);;if

);defun





;----------------------------

;終了 QuitLisp

;----------------------------

(defun QuitLisp()

(exit)

);defun





;-----------------------------

;ダイアログの表示 ShowDialog

;-----------------------------

(defun ShowDialog()

(setq DclId (load_dialog "MakeSlide.dcl"))

(new_dialog "MakeSlide" DclId)

(set_tile "Title" "MakeSlide")



(start_list "DirList" 3) ;;ディレクトリリストの項目

(mapcar 'add_list DirList)

(end_list)



(action_tile "OK#" "(MakeSLD)(done_dialog)")

(action_tile "Cancel#" "(done_dialog)")

(action_tile "Quit#" "(QuitLisp)(done_dialog)")



(start_dialog) ;;Start Dialog

(unload_dialog DclId) ;; Unload Dialog



);defun





;-----------------------------

;メイン command name mls

;-----------------------------

(defun C:mls()

(InitSet) ;;初期設定

(SetPopList) ;;ポップアップリストの設定 

(while (> QUITFLAG 1) ;;ダイアログの表示

(ShowDialog)

);while



);defun





;-----End of File-----

最新の画像もっと見る

コメントを投稿