# execute_rhino_code (IronPython 2.7) - 재료표 DXF(R12, 나중에 CP949 변환) 작성기 # rows: (마크, 형식, 직경 or '"', 개수, [A,B,C,D,E,R,X1,X2,J], 길이m, 비고, 차이여부[, 총길이m(V형 직접지정)]) # 저장 후 bash: iconv -f UTF-8 -t CP949 matl_utf8.dxf > "YYMMDD_철근재료표 작업중.dxf" import System UW = {"H16":1.560, "H19":2.250, "H22":3.040, "H25":3.980, "H29":5.040} PCT = {"H16":0.03, "H19":0.03, "H22":0.06, "H25":0.06, "H29":0.06} groups = [ ("H29", [("C9", "I", "H29", 14, ["8.539", "", "", "", "", "", "", "", ""], 8.539, "재료표 동일", False)]), # ("H25", [...]), ("H22", [...]), ("H19", [...]) ] X = [0,1200,2400,3600,4800,6800,8800,10800,12800,14800,16800,18800,20800,22800,24800,26400,28000,29600,31200,40000] RH = 480.0; HH = 960.0 ents = [] def L(x1, y1, x2, y2, lay="TABL-LIN", ents=ents): ents.append("0\nLINE\n8\n%s\n10\n%.3f\n20\n%.3f\n30\n0.0\n11\n%.3f\n21\n%.3f\n31\n0.0" % (lay, x1, y1, x2, y2)) def T(x, y, s, h=200.0, lay="TABL-TEX", ents=ents): ents.append("0\nTEXT\n8\n%s\n10\n%.3f\n20\n%.3f\n30\n0.0\n40\n%.1f\n1\n%s\n7\nKOR\n72\n1\n11\n%.3f\n21\n%.3f\n31\n0.0\n73\n2" % (lay, x, y, h, s, x, y)) def mid(i, X=X): return (X[i] + X[i+1])/2.0 T(X[-1]/2.0, 1500, "철 근 재 료 표(두부보) - Rhino 모델 실측 기준 (작업중)", 560, "TITLE") T(1400, 300, "(SD400)") heads = ["번 호","형 식","직 경","개 수","A","B","C","D","E","R","X1(º)","X2(º)","J"] i = 0 while i < 13: T(mid(i), -HH/2, heads[i]); i += 1 top2 = [("길 이","(M)"),("총길이","(M)"),("단위중량","(KG/M)"),("총중량","(TON)"),("총중량(할증)","(TON)")] i = 0 while i < 5: T(mid(13+i), -RH/2, top2[i][0]); T(mid(13+i), -RH*1.5, top2[i][1]); i += 1 T(mid(18), -HH/2, "비 고 (원 재료표 대비)") L(X[0], 0, X[-1], 0); L(X[0], -HH, X[-1], -HH) for xx in X: L(xx, 0, xx, -HH) y = -HH gl = 0.0; gw = 0.0; gwh = 0.0; gwl = 0.0; gwlh = 0.0 for dia, rows in groups: tlen = 0.0 for rw in rows: yc = y - RH/2 T(mid(0), yc, rw[0]); T(mid(1), yc, rw[1]); T(mid(2), yc, rw[2]); T(mid(3), yc, str(rw[3])) k = 0 while k < 9: if rw[4][k] != "": T(mid(4+k), yc, rw[4][k]) k += 1 if len(rw) > 8: tl = rw[8] else: tl = round(rw[3]*rw[5], 3) tlen += tl T(mid(13), yc, "%.3f" % rw[5]); T(mid(14), yc, "%.3f" % tl) if rw[7]: T(mid(18), yc, rw[6], 200.0, "DIFF") else: T(mid(18), yc, rw[6]) L(X[0], y-RH, X[-1], y-RH) for xx in X: L(xx, y, xx, y-RH) y -= RH w = tlen*UW[dia]/1000.0; wh = w*(1+PCT[dia]); wl = w*1.068; wlh = wl*(1+PCT[dia]) pc = "(%d%%)" % int(round(PCT[dia]*100)) T(mid(9), y-RH/2, "소 계"); T(mid(14), y-RH/2, "%.3f" % tlen); T(mid(15), y-RH/2, "%.3f" % UW[dia]) T(mid(16), y-RH/2, "%.3f" % w); T(mid(17), y-RH/2, "%.3f%s" % (wh, pc)) L(X[0], y-RH, X[-1], y-RH) for xx in [X[0]] + X[13:]: L(xx, y, xx, y-RH) y -= RH T(mid(9), y-RH/2, "소 계(겹이음 할증 6.80%)"); T(mid(16), y-RH/2, "%.3f" % wl); T(mid(17), y-RH/2, "%.3f%s" % (wlh, pc)) L(X[0], y-RH, X[-1], y-RH) for xx in [X[0]] + X[13:]: L(xx, y, xx, y-RH) y -= RH gl += tlen; gw += round(w, 3); gwh += round(wh, 3); gwl += round(wl, 3); gwlh += round(wlh, 3) T(mid(9), y-RH/2, "총 계"); T(mid(14), y-RH/2, "%.3f" % gl); T(mid(16), y-RH/2, "%.3f" % gw); T(mid(17), y-RH/2, "%.3f" % gwh) L(X[0], y-RH, X[-1], y-RH) for xx in [X[0]] + X[13:]: L(xx, y, xx, y-RH) y -= RH T(mid(9), y-RH/2, "총 계(겹이음 할증 6.80%)"); T(mid(16), y-RH/2, "%.3f" % gwl); T(mid(17), y-RH/2, "%.3f" % gwlh) L(X[0], y-RH, X[-1], y-RH) for xx in [X[0]] + X[13:]: L(xx, y, xx, y-RH) hdr = "0\nSECTION\n2\nHEADER\n9\n$ACADVER\n1\nAC1009\n9\n$DWGCODEPAGE\n3\nANSI_949\n0\nENDSEC\n" tbl = "0\nSECTION\n2\nTABLES\n0\nTABLE\n2\nLTYPE\n70\n1\n0\nLTYPE\n2\nCONTINUOUS\n70\n0\n3\nSolid line\n72\n65\n73\n0\n40\n0.0\n0\nENDTAB\n" lays = [("0",7),("TITLE",2),("TABL-LIN",8),("TABL-TEX",7),("DIFF",1),("NOTE",3)] tbl += "0\nTABLE\n2\nLAYER\n70\n%d\n" % len(lays) for lay in lays: tbl += "0\nLAYER\n2\n%s\n70\n0\n62\n%d\n6\nCONTINUOUS\n" % (lay[0], lay[1]) tbl += "0\nENDTAB\n0\nTABLE\n2\nSTYLE\n70\n1\n0\nSTYLE\n2\nKOR\n70\n0\n40\n0.0\n41\n1.0\n50\n0.0\n71\n0\n42\n200.0\n3\nmalgun.ttf\n4\n\n0\nENDTAB\n0\nENDSEC\n" body = "0\nSECTION\n2\nENTITIES\n" + "\n".join(ents) + "\n0\nENDSEC\n0\nEOF\n" p = "C:\\temp\\matl_utf8.dxf" # 스크래치 경로로 변경해서 사용 System.IO.File.WriteAllText(p, (hdr + tbl + body).replace("\n", "\r\n"), System.Text.UTF8Encoding(False)) result = "ents=%d total=%.3fm %.3ft" % (len(ents), gl, gw) print(result)