Grossa Speaks Final

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

DenSien その2 (少し長い)

2009年01月19日 | CAD
Ubuntu上のWindows2000で作成しているが、VMware-Serverが起動しなくなった。
何とか起動できたので、ブロックをインサートする部分をここにおいておく。
バックアップを兼ねて。まだ、書きかけだが。

;***************************************
;***************************************
;;DenSien(電気図作成支援アプリケーション)
;;File Name "DenSin3.lsp"
;;Command Name "dens"
;;
;;By Kim Grossa
;;Ver1.0 December ,2008
;;
;;Action "ブロック挿入"
;;
;;;;How to Use
;;(1)DenSin3.dclを使用
;;(2)DOSLib.drxのロードが必要
;;
;;
;;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 SELDIR (strcat SIENDIR "DenBuroV1_1\\"))
;(setq BLOCKDIR (strcat SIENDIR "DenSien\\DenBuroV1_1\\S21一般配線\\"))
(setq SELBLK NIL)
(setq INSNAME "")
(setq QUITFLAG 99)
(setq UNITAMU 10) ;;sldファイルの表示単位
(setq SLDAMU 1)
);defun


;----------------------------
;ディレクトリの選択 サブ SelectDirSub
;----------------------------
(defun SelectDirSub(/ fullblkamu)

(setq BLOCKDIR (dos_getdir "" "C:\\Program Files\\Bricsys\\Bricscad\\DenSien\\DenBuroV1_1\\"
"フォルダを選択。キャンセルでDenSin3を終了。"))
(if (not BLOCKDIR) ;;if no files selected or Cancel
(exit) ;DenSin3を終了
);if

(dos_chdir BLOCKDIR) ;;カレントディレクトリを選択したディレクトリに変更

(setq SLDLOCAL (dos_dir "*.sld")) ;;sldファイルのリストを取得
(setq SLDAMU (length SLDLOCAL)) ;;sldファイルの数を取得
(setq DWGLOCAL (dos_dir "*.dwg")) ;;dwgファイルのリストを取得
(setq DWGAMU (length DWGLOCAL)) ;;dwgファイルの数を取得

);defun


;----------------------------
;ディレクトリの選択 SelectDir
;----------------------------
(defun SelectDir(/ fullblkamu)
(SelectDirSub)

(while (or (= SLDAMU 0) (= DWGAUM 0) (/= SLDAMU DWGAMU)) ;;sldファイルまたはdwgファイルがない場合
(princ "\nフォルダーを再度選択。")
(SelectDirSub)
);while

(setq HASAMU (rem SLDAMU UNITAMU)) ;;端尺ファイルの数を取得。(SLDAMU=27の場合 7)
(setq fullblkamu (/ SLDAMU UNITAMU)) ;;セクション(定尺ファイル)の数(SLDAMU=27の場合 2.7)
(setq fullblkamu (fix fullblkamu)) ;;小数点以下を切り捨て、整数化。(SLDAAMU=27の場合 2)


(setq SECLIMIT (+ fullblkamu 1)) ;;セクション番号の制限値 SLDAMU=27の場合、2+1=3
(if (= HASAMU 0) ;;セクション番号の制限値 SLDAMU=20の場合、3-1=2
(setq SECLIMIT (1- SECLIMIT))
);if
(setq SECNUM 1) ;;セクション番号の初期値

);defun


;----------------------------
;ブロックの選択 SelectBlk
;----------------------------
(defun SelectBlk(/ cntr)
(setq cntr (* (- SECNUM 1) UNITAMU)) ;SECNUM が2の場合 (2-1)x10 = 10
(setq cntr (+ cntr (- DISPNUM 1)))

(if (<= cntr (- DWGAMU 1))
(setq SELBLK (strcat BLOCKDIR (nth cntr DWGLOCAL)))
(setq SELBLK NIL)
);if

);defun


;----------------------------
;X、Y方向の尺度 SelectScl
;----------------------------
(defun SelectScl(/ selx sely)
;(setq SCALEX '("1:50" "1:100" "1:200" "1:5" "1:10" "1:20" "1:1")) ;;X方向の尺度
;(setq SCALEY '("1:50" "1:100" "1:200" "1:5" "1:10" "1:20" "1:1")) ;;Y方向の尺度

(setq selx (atof (get_tile "xscale" )))
(setq sely (atof (get_tile "yscale" )))

(princ "selx=")(princ selx)(terpri)
(princ "sely=")(princ sely)(terpri)

);defun

;----------------------------
;ブロックの挿入 InsertBlk
;----------------------------
(defun InsertBlk(/ exblkname inblkname insp)
(if (/= SELBLK NIL)
(progn
(setq exblkname SELBLK) ;;外部ブロック名を取得

(setq inblkname (dos_strtokens SELBLK "\\")) ;;内部ブロック名を取得
(setq inblkname (last inblkname))
(setq inblkname (dos_strtokens inblkname "."))
(setq inblkname (car inblkname))

(if (tblsearch "block" inblkname) ;;内部ブロック名の確認
(setq INSNAME inblkname)
(setq INSNAME exblkname)
);if

(setq oldES (getvar "OSMODE")) ;;現在のエンティティスナップの設定を退避

(setvar "OSMODE" 63) ;;シンボル用エンティティスナップを設定
;;1(EndPoint)+2(Midpoint)+4(Center)+8(Point)+16(Quadrant)+32(Intersection)

(setq INSX 50 ) ;;X,Y方向の尺度を設定
(setq INSY 50 )
;(setq insa 90 )
;(SelectScl) ;;X,Y方向の尺度を設定

(setvar "ORTHOMODE" 1) ;;ブロックをそう入 直行モードをON
;(setq insp (getpoint)) ;;挿入点をクリック

(command "insert" INSNAME pause INSX INSY pause "")
;(command pause)

(setvar "OSMODE" oldES);;エンティティスナップの設定を復旧
);progn
);if
);defun


;----------------------------
;次の章へ NextSec
;----------------------------
(defun NextSec()
(setq SECNUM (1+ SECNUM))
(if (>= SECNUM SECLIMIT)
(setq SECNUM SECLIMIT)
);if

(cond
((= SECNUM SECLIMIT) ;;セクション番号が制限値の場合 
(setq DISPAMU (- SLDAMU (* UNITAMU (- SECNUM 1)))) ;;SLDAMU=27の場合 27-(10x(3-1))=7
) ;;SLDAUM=30の場合 30-(10x(3-1))=10
((and (= SECLIMIT 1) (= SECNUM 1)) ;;セクション番号が1かつ制限値が1の場合 ;;SLDAMU=7の場合 7
(setq DISPAMU HASAMU)
)
(t
(setq DISPAMU UNITAMU)
)
);cond
);defun


;----------------------------
;前の章へ BackSec
;----------------------------
(defun BackSec()
(setq SECNUM (1- SECNUM))
(if (<SECNUM 1) );if

(cond
((= SECNUM SECLIMIT) ;;セクション番号が制限値の場合 
(setq DISPAMU (- SLDAMU (* UNITAMU (- SECNUM 1)))) ;;SLDAMU=27の場合 27-(10x(3-1))=7
) ;;SLDAUM=30の場合 30-(10x(3-1))=10
((and (= SECLIMIT 1) (= SECNUM 1)) ;;セクション番号が1かつ制限値が1の場合 ;;SLDAMU=7の場合 7
(setq DISPAMU HASAMU)
)
(t
(setq DISPAMU UNITAMU)
)
);cond
);defun


;----------------------------
;終了 QuitLisp
;-----------------------------
(defun QuitLisp()
(exit)
);defun


;----------------------------
;Dialogの表示 ShowDialog
;----------------------------
(defun ShowDialog(/ blkdirname i cntr DclId)
(cond
((= SECNUM SECLIMIT) ;;セクション番号が制限値の場合 
(setq DISPAMU (- SLDAMU (* UNITAMU (- SECNUM 1)))) ;;SLDAMU=27の場合 27-(10x(3-1))=7
) ;;SLDAUM=30の場合 30-(10x(3-1))=10
((and (= SECLIMIT 1) (= SECNUM 1)) ;;セクション番号が1かつ制限値が1の場合 ;;SLDAMU=7の場合 7
(setq DISPAMU HASAMU)
)
(t
(setq DISPAMU UNITAMU)
)
);cond

(setq DclId (load_dialog "DenSin3.dcl")) ;;Load the dialog definition if it is not already loaded
(if (not (new_dialog "DenSin3" DclId))
(progn
(alert "DenSin3.dcl ファイルがロードされていません。")
(exit)
);progn
);if

(setq blkdirname (dos_strtokens BLOCKDIR "\\")) ;;ディレクトリ名を取得
(setq blkdirname (last blkdirname))
(setq blkdirname (dos_strtokens blkdirname "."))
(setq blkdirname (car blkdirname))

;(setq xlist(list "1:50" "1:100" "1:200" "1:5" "1:10" "1:20" "1:1")) ;;X方向の尺度
;(setq ylist(list "1:50" "1:100" "1:200" "1:5" "1:10" "1:20" "1:1")) ;;Y方向の尺度

(set_tile "Title" (strcat "DenSin3" " ブロック数= " (itoa SLDAMU) " " blkdirname)) ;; Set Dialog Initial Settings
(set_tile "xscale" "1:50")
(set_tile "yscale" "1:50")

(start_image "Slide1")(setq X# (- (dimx_tile "Slide1") 2)) ;;Adjust X# and Y#
(setq Y# (- (dimy_tile "Slide1") 2))(end_image)

(setq i 1)
(setq cntr (* (- SECNUM 1) UNITAMU)) ;SECNUM が2の場合 (2-1)x10 = 10
(while (<= i DISPAMU) ;;SLD表示画面 SECNUM=1 dispamu=6の場合 cntr= 0->1->2->3->4->5
(start_image (strcat "Slide" (itoa i)))(slide_image 0 0 X# Y# (strcat BLOCKDIR (nth cntr SLDLOCAL)))(end_image)

(setq i (1+ i))
(setq cntr (1+ cntr))
);while
;(SelectScl)
(start_list "xscale") (mapcar 'add_list SCALEX) (end_list) ;;X方向の尺度のリスト
(start_list "yscale") (mapcar 'add_list SCALEY) (end_list) ;;Y方向の尺度のリスト


(action_tile "Slide1" "(setq DISPNUM 1)(SelectBlk)") ;;SLD画像の選択
(action_tile "Slide2" "(setq DISPNUM 2)(SelectBlk)")
(action_tile "Slide3" "(setq DISPNUM 3)(SelectBlk)")
(action_tile "Slide4" "(setq DISPNUM 4)(SelectBlk)")
(action_tile "Slide5" "(setq DISPNUM 5)(SelectBlk)")
(action_tile "Slide6" "(setq DISPNUM 6)(SelectBlk)")
(action_tile "Slide7" "(setq DISPNUM 7)(SelectBlk)")
(action_tile "Slide8" "(setq DISPNUM 8)(SelectBlk)")
(action_tile "Slide9" "(setq DISPNUM 9)(SelectBlk)")
(action_tile "Slide10" "(setq DISPNUM 10)(SelectBlk)")

(action_tile "Back#" "(done_dialog)(BackSec)")
(action_tile "Insert#" "(done_dialog)(InsertBlk)")
(action_tile "Next#" "(done_dialog)(NextSec)")
(action_tile "ChDir#" "(done_dialog)(SelectDir)")
(action_tile "ChScl#" "(done_dialog)(SelectScl)")
(action_tile "Quit#" "(done_dialog)(QuitLisp)")

(start_dialog) ;;Start Dialog
(unload_dialog DclId) ;; Unload Dialog

);defun


;----------------------------
;テスト用
;----------------------------
(defun ForTest()
(if (/= SELBLK NIL)
(progn
(princ SELBLK)(terpri)
);progn
);if

);defun


;-----------------------------
;メイン command name dens
;-----------------------------
(defun C:dens()
(InitSet) ;初期設定
(SelectDir) ;ディレクトリの選択
(while (> QUITFLAG 1)
(ShowDialog)
);while
; ;(ForTest)
);defun C:dens

(princ "\nType dens to start densin3......")
(terpri)

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

最新の画像もっと見る

コメントを投稿