Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  einfache Line erstellen / simple line

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:  einfache Line erstellen / simple line (1478 mal gelesen)
THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2005

erstellt am: 13. Dez. 2006 00:20    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

Hi!
Bin absoluter Newbie was ARX betrifft und schaffe es einfach nicht eine Kreis auf den Bildschirm zu bekommen. (Hab bis jetzt Tut 1-3 durchgemacht)
Ha dazu mal folgendes getippt:

Code:
const ACHAR de = ACHAR("0");

AcDbCircle *pCircle =new AcDbCircle (AcGePoint3d::kOrigin, AcGeVector3d::kZAxis, 1.0);
pCircle->setColorIndex (2) ;
pCircle->setLayer(&de);
pCircle->close();



kompilieren und ausführen lässt es sich nur sehen tu ich nichts am Bildschirm!

Wenn dieser Kreis zu einer Blockdefinition gehören würde müsste ich jetzt das Objekt Kreis (pCircle) zu pBlockTableRecord hinzufügen durch Verwendung von

Code:
pBlockTableRecord->appendAcDbEntity (pCircle))

Was mache ich aber wenn ich dieses Objetkt einfach in die aktuelle Zeichnung einfügen will, muss ich dieses Objekt auch irgendwie irgendwo hinzufügen??

Hoffe ihr könnt mir weiterhelfen.

MFG THE_ONE
Ps.:Weiß jemand ob es ein Makro gibt für den aktuellen Layer. Will ja nicht immer auf Layer 0 zeichnen. wie komm ich zum aktuellen layer, damit das gezeichnete immer am aktuellen Layer liegt. ich stell mir sowas wie  pCircle->setLayer("aktueller_Layer");

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

criecky
Mitglied
MENSCH


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

Beiträge: 251
Registriert: 13.01.2004

ACAD 2011- 2017
www.cbyte.eu

erstellt am: 13. Dez. 2006 03:39    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 THE_ONE 10 Unities + Antwort hilfreich

hallo,

du solltest die AcDbBlockTable nicht nur mit dem Autocadbefehl: block vergleichen..... schaue dir mal die SymbolTabeles an.  Und vergesse den Acad Befehl: block ! 

Die AutoCAD Datenbank enthält die folgenden Symboltabellen:
• Block table (AcDbBlockTable; BLOCK)   ( auch der modellbereich zählt dazu)
• Layer table (AcDbLayerTable; LAYER)
• Text style table (AcDbTextStyleTable; STYLE)
• Linetype table (AcDbLinetypeTable; LTYPE)
• View table (AcDbViewTable; VIEW)
• UCS table (AcDbUCSTable; UCS)
• Viewport table (AcDbViewportTable; VPORT)
• Registered applications table (AcDbRegAppTable)
• Dimension styles table (AcDbDimStyleTable; DIMSTYLE)

mal ein beispiel ohne fehlerprüfung … nur zur anregung  

Code:
// ****** code for mycircle ***********
AcDbObjectId createCircle()   // Kreisfunktion
{
AcGePoint3d centerPoint; 
double radius;
acedGetPoint(NULL, "\nZentrumspunkt zeigen: ", asDblArray(centerPoint));  // mit Hilfsarray wegen  ADS-Punkt
AcGeVector3d normal(0.0, 0.0, 1.0); 
acedGetDist(asDblArray(centerPoint),"\nRadius angeben: ", &radius);
AcDbCircle *pCirc = new AcDbCircle(centerPoint, normal, radius);
// für Zugriff Modellbereich
AcDbBlockTable *pBlockTable=NULL;
// aktuelle Datenbank (Zeichnung) nur zum lesen
acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);

AcDbBlockTableRecord *pBlockTableRecord;
// in BlockTable den Modellbereich (ModelSpace -> Makro)
// öffnen zum schreiben;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
pBlockTable->close(); //Wir haben ja den Modellbereich
AcDbObjectId circleId;
// über Zeiger vom Modellbereich kreis in datenbank einfügen
pBlockTableRecord->appendAcDbEntity(circleId, pCirc);
pBlockTableRecord->close(); //Modellbereich schliessen

pCirc->close();  //Entity schliesen

}


zum layer:
du kannst die CLAYER Systemvariable abfragen über acedGetVar()

gruss criecky    

------------------
   
Softlan macht das Netzwerk weich!

www.cbyte.de

[Diese Nachricht wurde von criecky am 13. Dez. 2006 editiert.]

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

THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2005

erstellt am: 13. Dez. 2006 10:43    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

Hi!

Erstmal besten Dank, hat wunderbar funktioniert (dafür gibts 10 Unities)!

Habe noch ein paar fragen:

1. was ist der Unterschied bzw. wie arbeiten die SymbolTables und die SymbolTableRecords zusammen.
2.

Code:
// aktuelle Datenbank (Zeichnung) nur zum lesen
acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);


warum öffne ich die aktuelle Zeichnung nur zum lesen obwohl ich ja was reinschreibe?

3.WO sehe ich was alles noch in den Symboltables ist?? von wo weiß ich was wo drinnen ist?? in der classmap von ACAD sehe ich ja nur welche es gibt.
Gewisse Sachen sind ja intuitive (glaub ich zumindest). z.B.: Einen Layer fügt man zur AcDbLayerTable. Einen Block zur AcDbBlockTable (nur wie man gesehen hat nicht nur Blöcke sondern mehr), nur von wo weiss ich jetzt das da auch der Modellbereich drinnen liegt? Wenn ich jetzt  auf ein bestimmtes Layout zugreifen müsste wäre dann das auch dort zu finden??

MFG THE_ONE

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

criecky
Mitglied
MENSCH


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

Beiträge: 251
Registriert: 13.01.2004

ACAD 2011- 2017
www.cbyte.eu

erstellt am: 13. Dez. 2006 11:37    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 THE_ONE 10 Unities + Antwort hilfreich

Hallo THE_ONE !

Zu 1. acad verwaltet alles in einer Datenbank , die einzelne container beinhalte. wie eine konventionelle datenbank, besteht die zeichnung aus einer tabelle mit datensätzen (zeilen) und datenfeldern (spalten). objekte einer zeichnungsdatenbank können alle vorstellbaren objekte sein. jedoch sind die objekte, je nach ihren eigenschaften, in bestimmte vorgegebene container untergebracht. Dabei sind alle objekte, die keine graphische darstellungen besitzen in den so genannten symboltabellen zusammengefasst. in acad  2004 gibt z.b. 9 Symboltabellen:
• Bemaßungsstiltabelle
• Layertabelle
• Blocktabelle
• Linientyptabelle
• Textstiltabelle
• Ansichtfenster- und Ausschnitttabelle
• Tabelle der Koordinatensysteme
• Tabelle der registrierten Applikationen
• Tabelle Benutzerkoordinatensysteme
schau dir mal die klassenliste unter classmap im sdk an. dann kannst du es bessser verstehen.  ???

die blocktabelle hat eine besondere stellung unter den symboltabellen. sie enthält alle block-container, die wiederum sämtliche objekte mit graphischer darstellung verwalten. Alle datensätze in den symboltabellen müssen vom gleichen typ sein. Da aber innerhalb einer zeichnungsdatenbank eine vielzahl unterschiedlicher objekte verwaltet werden müssen, gibt es ein flexiblerer container. dieser container wird dictionary genannt, die datensätze eines dictionary werden als RECORDS bezeichnet. da du ja nur eine gewisse anzahl von objekten erzeugen oder manipulieren möchtest erhältst du über die einzelnen records zugriff auf die elemente. alles klar?  frage ruhig !!!
zu 2.
jedes objekt hat in der datenbank eine eindeutig identifizierung, diese ändert sich während der gesamten lebensdauer des objekts nicht. darum musst du dich aber erst mal nicht kümmern. du brauchst nur diese identifizierung um das objekt zu verändern. du möchtest ja nicht die ganze datenbank neu beschreiben. als reicht ein lesen der zeichung aus. es gibt dafür aber wie immer mehrere varianten. du willst aber ja nur in den modellbereich etwas einfügen (oder Papierbereich). deshalb brauchst du eine zeiger auf den modellbereich von einer beliebigen zeichnung. 

zu 3: der classmap stellt dir einen überblick und verbindungen der einzelnen container dar. wobei eigentlich für den anfang alle die mit AcDb beginnen ausreichen dürften.
genauer erläuterungen zu den einzelnen klassen und deren objekt findest du in der docs der sdk.
wenn du jetzt nachschaust wirst z.b du die klasse AcDbLayout und AcApLayoutManager finden.
kannst dir nur zum verständnis auch mal in der acad hilfe das objektmodell von vba anschauen.

Tip: http://arxdummies.blogspot.com/   
ist auch für den anfang ganz gut.

viel spass und nicht aufgeben. das wird.

gruss criecky 

------------------

Softlan macht das Netzwerk weich!

www.cbyte.de

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

THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2005

erstellt am: 14. Dez. 2006 00:29    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!

Bin auf ein neues Problem gestoßen und irgendwie finde ich dazu nix! Was ist/sind AcDbSystemInternals. Diese muss ich nämlich angeben um eine Spline zu zeichnen das selbe muss ich auch angeben wenn ich einen Mtext einfügen möchte(zumindest schreibt mir das das VStudio 2005 hin)!

Das was mich jetzt mal interessieren würde bezieht sich auf die Spline! Hab bisher eine Forschleife in der ich ca.: 100 Werte einer Funktion berechne (z.B Sinunsfunktion)und jetzt würde ich gerne das ganze auf den Bildschirm zeichnen mit Hilfe einer spline wie füttere ich diese?

MFG THE_ONE

Habs grad geschafft!!  Hab in der Hilfe nachgeschaut und da steht das man die Funktion Spline wie folgt aufruft:

Code:
AcDbSpline(const AcGePoint3dArray& points,
                const AcGeVector3d& startTangent,
                const AcGeVector3d& endTangent,
                int order = 4,
                double fitTolerance = 0.0);



Nun frag ich mich was es mit dem AcDbSystemInternals auf sich hat.Ist das ein Fehler vom VS2005??
Aber mal für alle die eine Spline zeichnen wollen hier der Code:
Code:
AcGePoint3dArray sp_ar;
const AcGeVector3d start_vec = AcGeVector3d(0,0,0);
const AcGeVector3d end_vec = AcGeVector3d(0,0,0);
AcGePoint3d spt1 = AcGePoint3d(0,0,0);
AcGePoint3d spt2 = AcGePoint3d(1,1,0);
AcGePoint3d spt3 = AcGePoint3d(2,0,0);
AcGePoint3d spt4 = AcGePoint3d(3,1,0);
AcGePoint3d spt5 = AcGePoint3d(4,0,0);
sp_ar.append(spt1);
sp_ar.append(spt2);
sp_ar.append(spt3);
sp_ar.append(spt4);
sp_ar.append(spt5);

AcDbSpline *pSpline = new AcDbSpline(sp_ar,start_vec,end_vec,3,0.0);
pSpline->setColorIndex (3);

pBlockTableRecord->appendAcDbEntity(lineId, pSpline);
pSpline->close();
Frage an die Profis kann man das schöner machen?? mir gefällt nicht das ich für jeden Arrayeintrag einen neuen Punkt erzeugen muss, muss ich das überhaupt?? Kann ich vielleicht einfach nur einen Punkt nehmen und ihm einfach nach jedem append einfach einen neuen Wert zuweisen?

MFG THE_ONE

[Diese Nachricht wurde von THE_ONE am 14. Dez. 2006 editiert.]

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

criecky
Mitglied
MENSCH


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

Beiträge: 251
Registriert: 13.01.2004

ACAD 2011- 2017
www.cbyte.eu

erstellt am: 14. Dez. 2006 12:59    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 THE_ONE 10 Unities + Antwort hilfreich

hi,

vielleicht so:

Code:

AcGePoint3d temppoint;
while (abruchbedingung) // z.b rtnorm
{
double x,y,z;
x=0; y=0; z=0;  // hier mit werten füttern
temppoint.set(x,y,z);
sp_ar.append(temppoint);
}

gruss criecky

------------------

Softlan macht das Netzwerk weich!

www.cbyte.de

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



IT-Administrator CATIA/Cadence (m/w/d)

Behr-Hella Thermocontrol GmbH (BHTC) ist mit über 2.800 Mitarbeitern weltweit eines der führenden Unternehmen im Bereich Klima­bedie­nung, Thermo­manage­ment und HMI für die Automo­bilindustrie. BHTC bildet das ge­samte Spektrum von der Konzep­tion über die Ent­wicklung bis hin zur Produk­tion inno­vativer Lösungen in den Seg­menten Bedien­systeme, Klima­bedien- und Klima­steuer­geräte, Center Infor­mation Displays und integrierte Center­stacks ab....

Anzeige ansehenSystemadministration, Netzwerkadministration
THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2005

erstellt am: 17. Dez. 2006 22:30    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

Danke für deine Hilfe funktioniert super das was mir gefehlt hat war die set Funktion das andere war mir eh klar, aber dennoch danke dafür gibts 10U!

MFG THE_ONE

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