| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Zugriff auf die Variable des Objektvolumens? (1667 mal gelesen)
|
CAD-Tiger Mitglied
Beiträge: 12 Registriert: 25.08.2009
|
erstellt am: 27. Okt. 2009 21:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Kollegen! Ich habe bei einer Attributsdefinition (ACAD 2008 / Win XP) folgendes Problem: Ich habe mir einen Plankopf aus verschiedenen Attributen, welche teilweise mit Werten vordefiniert sind und andere erst beim Einfügen des Plankopfblockes ausgefüllt werden müssen, als Block erstellt. Eines dieser Attribute enthält die Dichte des Werkstoffes. Aus diesem Dichtewert und dem Volumen des Zeichenobjektes (3D-Solid und nur ein Stück pro Zeichnung) soll die Masse berechnet werden und in einem anderen Attributsfeld im Plankopf automatisch eingetragen werden. Da sich das Volumen des 3D-Volumenkörpers während der Konstruktion (z.b. Start mit Quader, dann einsetzen von Bohrungen, addieren von andern 3D-Solids mittels Bool´scher Operation, etc.) ändert, möchte ich nach "attsync" im Feld "Masse", den aktuellen Wert stehen haben. Hier nun die Fragen: a) in welcher Variable wird das Volumen eines 3D-Solids abgespeichert? b) muß ich dabei auch eine Objekt-ID beachten? c) wie baue ich dies am intelligentesten ohne Programmierung (VBA, Lisp) in den Plankopf ein? Anmerkung: der Plankopf wird im "Papierbereich" eingefügt Vielen Dank im voraus! Georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 27. Okt. 2009 21:53 <-- editieren / zitieren -->
Hi Georg, >> in welcher Variable wird das Volumen eines 3D-Solids abgespeichert? leider gar nicht gespeichert, sondern nur per Befehl '_massprop' nachträglich zu berechnen. >> muß ich dabei auch eine Objekt-ID beachten?
solange Du nicht über Programmierung nachdenkst, nein. >> wie baue ich dies am intelligentesten ohne Programmierung (VBA, Lisp) in den Plankopf ein?
zumindest ich habe dazu leider keine Idee. Sorry für die schlechten Nachrichten, - alfred -
------------------ www.hollaus.at |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 27. Okt. 2009 21:57 <-- editieren / zitieren --> Unities abgeben: Nur für CAD-Tiger
Eigenschaften von Objekten werden nie in Variablen gespeichert !? Ein Volumenkörper hat keine Eigenschaft "Masse" oder "Volumen" . Die zur Verfügung stehenden Eigenschaften für ein SCHRIFTFELD kannst du selbst abfragen: Schriftfeld Objekt <volumenkörper klicken> voila... Und wenn eine Eigenschaft bestehen würde: Dann müßte man den Objektnamen natürlich berücksichtigen - Acad muß ja wissen von welchem Objekt der Wert ausgelesen werden soll - allerdings bin ich nicht sicher was DU mit "Objekt-ID" meintest. Attsync gleicht Attribute mit der aktuellen Attributdefinition ab, das was du gebrauchen könntest wäre bei der Verwendung von Schriftfeldern die Systemvariable _fieldeval und/oder die Funktion _updatefield/Schriftfeldakt Attsync ist aber sicher nicht "richtig" . ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Tiger Mitglied
Beiträge: 12 Registriert: 25.08.2009
|
erstellt am: 27. Okt. 2009 22:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred! Danke für die schnelle Antwort. Ich hatte ursprünglich an die Möglichkeit über die Schriftfelder gedacht. Wäre es den möglich den Wert von "_massprop" in ein Attributsfeld umzuleiten und dann auf dieses Attributsfeld über die Schriftfelder zuzugreifen? Es würde mir ja reichen kurz vor dem Drucken dann ein attsync zu starten. Der Massenwert muß ja nicht permanent in Echzeit während der Kunstruktion berechnet werden. Liebe Grüße, Georg Edit: hatte den Beitrag von cadffm beim Absenden meines Beitrages noch nicht gesehen [Diese Nachricht wurde von CAD-Tiger am 27. Okt. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Tiger Mitglied
Beiträge: 12 Registriert: 25.08.2009
|
erstellt am: 27. Okt. 2009 22:08 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm! Mit Objekt-ID meinte ich folgendes. ACAD vergibt ja intern jedem Objekt (Kreis, Kugel, Linie, etc.) ja eine eindeutige ID, oder? Wenn ich nun beim Konstruieren 2 3D-Solids erstelle und diese dann verschmelze, weist dann ACAD diesem "neuen" Objekt ja eine neue ID zu (hoffe ich zumindest) damit ich dann eindeutig darauf bezug nehmen kann für Programmierungen, Attributsfelder, etc.. LG, Georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 27. Okt. 2009 22:14 <-- editieren / zitieren -->
Hi, >> Wäre es den möglich den Wert von "_massprop" in ein Attributsfeld umzuleiten ...nicht dass ich wüsste (nicht ohne Programmierung) >> ein attsync zu starten
cadffm hat Dir schon beschrieben, dass '_attsync' nicht das ist, was Du brauchst (schau Dir mal in der Hilfe den Befehl an, damit Du siehst, was dieser macht). - alfred - ------------------ www.hollaus.at |
CAD-Tiger Mitglied
Beiträge: 12 Registriert: 25.08.2009
|
erstellt am: 27. Okt. 2009 22:17 <-- editieren / zitieren --> Unities abgeben:
Danke Alfred, bin schon dabei (siehe auch mein "Tante Edit" oben ) Georg P.S.: ich hoffe ich finde diesbezüglich noch eine halbautomatische Lösung, ansonsten muß ich vor dem Drucken die Masse manuell rechnen und einfügen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 27. Okt. 2009 22:18 <-- editieren / zitieren --> Unities abgeben: Nur für CAD-Tiger
ok, Schriftfelder arbeiten zwar nicht mit dem CAD-Handle oder dem Objektnamen sondern mit einer 3. "ID" - aber das nur am Rande. Zurück zum Thema: Ausgerechnet das Ergebnis des Volumens welches MASSEIG errechnet wird NICHT zwischengespeichert, daher kann man sich auch nicht temporär darauf beziehen. Soviel zu meinem Kenntnisstand. Bleibt nur ein Programm um es per Knopfdruck, aber "dumm" in das Attribut einzutragen und das war hier ja ausdrücklich nicht gesucht. ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Tiger Mitglied
Beiträge: 12 Registriert: 25.08.2009
|
erstellt am: 27. Okt. 2009 22:24 <-- editieren / zitieren --> Unities abgeben:
Hi cadffm, danke für die Korrektur. Programmierung habe ich deswegen ausgeschlossen, da ich selber keinerlei VBA bzw. Lisp-Erfahrung besitze, wehre mich aber nicht prinzipiell gegen solche Lösungen. Ich lerne gerne dazu. Wie aufwendig wäre den so etwas zu proggen? ("nur" ein 2-Zeiler oder doch etwas mehr?) Georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 27. Okt. 2009 22:50 <-- editieren / zitieren -->
Hi Georg, >> Wie aufwendig wäre den so etwas zu proggen? >> "nur" ein 2-Zeiler oder doch etwas mehr? hast Glück gehabt, hat mich interessiert. Mit 2 Zeilen geht's (mit VBA) nicht, der Hauptteil (wie bei jedem Programm) sind Anwenderfehler abfangen, der Rest ist eigentlich Muki. VBA-Editor starten (Befehl: _vbaide), folgenden Code einfügen und in VBA mal speichern. Dann Befehl: _vbarun ==> im folgenden Dialog 'xxx.SolidVol_to_Attribute' auswählen ==> Button 'Ausführen'. Der Rest wird in der Befehlszeile von AutoCAD abgefragt und sollte klar sein (Hoffe ich )
Code: Public Sub SolidVol_to_Attribute() Dim tEnt As AcadEntity Dim tPnt As Variant Dim tVolume As Double On Error Resume Next Call ThisDrawing.Utility.GetEntity(tEnt, tPnt, "Volumenkörper zeigen: ") If tEnt Is Nothing Then Call MsgBox("Kein Element gewählt") ElseIf Not (TypeOf tEnt Is Acad3DSolid) Then Call MsgBox("Gewähltes Element war kein Volumenkörper") Else Dim tSol As Acad3DSolid Set tSol = tEnt tVolume = tSol.Volume End If If tVolume > 0 Then Set tEnt = Nothing Dim tMatrix As Variant Dim tCData As Variant Call ThisDrawing.Utility.GetSubEntity(tEnt, tPnt, tMatrix, tCData, "Attribut zeigen") If tEnt Is Nothing Then Call MsgBox("Kein Element gewählt") ElseIf (Not (TypeOf tEnt Is AcadAttributeReference)) Then Call MsgBox("Gewähltes Element war keine AttributReferenz") Else Dim tAttRef As AcadAttributeReference Set tAttRef = tEnt tAttRef.TextString = CStr(tVolume) End If End If End Sub
- alfred - ------------------ www.hollaus.at |
CAD-Tiger Mitglied
Beiträge: 12 Registriert: 25.08.2009
|
erstellt am: 27. Okt. 2009 22:53 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 27. Okt. 2009 23:00 <-- editieren / zitieren --> Unities abgeben: Nur für CAD-Tiger
Wenn man es so macht wie hier (da ging es um den Schwerpunkt) : KLICK!Dann ist der Aufwand nicht groß (weil es ja bereits den eigentlich Code gibt). Inhalt: 1.) MASSEIG ausführen 2.) Ergebnis in die Analyse Datei umleiten 3.) Analysedatei einlesen und die 5.Zeile verarbeiten Den Wert kann man dann zB. in die USERR1-5 Variablen speichern, so bleibt der zuletzt berechnete Wert erhalten <In Zeichnung gespeicherte Variablen> Ein Schriftfeld im Plankopf(attribute) kann dann USERR1 zB. auslesen (bzw. eine Formel im Schriftfeld kann den Wert als Berechnungsgrundlage nutzen) PS: So ein Schriftfeld was sich einen Wert aus einem anderen Attribut holt, kann aber erst NACH einfügen der Plankopf-Blockreferenz erstellt werden, also nicht bereits in der Blockdefinition ! ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Tiger Mitglied
Beiträge: 12 Registriert: 25.08.2009
|
erstellt am: 27. Okt. 2009 23:11 <-- editieren / zitieren --> Unities abgeben:
So , die Variante von Alfred funktioniert einmal sauber Die von Dir cadffm, werde ich morgen dann einmal antesten, da muß ich mir den Text genauer durchlesen. Vielen Dank Euch beiden vorerst. Üs sind reichlich unterwegs Liebe Grüße, Georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 27. Okt. 2009 23:13 <-- editieren / zitieren --> Unities abgeben: Nur für CAD-Tiger
|
CAD-Tiger Mitglied
Beiträge: 12 Registriert: 25.08.2009
|
erstellt am: 27. Okt. 2009 23:15 <-- editieren / zitieren --> Unities abgeben:
|