วันพุธที่ 16 มกราคม พ.ศ. 2562

การสร้าง Addin ใน Excel ใน โฟล์ .xlsx

Microsoft office สามารถ ฝัง โปรแกรม dll เข้าไปใน Excel ได้เลยทำให้ง่ายต่อการ แจกจ่ายโปรแกรม ใน Excel โดยใช้ได้ตั้งแต่ Office 2010 .เมื่อสั่ง Build จะสร้าง Worksheet นามสกุล .xlsx ให้
ขั้นตอน
ต้องไป ติดตั้ง ใน Visual Studio 2017 ก่อน และเลือก Addins ของ Office

สำหรับ โปรแกรม  Excel ต้อง Enable ใน Addin
File->Options->Addins->Manage->Com Add-ins  และ กด "GO"
และ Enable
"Visual Studio Tools for Office Design-Time Adaptor for Excel"

จาก นั้น ก็จะสามารถ New project ใน Visual Studio 2017
ได้ อาจจะมีปัญหาใน ครั้งแรกที่เปิด เวลา ใส่ Control เช่น ปุ่ม Buttonใน Excel Sheet
ให้ปิดและเปิด  project ใหม่
จากนั้น ก็จะสามารถใช้ ได้ เป็นปรกติ สำหรับการ Access work sheet ให้ไปดู Googleใน
CodeProject  excel VSTO

class สำคัญ ได้แก่
Excel.Application เป็น Top Level App
Excel.Workbook เป็น Work book ที่จัดเก็บ
Excel.WorkSheet เป็นหน้าของ Sheet ที่กำลังทำงาน


วันอาทิตย์ที่ 6 มกราคม พ.ศ. 2562

สร้าง Dynamic Mass จาก Dynamo เพื่อหาพื้นที่พื้นใช้สอย

มีตัวอย่าง จำนวนมาก ที่แสดง การใช้ Dynamo ในการ สร้าง Solid แต่ มักจะไม่ได้แสดง การ ทำ Mass model ที่สามารถทำเป็น Mass ใน Model
วิธีการที่แสดง นี้ จะเป็นการสร้าง Mass Model โดยการ Save เป็น SOLID .SAT ที่เป็น Standard หนึ่งของ 3D Spatial สามารถส่งได้หลาย Software ทั้ง Autocad, 3DS หรือ Solidwork...

อย่างแรก ต้องไป Download Dynamo มาติดตั้งใน Revit ก่อน

ที่
http://dynamobim.org/download/

ถ้าใน Revit Version ใหม่ จะมี ใน การติดตั้งแล้ว
เมื่อ New Project แล้วให้ กดที่
Manage->Dynamo  และตั้งการ Run ให้เป็น Manual




การสร้าง Object ให้ สร้างจาก Point
ให้ พิมพ์ Point ที่ช่อง Search แล้ว Click Point.ByCoordinates

หมายถึงว่า เป็นจุด เป็น ค่า X,Y,Z
สำหรับการใส่ค่า ให้เรียก ว่า Number จะมี 2 แบบ คือ ใส่ค่า ตรงๆ กับ เป็น Slide เลือก เป็น Slide ก็ได้
ข้อควรจำคือ ถ้า Default ของ Dynamo จะเป็น foot แบบ US นะครับ ต้องระบุใน Unit ของ แบบอีกที
แล้ว เชื่อมโดยกดที่ลูกศร > มาเชื่อมกัน

จากนั้นให้วาง จุด อีกจุด โดยให้ Z ขึ้นไป 20 ฟุต
แล้ว เลือก Circle วางทีจุด และ ใส่ Number เป็น รัศมี  เมื่อวางทั้งหมด แล้ว ให้มาต่อเป็น List การเพิ่มรายการให้กดที่ +

แล้วไปเลือกการสร้าง solid จาก loft ค้น จาก loft มารับจาก List

สำหรับ การ Export ไป Sat ให้ค้น  Export จะมี 2 ตัว เอารูปที่เป็น 3D ถ้าเป็น 2d จะส่งไปได้แต่จะไม่มี มวล สำหรับ File ให้เลือก filepath และ Browse ใส่ชื่อ ให้ลงนามสกุล .sat เช่น model1.sat เป็นต้น

เมื่อ Run จะ ได้รูป และ Save ลง โฟล์ model1.sat  ใน Revit ก็จะแสดง เป็น Model แต่จะใช้ไม่ได้ เป็น รูป ลอยๆ



นำ Model มาใช้งาน

ให้ new family เลือก Conceptual Mass -> Metric Mass
เลือก Insert->From cad และ เลือก เป็น SAT

ถ้าต้องการเปลี่ยนหน่วยให้ใส่ที่นี้ ไม่ต้องเปลี่ยน (2017พบว่าเปลี่ยนแล้วจะ Explode ไม่ได้)
ถ้าเป็น Revit 2017 ต้อง Partial Explode หรือ Full ก็ได้ ใน 2019 ไม่ต้อง load into project ได้เลย


แล้ว ลอง Upload ไป Model ดู เมื่อกด จะแสดง Mass floor สามารถตัดทำ Floor ได้ทันที่ และสามารถ Apply Floor เพื่อคำนวนพื่นที่ใช้สอย ได้ ถ้าต้องการเปลี่ยน Model ก็ให้ กลับไปที่ Family และ ทำการ Replace file sat ใหม่ และ upload เข้า Project ก็จะได้รูปร่างใหม่


 ทั้ง Project



วันพฤหัสบดีที่ 20 ธันวาคม พ.ศ. 2561

Azure SQL Server Cloud กับภาษาไทย

Azure SQL Server เป็นระบบ Cloud โดยที่ไม่ต้องมี Server แต่ใช้ Cloud ของ Microsoft แทน โดยให้ฟรีถ้า Database ไม่เกิน 250 Mbyte (ถ้าเป็นตัวหนังสือ ส่วนมากไม่เกิน 100 Mbyte)
SQL Server เป็น Version ล่าสุด 2017 โดยการสร้าง Database จะ Default เป็น us_english การเปลี่ยนภาษาไทย จะต้องใช้ Command query ใหม่
ต้อง Connect กับ SQL server cloud ก่อน ใช้ SQL Management studio
connection site เช่น
 mybookname.database.windows.net,1433
และตามด้วย username,password

1433 หมายถึง SQL Server standard port

ใช้ SQL Management แล้วสร้าง query

1. Check ภาษาปัจจุบัน
select @@language

2. ดูว่า Keyword ที่จะเปลี่ยนมีอะไรบ้าง
exec sp_helplanguage
Go

3. ตั้งค่า ภาษาไทย
set Language 'Thai'

4 สำคัญมาก ต้อง Create Database ด้วย THAI_CI_AS
CREATE DATABASE TestDB
COLLATE  THAI_CI_AS;  

GO  

Note การ Connect กับ Server ต้อง Allow Firewall ต้องเข้าไปที่ Database ที่ตั้งอยู่
และ Add Current IP กับ Save


การ Transfer data สามารถใช้ Import Export Tool ของ SQL Sever 2017 Management ได้

แต่มีข้อที่สำคัญมาก ในการ Transfer Table จาก Tool Management  Table Field ไม่ compatible ในบาง Field เช่น nullable เป็นต้น


นำ Section เหล็กจาก Robot มาใช้ใน Revit

Revit มี Family ของ Section เหล็กจำนวนไม่มาก แต่ ใน Robot Structure มีหลาย พัน แบบและมีค่า Parameter ของการคำนวน Structure เสร็จในตัว ดังนั้น ในการออกแบบ BIM ให้ คำนวนได้ เลย ก็ควรจะใช้ Family ที่ Generate จาก Robot มาที่ Revit
วิธีการทำงาน
ให้ เขียนเหล็ก จาก column ใน Revit เป็นตัวอย่าง ง่ายๆ
จากนั้นส่ง ไปที่ Analyze->Robot Structural Analysis Link ส่ง Send

ใน Robot จะแสดง กดที่ Show section ด้านล่าง
ไปที่ Section ที่ เมนูด้าน ขวา(สังเกตุที่ลูกศร)


กด เปิด และเลือก เพิ่ม แบบที่ต้องการ เลือกที่แสดงรูป(Display) จะดีเพราะมีจำนวนมาก

แล้วเลือกที่เสา เปลี่ยนเป็นแบบที่ต้องการ

กลับไปที่ Revit กด Analyze->Robot Strutural Analysis Link และ เลือก Update


จะได้ รูปใหม่โดยที่จะสร้าง Family ชื่อตาม ชนิดของเหล็ก และ เหล็กนี้ จะนำไปคำนวนใน Robot ได้ สามารถ Save Family ได้


สร้าง OneWay Slab จาก Floor Revit ไป Robot

ใน Revit จะมี Floor แต่การคำนวนจะเป็น Mesh โดยคำนวนเป็นแผ่น เมื่อดู Deform จะเห็นแอ่นกลาง

กรณีที่เป็น Oneway Slab จะต้องกำหนดใน Robot ใน Revit ไม่มี Parameter นี้(มีเวลาจะเขียนให้)
การทำ ต้องไปกำหนดที่ Geometry -> Properties->Panel Calculation Model

จะมี Oneway Slab ให้เลือก
เลือก Panel จาก Object Inspector ตามตัวเลข
และ เลือกทิศจาก Local Panel Direction

เลือก Defintion.. และ Cartesian  และ กดเลือก Vector ทิศที่เป็นคานวาง เลือก Panel number เดิม
คำนวนใหม่

ผลจะเปลี่ยน โดยด้านที่ไม่มีคานจะแอ่นลง

การส่งข้อมูลคำนวน จาก Robot Structure analysis ไปที่ text .CVS

ให้กดเมาวส์ขวา และ เลือก Export to CVS


ตัวอย่าง code โดย VB เป็น Com Register

Private Sub CommandButton1_Click()

Dim RobApp As RobotApplication
Set RobApp = New RobotApplication
Dim t As RobotTable
Dim tf As RobotTableFrame
Dim path As String
Dim Fullpath As String
Dim FName As String

path = Environ$("temp")
Dim nTables As Long

nTables = RobApp.Project.ViewMngr.TableCount
If nTables = 0 Then
    MsgBox "No table opened"
    Exit Sub
End If

For I = 1 To nTables

        Set tf = RobApp.Project.ViewMngr.GetTable(I)
        FName = tf.Window.Caption
        spacepos = InStr(1, FName, " ")
        If spacepos <> 0 Then
            FName = Left(FName, spacepos)
        End If
        
        ntabs = tf.Count

        For j = 1 To ntabs
            tf.Get(j).Window.Activate
            Set t = tf.Get(j)
            tf.Current = j
            tabname = tf.GetName(j)
            DoEvents
            
Fullpath = path + "\" + FName + tabname + ".csv"

t.Printable.SaveToFile Fullpath, I_OFF_TEXT


NP = Shell("C:\WINDOWS\notepad.exe " + Fullpath, vbNormalFocus)
AppActivate NP
SendKeys "%ER", 1

'replacing decimal separator
SendKeys ",", 1
SendKeys "{TAB}", 1
SendKeys ".", 1
''''''''''''''''''''''''''''

SendKeys "%A", 1
SendKeys "%{F4}", 1
SendKeys "%ER", 1

'replacing column separator
SendKeys ";", 1
SendKeys "{TAB}", 1
SendKeys ",", 1
'''''''''''''''''''''''''''

SendKeys "%A", 1
SendKeys "%{F4}", 1
SendKeys "%FA", 1
SendKeys Fullpath, 1
SendKeys "%E", 1
SendKeys "{DOWN}", 1
SendKeys "{DOWN}", 1
SendKeys "{UP}", 1
SendKeys "{UP}", 1
SendKeys "{UP}", 1
SendKeys "{ENTER}", 1
SendKeys "%S", 1
SendKeys "%Y", 1
SendKeys "%FX", 1

DoEvents
Workbooks.Open Fullpath

        Next j
Next I

MsgBox "Dumping finished"

Set RobApp = Nothing
End Sub

โปรแกรม Robot Structure ใช้แล้ว Dialog ใน RC Reinforcement หาย

Dialog ของ RC Reinforcement ของ Autodesk Robot structure ถ้าปิดไปแล้ว มักจะหาไม่เจอว่าจะเปิดอย่างไร เช่น

ในถาพ Section Dialog หายไป
วิธีแก้ให้เรียก Tools->Customize->Open Layout from Template จะเรียก กลับมา