2012년 12월 9일 일요일

[아이디어] 캐드 테이블 객체 적용

필드(Field)객체는 문자열 뿐만아니라 테이블(Table) 객체의 셀(Cell)정보에 추가될 수 있습니다.
따라서 테이블 객체의 기능을 확장할 수 있습니다.

그것은 테이블의 내용을 웹 서비스와 연결이 가능합니다. 예를 들면 구글의 드라이브 또는 M/S사의 SkyDrive - 엑셀문서 와의 연동이 가능합니다.

캐드도면에서 테이블 객체가 수정되면 관련 웹문서에 적용시켜주고, 반대로 웹문서가 수정되면 캐드에서의 문서가 변경이 됩니다.

[주요특징]

1. CAD 테이블 정보를 구글 DOCS의 엑셀문서에 반영

2. 구글 DOCS의 엑셀문서를 캐드 테이블에 반영

[기능개선]

테이블에 필드를 추가할 때 iDwgField상의 라이브러리를 선택할 수 있는 기능이 필요함

(arx모듈에서 추가해야하는데,... 쉽지않겠군요)


<아이디어 개념도>

2012년 12월 5일 수요일

[코드] Kaxaml 테스트


using System;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.Windows;

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Markup;
using System.Xml;
using System.IO;

using iDwgFieldMgd;

using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;
using WinApp = System.Windows.Forms.Application;

public class Script
{
    private ObjectId _idField;
    private ObjectId _idFrom;
    private ObjectId _idTo;
    private Window  wintest;

    public string Regen(string hField, string hFrom, string hTo)
    {
        Document doc = AcadApp.DocumentManager.MdiActiveDocument;
        Editor ed = doc.Editor;
        try
        {
            Database db = doc.Database;

            long ln1 = Convert.ToInt64(hField, 16);
            Handle hn1 = new Handle(ln1);
            _idField = db.GetObjectId(false, hn1, 0);

            long ln2 = Convert.ToInt64(hFrom, 16);
            if (ln2 > 0)
            {
                Handle hn2 = new Handle(ln2);
                _idFrom = db.GetObjectId(false, hn2, 0);
            }

            long ln3 = Convert.ToInt64(hTo, 16);
            if (ln3 > 0)
            {
                Handle hn3 = new Handle(ln3);
                _idTo = db.GetObjectId(false, hn3, 0);
            }
        }
        catch (Autodesk.AutoCAD.Runtime.Exception e)
        {
            return e.Message;
        }

        return "로딩됨";
    }

    public string Open(string hField, string hFrom, string hTo)
    {
        try {
            //[XAML코드]Kaxaml 테스트 포스트 아이디
            String codes = iDwgUtils.GetXamlCode("1658519126633352894");

            StringReader sr = new StringReader(codes);

            XmlReader reader = XmlReader.Create(sr);

            wintest = (Window)XamlReader.Load(reader);
            wintest.Title = "Kaxaml";
            wintest.Show();

            wintest.SizeChanged += wintest_Changed;
        }
        catch(System.Exception ex)
        {
             MessageBox.Show(ex.Message);
        }
        return Regen(hField, hFrom, hTo);
    }

    private void wintest_Changed(object sender, RoutedEventArgs e)
    {
    //    MessageBox.Show("Dynamic windows loaded from XAML string");
    }

    public bool Exit(string str)
    {
           wintest.Close();
           return true;
    }
}

[XAML 코드] Kaxml 로고
























































Click on the label to make it rotate.



2012년 12월 4일 화요일

[코드]XAML실행테스트

using System;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.Windows;

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Markup;
using System.Xml;
using System.IO;

using iDwgFieldMgd;

using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;
using WinApp = System.Windows.Forms.Application;

public class Script
{
    private ObjectId _idField;
    private ObjectId _idFrom;
    private ObjectId _idTo;
    private Window wintest;

    public string Regen(string hField, string hFrom, string hTo)
    {
        Document doc = AcadApp.DocumentManager.MdiActiveDocument;
        Editor ed = doc.Editor;
        try
        {
            Database db = doc.Database;

            long ln1 = Convert.ToInt64(hField, 16);
            Handle hn1 = new Handle(ln1);
            _idField = db.GetObjectId(false, hn1, 0);

            long ln2 = Convert.ToInt64(hFrom, 16);
            if (ln2 > 0)
            {
                Handle hn2 = new Handle(ln2);
                _idFrom = db.GetObjectId(false, hn2, 0);
            }

            long ln3 = Convert.ToInt64(hTo, 16);
            if (ln3 > 0)
            {
                Handle hn3 = new Handle(ln3);
                _idTo = db.GetObjectId(false, hn3, 0);
            }
        }
        catch (Autodesk.AutoCAD.Runtime.Exception e)
        {
            return e.Message;
        }

        return "로딩됨";
    }

    public string Open(string hField, string hFrom, string hTo)
    {
        try {
            //[XAML코드]기본윈도우의 포스트 아이디
            String codes = iDwgUtils.GetXamlCode("7332555001323949436");

            StringReader sr = new StringReader(codes);

            XmlReader reader = XmlReader.Create(sr);

            Window wintest = (Window)XamlReader.Load(reader);

            wintest.Show();

            wintest.SizeChanged += wintest_Changed;
        }
        catch(System.Exception ex)
        {
             MessageBox.Show(ex.Message);
        }
        return Regen(hField, hFrom, hTo);
    }

    private void wintest_Changed(object sender, RoutedEventArgs e)
    {
    //    MessageBox.Show("Dynamic windows loaded from XAML string");
    }

    public void Exit(string str)
    {
           wintest.Close();
    }
}