| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: BURST auf dynamischen Block anwenden (3764 mal gelesen)
|
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 24. Nov. 2008 08:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich hab mir mal einen dynamischen Block gebastelt, welcher über Sichtbarkeitsparameter gesteuert, seie Einfügekoordianten als Attribute darstellt. Da diese aus Feldern gelesen werden, haben sie einen Texthintergrund, wenn fielddisplay auf 1 steht. Mein Auftraggeber will das nicht. Also sollen die Blöcke gesprengt werden. Um die Attributwerte nicht zu verlieren verwende ich den Befehl BURST aus den Expresstools. Aber jetzt kommt mein Problem: Burst schreibt auch die unsichtaren Parameter als Text an. Dies kann ich nicht gebrauchen, weil in meiner Zeichnung nur ca. 10% dieser Blöcke den Text zeigen sollen. Der Rest wird ohne sichtbarem Attribut dargestellt. Also wäre es nun sinnvoll die Blöcke mit sichtbaren Attributen auszuwählen, und nur auf diese den Befehl Burst anwenden. Aber; wie kann ich diese auswählen? Schnellauswahl? Gibt es eine Möglichkeit über die Sichtbarkeitsparameter der dynamischen Blöcke zu filtern? lg Didi PS: fielddisplay wird in der Registry gespeichert, und ist deshalb für meinen Auftraggeber inakzeptabel. Gibt es eine andere (in der Zeichnung gespeicherte) Möglichkeit den Feldhintergrund zu unterdrücken?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 24. Nov. 2008 09:09 <-- editieren / zitieren --> Unities abgeben: Nur für Goofy007
Also die Umschreibung gefällt mir ja irgendwie nicht <lol> - Letztendlich sieht es doch so aus das der AG keine Felder will.. Suche mal nach ATTTOTEXT (.Lsp) - das umdefinieren der Blöcke mußt du aber händisch vornehmen. Also mit Burst oder besser Atttotext deine Attributwerte als Textwerte darstellen und dann die Felder aus den Blöcken und Blockreferenzen verbannen. ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004
|
erstellt am: 24. Nov. 2008 10:22 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm Es tut mir leid das dir meine Umschreibung nicht gefällt <lol>. Vermutlich bin ich jetzt der erste, der zuviel beschrieben hat <lol>. Und ich finde es sehr nett, daß du mir trotzdem hilfst. Danke! Deine Schlußfolgerung ist genaugenommen nicht richtig. Meinem Auftraggeber sind Felder egal. Er lehnt jeder Form von Text ab, welche einen eigenen Hintergrund verwendet, weil diese bei Rechnern mit anderer Hintergrundfarbe zu Darstellungsproblemen führen können. Also zB. auch MTexte mit Texthintergrund. Ich möchte die Blöcke eigentlich nicht umdefinieren, alle anderen AGs sind ja damit zufrieden! Ich möchte für den Einen einfach nur die Blöcke rausfiltern, bei denen der Sichtbarkeitsparameter für die Attribute eingeschaltet ist, und diese mittels Burst sprengen. Das würde reichen. Also bin ich wieder bei meiner Frage: Wie kann ich aus einer Zeichnung alle Referenzen eines Blockes ausfiltern, bei denen die Darstellung der Attribute über den Sichtbarkeitsparameter eingeschaltet ist? PS: AttrtoText funktioniert nicht so wie ich möchte. Befehl: Ungültiger Feldtyp in 280 in (entmake). Ungültiger Feldtyp in 280 in (entmake).._EXPLODE ... aber das ist mir nicht wichtig, weil ich lieber burst verwenden würde, ich muß nur noch filtern ... lg Didi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 24. Nov. 2008 10:44 <-- editieren / zitieren -->
Hi, hast Du schon versucht, die Zeichnung mal im AutoCAD2004 oder -2000-Format zu speichern? Da gab es noch keine Fields, möglich, dass Du Dich so davon lösen kannst (ich hab's nicht pobiert, nur als Idee) - alfred - |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004
|
erstellt am: 24. Nov. 2008 18:23 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 24. Nov. 2008 19:03 <-- editieren / zitieren -->
Hi, DXF12 auch? Da kann eigentlich nichts überbleiben! - alfred - |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004
|
erstellt am: 25. Nov. 2008 08:49 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, DXF12 funktioniert. Hat aber auch das "Problem" das wie bei Burst auch die unsichtbaren Parameter angeschrieben werden. Hast du eine Idee wie ich die Blöche mit den sichtbaren Parametern aus der Zeichnung rausfiltern kann? lg Didi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 25. Nov. 2008 09:09 <-- editieren / zitieren -->
Hi, ich hoffe, die Frage nicht falsch zu verstehen, da ein Beispiel, wie Du aus konvertierten Blockdefinitionen die aus Sichtbarkeits-Parametern entstandene (unnötige) Elemente rausbekommst. mit AutoCAD selbst nicht möglich, aber da Du schon mit VBA unterwegs bist: (frei geschrieben, ungetestet, Tippfehler möglich, ...)
Code: Dim i as Integer dim tEnt as AcadEntity dim tBlDef as AcadBlock set tBlDef = ThisDrawing.Blocks("STATIC001") 'dein Blockname einsetzen, der aus ConvertToStatic entstanden ist for i = tBlDef.Count-1 to 0 Step -1 set tEnt = tBlDef(i) if not tent.Visible then tEnt.Erase next
hoffe es stimmt so,- alfred - [Diese Nachricht wurde von a.n. am 25. Nov. 2008 editiert.] [Diese Nachricht wurde von a.n. am 25. Nov. 2008 editiert.] |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004
|
erstellt am: 25. Nov. 2008 10:10 <-- editieren / zitieren --> Unities abgeben:
|
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 27. Jan. 2010 10:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, entschuldige bitte, erst war es stressig, und dann hab ich vergessen, dass ich dir noch antworten wollte. Dein Code würde die Blockdefinition verändern. Das ist eigentlich nicht das was ich wollte. Ich möchte auf unterschiedliche Referenzen eines Blockes reagieren. Ich hab mir das inzwischen selber ausprogrammiert. Für alle, die das Problem auch mal haben werden, stelle ich den Code hier zur Verfügung. Anregungen sind gerne gesehen. Garantien kann ich natürlich keine geben. Wer´s haben will, einfach kopieren und ausprobieren. lg Didi
Code: 'Dieses Programm schreibt die sichtbaren Attriute der gewählten Blöcke als Texte in die Zeichnung 'Der Block wird nicht verändertSub visible_Attribut_to_Text() Dim myObj As AcadEntity Dim myBlock As AcadBlockReference Dim myAtt As Variant Dim myText As AcadText Dim Zaehler As Integer Dim i As Integer Dim SSet1 As AcadSelectionSet Dim intFilterType(0) As Integer Dim strFilterData(0) As Variant Zaehler = 0 ThisDrawing.Utility.Prompt (vbCrLf & "Programmstart" & vbCrLf & "Sichtbare Attribute als Text in die Zeichnung eintragen" & vbCrLf) 'vorhandenes Selectionsets löschen LoescheSelectionSet ("set1") Set SSet1 = ThisDrawing.SelectionSets.Add("set1") 'Filterart DXF-Gruppencode 0 (Elementtyp) intFilterType(0) = 0 'Gruppencode INSERT = Blockreferenz strFilterData(0) = "INSERT" 'Am Bildschirm wählen ... ThisDrawing.Utility.Prompt (vbCrLf & "Bitte die zu bearbeitenden Objekte auswählen." & vbCrLf & "Das Programm wird nur die Blöcke rausfiltern" & vbCrLf) SSet1.SelectOnScreen intFilterType, strFilterData If NotEmptySelectionSet("set1") Then For Each myObj In SSet1 If myObj.ObjectName = "AcDbBlockReference" Then 'Block an myBolock übergeben Set myBlock = myObj 'Attribute an myAtt übergeben myAtt = myBlock.GetAttributes For i = 0 To UBound(myAtt) If myAtt(i).Visible = True Then Zaehler = Zaehler + 1 'Text in Zeichnung eintragen und Eigenschaften von Attribut übernehmen Set myText = ThisDrawing.ModelSpace.AddText("Text", myAtt(i).InsertionPoint, 1) myText.TextString = myAtt(i).TextString myText.Rotation = myAtt(i).Rotation myText.Layer = myBlock.Layer myText.StyleName = myAtt(i).StyleName myText.Height = myAtt(i).Height End If Next End If Next ThisDrawing.Utility.Prompt (Zaehler & " Texte in die Zeichnung eingetragen" & vbCrLf & "Programmende" & vbCrLf) End If End Sub Private Sub LoescheSelectionSet(SSname As String) Dim sset As AcadSelectionSet If ExistSelectionSet(SSname) Then ThisDrawing.SelectionSets.Item(SSname).Delete Set sset = Nothing End Sub Private Function NotEmptySelectionSet(SSname As String) NotEmptySelectionSet = False If ExistSelectionSet(SSname) Then If ThisDrawing.SelectionSets.Item(SSname).Count > 0 Then NotEmptySelectionSet = True End If End If End Function Private Function ExistSelectionSet(SSname As String) ExistSelectionSet = False Dim sset As AcadSelectionSet For Each sset In ThisDrawing.SelectionSets If sset.Name = SSname Then ExistSelectionSet = True Next sset Set sset = Nothing End Function
[Diese Nachricht wurde von Goofy007 am 27. Jan. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004
|
erstellt am: 27. Jan. 2010 10:49 <-- editieren / zitieren --> Unities abgeben:
... kleine Korrektur die Abfrage muss so lauten: If myAtt(i).Invisible = False And myAtt(i).Visible = True Then Visible wird für die Steuerung dyn. Blöcke verwendet. Invisible ist die Sichtbarkeite für "normale" Attribute. lg didi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |