Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Dynamischer Block neu definieren

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:  Dynamischer Block neu definieren (1535 mal gelesen)
CADlsp
Mitglied



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

Beiträge: 10
Registriert: 04.02.2010

erstellt am: 24. Jul. 2014 15: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

Hallo zusammen,

Ich nutze folgenden Programmteil zum einfügen von Blockdefinitionen,
bzw. ersetze ich die Definition wenn diese in meiner aktuellen Zeichnung
bereits voranden ist. Anschließend wird natürlich gleich eine Referenz erstellt.
Das ganze arbeitet gut wenn der Block nicht dynamisch ist.

Hat der Block aber z. B. einen Sichtbarkeitsparameter reicht die Else Bedingung
(Blockdefinition vorhanden) so nicht aus.
Obwohl beide Parameter (intern und extern) gleich spezifiziert sind verlieren die neuen
Objekte den Bezug zu ihrem Sichtbarkeitsstatus.

Frage wie wie kann ich diese Verbindung wieder herstellen?
Oder wie kann ich den internen Blockparameter mit dem externen Parameter
ersetzen, wie die grafischen Objekte.


    (defun blkreplace (blknam / )   
 
      (if (setq finlib (findfile "library.dwg"))
        (progn
          (setq docu (vla-get-activedocument (vlax-get-acad-object)))
          (setq odbx (vla-getinterfaceobject (vlax-get-acad-object) "ObjectDBX.AxDbDocument.19"))   
          (vla-open odbx finlib)
          (setq exblks (vla-get-blocks odbx))
          (setq inblks (vla-get-blocks docu))
          (setq extblk (vla-item exblks blknam))
          (if (not (tblsearch "Block" blknam)) 
            (vla-copyobjects odbx (vlax-safearray-fill (vlax-make-safearray vlax-vbobject '(0 . 0)) (list extblk)) inblks)
            (progn
              (setq blkcou (vla-get-Count extblk))
              (setq intblk (vla-item inblks blknam))
              (vlax-for blkele intblk
                (vla-Delete blkele)
              )
              (setq elearray (vlax-make-safearray vlax-vbobject (cons 0 (1- blkcou))) blklis nil)
              (vlax-for blkele extblk
                (setq blklis (append blklis (list blkele)))       
              )
              (vlax-safearray-fill elearray blklis)
              (vla-copyobjects odbx elearray intblk)
              (vlax-for blkele intblk
                (vla-Update blkele)
              )           
              (vlax-put-property intblk 'Explodable :vlax-false)
            )
 
          )   
          (vlax-release-object odbx)
          (command "Regen")
        )
      )
    ) 

Vielen Dank für etwaige Hilfe!

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 24. Jul. 2014 23:12    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 CADlsp 10 Unities + Antwort hilfreich

Hallo CADlsp,

ich würde mal behaupten, da hast du mit Lisp schlechte Karten. Ich habe selbiges Problem in c#.Net gelöst. Allerdings war es auch dort arg tricky.
Kurz umrissen mein Weg, den ich gegangen bin:
Zunächst habe ich mir die eingestellten Sichtbarkeitsparameter je Blockreferenz gemerkt, dann ausgetauscht, dann die Sichtbarkeitsparameter wieder gesetzt.
Der Haken an der Sache ist, dass die Intelligenz der dyn. Blöcke in irgendwelchen Dictionaries und Reactoren gespeichert sind. Diese werden nicht unbedingt aktualisiert, weshalb ich diese Aktualisierung über den Befehl ATTSYNC realisiert habe. Wenn aber nun ein Block keine Attribute hatte, usw .. ein Rattenschwanz, den es zu erledigen galt.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 25. Jul. 2014 07:54    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 CADlsp 10 Unities + Antwort hilfreich

Hallo CADlsp,
das Thema hab ich auch noch auf meiner Liste.

Wie Holger schon gesagt hat werden die ganzen dynamischen Sachen in Dictionaries gespeichert. Mit denen schlag ich mich grade in anderer Weise herum und die wehren sich wirklich.

Ich würde die aktuelle Blockdefinition separat reinholen und dann in der ganzen Zeichnung die Inserts austauschen.
Klar musst du dann noch einiges "Restaurieren" (Attribute, Parameter,...) aber ich seh im Moment auch keine einfache Lösung.


------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

[Diese Nachricht wurde von Andreas Kraus am 25. Jul. 2014 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