Я создаю приложение WPF, в котором я хочу открыть файлы Autocad и получить размеры (ширину, высоту и т. Д.) 3Dsolids.

После нескольких дней проблем мне наконец удалось открыть файл и прочитать его, единственная проблема теперь заключается в том, что я не могу получить размеры 3D-тел.

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;

using acadApp = Autodesk.AutoCAD.ApplicationServices.Application;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common; 

namespace WpfApplication2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private static IAcadApplication oAcadApp = null;
        private static string sAcadID = "AutoCAD.Application.18";
        AcadDocument doc;        

        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {

            try  //get a running AutoCAD instance if avaialbale
            {
                oAcadApp = (IAcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject(sAcadID);
                doc = oAcadApp.Documents.Open(@"C:\Users\Bernard\Desktop\Drawing2.dwg", false);
                oAcadApp.Visible = true;
            }
            catch (System.Exception) //none found so start a new instance
            {
                System.Type AcadProg = System.Type.GetTypeFromProgID(sAcadID);
                oAcadApp = (IAcadApplication)System.Activator.CreateInstance(AcadProg);
                if (this.IsLoaded)
                {
                    doc = oAcadApp.Documents.Open(@"C:\Users\Bernard\Desktop\Drawing2.dwg", false);
                    oAcadApp.Visible = true;
                }
            }            
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            AcadModelSpace modelspace = doc.ModelSpace;
            MessageBox.Show("aantal objecten = " + modelspace.Count + "");          

            for (int i = 0; i < modelspace.Count; i++)
            {
                AcadEntity entity = modelspace.Item(i);
                MessageBox.Show("objecttype = " + entity.EntityType);
                if (entity.EntityType == 3)
                {
                    Acad3DSolid solid = (Acad3DSolid)entity;
                }
            }
        }
    }
}

Acad3DSolid solid = (Acad3DSolid) объект; Это дает мне 3DSolid, но я не могу найти ничего похожего на solid.Width или что-то в этом роде.

Есть у кого-нибудь идеи?

Спасибо.

0
Pellerossa 3 Апр 2013 в 23:59

1 ответ

Лучший ответ

Думаю, вам нужна функция GetBoundingBox.

0
Joel Lucsy 4 Апр 2013 в 00:40
Например, Acad3DSolid solid = (Acad3DSolid) entity; объект x; объект y; solid.GetBoundingBox (выход x, выход y); MessageBox.Show (x.ToString ()) ;?
 – 
Pellerossa
4 Апр 2013 в 00:53
Вы можете преобразовать эти X и Y в double [] (это 3-х мерные точки, представляющие минимальный и максимальный углы ограничивающей рамки)
 – 
Daniel Möller
4 Апр 2013 в 15:31