Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  C# Blocke erstellen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  C# Blocke erstellen (2721 mal gelesen)
KRS
Mitglied


Sehen Sie sich das Profil von KRS an!   Senden Sie eine Private Message an KRS  Schreiben Sie einen Gästebucheintrag für KRS

Beiträge: 1
Registriert: 09.11.2012

erstellt am: 09. Nov. 2012 13:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich bin neu hier und habe auch schon gleich ein Problem.
Ich setze mich sein kurzem mit C# und AutoCad auseinander und versuche ein Programm zu schreiben, das etwas zeichnet und als Block in der Zeichnung abgelegt wird. Das mit dem Zeichnen bekomme ich auch schon ganz gut hin, nur leider weiß ich nicht die ich die Linien in einen Block umwandel.

Hier mein Code

Code:

//PolyLinie Zeichnen
public static string Polyliniezeichnen(
int anzahl,
int schliesen, // wenn schließen=1 dann wird die polylinie geschlossen
double[] xwert,
double[] ywert,
int color,
string linientyp
)
{
// Get the current document and database
Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
// Start a transaction
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Open the Block table for read
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
OpenMode.ForRead) as BlockTable;
// Open the Block table record Model space for write
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[
BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
// Create a line that starts at 5,5 and ends at 12,3
//Line acLine = new Polyline(new Point2d(xstart, ystart, 0),
// new Point3d(xende, yende, 0));
Polyline acPoly = new Polyline();
acPoly.SetDatabaseDefaults();
//linien Typ
acPoly.Linetype = linientyp;
//linien Farbe
acPoly.ColorIndex = color;
//Schleife die alle Punkte hinzugügt
for (int i = 0; i < anzahl; i++)
{
acPoly.AddVertexAt(i,
new Point2d(xwert[i], ywert[i]), 0, 0, 0);
// Schließen the Polyline
if (i == anzahl - 1 && schliesen == 1)
{
acPoly.Closed = true;
}
}
// Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acPoly);
acTrans.AddNewlyCreatedDBObject(acPoly,true);
// Save the new object to the database
acTrans.Commit();
}
}


Wenn Ihr einen Tipp für mich habt, wie ich die Linie in einem Block speichern kann, währe ich euch sehr dankbar.

Gruß
KRS

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

oscarr
Mitglied
CAD-Manager


Sehen Sie sich das Profil von oscarr an!   Senden Sie eine Private Message an oscarr  Schreiben Sie einen Gästebucheintrag für oscarr

Beiträge: 198
Registriert: 02.10.2007

ACA 2012 - English Win 7/x64

erstellt am: 09. Nov. 2012 21:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KRS 10 Unities + Antwort hilfreich

Guten Abend,

ich weiss ja nicht wo Du das Beispiel herhast, aber ich bin mir sicher dort findest Du auch ein passendes zum erstellen von Blöcken  .
Falls nicht hier ist eins von Kean: Creating an AutoCAD block using .NET

Du solltest Dir unbedingt die Struktur einer DWG genauer anschauen.
Vor allem das Thema BlockTables ist existenziell für AutoCAD Programierung.
Du hast ja schon in einen Block hinein gezeichnet. Formal gesehen gibt es in einer DWG nur Blöcke,
der Modelbereich ist einer, jedes Layout auch. Und alle Blöcke können sowohl Geometrien u.ä. enthalten und eben auch weitere Blöcke.
Du hast Sie ja schon mittels acBlkTblRec.AppendEntity(acPoly); in einen Block geschrieben.
Wichtig zu wissen ist das man einen Block nicht "sehen" kann. Den Block mit all seinen Objekten definert man in der BlockTable als BlockTalbleRecord.
Wenn man ihn "sehen" will, muss man in dem Block in dem er erscheinen soll (zB. Modelspace) eine BlockReference in jenen einfügen.

Die Grafiken hier illustrieren das recht gut.

Viel erfolg weiterhin
Holger

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 09. Nov. 2012 22:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KRS 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von KRS:
...  das etwas zeichnet und als Block in der Zeichnung abgelegt wird. Das mit dem Zeichnen bekomme ich auch schon ganz gut hin, nur leider weiß ich nicht die ich die Linien in einen Block umwandel. ...

Du bist doch beim Programmieren und nicht beim Zeichnen. Das ist eine grundverschiedene Herangehensweise., wo nur das Ergebnis gleich ist. Daher solltest du den Hinweis meines Vorredners ernst nehmen und dich mit dem Aufbau einer Zeichnungsdatenbank beschäftigen. Beim Programmieren schreibst du lediglich Daten direkt in diese hinein, da ist es vollkommen unerheblich, welche Befehle das AutoCAD Frontend zur Verfügung stellt.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 10. Aug. 2017 10:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KRS 10 Unities + Antwort hilfreich

ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! - bin erst jetzt am Testen

Hallo!

Das Problem, welches ich habe ist. Ich möchte noch ein Attribut in den Block legen.
Hier mein Ansatz

Nur verstehe ich nicht ganz, weshalb ich den Aufruf mit Attsync bewerkstelligen muss, um das Attribut am Block sichtbar zu machen. Gehe ich falsch heran an die Aufgabe, einen Block mit einem Attribut zu erzeugen ? Bin im Netz nicht richtig fündig geworden.

Nach meinem bisherigen Verständnis muss ich folgendermassen vorgehen.
1) BlockTable der Zeichnung lesen
2) BlockTableRecord für einen neuen Block erzeugen
3) Den Inhalt des Blockes bestimmen (Keans Beispiel) ein Quadrat aus Linien

Damit ist der Block in der Zeichnungdatenbank
Fortsetzung mit dem Attribut
4) AttributeDefinition erzeugen und mit append an den Block "heften"
5) Einfügen des Blocks in den Modelbereich

Und jetzt die Frage, wie mache ich das Attribut sichtbar - mein Behelf mit attsync ???

------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 10. Aug. 2017 10:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KRS 10 Unities + Antwort hilfreich

Du mußt die Attribute für die Blockreferenz ebenfalls "selbst" erstellen,
nicht nur die Blockreferenz!

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 10. Aug. 2017 10:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KRS 10 Unities + Antwort hilfreich

ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!
Wenn du einen Block einfügst, musst du die Attribute aus der Blockdefinition ermitteln und diese dann als AttributeReference an die erzeugte Blockreference anfügen.
Ist einfach so.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 10. Aug. 2017 11:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KRS 10 Unities + Antwort hilfreich

Eigenartiges Verhalten!
Nur nochmal, damit ich das richtig verstehe. Den Block mit Attribut habe ich in die Zeichendatenbank eingefügt.
Will ich den Block in den Modelbereich einfügen, muss ich quasi für die Attribute eine Attributreferenz einfügen ?!

------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 10. Aug. 2017 11:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KRS 10 Unities + Antwort hilfreich

Ja.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 10. Aug. 2017 11:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KRS 10 Unities + Antwort hilfreich

"Den Block mit Attribut habe ich in die Zeichendatenbank eingefügt."

Nein, du hast eine Blockdefinition erstellt(eingefügt) welche AttributDEFINITIONEN beinhaltet.
Beim erstellen von Blockreferenzen hast du dich selbst darum zu kümmern
nachzusehen ob es in der Blockdefinition Attributdefinitionen gibt,
welche NICHT-KONSTANT sind.
Diese Attributedefinition sind Vorlage für Attribute, welche an Blockreferenzen hängen.

Die Blockreferenz visualisiert dann die gesamt (sichtbare) Geometrie der Blockdefinition,
AUSSER die enthaltenen Attributdefinitionen welche NICHT als Konstant deklariert sind.

Es gibt keinerlei direkter Verbindung zwischen Block(definition) und einem Attribut an einer Blockreferenz.

So ist es mit Blöcken (und Attributen)
immer wieder gerne aus User-Sicht: FAQ: Blöcke

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 10. Aug. 2017 12:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KRS 10 Unities + Antwort hilfreich

Vielen Dank euch beiden, jetzt hab ich das Beispiel in der Hilfe auch verstanden.

------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz