공부를해도 해당부분은 개조를 못하겠어서 요청드립니다 ㅠㅠ
현재 좌표값으로 문자를 인식하여
SZ값을 데이타베이스를 검색하여 웨이트를 적용하여, 곱연산으로 BOM을 작동하는 리습입니다.
제로 페이퍼에서 0,0을 주고 해당하는 좌표값으로 다른 스타일 도면으로 수정을 하였으나.
현재상태에서는 QTY의 숫자를 읽지못해 1으로 인식하여
토탈 중량에 1개의 값만 적용됩니다.
원래대로라면 유니트에 하나의 중량 그리고 토탈에는 갯수를 인식하여 곱연산으로 다시 적용되어야합니다.
어느 부분을 수정해야할지 몰라 문의드립니다.
읽는 순서 문제인건지 아니면 제가 좌표값을 잘못 잡았던지
함수가 틀린건 아닌것 같습니다. 다른 버전의 도면에서는 잘돌아가기 때문에;;
WW(CSP).lsp
샘플.dwg
실행방법은 BOM란에 QTY와 주석란 드래그하면 자동으로 계산이됩니다.
도움 부탁드립니다 ㅠㅠ
현재 이부분에 문제가 있는것 같습니다.
;============================================================================
; Main routine
;============================================================================
(defun C:CSP (/ ss szss qtss szmin szmax qtmin qtmax unitp totalp olderr
i ii fa en ed szed sz sp qty uwt twt x1 x2 x3 x4)
(setq olderr *error
*error* wterr
)
(if (setq ss (ssget))
(progn
(command "layer" "S" "TXT" "")
(command "COLOR" "bylayer")
(setq old_snap (getvar "osmode"))
(setvar "osmode" 0)
(SETVAR "LUPREC" 1)
(setvar "dimzin" 0)
(setq gap 0)
(setq i -1
wtn 0
fa (getvar "dimscale")
llpx (car (getvar "limmin"))
urpx (car (getvar "limmax"))
paper (rem (- urpx llpx) 594)
qtss (ssadd)
szss (ssadd)
)
(if (zerop paper)
(setq szmin (* fa (+ gap 735.7)) ;Description x-coordnates
szmax (* fa (+ gap 779.7))
qtmin (* fa (+ gap 720.7)) ;Quantity x-coordinates
qtmax (* fa (+ gap 735.7))
unitp (* fa (+ gap 791.3)) ;Unit weight text end point
totalp (* fa (+ gap 806.3)) ;Total weight text end point
)
(setq szmin (* fa (+ gap 735.7)) ;Description x-coordnates
szmax (* fa (+ gap 779.7))
qtmin (* fa (+ gap 720.7)) ;Quantity x-coordinates
qtmax (* fa (+ gap 735.7))
unitp (* fa (+ gap 791.3)) ;Unit weight text end point
totalp (* fa (+ gap 806.3)) ;Total weight text end point
)
)
(while
(setq en (ssname ss (setq i (1+ i))))
(setq ed (entget en))
(if (= "TEXT" (cdr (assoc 0 ed)))
(cond
((> szmin (setq sp (cadr (assoc 10 ed)))) )
((< szmim sp szmax) (ssadd en szss))
((< qtmin sp qtmax) (ssadd en qtss))
)
)
)
(setq i -1)
(repeat (setq szn (sslength szss))
(setq szed (entget (ssname szss (setq i (1+ i))))
sz (strcase (setq orgsz (cdr (assoc 1 szed))))
sp (caddr (assoc 10 szed))
)
(cond
((wcmatch sz "H*X*X*X*X*") (kgperm x4 1 "HBEAM.DAT")) ; Calculation ok
((wcmatch sz "L*X*X*X*") (kgperm x3 2 "ANGLE.DAT")) ; Calculation ok
((wcmatch sz "C*X*X*X*X*") (kgperm x4 3 "CHANEL.DAT")) ; Calculation ok
((wcmatch sz "I*X*X*X*X*") (kgperm x4 4 "IBEAM.DAT")) ; Calculation ok
((wcmatch sz "T*X*X*X*X*") (kgperm x4 5 "T-BEAM.DAT")) ; Calculation ok
((wcmatch sz "PL-*X*X*") (xptrs 4) (plate)) ; Calculation ok
((wcmatch sz "F.B *X*X*") (xptrs 5) (plate)) ; Calculation ok
((wcmatch sz "R.B %%C*X*") (xptrs 8) (rd_bar)) ; Calculation ok
((wcmatch sz "CHK'D PL-*3.2*X*") (xptrs 10) (chplate1)) ; Calculation ok
((wcmatch sz "CHK'D PL-*4.5*X*") (xptrs 10) (chplate2)) ; Calculation ok
((wcmatch sz "CHK'D PL-*6*X*") (xptrs 10) (chplate3)) ; Calculation ok
((wcmatch sz "EXP'D METAL-*2.3*X*") (xptrs 10) (explate1)) ; Calculation ok
((wcmatch sz "EXP'D METAL-*6*X*") (xptrs 10) (explate2)) ; Calculation ok
((wcmatch sz "EXP'D METAL-*4.5*X*") (xptrs 10) (explate3)) ; Calculation ok
((wcmatch sz "LINER*X*X*") (xptrs 7) (LINER)) ; Calculation ok
((wcmatch sz "RUBBER*X*X*") (xptrs 8) (RUBBER)) ; Calculation ok
((wcmatch sz "PIPE *AX*") (xptrs 5) (sgp_pipe)) ; Calculation ok
((wcmatch sz "SQ*X*X*") (xptrs 4) (plate))
((wcmatch sz "CHK*X*X*") (xptrs 4) (plate))
((wcmatch sz "W*X*X*") (xptrs 2) (w_shap))
((wcmatch sz "G*X*X*X*") (xptrs 2) (gratg))
((wcmatch sz "SERR.G*X*X*X*") (xptrs 7) (serrgt))
((wcmatch sz "P*\"%%*X*SC*X*") (xptrs 2) (sch_p))
((wcmatch sz "P*\"%%*X*\"X*") (xptrs 2) (in_pip))
((wcmatch sz "P*%%*X*X*") (xptrs 2) (mm_pip))
((wcmatch sz "DIA*X*%%*") (xptrs 4) (rd_bar))
((wcmatch sz "FOLDED PL*X*X*") (xptrs 10) (folded))
((wcmatch sz "IPET*X*") (xptrs 5) (xrefkg "HIBERNIA.KGM"))
((wcmatch sz "[IU]P[EN]*X*,HE[AB]*X*") (xptrs 4) (xrefkg "HIBERNIA.KGM"))
((wcmatch sz "HSS*X*X*X*") (xptrs 4) (xrefkg "HIBERNIA.KGM"))
((wcmatch sz "2-L*X*X*") (xptrs 4) (xrefkg "BPF.KGM"))
(t (princ (strcat "\n" orgsz " is not standard pattern.")))
)
(if uwt
(progn
(if (< 1 uwt) (setq uwt (atof (rtos uwt 2 1))))
(setq qty 1 ii -1)
(while ii
(if (setq en (ssname qtss (setq ii (1+ ii))))
(progn
(setq ed (entget en))
(if (< (* fa -2) (- sp (caddr (assoc 10 ed))) (* fa 2))
(setq qty (atoi (cdr (assoc 1 ed))) ii nil)
)
)
(setq ii nil)
)
)
(if (= qty 1)
(progn
(weight unitp (if (> 0.1 uwt) (rtos uwt 2 1) (rtos uwt 2 1)))
)
(progn
(weight unitp (if (> 0.1 uwt) (rtos uwt 2 1) (rtos uwt 2 1)))
(weight totalp
(if (> 0.1 (setq twt (* qty uwt))))
(if (> 0.1 uwt) (rtos twt 2 1) (rtos twt 2 1))
)
)
)
)
(setq wtn (1+ wtn))
)
)
(setq uwt nil kgm nil)
)
)
(princ "\Entities not selected.")
)
(princ (strcat "\nSelected Descriptions is " (itoa szn) " items."
"\nCalculated Descriptions is " (itoa wtn) " items."
)
)
(setq *error* olderr)
(setvar "osmode" old_snap)
(command "layer" "S" "txt" "")
(command "-style" "romans" "" kck 0.75 "" "" "" "")
(prompt "\n Auto Steel Weight Program [Rev. 2012. 08. 30.]")
(prompt "\n ※ 주의사항 ※ 형강류 규격은 China GB Standard 임. ")
(princ)
)
;; Program End !!!!