|
Konstruktor budowlany Forum projektantów
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Tomasz79
Doświadczony Forumowicz
Dołączył: 30 Paź 2007
Posty: 79
Przeczytał: 0 tematów
Pomógł: 3 razy Ostrzeżeń: 0/5 Skąd: Radom
|
Wysłany: Wto 21:51, 27 Wrz 2011 Temat postu: Visual C# 2010 Express |
|
|
Witam.
Czy za pomocą Visual C# 2010 Express można się dobrać do AutoCad-a lub ZwCada? Jeśli tak to jak ?
Pozdrawiam
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
mch
Doświadczony Forumowicz
Dołączył: 30 Maj 2009
Posty: 167
Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5 Skąd: Kraków
|
Wysłany: Wto 22:15, 27 Wrz 2011 Temat postu: |
|
|
do autocada można się dobrać za pomocą c#. Osobiście programuje za pomocą COM. Aby móc korzystać z autocada przy pomocy COM w Visual c# najpierw należy dodać do projektu 2 biblioteki: acax18enu.tlb oraz axdb18enu.tlb.
Poniżej wklejam przykładowy kod generujący zwykłą linie (na "formę" należy dodać przycisk button1). Aby program zadziałał należy mieć uruchomionego AutoCada.
Kod: |
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AutoCAD = Autodesk.AutoCAD.Interop;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private AutoCAD.AcadApplication AcadApp;
private AutoCAD.AcadDocument AcadDoc;
private AutoCAD.Common.AcadModelSpace AcadDwg;
private void button1_Click(object sender, EventArgs e)
{
this.AcadApp = (AutoCAD.AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("Autocad.Application");
this.AcadDoc = this.AcadApp.ActiveDocument;
this.AcadDwg = this.AcadDoc.ModelSpace;
AutoCAD.Common.AcadLine linia;
double[] start = new double[3];
double[] koniec = new double[3];
start[0] = 0;
start[1] = 0;
start[2] = 0;
koniec[0] = 10;
koniec[1] = 10;
koniec[2] = 0;
linia = this.AcadDwg.AddLine(start, koniec);
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(this.AcadApp);
}
catch
{
}
}
}
}
|
Cały model obiektowy Autocada znajduje się w pomocy i nazywa się "AutoCAD ActiveX and VBA reference" (poszukać plik acadauto.chm na dysku).
Jeżeli ktos poszukuje informacji po polsku na temat programowania AutoCADA i zna Delphi (odświeżony Pascal:)) to polecam książkę Wojciecha Czyżyńskiego i Edwarda Lisowskiego "AutoCAD. Automatyzacja zadań grafiki za pomocą Delphi".
Post został pochwalony 0 razy
Ostatnio zmieniony przez mch dnia Wto 22:35, 27 Wrz 2011, w całości zmieniany 3 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Tomasz79
Doświadczony Forumowicz
Dołączył: 30 Paź 2007
Posty: 79
Przeczytał: 0 tematów
Pomógł: 3 razy Ostrzeżeń: 0/5 Skąd: Radom
|
Wysłany: Wto 22:30, 27 Wrz 2011 Temat postu: |
|
|
Dzięki wielkie
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
MaciejSz
Początkujący Forumowicz
Dołączył: 13 Lis 2012
Posty: 8
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Kraków
|
Wysłany: Śro 15:32, 05 Gru 2012 Temat postu: |
|
|
Można alternatywnie wykorzystać AutoCad .NET API, która umożliwia tworzenie add-inów pod AutoCada. To zarządzana wersja dosyć skomplikowanego ObjectARX.
Kod rysujący pojedynczą linię będzie wyglądał tak:
Kod: |
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
namespace MyExample
{
public class MyClass
{
[CommandMethod("mycommand")]
public void MyCommandMethod()
{
Point3d p1 = new Point3d(0, 0, 0);
Point3d p2 = new Point3d(10, 10, 0);
Line line = new Line(p1, p2);
Database workingDatabase = HostApplicationServices.WorkingDatabase;
Transaction transaction = workingDatabase.TransactionManager.StartTransaction();
using (transaction)
{
BlockTableRecord blockTableRecord =
(BlockTableRecord)transaction.GetObject(workingDatabase.CurrentSpaceId, OpenMode.ForWrite);
blockTableRecord.AppendEntity(line);
transaction.AddNewlyCreatedDBObject(line, true);
transaction.Commit();
}
}
}
}
|
Program kompiluje się jako biblioteka *.dll, wczytywany jest do AutoCada poprzez autocadowskie polecenie NETLOAD i wprowadzenie w konsoli nazwy komendy zawartej w atrybucie "CommandMethod".
Programowanie przy użyciu tego API jest nieco bardziej skomplikowane niż przy użyciu COM, zwłaszcza jak przychodzi wstawić np. blok z atrybutami. Natomiast addiny są wygodniejsze w użytkowaniu, instalowaniu i ewentualnej dystrybucji.
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
mch
Doświadczony Forumowicz
Dołączył: 30 Maj 2009
Posty: 167
Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5 Skąd: Kraków
|
Wysłany: Śro 16:21, 05 Gru 2012 Temat postu: |
|
|
masz jakis sposób na testowanie swoich aplikacji? Bo z tego co pamiętam to w celu wczytania kolejnego (następna kompilacja) pliku *.dll trzeba było restartować autocada.
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
MaciejSz
Początkujący Forumowicz
Dołączył: 13 Lis 2012
Posty: 8
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Kraków
|
Wysłany: Śro 22:16, 05 Gru 2012 Temat postu: |
|
|
mch napisał: | masz jakis sposób na testowanie swoich aplikacji? Bo z tego co pamiętam to w celu wczytania kolejnego (następna kompilacja) pliku *.dll trzeba było restartować autocada. |
Masz rację, trzeba restartować autocada, ale nigdy mi to nie przeszkadzało. Aplikację testuje się używając wszystkich narzędzi jakie udostępnia Visual Studio, czyli możesz w każdej chwili przerwać działanie aplikacji, zrobić poprawki i wznowić program. W Project -> Properties -> Debug wybierasz
(o) Start External Program no i wskazujesz acad.exe.
Z tego co pamiętam w żeby wersji VS express debugować to trzeba zrobić jakiejś tam obejście, ale na necie można to znaleźć bez problemu.
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
adrian87
Początkujący Forumowicz
Dołączył: 05 Sty 2013
Posty: 1
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Wrocław
|
Wysłany: Sob 22:49, 05 Sty 2013 Temat postu: |
|
|
Witam!
mimo dodania bibliotek acax19enu.tlb oraz axdb19enu.tlb (korzystam z cada 2013 i tylko takie znalazłem w plikach programu:)) w VS dalej dostaje błąd "The type or namespace AutoCad could not be found" nasuwa sie komuś jaka może byc przyczyna? dzieki za pomoc
pozdrawiam
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
MaciejSz
Początkujący Forumowicz
Dołączył: 13 Lis 2012
Posty: 8
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Kraków
|
Wysłany: Nie 2:03, 06 Sty 2013 Temat postu: |
|
|
adrian87 napisał: |
mimo dodania bibliotek acax19enu.tlb oraz axdb19enu.tlb
|
Do projektu należy dodać referencje: acdbmgd.dll, acmgd.dll oraz (od wersji 2013) AcCoreMgd.dll.
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|