• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Visual C#: Den Code für AutoCAD ausfüllen

PlannerRoad

Guest
nicht auf italienisch gefunden haben keine tutorials oder erklärung, wie man ausfüllen c#-code für autocad, ich bringe hier meine erfahrung speziell für neugier auf dem thema gemacht.

premise: c# wurde in den neuesten versionen von autocad implementiert und basiert auf der .net-plattform von microsoft, die nun die vba-unterstützung verlassen hat.

zum schreiben und/oder kompilieren von c# müssen sie installieren Microsoft ausgabe 2008 die eine kostenlose version ist (oder andere kostenlose software, typ scharfe spitze die open source ist).
ich habe den test mit microsoft visual c# 2008 express edition gemacht.

als einfaches beispiel den folgenden code
PHP:
mit autodesk.autocad.application services;

Autodesk Mythos. autocad.databaseserices,

Autodesk Mythos. autocad.editorinput,

autodesk.autocad.runtime verwenden,

autodesk.autocad.colors,
 [left]namespace tableandstylecreation[/left]{\chffff}

befehle der öffentlichen klasse

{\chffff}

 [CommandMethod("CTWS")]statische öffentliche leere erstellttablewithstyleandwhatstyle()

{\chffff}

dokument doc =

anwendung.documentmanager.mdiactivedocument;

datenbank db = doc.database;

editor ed = doc.editor;


kurzbeschreibung

ed.getpoint("\nenter tischeinführstelle: ");

wenn (pr.status == promptstatus.ok)

{\chffff}

transaktion tr =

doc.transactionmanager.starttransaction();

verwendung (tr)

{\chffff}

// zuerst lassen sie uns unseren benutzerdefinierten stil erstellen,

// wenn es nicht existiert


const string stylename = "garish table style";

objectid tsid = objectid.null;


dbdictionary sd =

(dbdictionary)tr.getobject(

db.tablestyledictionaryid,

openmode. vorbereiten

;


// verwenden sie den stil, wenn er bereits existiert


wenn (sd.contains(stylename))

{\chffff}

tsid = sd.getat(stylename);

}

andere

{\chffff}

// sonst müssen wir es schaffen


tablestyle ts = new tablestyle();


// kopfbereich rot machen


ts.setbackgroundcolor(

farbe.fromcolorindex(colormethod.byaci, 1),

(int)(rowtype). titelseite |

zeilentyp. kopfzeile

;


// und der datenbereich gelb


ts.setbackgroundcolor(

farbe.fromcolorindex(colormethod.byaci, 2),

(int)rowtype.datarow

;


// mit magenta text überall (ja:-)


ts.setcolor(

farbe.fromcolorindex(colormethod.byaci, 6),

(int)(rowtype). titelseite |

|

zeiletype.datarow)

;


// und jetzt mit cyan äußeren gitterlinien


ts.setgridcolor(

farbe.fromcolorindex(colormethod.byaci, 4),

(int)gridlinetype.outergridlines,

(int)(rowtype). titelseite |

|

zeiletype.datarow)

;


// und hellgrüne innere gitterlinien


ts.setgridcolor(

farbe.fromcolorindex(colormethod.byaci, 3),

(int)gridlinetype.innergridlines,

(int)(rowtype). titelseite |

|

zeiletype.datarow)

;


// und wir machen die gitterlinien schön und klobig


ts.setgridlineweight(

lineweight.lineweight211,

(int)gridlinetype.allgridlines,

(int)(rowtype). titelseite |

|

zeiletype.datarow)

;


// unseren tischstil zum wörterbuch hinzufügen

// und die transaktion


tsid = ts.posttablestyletodatabase(db, stylename);

tr.addnewlycreateddbobject(ts, true);

}


blockierbar bt =

(blockierbar)tr.getobject(

doc.database.blocktableid,

openmode. vorbereiten

;


tabelle tb = neue tabelle();


tb.numrows = 6;

tb.numcolumns = 3;

tb.setrowheight(3);

tb.setcolumnwidth(15);

tb.position = pr.wert;


// verwenden sie unseren tischstil


wenn (tsid == objectid.null)

// das sollte nicht geschehen, es sei denn,

// über logische änderungen

tb.tablestyle = db.tablestyle;

andere

tb.tablestyle = tsid;


// ein 2-dimensionales array erstellen

// unserer tabelleninhalte


string[,] st = neuer String[6, 3];

streifen[0, 0] = "materialeigenschaftentabelle";

streifen[1, 0] = "teil nein".

streifen[1, 1] = "name";

streifen[1, 2] = "Material";

streifen[2, 0] "1876-1";

Stärke[2, 1] = "flansch";

größe[2, 2] "Perspex";

Stärke[3, 0] 0985-4.

Stärke[3, 1] = "bolzen"

größe[3, 2] = "stahl";

streifen[4, 0] = "3476-k".

str.[4, 1] = "fliessend";

streifen[4, 2] = "Keramik"

streifen[5, 0] "8734-3";

Stärke[5, 1] = "kee";

die Polizei[5, 2] = "meist wasser";


// verwenden sie eine geschachtelte schleife, um jede zelle hinzuzufügen und zu formatieren


für (int i = 0; i < 6; i++)

{\chffff}

(i ==) 0)

{\chffff}

// das ist der titel


tb.settextheight(0, 0, 1);

tb.settextstring(0, 0, str[0, 0];

tb.setalignment(0, 0, cellalignment.middlecenter);

}

andere

{\chffff}

// dies sind die header und datenzeilen


für (int j = 0; j < 3; j++)

{\chffff}

tb.settextheight(i, j, 1);

tb.settextstring(i, j, str[i, j];

tb.setalignment(i, j, cellalignment.middlecenter);

}

}

}

tb.generatelayout();


Blocktablerecord btr =

(blocktablerecord)tr.getobject(

b)[BlockTableRecord.ModelSpace],

openmode. für schreibmaschinen

;

btr.appendentity(tb)

tr.addnewcreateddbobject(tb, true);

tr.commit();

}

}

}

}

}
gefunden qui und das hat die funktion, einen tischstil in die zeichnung eingefügt zu erstellen, versuchen wir, unser dienstprogramm für autocad zu erstellen.

open microsoft visual c# e. e. e. in "neues projekt" wählen sie "bibliothek".
auf dem bildschirm, der in der registerkarte erscheint klasse1 löschen sie diesen voreingestellten codeteil und fügen sie stattdessen den für unser dienstprogramm benötigten code ein (beunruhigen sie sich nicht, wenn fehler im moment gemeldet werden).

im menü "projekt" -> Option "referenz- > Tab "Browse" fügen sie diese beiden autocad dlls als referenzdatei hinzu:
acdbmgd.dll

acmgd.dllsie finden im hauptverzeichnis von autocad selbst. zu beachten, dass je nach dem geschriebenen dienstprogramm häufig andere arten von referenzdateien hinzugefügt werden.

sie werden feststellen, dass fehler, die nach dem kopieren des codes gemeldet wurden, jetzt verschwunden sind. sie können zu diesem punkt fortfahren, um den code unter dem menü zu kompilieren "zusammenstellung".
rette alles. der kompilierte code wird standardmäßig im unterordner gespeichert bin\release\ des projekts. sie können den pfad oder die ansicht ändern, wo er durch die registerkarte gespeichert wird "zusammenstellung"name der immobilie" unter dem menü "projekt".

im ordner bin\release (oder anderen satz von ihnen) finden sie neben anderen dlls, die uns nicht interessieren, den dateinamenprogetto.dll. letzteres ist die frucht unserer compilation, die datei unseres dienstprogramms.

an diesem punkt sehen wir, wie es zu verwenden, da diese dll utilities nicht in autocad mit einfachem drag innerhalb des zeichnungsfensters arbeiten.
immer in den neuesten versionen von autocad wurde der befehl eingefügt nettogewicht die dient nur zum laden von dll utilities erstellt auf .net plattform.
siehe hier:
http://www.cadforum.cz/cadforum_en/qaid.asp?tip=5863hochgeladen unser dienstprogramm mit netload, mit dem ctws-befehl (zum dienstprogramm im code zugewiesen) können wir eine benutzerdefinierte tabelle einfügen.
so können wir unser erstes dienstprogramm in c# verwenden.

ps: die "programmierer" ich hoffe, mir irgendwelche ungenauigkeiten oder auslassungen vergeben!
 
Zuletzt bearbeitet:
hallo plannerroad,
ich folgte ihren anweisungen schritt für schritt, aber wenn ich den debug mach, werden mir drei fehler, nämlich:


fehler 1 eine erklärung des benanntraums kann keine modifikatoren oder attribute c:\users\client16\appdata\local\temporary projekte\classlibrary1\class1.cs 12 7 classlibrary1



Fehler 2 wird erwartet das zeichen { c:\users\client16\appdata\local\temporary projekte\classlibrary1\class1.cs 12 38 classlibrary1



fehler 3 eine kennung c:\users\client16\appdata\local\temporary projekte\classlibrary1\class1.cs 12 39 classlibrary1


Wo habe ich mich geirrt?

Danke.
b)
 
ich weiß es nicht. wenn sie genau folgten, sollten die anweisungen richtig funktionieren.
leider habe ich kein wissen über die programmierung c#, ich habe studiert, aber die zeit ist wenig.
was ich berichtet habe, ist mein eigenes tutorial, das ist das ergebnis meiner erfahrung mit der zusammenstellung, aber ich weiß jetzt nicht, wie sie über die fehler, die in ihrem fall erzeugt werden, erzählen.
 
ich weiß es nicht. wenn sie genau folgten, sollten die anweisungen richtig funktionieren.
leider habe ich kein wissen über die programmierung c#, ich habe studiert, aber die zeit ist wenig.
was ich berichtet habe, ist mein eigenes tutorial, das ist das ergebnis meiner erfahrung mit der zusammenstellung, aber ich weiß jetzt nicht, wie sie über die fehler, die in ihrem fall erzeugt werden, erzählen.
okay.........:frown:wir hoffen, dass jemand mir helfen kann, ich denke, ich verstehe, dass ich einige .dll hinzufügen sollte, die weiß...
 
ich versuchte mit netzlast zu laden und kann nicht, unter dem fehler:


befehl: netload montage dateiname: classlibrary1
unmöglich, die montage aufzuladen. fehlerdaten:
system.badimageformat ausnahme: nicht geladen die datei oder montage
'file:///c:\users\client16\desktop\commerciali\classlibrary1.dll' oder einer von
relativen abhängigkeiten. die montage kann nicht geladen werden, weil sie geschaffen wurde
von einer neueren laufzeit als aktuell geladen.
dateiname: 'file:///c:\users\client16\desktop\commerciali\classlibrary1.dll '
in system.reflection.assembly._nload(assemblyname filename, string codebase,
nachweise montagesicherheit, montageort, stackcrawlmark& stackmark,
boolean werfenonfilenotgefunden, boolean forintrospection)
in system.reflection.assembly. internload(assemblyname assemblyref,
nachweise montagesicherheit, stackcrawlmark& stackmark, boolean forintrospect)
in system.reflection.assembly.loadvon(string assemblyfile)
in autodesk.autocad.runtime.extensionloader.load(string filename)
in loadmgd()

ad: die registrierung des montageverbandes ist deaktiviert.
die registrierung von montagefehlern zu aktivieren,
den registrierungswert festlegen [HKLM\Software\Microsoft\Fusion!EnableLog] (schlagwort) am 1.
hinweis: einige leistungsgebühren sind mit der registrierung verbunden
montage assoziationsfehler.
das feature deaktivieren, den registrierungswert entfernen [HKLM\Software\Microsoft\Fusion!EnableLog].
 
ich versuchte mit netzlast zu laden und kann nicht, unter dem fehler:

...
welcher code meinst du?
dieser fehler passierte mir, als ich ein anderes dienstprogramm erstellte, das für 2011 geschrieben wurde. irrtümlich wie dll ich wollte die von 2010 einfügen und ich war zurück, dass der gleiche fehler von ihnen berichtet.
 
welcher code meinst du?
dieser fehler passierte mir, als ich ein anderes dienstprogramm erstellte, das für 2011 geschrieben wurde. irrtümlich wie dll ich wollte die von 2010 einfügen und ich war zurück, dass der gleiche fehler von ihnen berichtet.
mit den letzten und zwei, die du mir angedeutet hast.

ich habe automatisch einen xxx-ordner erstellt, in dem ich nur die .dll-datei kopiert habe, die ich vom bin\release\ unterordner übernommen habe

dann habe ich den xxx-ordner zwischen den dateien die autocad medienpfade eingefügt.

dann hallo schreibt netload zu der kommandozeile und wenn fragt mich
befehl: netload montagedateiname:

ich schrieb den namen von .dll

ist es richtig?

danke.

b)
 
es ist richtig.
es ist jedoch nicht notwendig, den ordner hinzuzufügen, in dem die dll auf autocad suchpfade enthalten ist. autocad aufzeichnungen, von denen pfad die dll geladen wurde.
sobald ich versuchen kann, es mit microsoft visual c# 2010 neu zu kompilieren, habe ich es mit 2008 gemacht, aber ich glaube nicht, dass das ist das problem..
 
ich versuchte, einen blick auf den c#-code für ein dienstprogramm gebäude eine tabelle von plannerroad vorgeschlagen.
fehler, die der compiler auf blubossa gab:
fehler 1 eine erklärung des benanntraums kann keine modifikatoren oder attribute c:\users\client16\appdata\local\temporary projekte\classlibrary1\class1.cs 12 7 classlibrary1

Fehler 2 wird erwartet das zeichen { c:\users\client16\appdata\local\temporary projekte\classlibrary1\class1.cs 12 38 classlibrary1

fehler 3 eine kennung c:\users\client16\appdata\local\temporary projekte\classlibrary1\class1.cs 12 39 classlibrary1
ist darauf zurückzuführen, dass der codenamespace c# nur die formulierung haben muss:
namespace tableandstylecreation
und nicht wie berichtet :
[left.]namespace tableandstylecreation[/left.]
dann müssen sie die . dll der autocad-version, auf die sie das dienstprogramm erstellen möchten:
ich habe versucht, die .dll der version 2010 zu verwenden
und die tabelle funktioniert richtig als excel-tabelle und nachdem ich versuchte, mit der version 2007 zu öffnen, öffnet die gleiche tabelle, aber nicht mit den gleichen ergebnissen von 2010, d.h. es schafft immer eine tebella aber mit eigenschaften inhärent der version, die sie verwenden.
meine ratschläge und um dienstprogramme mit autocad dll zu erstellen:

acdbmgd.dll

acmgd.dll

aber mit denen der neuesten version, weil sie sowohl mit der neuesten autocad-version als auch mit den vorherigen, die das netz unterstützen öffnen können.
 
Hallo Jungs. Ich bin neu im Forum und die Entwicklung von Diensten für Autocad.

Ich folgte Schritt für Schritt alle Richtungen dieser Diskussion, aber ich habe ein Problem mit der acmgd. dll-Datei

der Compiler sagt mir den folgenden Fehler:

unmöglich, die Montage "acmgd" zu lösen, auf die verwiesen wird, weil es von "system.web, version=4.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a" abhängt, nicht im aktuellen Zielrahmen enthalten ".netframework,version=v4.0,profile=client". Entfernen von nicht im Zielrahmen vorhandenen Montagereferenzen oder definieren Sie ein neues Projektziel. (msb3253)

utlizzo shardevelop und autocad 2010. der Rahmen installiert ist Version 4. Ich setze auch auf "false" die "lokale Kopie" jeder dll.

Jemand kann mir helfen, bitte... Du kannst verrückt werden!

Vielen Dank!
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben