Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  zwei Befehle zusammen in einen Befehl

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:  zwei Befehle zusammen in einen Befehl (818 mal gelesen)
xem
Mitglied
Zeichner


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

Beiträge: 847
Registriert: 07.08.2008

erstellt am: 25. Mrz. 2013 16:55    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 habe einen Code mit dem ich dynamische Blöcke in statische Blöcke umwandeln kann.

Code:
Sub DynBlock2StatBlock()
    Dim objEntity As AcadEntity
    Dim objBlockRef As AcadBlockReference
    Dim lngIndex As Integer
 
    lngIndex = 1
 
    For Each objEntity In ThisDrawing.ModelSpace
        If objEntity.ObjectName = "AcDbBlockReference" Then
            Set objBlockRef = objEntity
            If objBlockRef.IsDynamicBlock Then
                objBlockRef.ConvertToStaticBlock (objBlockRef.EffectiveName & Format(lngIndex, "0000"))
                lngIndex = lngIndex + 1
            End If
        End If
    Next objEntity
 
End Sub

Leider bleiben dort alle Objekte drin die auf "nicht sichtbar" eingestellt wurden.

Mit dem 2. Code kann ich diese "unsichtbaren Objekte" wieder sichtbar machen und löschen.

Code:
Sub UnHideAll()
Dim entDrawingObject As AcadEntity
  On Error Resume Next
  For Each entDrawingObject In ThisDrawing.ModelSpace
      entDrawingObject.Visible = True
  Next
  For Each entDrawingObject In ThisDrawing.PaperSpace
      entDrawingObject.Visible = True
  Next
  On Error GoTo 0
ThisDrawing.Regen acAllViewports
End Sub


Kann man die beiden Codes auch zusammen kombinieren, sodass die "unsichtbaren Objekte" im statischen Block gelöscht werden?

Mit

Code:
entDrawingObject.Visible = True
kann man sicher die "unsichtbaren Objekte" fangen und löschen, nur weiß ich nicht wo und wie das in den ersten Code eingefügt wird.

Kann mir da einer weiter helfen?

Danke

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

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 266
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 26. Jun. 2013 21:07    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 xem 10 Unities + Antwort hilfreich

Die entity eigenschaft heist visible
ist die false dann ist das Motto : entity uebern jordahn befoerdern.

das must du aber warscheinlich in den blockdefinitionen erledigen.
dim block as acadblock. F1 auf acadblock

Eine weitere methode ist den block zu explodieren
dann sollten ... eigentlich nur die sichtbaren fragmente uebrig bleiben

dim b as acadblockreference
da auf acadblockreference klicken und F1 druecken...

den beispiel code kann man leicht modifizieren um visible ergaenzen (Jordahn)
dann die blockdefinition loeschen

und neu mit den uebrig gebliebenen elementen neu definieren.
(Mit dem gleichen effektiven namen)

Die Blockreferenzen brauchst du ME nicht neu definieren.
Wenns soweit funktionert ruf sicherheitshalber mal audit auf.

Public Function block_create_from_selection_set(selectionsetobject As AcadSelectionSet, INSERTATIONPOINT As Variant, blockname As String, Optional delsource As Boolean = False) As AcadBlock
    Dim BLOCKS As AcadBlocks
    Dim newBlock As AcadBlock
    Dim ENTITYS() As AcadEntity
    Dim i As Integer
    If selectionsetobject.count = 0 Then Exit Function
    ReDim Preserve ENTITYS(selectionsetobject.count - 1)
    For i = 0 To selectionsetobject.count - 1
        Set ENTITYS(i) = selectionsetobject(i)
    Next
    Set BLOCKS = ThisDrawing.BLOCKS
   
    Set newBlock = BLOCKS.ADD(INSERTATIONPOINT, blockname)
    ThisDrawing.CopyObjects ENTITYS, newBlock
    Set block_create_from_selection_set = newBlock

    If delsource Then
        For Each entity In selectionsetobject
            entity.Delete
        Next
    End If
End Function

------------------
Wer es nicht versucht, hat schon verlorn  
Und bei 3 Typos gibts den vierten gratis !

[Diese Nachricht wurde von rexxitall am 26. Jun. 2013 editiert.]

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