################################## ### DM2_w23 # AGruber@tugraz.at ### ### hu_06 UN_headquaters NYC ### ### paneling ### ################################### ############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:\WWW\halil2003\DM2") ### import DM_lib as dm ### reload( dm ) ############################## rs.UnitSystem(4) # km = 5, meters = 4, cm = 3 etc rs.ShowGrid(None, 0) # grid > 0 = off rs.ShowGridAxes(None, 0) # y/y/z axen display > 0/1 = off/on rs.ViewDisplayMode(rs.CurrentView(), "wireframe") rs.Command("cplane w t enter", 0) # cPlane World Top dm.PointRadius(displayModeX=0, rad=3, styl=3) dm.printDisplay(0) # nomen est omen rs.EnableRedraw(0) dm.eAA() ###_________________________________________# ### basic settings for grid to fit UN_slab # ### # floors = H = dm.H = 40 # default=40 / incl roof slabs = L = dm.L = 11 # default=11 depth = D = dm.D = 4 # default= 4 / division in building_depth floorHeight = fH = dm.fH = 4.0 # default= 4.0 / 4.0*(H-1) = 156 meters # ################ # get from DM_lib as dm: UnoGridCoords = dm.UnoGridCoords # get gridCoords L*D*H = 1760 UnoPanelCoords = dm.UnoPanelCoords # get panelCoords [frontPanels, backPanels, sidePanels, upSidePanels] / default arguments s.u. ################____________________________# dm.newEmptyLayer("UNO::setUp", [120,120,140]) ################ lengthVec = lVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) )) ## rs.AddPoint( dm.getUnoCoord(1, 0, 0) ) depthVec = dVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 1, 0), dm.getUnoCoord(0, 0, 0) )) ## rs.AddPoint( dm.getUnoCoord(0, 1, 0) ) ################ if 1: ### SETUP >> dont' exec @ homework ! rs.AddCurve( [dm.getUnoCoord(0,0,0), dm.getUnoCoord(0,0,39), dm.getUnoCoord(10,0,39), dm.getUnoCoord(10,0,0), dm.getUnoCoord(10,3,0), dm.getUnoCoord(0,3,0), dm.getUnoCoord(0,3,39), dm.getUnoCoord(10,3,39)], 1) rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 1, 0) ), [222, 0, 0] ) rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) ), [0, 222, 0] ) rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 0, 2) ), [0, 0, 222] ) rs.ObjectPrintWidth( rs.AllObjects()[0:3], 1.0 ) #rs.AddPoints( UnoGridCoords ) rs.ZoomExtents() frontPanels = UnoPanelCoords[0] backPanels = UnoPanelCoords[1] sidePanels = UnoPanelCoords[2] upSidePanels = UnoPanelCoords[3] allPanels = UnoPanelCoords[4] #_____________________________here you go: dm.newEmptyLayer("myPROJ", [120,100,120]) allPanels = [] # front allPanels = [[dm.getUnoCoord( 0, 0, 0), dm.getUnoCoord( 0, 0, 39), dm.getUnoCoord(10, 0, 39), dm.getUnoCoord(10, 0, 0)]] # back: #allPanels += [[dm.getUnoCoord( 0, 3, 0), dm.getUnoCoord( 0, 3, 39), dm.getUnoCoord(10, 3, 39), dm.getUnoCoord(10, 3, 0)]] # side: #allPanels += [[dm.getUnoCoord( 0, 3, 0), dm.getUnoCoord( 0, 3, 39), dm.getUnoCoord( 0, 0, 39), dm.getUnoCoord( 0, 0, 0)]] #allPanels += [[dm.getUnoCoord(10, 0, 0), dm.getUnoCoord(10, 0, 39), dm.getUnoCoord(10, 3, 39), dm.getUnoCoord(10, 3, 0)]] random.shuffle( allPanels ) def dividePanel( panel=allPanels[0], maxPanels=25, minHig=4.0 ): dm.esc() if maxPanels>500: maxPanels=500 if rs.Distance( panel[0], panel[1] ) > minHig*2: allPanels.remove( panel ) pMid = dm.pntInbetween(panel[0],panel[2]) allPanels.append([panel[0], dm.pntInbetween(panel[0],panel[1]), pMid, dm.pntInbetween(panel[3],panel[0])]) allPanels.append([dm.pntInbetween(panel[0],panel[1]), panel[1],dm.pntInbetween(panel[1],panel[2]), pMid]) allPanels.append([pMid, dm.pntInbetween(panel[1],panel[2]), panel[2], dm.pntInbetween(panel[2],panel[3])]) allPanels.append([dm.pntInbetween(panel[0],panel[3]), pMid, dm.pntInbetween(panel[2],panel[3]), panel[3]]) if len(allPanels) <= maxPanels : dividePanel( panel=random.choice( allPanels[0: int(len(allPanels)*0.666)]), maxPanels=maxPanels ) dividePanel(panel=allPanels[0], maxPanels=444, minHig=12.0 ) print "::: len(allPanels)",len(allPanels) def myPanel_V ( panel, anzahl=8 ): p0,p1,p2,p3 = panel rs.AddCurve( [p0,p1,p2,p3, p0],1) #rs.AddCurve( [p0,p1,p2,p3, p0],3) crv = rs.AddLine( p0, p3) if anzahl==0: anzahl = int(rs.Distance( p0, p3 )) coords03 = rs.DivideCurve( crv, anzahl) rs.DeleteObject(crv) #rs.AddPoints( coords03 ) breite = rs.Distance( coords03[0], coords03[1]) vecHoehe = rs.VectorSubtract( p1, p0) nVec = dm.normVec3pnts( p0, p1, p2 ) nVec = rs.VectorScale( nVec, breite*2 ) nVec = rs.VectorRotate( nVec, random.uniform(-30,30), [0,0,1] ) for pX in coords03: pX0 = pX pX1 = rs.VectorAdd(pX, nVec) pX2 = rs.VectorAdd(pX1, vecHoehe) pX3 = rs.VectorAdd(pX, vecHoehe) coords = [pX0,pX1,pX2,pX3,pX0] #rs.AddLine( pX, rs.VectorAdd(pX, nVec) ) rs.AddCurve( coords, 1) def myPanel_H ( panel, anzahl=8 ): p0,p1,p2,p3 = panel #rs.AddCurve( [p1,p0,p2,p3, p1],2) #rs.AddCurve( [p0,p2,p1,p3, p0],2) #rs.AddCurve( [p0,p1,p2,p3, p0],3) crv = rs.AddLine( p0, p1) coords = rs.DivideCurve( crv, anzahl ) rs.DeleteObject(crv) untenVec = rs.VectorSubtract( p3, p0 ) for cor in coords: rs.AddLine( cor, rs.VectorAdd(cor, untenVec)) if 0: for i,panel in enumerate(allPanels[0:]): dm.esc() pass rs.AddCurve( panel, 1) if 0 and panel[0][2] > -1: if random.uniform(0, 100) < 50: myPanel_V ( panel ) elif random.uniform(0, 100) < 50: myPanel_H ( panel, anzahl=8 ) if i%10==0: rs.Redraw() rs.Command("cplane W T enter", 0) coords = rs.DivideCurve(rs.AddCurve( [dm.getUnoCoord(0,0,39), dm.getUnoCoord(10,0,39), dm.getUnoCoord(10,3,39), dm.getUnoCoord(0,3,39), dm.getUnoCoord(0,0,39) ], 1), 11) random.shuffle(coords) #rs.AddCurve( coords, 1 ) def draw_lines(bottom_left, bottom_right, top_left, top_right, color, num_lines): bottom_pts = [bottom_left, bottom_right] bottom_curve = rs.AddCurve(bottom_pts) bottom_pts = rs.DivideCurve(bottom_curve, num_lines) rs.DeleteObject(bottom_curve) top_pts = [top_left, top_right] top_curve = rs.AddCurve(top_pts) top_pts = rs.DivideCurve(top_curve, num_lines) rs.DeleteObject(top_curve) for i in range(num_lines): line = rs.AddLine(bottom_pts[i], top_pts[i]) rs.ObjectColor(line, color) def make_rectangle_1(bottom_left, bottom_right, top_left, top_right, depth): bottom_left_pair = rs.VectorAdd(bottom_left, depth) bottom_right_pair = rs.VectorAdd(bottom_right, depth) top_left_pair = rs.VectorAdd(top_left, depth) top_right_pair = rs.VectorAdd(top_right, depth) # rs.AddLine(bottom_left, bottom_left_pair) # rs.AddLine(bottom_right, bottom_right_pair) # rs.AddLine(top_left, top_left_pair) # rs.AddLine(top_right, top_right_pair) draw_lines(bottom_left_pair, bottom_right_pair, top_left_pair, top_right_pair, [85, 85, 85], 60) draw_lines(top_left_pair, top_right_pair, top_left, top_right, [85, 85, 85], 60) # rectangle_pts = [bottom_left_pair, bottom_right_pair, top_right_pair, top_left_pair, bottom_left_pair] # rs.AddCurve(rectangle_pts, 1) def make_rectangle_2(bottom_left, bottom_right, top_left, top_right, depth, color, num_lines=30): bottom_left_pair = rs.VectorAdd(bottom_left, depth) bottom_right_pair = rs.VectorAdd(bottom_right, depth) top_left_pair = rs.VectorAdd(top_left, depth) top_right_pair = rs.VectorAdd(top_right, depth) # rs.AddLine(bottom_left, bottom_left_pair) # rs.AddLine(bottom_right, bottom_right_pair) # rs.AddLine(top_left, top_left_pair) # rs.AddLine(top_right, top_right_pair) # rs.AddLine(bottom_left, top_left) draw_lines(bottom_left_pair, bottom_right_pair, top_left_pair, top_right_pair, color, num_lines) draw_lines(bottom_right_pair, bottom_right, top_right_pair, top_right, color, num_lines) draw_lines(bottom_left_pair, bottom_left, top_left_pair, top_left, color, num_lines) draw_lines(top_left_pair, top_right_pair, top_left, top_right, color, num_lines) # rectangle_pts = [bottom_left_pair, bottom_right_pair, top_right_pair, top_left_pair, bottom_left_pair] # rs.AddCurve(rectangle_pts, 1) def find_min_x(panel): bottom_right, top_right, top_left, bottom_left = panel return bottom_left[0] def styria_panel(panel, color): bottom_right, top_right, top_left, bottom_left = panel bottom_z = min(bottom_right[2], top_right[2], top_left[2], bottom_left[2]) top_z = max(bottom_right[2], top_right[2], top_left[2], bottom_left[2]) height = top_z - bottom_z vector_up = [0, 0, height / 2] middle_left = rs.VectorAdd(bottom_left, vector_up) middle_right = rs.VectorAdd(bottom_right, vector_up) vector_depth = dm.normVec3pnts(bottom_right, top_right, top_left) vector_depth = rs.VectorScale(vector_depth, 3) bottom_left_right_vector = rs.VectorCreate(bottom_left, bottom_right) bottom_left_right_vector_unit = rs.VectorUnitize(bottom_left_right_vector) bottom_left_right_vector_unit_scaled = rs.VectorScale(bottom_left_right_vector_unit, 1.5) bottom_left_right_vector_unit_scaled = rs.VectorReverse(bottom_left_right_vector_unit_scaled) middle_left_right_vector = rs.VectorCreate(middle_left, middle_right) middle_left_right_vector_unit = rs.VectorUnitize(middle_left_right_vector) middle_left_right_vector_unit_scaled = rs.VectorScale(middle_left_right_vector_unit, 1.5) middle_left_right_vector_unit_scaled = rs.VectorReverse(middle_left_right_vector_unit_scaled) make_rectangle_1(bottom_left, rs.VectorSubtract(bottom_right, bottom_left_right_vector_unit_scaled), middle_left, rs.VectorSubtract(middle_right, middle_left_right_vector_unit_scaled), vector_depth) top_left_right_vector = rs.VectorCreate(top_left, top_right) top_left_right_vector_unit = rs.VectorUnitize(top_left_right_vector) top_left_right_vector_unit_scaled = rs.VectorScale(top_left_right_vector_unit, 1.5) top_left_right_vector_unit_scaled = rs.VectorReverse(top_left_right_vector_unit_scaled) make_rectangle_2(rs.VectorSubtract(bottom_right, bottom_left_right_vector_unit_scaled), bottom_right, rs.VectorSubtract(top_right, top_left_right_vector_unit_scaled), top_right, vector_depth, color) # back panels start row_idx = 0 column_idx = 0 min_x = find_min_x(backPanels[0]) for panel in backPanels: if row_idx % 2 == 0: if column_idx % 2 == 0: color = [153, 153, 153] else: color = [17, 17, 17] else: if column_idx % 2 == 0: color = [17, 17, 17] else: color = [153, 153, 153] styria_panel(panel, color) column_idx = column_idx + 1 if column_idx % 10 == 0: row_idx = row_idx + 1 column_idx = 0 if min_x > find_min_x(panel): min_x = find_min_x(panel) row_idx = 0 for panel in backPanels: if find_min_x(panel) == min_x: bottom_right, top_right, top_left, bottom_left = panel bottom_left_right_vector = rs.VectorCreate(bottom_left, bottom_right) bottom_left_right_vector_unit = rs.VectorUnitize(bottom_left_right_vector) bottom_left_right_vector_unit_scaled = rs.VectorScale(bottom_left_right_vector_unit, 1.5) top_left_right_vector = rs.VectorCreate(top_left, top_right) top_left_right_vector_unit = rs.VectorUnitize(top_left_right_vector) top_left_right_vector_unit_scaled = rs.VectorScale(top_left_right_vector_unit, 1.5) vector_depth = dm.normVec3pnts(bottom_right, top_right, top_left) vector_depth = rs.VectorScale(vector_depth, 3) if row_idx % 2 == 0: color = [17, 17, 17] else: color = [153, 153, 153] row_idx = row_idx + 1 make_rectangle_2(bottom_left, rs.VectorAdd(bottom_left, bottom_left_right_vector_unit_scaled), top_left, rs.VectorAdd(top_left, top_left_right_vector_unit_scaled), vector_depth, color) # back panels end # front panels start row_idx = 0 column_idx = 0 min_x = find_min_x(frontPanels[0]) for panel in frontPanels: if row_idx % 2 == 0: if column_idx % 2 == 0: color = [153, 153, 153] else: color = [17, 17, 17] else: if column_idx % 2 == 0: color = [17, 17, 17] else: color = [153, 153, 153] styria_panel(panel, color) column_idx = column_idx + 1 if column_idx % 10 == 0: row_idx = row_idx + 1 column_idx = 0 if min_x > find_min_x(panel): min_x = find_min_x(panel) row_idx = 0 for panel in frontPanels: if find_min_x(panel) == min_x: bottom_right, top_right, top_left, bottom_left = panel bottom_left_right_vector = rs.VectorCreate(bottom_left, bottom_right) bottom_left_right_vector_unit = rs.VectorUnitize(bottom_left_right_vector) bottom_left_right_vector_unit_scaled = rs.VectorScale(bottom_left_right_vector_unit, 1.5) top_left_right_vector = rs.VectorCreate(top_left, top_right) top_left_right_vector_unit = rs.VectorUnitize(top_left_right_vector) top_left_right_vector_unit_scaled = rs.VectorScale(top_left_right_vector_unit, 1.5) vector_depth = dm.normVec3pnts(bottom_right, top_right, top_left) vector_depth = rs.VectorScale(vector_depth, 3) if row_idx % 2 == 0: color = [17, 17, 17] else: color = [153, 153, 153] row_idx = row_idx + 1 make_rectangle_2(bottom_left, rs.VectorAdd(bottom_left, bottom_left_right_vector_unit_scaled), top_left, rs.VectorAdd(top_left, top_left_right_vector_unit_scaled), vector_depth, color) # front panels end # side panels start side_panel_idx = 0 for panel in sidePanels: bottom_right, top_right, top_left, bottom_left = panel pts = [bottom_right, top_right, top_left, bottom_left, bottom_right] rs.AddCurve(pts, 1) if side_panel_idx % 2 == 0: color = [102,178,178] else: color = [0,76,76] if side_panel_idx % 6 == 0 or side_panel_idx % 6 == 5: print("drawing side panel") bottom_left_right_vector = rs.VectorCreate(bottom_left, bottom_right) bottom_left_right_vector_unit = rs.VectorUnitize(bottom_left_right_vector) bottom_left_right_vector_unit_scaled = rs.VectorScale(bottom_left_right_vector_unit, 1.5) bottom_left_right_vector_unit_scaled_reversed = rs.VectorReverse(bottom_left_right_vector_unit_scaled) top_left_right_vector = rs.VectorCreate(top_left, top_right) top_left_right_vector_unit = rs.VectorUnitize(top_left_right_vector) top_left_right_vector_unit_scaled = rs.VectorScale(top_left_right_vector_unit, 1.5) top_left_right_vector_unit_scaled_reversed = rs.VectorReverse(top_left_right_vector_unit_scaled) vector_depth = dm.normVec3pnts(bottom_right, top_right, top_left) vector_depth = rs.VectorScale(vector_depth, 3) temp_bottom_right = rs.VectorAdd(bottom_left, bottom_left_right_vector_unit_scaled_reversed) temp_top_right = rs.VectorAdd(top_left, bottom_left_right_vector_unit_scaled_reversed) make_rectangle_2(bottom_left, temp_bottom_right, top_left, temp_top_right, vector_depth, color) temp_bottom_left = rs.VectorAdd(bottom_right, bottom_left_right_vector_unit_scaled) temp_top_left = rs.VectorAdd(top_right, bottom_left_right_vector_unit_scaled) make_rectangle_2(temp_bottom_left, bottom_right, temp_top_left, top_right, vector_depth, color) top_bottom_down_vector = rs.VectorCreate(top_left, bottom_left) top_bottom_down_vector_unit = rs.VectorUnitize(top_bottom_down_vector) top_bottom_down_vector_unit_scaled = rs.VectorScale(top_bottom_down_vector_unit, 1.5) top_bottom_down_vector_unit_scaled_reversed = rs.VectorReverse(top_bottom_down_vector_unit_scaled) temp_bottom_left = rs.VectorAdd(top_left, top_bottom_down_vector_unit_scaled_reversed) temp_bottom_right = rs.VectorAdd(top_right, top_bottom_down_vector_unit_scaled_reversed) make_rectangle_2(temp_bottom_left, temp_bottom_right, top_left, top_right, vector_depth, color, num_lines=60) elif side_panel_idx % 6 == 1 or side_panel_idx % 6 == 4: print("drawing some other type of the panels") top_bottom_down_vector = rs.VectorCreate(top_left, bottom_left) top_bottom_down_vector_unit = rs.VectorUnitize(top_bottom_down_vector) top_bottom_down_vector_unit_scaled = rs.VectorScale(top_bottom_down_vector_unit, 10) top_bottom_down_vector_unit_scaled_reversed = rs.VectorReverse(top_bottom_down_vector_unit_scaled) temp_bottom_left = rs.VectorAdd(top_left, top_bottom_down_vector_unit_scaled_reversed) temp_bottom_right = rs.VectorAdd(top_right, top_bottom_down_vector_unit_scaled_reversed) draw_lines(temp_bottom_left, temp_bottom_right, top_left, top_right, color, 60) elif side_panel_idx % 6 == 2 or side_panel_idx % 6 == 3: print("drawing some other type of the panels") top_bottom_down_vector = rs.VectorCreate(top_left, bottom_left) top_bottom_down_vector_unit = rs.VectorUnitize(top_bottom_down_vector) top_bottom_down_vector_unit_scaled = rs.VectorScale(top_bottom_down_vector_unit, 10) temp_top_left = rs.VectorAdd(bottom_left, top_bottom_down_vector_unit_scaled) temp_top_right = rs.VectorAdd(bottom_right, top_bottom_down_vector_unit_scaled) draw_lines(bottom_left, bottom_right, temp_top_left, temp_top_right, color, 60) side_panel_idx = side_panel_idx + 1 # side panels end # side panels start side_panel_idx = 0 for panel in upSidePanels: bottom_right, top_right, top_left, bottom_left = panel pts = [bottom_right, top_right, top_left, bottom_left, bottom_right] rs.AddCurve(pts, 1) if side_panel_idx % 2 == 0: color = [102,178,178] else: color = [0,76,76] if side_panel_idx % 6 == 0 or side_panel_idx % 6 == 5: print("drawing side panel") bottom_left_right_vector = rs.VectorCreate(bottom_left, bottom_right) bottom_left_right_vector_unit = rs.VectorUnitize(bottom_left_right_vector) bottom_left_right_vector_unit_scaled = rs.VectorScale(bottom_left_right_vector_unit, 1.5) bottom_left_right_vector_unit_scaled_reversed = rs.VectorReverse(bottom_left_right_vector_unit_scaled) top_left_right_vector = rs.VectorCreate(top_left, top_right) top_left_right_vector_unit = rs.VectorUnitize(top_left_right_vector) top_left_right_vector_unit_scaled = rs.VectorScale(top_left_right_vector_unit, 1.5) top_left_right_vector_unit_scaled_reversed = rs.VectorReverse(top_left_right_vector_unit_scaled) vector_depth = dm.normVec3pnts(bottom_right, top_right, top_left) vector_depth = rs.VectorScale(vector_depth, 3) temp_bottom_right = rs.VectorAdd(bottom_left, bottom_left_right_vector_unit_scaled_reversed) temp_top_right = rs.VectorAdd(top_left, bottom_left_right_vector_unit_scaled_reversed) make_rectangle_2(bottom_left, temp_bottom_right, top_left, temp_top_right, vector_depth, color) temp_bottom_left = rs.VectorAdd(bottom_right, bottom_left_right_vector_unit_scaled) temp_top_left = rs.VectorAdd(top_right, bottom_left_right_vector_unit_scaled) make_rectangle_2(temp_bottom_left, bottom_right, temp_top_left, top_right, vector_depth, color) top_bottom_down_vector = rs.VectorCreate(top_left, bottom_left) top_bottom_down_vector_unit = rs.VectorUnitize(top_bottom_down_vector) top_bottom_down_vector_unit_scaled = rs.VectorScale(top_bottom_down_vector_unit, 1.5) top_bottom_down_vector_unit_scaled_reversed = rs.VectorReverse(top_bottom_down_vector_unit_scaled) temp_bottom_left = rs.VectorAdd(top_left, top_bottom_down_vector_unit_scaled_reversed) temp_bottom_right = rs.VectorAdd(top_right, top_bottom_down_vector_unit_scaled_reversed) make_rectangle_2(temp_bottom_left, temp_bottom_right, top_left, top_right, vector_depth, color, num_lines=60) elif side_panel_idx % 6 == 1 or side_panel_idx % 6 == 4: print("drawing some other type of the panels") top_bottom_down_vector = rs.VectorCreate(top_left, bottom_left) top_bottom_down_vector_unit = rs.VectorUnitize(top_bottom_down_vector) top_bottom_down_vector_unit_scaled = rs.VectorScale(top_bottom_down_vector_unit, 10) top_bottom_down_vector_unit_scaled_reversed = rs.VectorReverse(top_bottom_down_vector_unit_scaled) temp_bottom_left = rs.VectorAdd(top_left, top_bottom_down_vector_unit_scaled_reversed) temp_bottom_right = rs.VectorAdd(top_right, top_bottom_down_vector_unit_scaled_reversed) draw_lines(temp_bottom_left, temp_bottom_right, top_left, top_right, color, 60) elif side_panel_idx % 6 == 2 or side_panel_idx % 6 == 3: print("drawing some other type of the panels") top_bottom_down_vector = rs.VectorCreate(top_left, bottom_left) top_bottom_down_vector_unit = rs.VectorUnitize(top_bottom_down_vector) top_bottom_down_vector_unit_scaled = rs.VectorScale(top_bottom_down_vector_unit, 10) temp_top_left = rs.VectorAdd(bottom_left, top_bottom_down_vector_unit_scaled) temp_top_right = rs.VectorAdd(bottom_right, top_bottom_down_vector_unit_scaled) draw_lines(bottom_left, bottom_right, temp_top_left, temp_top_right, color, 60) side_panel_idx = side_panel_idx + 1 # side panels end sunVec = dm.setSun(year=2023, mon=11, day=17, hour=17, min=32, sec=29, verbose=0) print sunVec #print dm.getDateNow() print dm.number2date(31+29) print dm.date2number(year=2023, mon=11, day=30, verbose=0) dm.printDisplay(1)