วันพฤหัสบดีที่ 12 พฤศจิกายน พ.ศ. 2558

Revit API 2016 กับ การเลือก Selection Object และ อ่าน Parameter

Revit API 16 มีการเปลี่ยน 2 จุดที่มีผลกระทบกับโปรแกรมเก่าๆ
ส่วนแรกคือการ Select Object ตอนนี้ จะไม่สามารถ ได้ Element โดยตรง ต้องเป็น ElementId (อันนี้ดี จะได้เป็น ระบบหน่อย)

การเลือกในปัจจุบัน


   ICollection<ElementId> collectionIds = uidoc.Selection.GetElementIds();
    List<Element> founds = new List<Element>();
                foreach (ElementId eid2 in collectionIds)
                {
                    try
                    {
                        Element e2 = doc.GetElement(eid2);
                        founds.Add(e2);
                    }
                    catch { }
                }


founds จะเป็น Array ของ Element อีกที

กรณี ต้องการ แสดง ตัวที่เลือกบนจอ เพื่อให้ Properties ทำงาน แสดงค่า Element นั้น
ต้องใช้เป็น SetElementIds( ..)

   ICollection<ElementId> sIds = uidoc.Selection.GetElementIds();
            sIds.Clear();
           sIds.Add(showElement.Id);
            uidoc.Selection.SetElementIds(sIds);


สำหรับ Parameter การอ่านค่าจะอณุญาติ ให้ 1 Parameter มี มากกว่า 1 ค่า 

  IList    <Parameter>  l4s = (Parameter)e1.GetParameters("Base Level");
ถ้ามีตัวเดียว ให้เลือก l4s.First();


กรณีเลือกทั้งหมด ใช้วิธี Filter
   FilteredElementCollector collector
              = new FilteredElementCollector(doc)
                .WhereElementIsNotElementType();

            foreach (Element e in collector)

            {
     // do something
            }



วันศุกร์ที่ 6 พฤศจิกายน พ.ศ. 2558

เครื่องมือ Database SQLite กับ C#

เป็นTool สำเร็จรูปสำหรับ การ ทำงานกับ SQLite

https://www.dropbox.com/s/dm7y1t3pthj0et5/PPSqlLite.dll.7z?dl=0

ตัวอย่างวิธีใช้
/*
 * Created by SharpDevelop.
 * User: mcad
 * Date: 11/7/2015
 * Time: 1:16 PM
 *
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using PPSqlLite;

namespace db1
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();

//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
void Button1Click(object sender, EventArgs e)
{ // การอ่าน Data
PPSQLLite mysql = new PPSQLLite();
mysql.setSqlDataFile(@"c:\CAADDB\data.db");
ArrayList list1 =mysql.getAColSql("select name from customer");
listBox1.Items.Clear();
foreach(string astr in list1)
{
listBox1.Items.Add(astr);
}

}
void ListBox1SelectedIndexChanged(object sender, EventArgs e)
{
PPSQLLite mysql = new PPSQLLite();
mysql.setSqlDataFile(@"c:\CAADDB\data.db");
ArrayList list1 =mysql.getAColSql("select phone from customer where name='"
                                 +listBox1.SelectedItem.ToString()+"'");
if(list1!=null && list1.Count>0)
{
MessageBox.Show(list1[0].ToString());
}
}
void Button2Click(object sender, EventArgs e)
{ // การ Insert ใหม่ และ เช็คข้อมูลเก่า
PPSQLLite mysql = new PPSQLLite();
mysql.setSqlDataFile(@"c:\CAADDB\data.db");
ArrayList list1 =mysql.getAColSql("select max(id)+1 from customer");

if(list1!=null && list1.Count>0)
{
label1.Text=list1[0].ToString();
   }
string sqlIns="insert into customer values ("+
// insert field here
label1.Text +","+  // id
"'"+textBox1.Text +"',"+ // name
"'"+textBox2.Text +"',"+ // surname
textBox3.Text+","+ // age
"'"+textBox4.Text +"',"+ // phone
textBox5.Text // salary
+")";

// protect double click
ArrayList list2 = mysql.getAColSql("select name from customer where name='"+textBox1.Text+"'");
 if(list2!=null && list2.Count>0)
{
  MessageBox.Show("Already Exist");
 }
 else{
mysql.ExecuteQuery(sqlIns);
 }
 }
}
}