Download Here
copy ไปที่ c:\
และ แตกไฟล์ จะได้ Folder Turbostruct
และ ต้อง ลง Addin manager
และทำการ Load
การเรียกคำสั่งให้เรียกที่ External command หรือ รูป Icon DDD
ตัวอย่าง Code สำหร้บ Revit 2014
ตัวอย่าง Code สำหรับ Revit 2015
เรื่องของ Create
ในโปรแกรจะเป็น การ CreateColumn
จะมี Sub Method หรือโปรแกรมย่อย 4 โปรแกรม
1. FindElement ใว้สำหรับ ค้น Element ช่น เสา คานพื้น ชั้น ห้อง ที่อยู่ ใน Revit Project
2. getAllType เป็นการ นำ FamilySymbol ที่กำลังใช้งานอยู่ ใน Project เช่น เสาทั้งหมด มาใส่ Array ที่เป็น List
3.BatchCreateColumns เป็นการสร้าง Instant หรือวาง วัตถุ ลงไป ใน view โดยต้องกำหนด จุด XYZ
สำหรับ transaction จะควบคุมที่ CreateColumn
สำหรับ การ Edit หรือ แก้ไข
ตัวอย่าง ในการ เลือกและ Move
ตัวอย่าง
สำหรับการเลือก และดึงข้อมูลโดยใช้การเลือก ก่อนแล้วเรียกคำสั่ง
ตัวอย่าง
สำหรับ Revit 2015
Addin ไม่สามารถ Load ได้ ให้วางตรงๆ ใน Folder
C:\Users\<user>\AppData\Roaming\Autodesk\Revit\Addins\2015
file Addin ชอง DDD
และ Api จะเปลี่ยน หลายตัวโดยเฉพาะ Create ต่างๆ ที่เคยเป็น Method ใต้ Document จะเปลี่ยนไป
อยู่ใน Symbol นั้นๆ เช่น doc.newCreateLine เปลี่ยนเป็น Line.Create แทน ลองเดาดู หรือดูจาก SDK ของ Revit 2015 แต่จะเป็นระบบ และง่ายขึ้น
ผลของโปรแกรมตัวอย่าง
สำหรับ หัวของไฟล์ ใน c#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Windows.Forms;
using Autodesk.Revit.Creation;
using Autodesk.Revit.DB.Structure;
ข้อสำคัญอีกอย่าง คือ Revit ตำแหน่ง XYZ จะเป็นหน่วย ฟุต ไม่ใช่ เมตร ถ้าต้องเปลี่ยน ให้ หารด้วย0.3048
public static double f2m(double f)
{
return f*0.3048;
}
public static double m2f(double m)
{
return f/0.3048;
}
// text file ของ ExternalTool1.addin
<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
<AddIn Type="Application">
<Name>External Tool</Name>
<Assembly>C:\turboStruct\DDDRevit.dll</Assembly>
<ClientId>3beb63b3-38f8-464b-a301-c30d239a69f6</ClientId>
<FullClassName>PowerAEC.PPToolbar</FullClassName>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, www.autodesk.com</VendorDescription>
</AddIn>
<AddIn Type="Command">
<Assembly>C:\turboStruct\DDDRevit.dll</Assembly>
<ClientId>54538ab4-83a1-4a5b-b172-1ffaa776b777</ClientId>
<FullClassName>PowerAEC.Command</FullClassName>
<Text>Command</Text>
<Description>""</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, www.autodesk.com</VendorDescription>
</AddIn>
<AddIn Type="Command">
<Assembly>C:\turboStruct\DDDRevit.dll</Assembly>
<ClientId>fb306864-2f47-427d-997f-68a17d625d06</ClientId>
<FullClassName>PowerAEC.showBook</FullClassName>
<Text>showBook</Text>
<Description>""</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, www.autodesk.com</VendorDescription>
</AddIn>
</RevitAddIns>
หมายเหตุ กรณี Error เมื่อเรียกใช้ DDD
error CS0012: The type 'System.Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
ต้องเพิ่มใน Source code ตรงหัวโปรแกรม
using System;
using System.Collections;
using System.Collections.Generic;
//css_reference "System.Runtime"
{
return f/0.3048;
}
// text file ของ ExternalTool1.addin
<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
<AddIn Type="Application">
<Name>External Tool</Name>
<Assembly>C:\turboStruct\DDDRevit.dll</Assembly>
<ClientId>3beb63b3-38f8-464b-a301-c30d239a69f6</ClientId>
<FullClassName>PowerAEC.PPToolbar</FullClassName>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, www.autodesk.com</VendorDescription>
</AddIn>
<AddIn Type="Command">
<Assembly>C:\turboStruct\DDDRevit.dll</Assembly>
<ClientId>54538ab4-83a1-4a5b-b172-1ffaa776b777</ClientId>
<FullClassName>PowerAEC.Command</FullClassName>
<Text>Command</Text>
<Description>""</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, www.autodesk.com</VendorDescription>
</AddIn>
<AddIn Type="Command">
<Assembly>C:\turboStruct\DDDRevit.dll</Assembly>
<ClientId>fb306864-2f47-427d-997f-68a17d625d06</ClientId>
<FullClassName>PowerAEC.showBook</FullClassName>
<Text>showBook</Text>
<Description>""</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, www.autodesk.com</VendorDescription>
</AddIn>
</RevitAddIns>
หมายเหตุ กรณี Error เมื่อเรียกใช้ DDD
error CS0012: The type 'System.Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
ต้องเพิ่มใน Source code ตรงหัวโปรแกรม
using System;
using System.Collections;
using System.Collections.Generic;
//css_reference "System.Runtime"
ตัวอย่างใหม่ จะรวมมีทั้ง 2 คำสั่ง และ จะสร้าง ทั้ง คาน กำแพง พื้น
ตอบลบhttp://goo.gl/Ba9tvP
การบ้าน ให้เอา จุด Polyline มาวาดเป็น กำแพง และ ใส่ เสา คานให้เรียบร้อย
ตอบลบของ 2016
ตอบลบhttp://goo.gl/7bo1jE
เริ่มต้น โปรแกรม
ตอบลบUIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
Autodesk.Revit.DB.Document doc = uidoc.Document;
public class RevitW1
ตอบลบ{
public static void myHello(ExternalCommandData cmd)
{
MessageBox.Show("OK Interface");
}
public static void updateDesc(ExternalCommandData cmd)
{
UIApplication uiapp = cmd.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
Autodesk.Revit.DB.Document doc = uidoc.Document;
Reference aEle=uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
updateAParam(aEle.ElementId, "Comments", "Test",doc);
}
private static void updateAParam(ElementId elementId, string v1, string v2, Document doc)
{
using (Transaction tran = new Transaction(doc))
{
tran.Start("update description");
try
{
Element aElem = doc.GetElement(elementId);
Parameter acom = aElem.GetParameters(v1).First();
acom.Set(v2);
tran.Commit();
}
catch
{
tran.RollBack();
}
}
}
public static void selectAllData(ExternalCommandData cmd)
{
UIApplication uiapp = cmd.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
Autodesk.Revit.DB.Document doc = uidoc.Document;
IList pickItems= uidoc.Selection.PickObjects(
Autodesk.Revit.UI.Selection.ObjectType.Element);
// TaskDialog.Show("pickitems", pickItems.Count.ToString());
// test form data
FormElement myForm = new FormElement();
// string showMsg = "";
foreach (Reference item in pickItems)
{
Element aElm = doc.GetElement(item.ElementId);
string stype=aElm.GetType().ToString();
// showMsg += "\n" +stype;
string cat = aElm.Category.Name;
// showMsg += "\n"+cat;
string eName = aElm.Name;
// showMsg += "\n" + eName;
myForm.listBox1.Items.Add(stype + " " + cat + " " + eName+"|"+item.ElementId.ToString());
if (cat == "Walls")
{
IList pars= aElm.GetParameters("Area");
if (pars.Count > 0)
{
string area = pars[0].AsValueString();
double dArea = pars[0].AsDouble();
myForm.listBox1.Items.Add("Area=" + area);
// showMsg += "\n area=" + area +","+dArea.ToString();
}
// type parameter
ElementId typeId = aElm.GetTypeId();
Element etype = doc.GetElement(typeId);
IList pars2 = etype.GetParameters("Width");
if (pars2.Count > 0)
{
string width = pars2[0].AsValueString();
myForm.listBox1.Items.Add("W=" + width);
}
}
} // foreach
DialogResult dr;
do
{
dr = myForm.ShowDialog();
if (dr == DialogResult.Retry)
{
int eeid = Convert.ToInt32(myForm.label1.Text);
ElementId updId = new ElementId(eeid);
updateAParam(updId, "Comments", "A Data", doc);
}
} while (dr != DialogResult.Cancel);
}
}
}