| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: Attribute auslesen von aktuellem Blatt (4132 mal gelesen)
|
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 01. Mrz. 2010 14:50 <-- editieren / zitieren --> Unities abgeben:         
Hallo, habe folgendes Problem: Habe ein Tool welches mir Attribute aus einer DWG ausliest. Nun meine Frage: Ist es möglich das ganze auch nur von einem Blatt in der DWG auszulesen???? Da unsere DWG's aus mehreren Blättern unten über die Reiter gesteuert sind! Bitte um Hilfe!!!
Danke im vorraus. Gruß Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 01. Mrz. 2010 14:55 <-- editieren / zitieren -->
Hi Torsten, wenn Du mit 'Blatt' ein AutoCAD-Layout meinst, dann folgt gleich die nächste Frage: Meinst Du die Blöcke, die in Ansichtsfenstern auf diesem Layout sichtbar sind? Beides möglich, nur ohne genaue Angaben bzw. Einsicht in Dein Tool (wie Du's jetzt machst und wo Du daher mit Modifikationen beginnen musst) ist keine definitive Antwort möglich, leider. - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 01. Mrz. 2010 15:02 <-- editieren / zitieren --> Unities abgeben:         
Hallo, danke zunächst für die schnelle Antwort! Richtig, meine ein AutoCad-Layout-Blatt ;-) Tool sieht aktuell folgender Maßen aus: Private Sub CommandButton1_Click()
Dim blockname As String Dim a, blocktotal As Integer UserForm2.Hide ListBox1.Clear blocktotal = ThisDrawing.Blocks.count For a = 0 To blocktotal - 1 blockname = ThisDrawing.Blocks.Item(a).name If Not Mid$(blockname, 1, 1) = "*" Then ListBox1.AddItem blockname Next a Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 01. Mrz. 2010 15:10 <-- editieren / zitieren -->
Hi, und möchtest Du nur die Blockreferenzen ausgeben, die am Papier liegen oder die, die im jeweiligen Ansichtsfenster (im Zoom-Ausschnitt des Ansichtsfensters) zu sehen sind. Dazu noch eine ergänzende Frage: gibt es mehrere Ansichtsfenster in einem Layout? Und lt. Deinem Code die scwerwiegendste Frage: meinst Du Blockdefinitionen oder Blockreferenzen? In Deinem Code wertest Du aus, wie viele Blockdefinitionen es in Deiner Zeichnung gibt (nicht, wie oft diese in der Zeichnung, sei es Modellbereich oder Layout, eingefügt wurden!) - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 01. Mrz. 2010 15:16 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 01. Mrz. 2010 15:29 <-- editieren / zitieren -->
Hi, >> Blockdefinitione und deren Anzahl Auf die Gefahr hin, dass ich lästig erscheine, ich stell trotzdem noch eine Gewissensfrage (plus ergänzende Frage): Was hilft es Dir, zu wissen, dass es auf einem Layout 2 Blockarten gibt? Ergänzende Frage bzw. Hintergrund dazu: Du hast auf einem Layout eine Blockreferenz 'SCHRIFTKOPF' und 5 Blockreferenzen 'ANDERUNGSLISTENEINTRAG' (sind die Änderungen 1-5, für die je eine Blockreferenz eingesetzt werden). Interpretiere ich Deinen Wunsch wortwörtlich, bekommst Du als Ergebnis 2, willst Du das wirklich? - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 01. Mrz. 2010 15:37 <-- editieren / zitieren --> Unities abgeben:         
Entschuldigung, war keinesfalls böse gemeint. Sollte absolut nicht so rüber kommen. War nur aus Spaß gemeint! Bitte nicht falsch verstehen. Zur Erklärung der Anwendung:
sämtliche Blöcke heißen bei uns z.B. Stückliste1, hinter diesen verbergen sich dann die verschiedensten Attributen. Somit benötige ich die gesamt zahl der blöcke die ich zur Auswertung brauche... dahinter kommen dann die attribute.... das läuft ja auch alles kein prob. Prob besteht darin... ...aktuell bezieht das Tool sich auf die gesamte DWG-Datei beim auswerten. das soll einfacher werden, dass wir uns nur noch auf die einzelnen Layout's bzw. Blätter die Auswertung beziehen können.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 01. Mrz. 2010 15:52 <-- editieren / zitieren -->
Hi, dann wird die notwendige Folge sein: a) ein Scan durch alle Zeichnungselemente des Layout-Blocks b) entscheiden, ob es eine Blockreferenz ist, wenn ja, Name des Blocks der Blockreferenz in eine Liste hinzufügen, wenn es den Namen in der Liste noch nicht gibt c) (am Ende) die Anzahl der Listenelemente ausgeben Lass mich mal wissen, ob Dir das weiterhilft oder wo es hängt. - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 01. Mrz. 2010 16:00 <-- editieren / zitieren --> Unities abgeben:         
leider komm ich mit dieser Aussage nicht weiter. Das ist zum aktuellen Zeitpunkt voll funktionsfähig. Das Tool läuft und läuft und läuft! dieser scan bezieht sich immer auf die gesamte dwg-datei nicht auf ein aktuelles layout in dieser Version... das soll sich ändern.... denke liegt an diesem part Private Sub CommandButton1_Click() Dim blockname As String Dim a, blocktotal As Integer UserForm2.Hide ListBox1.Clear blocktotal = ThisDrawing.Blocks.count For a = 0 To blocktotal - 1 blockname = ThisDrawing.Blocks.Item(a).name If Not Mid$(blockname, 1, 1) = "*" Then ListBox1.AddItem blockname Next a aber ich weiß nicht wie ich den umsetzten muss dass dieser nur wie gesagt auf das aktuelle layout sich bezieht!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 01. Mrz. 2010 16:21 <-- editieren / zitieren -->
Hi, hier wird durch Layouts durchgescannt, die vorhandenen Blockdefinitionen werden Dir je Layout per MsgBox angezeigt. Code: Public Sub TestLayoutBlockDefCount() Dim tLayout As AcadLayout Dim tBlRef As AcadBlockReference Dim tEnt As AcadEntity For Each tLayout In ThisDrawing.Layouts Dim tBlNames As Collection: Set tBlNames = New Collection For Each tEnt In tLayout.Block If TypeOf tEnt Is AcadBlockReference Then Set tBlRef = tEnt On Error Resume Next Call tBlNames.Add(tBlRef.Name, tBlRef.Name) 'wenn der Name schon existiert, dann zwar Fehler, aber kommt nicht doppelt in die Liste On Error GoTo 0 End If Next If tBlNames.Count > 0 Then Dim tBlNameStr As String Dim tStr As Variant For Each tStr In tBlNames tBlNameStr = tBlNameStr & vbNewLine & tStr Next Call MsgBox("In Layout '" & tLayout.Name & "' sind folgende Blockdefinitionen vorhanden:" & vbNewLine & tBlNameStr) End If Set tBlNames = Nothing Next End Sub
- alfred - PS: ich glaube noch immer nicht, dass Du wirklich Blockdefinitionen meinst, denn über Blockdefinitionen kommst Du nicht auf die Attributsinhalte der jeweiligen Blockreferenzen. Aber auch dieses lässt sich aus obigem Codebeispiel ableiten. ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 01. Mrz. 2010 editiert.] |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 02. Mrz. 2010 10:18 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 02. Mrz. 2010 11:36 <-- editieren / zitieren -->
Hi Torsten, >> aber ich komm beim besten Willen nicht drauf wo mein Fehler ist Funkt mein Code nicht oder hab ich durch meine Aussage in PS 'nur' verunsichert? Was siehst Du denn jetzt als Deinen Fehler? - alfred - ------------------ www.hollaus.at |
Ex-Mitglied
|
erstellt am: 02. Mrz. 2010 11:37 <-- editieren / zitieren -->
Hi Torsten, >> aber ich komm beim besten Willen nicht drauf wo mein Fehler ist Funkt mein Code nicht oder hab ich durch meine Aussage in PS 'nur' verunsichert? Was siehst Du denn jetzt als Deinen Fehler? - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 02. Mrz. 2010 11:55 <-- editieren / zitieren --> Unities abgeben:         
Hi Alfred, doch der Code funkt einwandfrei.... das ist nicht das problem... was ich damit meinte war lediglich „ich weiß beim besten Willen nicht“ wie ich den bei mir einzubauen habe, dass es bei mir dann funkt! ;-) Gruß Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Mrz. 2010 12:10 <-- editieren / zitieren -->
Hi, mein Beispiel geht durch alle Layouts mit einer For...Next Schleife, willst Du nur auf das aktuelle Layout hingreifen, dann nimm das 'For Each tLayout In ThisDrawing.Layouts' raus (samt dem zugehörigen 'Next' und setze statt dessen diese Zeile ein:
Code: Set tLayout = ThisDrawing.ActiveLayout
Ist/war das das Problem? - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 02. Mrz. 2010 15:58 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 02. Mrz. 2010 17:04 <-- editieren / zitieren -->
Hi, >> Irgendwie klappt das alles nicht! Daraus kann ich wiederum nichts ableiten, was klappt nicht, wie äußert sich das? Lad mal eine kleine Zeichnung hoch und mach einen Screenshot von Deinem Form, damit ich sehe, was Du alles als Endergebnis eigentlich wünscht. Oder beschreib vielleicht, was Du aus dem Layout alles (was bisher läuft und läuft und läuft ) an Daten herausholst. - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 03. Mrz. 2010 09:19 <-- editieren / zitieren --> Unities abgeben:         
Morgen Alfred, der aktuelle Stand ist, dass er immer noch in der Infobox alle Blöcke sich holt. habe mal verschiedene sachen hochgeladen. 1. Bild wie es bei mir im ACAD mit den Blöcken und Blättern ist. 2. Welche Werte ausgegeben werden. 3. der Code aktuell sieht so aus: Private Sub CommandButton1_Click() Dim tLayout As AcadLayout Dim tBlRef As AcadBlockReference Dim tEnt As AcadEntity Set tLayout = ThisDrawing.ActiveLayout UserForm2.Hide ListBox1.Clear Dim tBlNames As Collection: Set tBlNames = New Collection For Each tEnt In tLayout.Block If TypeOf tEnt Is AcadBlockReference Then Set tBlRef = tEnt On Error Resume Next Call tBlNames.Add(tBlRef.name, tBlRef.name) On Error GoTo 0 End If Next If tBlNames.count > 0 Then Dim tBlNameStr As String Dim tStr As Variant For Each tStr In tBlNames tBlNameStr = tBlNameStr & vbNewLine & tStr Next ListBox1.AddItem tBlRef.name End If UserForm2.Show End Sub Gruß Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 03. Mrz. 2010 09:30 <-- editieren / zitieren --> Unities abgeben:         
|
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau

 Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 03. Mrz. 2010 09:36 <-- editieren / zitieren --> Unities abgeben:          Nur für f-m
|
Ex-Mitglied
|
erstellt am: 03. Mrz. 2010 09:46 <-- editieren / zitieren -->
Hi Torsten, Du meinst, in Deinem Screenshot stört Dich die Zahl 140? In Deinem Code sehe ich aber nirgends, wo Du die Zahl in Deinen Dialog schreibst. Willst Du die Zahl der Blockdefinitionen, dann nimm doch den ermittelten Count der Collection: tBlNames.count Abgesehen davon: Es sieht so aus, als würdest Du (aus Deinem Screenshot) auf Blockname 'Stücklisten-*' filtern wollen, das ist in Deinem Code auch nicht enthalten, da solltest Du das umbauen:
Code: If ucase(tBlRef.Name) like "Stücklisten-*" then Call tBlNames.Add(tBlRef.name, tBlRef.name) End If
Und ich fürchte nach wie vor, dass Du die BlockReferenz-Anzahl und nicht die BlockDefinitions-Anzahl haben willst, aber das lass ich jetzt mal. - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 03. Mrz. 2010 10:31 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 03. Mrz. 2010 13:34 <-- editieren / zitieren -->
Hi, so einfach wie möglich gehalten, nur in einem Array die Werte (Anzahl und Blockname) gesammelt und nachher in einer Messagebox ausgegeben. Um den Workflow leichter erkennen zu können, ist auf exzessive Fehlerbehandlung verzichtet worden. Workflow: Die Sub getBlRefCountForLayout rufst Du auf, diese übergibt an Function getBlRefCount das aktive Layout sowie den Filternamen für die Blockauswahl (steht in meinem Beispiel auf "*", aber kommentiert, dass Du weisst, wo Du Deines eintragen musst. In einem zweispaltigen Array werden jetzt Blockname und Anzahl zusammengezählt. Nochmals, es sind nicht die Methoden, die ich wählen würde. Ich glaube aber, auf diese Weise (ohne Collection mit Key, ohne Klassendefinition) wird's Dir zum Lesen leichter fallen. Ich hoffe es zumindest! HTH, - alfred - Code: Public Sub getBlRefCountForLayout() Dim tLayout As AcadLayout Set tLayout = ThisDrawing.ActiveLayout Dim tBlockNameFilterStr As String tBlockNameFilterStr = "*" 'auszutauschen gegen Deinen Blocknamenfilter "Stücklisten-*" Dim tBlList As Variant tBlList = getBlRefCount(tLayout, tBlockNameFilterStr) If Not IsArray(tBlList) Then 'kein Returnwert aus function ElseIf UBound(tBlList) < 0 Then 'keine entsprechenden BlockReferenzen gefunden Else Dim tVal As Variant Dim tStr As String For Each tVal In tBlList tStr = tStr & tVal(0) & "....." & tVal(1) & vbNewLine 'Blockname und BlockRef-Anzahl sammeln Next MsgBox tStr End If End Sub Private Function getBlRefCount(ByRef LayoutObj As AcadLayout, ByVal BlockNameFilterStr As String) As Variant Dim tRetVal() As Variant 'da werden die Werte retourniert, erste Spalte BlockName, zweite Spalte Anzahl Dim tBlRef As AcadBlockReference Dim tEnt As AcadEntity Dim tBlockNameFilterStr As String tBlockNameFilterStr = UCase(BlockNameFilterStr) If Len(tBlockNameFilterStr) = 0 Then tBlockNameFilterStr = "*" 'wenn kein Filter angegeben ist, dann '*' einsetzen, damit alle Blocknamen anerkannt werden Dim tSSet As AcadSelectionSet On Error Resume Next Set tSSet = ThisDrawing.SelectionSets.Add("myBlCountSSet") If tSSet Is Nothing Then Set tSSet = ThisDrawing.SelectionSets.Item("myBlCountSSet") tSSet.Clear Dim tDXFCodes(2) As Integer Dim tDXFValues(2) As Variant tDXFCodes(0) = 0: tDXFValues(0) = "INSERT" 'Selectionset-Filter ... Objekttyp = BlockReference tDXFCodes(1) = 2: tDXFValues(1) = tBlockNameFilterStr 'Selectionset-Filter ... Blockname lt. Filter tDXFCodes(2) = 410: tDXFValues(2) = LayoutObj.Name 'Selectionset-Filter ... Layoutname lt. Parameter Call tSSet.Select(acSelectionSetAll, , , tDXFCodes, tDXFValues) If tSSet.Count = 0 Then Call MsgBox("Keine Blockreferenzen im aktuellen Layout gefunden") Else 'dann BlockRefs zählen For Each tBlRef In tSSet Call addBlockCount(tRetVal, tBlRef.Name) Next End If On Error GoTo 0 getBlRefCount = tRetVal End Function
Private Sub addBlockCount(ByRef RetArray As Variant, ByVal BlockName As String) 'ergaenzt in der Liste <RetArray> den Eintrag um den Blocknamen ' existiert der Blockname schon, dann wird der Counter um 1 hochgezaehlt Dim i As Integer Dim tFound As Boolean On Error Resume Next i = 0 i = LBound(RetArray) If (Err.Number = 0) And (i >= 0) Then 'pruefen, ob im Array schon zumindest eine Zeile besteht For i = LBound(RetArray) To UBound(RetArray) If RetArray(i)(0) = BlockName Then 'Eintrag fuer diesen Namen existiert schon, also Zaehler erhoehen RetArray(i)(1) = RetArray(i)(1) + 1 tFound = True Exit For End If Next End If If Not tFound Then 'es gibt in der Liste noch keinen Eintrag fuer diesen Blocknamen ' neuen Zeile ergaenzen ReDim Preserve RetArray(i) Dim tVal(1) As Variant tVal(0) = BlockName tVal(1) = 1 RetArray(i) = tVal End If On Error GoTo 0 End Sub
------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 03. Mrz. 2010 editiert.] |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 08. Mrz. 2010 11:51 <-- editieren / zitieren --> Unities abgeben:         
|
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 09. Mrz. 2010 08:37 <-- editieren / zitieren --> Unities abgeben:         
Morgen,möchte an dieser Stelle doch noch einmal das Thema aufgreifen. Folgendendes will ich erreichen, möchte aus: Block: Z_Blatt_Schriftfeld --> aus dem Attribut BENENNUNG den Wert auslesen. und in in einem Label in der UserForm anzeigen lassen. UserForm und Label krieg ich hin. Den Wert zu bekommen ist mein Problem. Gruß
Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Mrz. 2010 09:04 <-- editieren / zitieren -->
Hi, Wenn Du nur eine Blockreferenz hast (und nur dann) kannst Du den Attributswert anzeigen, sonst könnte ja sein, dass bei mehreren Blockreferenzen unterschiedliche Benennungen ausgefüllt sind. Dazu:
Code: Dim i as Integer Dim tAtts as Variant tAtts = tBlRef.GetAttributes For i = LBound(tAtts) to UBound(tAtts) if tAtts(i).TagString = "BENENNUNG" then 'hier hast Du's
- alfred ------------------- www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 09. Mrz. 2010 09:18 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 09. Mrz. 2010 10:50 <-- editieren / zitieren -->
Hi, >> soll das so aussehen Nein, ich hab nur ein Codeschnippsel gebaut, um zur richtigen Attributreferenz zu kommen. Den Block suchen und mein Codeschnippsel richtig anwenden ist aber schon Deines. - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 09. Mrz. 2010 10:56 <-- editieren / zitieren --> Unities abgeben:         
|
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau

 Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 09. Mrz. 2010 11:00 <-- editieren / zitieren --> Unities abgeben:          Nur für f-m
|
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 09. Mrz. 2010 11:17 <-- editieren / zitieren --> Unities abgeben:         
Mal sehen ob der Lern-Effekt eintritt, da ich seit gestern schon probiere wie ich diesen ****  ***** Wert zu bekommen. Mein Tool ist komplett fertig, hagt nur noch an diesem "nice to have" Label. Super! Danke für diese Link-Sammlung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 09. Mrz. 2010 13:11 <-- editieren / zitieren --> Unities abgeben:         
Hallo,hat vll. einer von euch nicht doch noch ein Tip oder sowas schon mal gemacht?! Den Code vll. griffbar? Häng hier schon wieder 2 std. dran und komm einfach nicht weiter. Biiiiittteeee! WÄRE SEHR DANKBAR!!!!!! Gruß
Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 09. Mrz. 2010 13:19 <-- editieren / zitieren --> Unities abgeben:          Nur für f-m
|
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 09. Mrz. 2010 13:28 <-- editieren / zitieren --> Unities abgeben:         
MEIN STUNDENSATZ!!! Sorry aber mein Stundensatz hier in der Firma spielt hier nicht die Rolle. Unbezahlbar Verstehe aber was du meinst. Den kompletten Code für mein Tool habe ich seit letzter Woche bereits fertig. Benötige lediglich (wenn man das so sagen darf) einen kleinen schnipsel... wo ich halt net weiter komme. Das komplette Tool umfasst wesentlich mehr wie diesen kleinen Schnipsel. An diesem komm einfach nicht weiter. Und extra unseren Einkauf im Hauptwerk zu nerven wg. einer Bestellungen vergehen Wochen. Deshalb bin ich für jeden Tip bzw. Vorlage oder fertigen Schnipsel dankbar. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Mrz. 2010 21:41 <-- editieren / zitieren -->
Hi, Ich habe mir Deinen Screenshot angesehen >>>http://ww3.cad.de/foren/ubb/uploads/f-m/Anforderung.jpg<<< und dann nochmals Deine Auskünfte/Fragen: >> Folgendendes will ich erreichen, >> möchte aus: >> Block: Z_Blatt_Schriftfeld --> aus dem Attribut BENENNUNG den Wert auslesen. >> und in in einem Label in der UserForm anzeigen lassen. Da brauch ich jetzt nicht mal ans Programmieren denken, sondern mal überlegen: - Du hast eine Form in Deinem VB, hier willst eine Benennung anzeigen. - In Deinem Screenshot sehe ich schon 3 Werte für Benennung (O²-Schlauch / Schnellkupplung / Magnetventil ...) Aus welchem Grund (oder WIE) soll das Programm jetzt wissen, ob es 'O²-Schlauch' oder 'Schnellkupplung' oder 'Magnetventil' in Dein Label hineinschreiben soll
Du wünscht Dir, dass wer Deinen Code schreibt (kostenlos) und gibst trotz aller Hinweise (in Richtung Differenzierung Blockdefinition und Blockreferenz, weiters was soll sein bei mehreren Referenzen in einem Layout) keinen Hinweis darauf, keine Infomation dazu, woraus ein Programm erkennen soll, welche Blockreference jetzt auszuwerten ist (nicht mal irgendwelche Hintergrundinfo's, aus denen wir es ev. ableiten könnten). Codeschnippsel hab ich hier alle hinterlassen, aus denen VBA-Interessierte so zusammenstoppeln können (sollten), damit dann Ihre Aufgabe gelöst wird (die ja nach wie vor nur Du kennst). Die Codeschnippsel sollen helfen, die Problempunkte zu überwinden, die Codeschnippsel soweit zu vervollständigen, dass daraus Deine Applikation wird, ist mangels mehrfach hinterfragten, aber nicht beantworteten Informationen nicht möglich. Weiters gebe ich ganz deutlich zu erkennen: Wenn Du Codeschnippsel aus dem Internet per Copy&Paste reinholst, und dann, ohne zu verstehen, was diese eigentlich tun, in Deine Applikation einbaust, dann brennt es imho! Wie lange glaubst Du, wird das Programm so laufen, dass Du Vertrauen in die damit generierten Daten haben wirst und wie weit bist Du im Fehlerfall gerüstet, um einen Fehler in diesem Code a) zu erkennen und b) zu beheben. Schlimmer noch, wenn Du jahrelang damit Daten generierst und diese stellen sich dann als falsch heraus. Trotzdem viel Erfolg, - alfred -
------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 09. Mrz. 2010 22:00 <-- editieren / zitieren --> Unities abgeben:         
Hallo Alfred, wie kommst du drauf der Wert immer variiert?? Habe in der gesamten DWG nur ein Block: Z_Blatt_Schriftfeld mit einem Attribut Benennung und darin ist immer der selbe wert! Wie gesagt in der Gesamten dwg, nur ein Wert der kommen kann.... Das was du meinst bezieht sich auf was ganz anderes... altes erledigtes Problem. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Mrz. 2010 22:02 <-- editieren / zitieren -->
Hi, Kannst Du die Zeichnung samt aller Layouts und Schriftköpfe (Geometrie aus dem Modellbereich kannst Du ja löschen) mal hier uploaden. - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 09. Mrz. 2010 22:07 <-- editieren / zitieren --> Unities abgeben:         
|
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 10. Mrz. 2010 09:13 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 10. Mrz. 2010 09:37 <-- editieren / zitieren -->
Hi, ich nehme nicht an, dass es Dir Freude macht, wenn ich Dir den Code für diese Zeichnung schreibe, denn der wird in anderen Zeichnungen nicht funktionieren, aber hier hast Du mal (zusammengestoppelt von oben): Code: Dim tSSet as AcadSelectionSet On Error Resume Next Set tSSet = ThisDrawing.SelectionSets.Item("mySSET") if tSSet is nothing then Set tSSet = ThisDrawing.SelectionSets.Add("mySSET") tSSet.ClearDim tDxfCodes(2) as integer Dim tDxfValues(2) as Variant tDxfCodes(0) = 0:tDxfValues(0) = "INSERT" tDxfCodes(1) = 2:tDxfValues(1) = "Z_Blatt_Schriftfeld" tDxfCodes(2) = 410:tDxfValues(2) = "Layout1" tSSet.Select acSelectionSetAll,,,tdxfcodes,tdxfvalues if tSSet.Count = 0 then MsgBox("Kein Schriftfeld gefunden") elseif tSSet.Count > 1 then msgbox("Mehr als ein Schriftfeld gefunden") else dim tBlRef as AcadBlockreference set tBlRef = tsset(0) if not tBlRef.HasAttributes then msgbox("Block hat keine Attribute") else dim tAtts as variant tAtts = tBlRef.GetAttributes dim i as Integer dim tFound as Boolean for i = lbound(tatts) to ubound(tatts) if ucase(tAtts(i).TagString) = "BENENNUNG" then 'hier kommt dein Label MyLabel.Caption = tAtts(i).TextString tFound = true exit for endif next if not tFound then msgbox("Kein Attribut 'Benennung' gefunden" endif endif endif
Der Code ist nicht probiert, nur (halb-)blind runtergeschrieben. Nochmals: Du solltest den Code verstehen, sonst solltest Du diesen nicht verwenden! (ich könnte hier auch ein Virus programmiert haben. ) - alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 10. Mrz. 2010 editiert.] [Diese Nachricht wurde von a.n. am 10. Mrz. 2010 editiert.] |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 10. Mrz. 2010 15:14 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 10. Mrz. 2010 16:00 <-- editieren / zitieren -->
Hi, >> Aber läuft ebenfalls zumindest hier bei mir nicht! Ich sehe leider nicht, was jetzt bei Dir nicht funkt. Keine Fehlermeldung? Im Debugmode die Werte überprüft? Hast Du die Zeichnung verwendet, die Du hier zur Verfügung gestellt hast? ....Infos, Infos, Infos, .... - alfred - ------------------ www.hollaus.at |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 10. Mrz. 2010 16:04 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 10. Mrz. 2010 19:17 <-- editieren / zitieren -->
Das kommt davon, wenn man keinen Rechner zum Probieren hat und 'blind' Code schreibt. Korrigiere die Zeilen: Code: Dim tDxfCodes(2) as integer Dim tDxfValues(2) as Variant tDxfCodes(0) = 0:tDxfValues(0) = "INSERT" tDxfCodes(1) = 2:tDxfValues(1) = "Z_Blatt_Schriftfeld" tDxfCodes(2) = 410:tDxfValues(2) = "Layout1"
- alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 10. Mrz. 2010 editiert.] [Diese Nachricht wurde von a.n. am 10. Mrz. 2010 editiert.] |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 11. Mrz. 2010 08:27 <-- editieren / zitieren --> Unities abgeben:         
|
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau

 Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 11. Mrz. 2010 08:35 <-- editieren / zitieren --> Unities abgeben:          Nur für f-m
Moin, Nur mal zur Klarstellung: der code läuft und tut das, was Du wolltest. Ich hab Deine Anforderungen an das Programm dabei offensichtlich genau so verstanden wie Alfred, dem ich hiermit die güldene Ausdauermedaille am Bande überreichen möchte  Es waren gestern Abend noch klitzekleine Schreibfehler drin, die bekam man aber, wenn man ihn durcharbeitet mit F8 raus: Warum springt diese msgbox an? Weil tSSet.Count = 0 Warum ist das 0? Weil wohl das tSSet.Select acSelectionSetAll, , , tDxfCodes, tDxfValues keinen Eintrag macht. Warum... Es ist übrigens immer noch ein Schreibfehler drin, deshab läuft er nicht mit Deiner hier hochgeladenen Zeichnung  ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
f-m Mitglied

 Beiträge: 70 Registriert: 03.12.2008 MS Windows XP Prof. x64, Xeon 2,66GHz, 4 GB RAM, NVIDIA Quadro FX 3500<P>SWX 2009 SP5.0
|
erstellt am: 11. Mrz. 2010 11:35 <-- editieren / zitieren --> Unities abgeben:         
|