Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  vla-wblock mit gespeicherten Blöcken

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
Autor Thema:   vla-wblock mit gespeicherten Blöcken (287 mal gelesen)
Melmacker
Mitglied



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

Beiträge: 13
Registriert: 19.08.2019

erstellt am: 20. Feb. 2020 10:31    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 und danke an alle die sich meiner Frage widmen.

Ich bin gerade dabei alle (command) Befehle in verschiedenen Lisp Dateien zu ändern.
Dabei bin ich dann auf den Befehl (command "-wblock") gestoßen und habe ihn versucht durch vla-wblock zu ersetzen.
Das ist mein Code:

Code:

(setq punkt '(0.0 0.0 0.0))
(if (not (setq punkt (getpoint "\nEinfügepunkt definieren <0,0,0>:")))(progn
(setq punkt '(0.0 0.0 0.0))
))
(setq skalierung 1.0)
(if (not (setq skalierung (getreal "\nSkalierfaktor eingeben <1>:")))(progn
(setq skalierung 1.0)
))
(princ "\n")
(vla-open (vla-get-documents (vlax-get-acad-object)) "C:/Pfad/Datei.dwg" :VLAX-FALSE)
(setq liste (vla-add (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))) "Test"))
(vla-wblock (vla-get-activedocument (vlax-get-acad-object)) "C:/Pfad/neue_Datei.dwg" (vla-Select liste (vla-item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) anzahl)))
(vla-close (vla-item (vla-get-documents (vlax-get-acad-object))(vla-get-name (vla-get-activedocument (vlax-get-acad-object)))))
(vla-Import (vla-get-activedocument (vlax-get-acad-object)) "C:/Pfad/neue_Datei.dwg" punkt skalierung)
(vl-file-delete "C:/Pfad/neue_Datei.dwg")


(Die Variable "anzahl" habe ich gegeben)
(Die Blöcke sind in der Datei die ich öffne nur abgespeichert und nicht in der Zeichnung eingefügt)
Und nun frage ich nach langer suche im Internet euch.
Was mache ich beim dritten Argument von "vla-wblock" falsch? 

Ich freue mich über jede Hilfe.
Mfg Melmacker

[Diese Nachricht wurde von Melmacker am 20. Feb. 2020 editiert.]

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1666
Registriert: 11.10.2004

Window 8.1
ACAD 2012-2020
CIVIL 2012 - 2020
BricsCAD V14-V20
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050

erstellt am: 20. Feb. 2020 11:16    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 Melmacker 10 Unities + Antwort hilfreich

Hallo Melmacker,
ohne das ich ins Detail eingestiegen bin, ich habe eine Testroutine, mit der ein Wblock aus ausgewählten Objekten erstellt wird, der Einfügepunkt wird auch abgefragt.
Vielleicht kannst Du Dir die Variante mal anschauen und durchdebuggen, um Deinem Problem auf die Schliche zu kommen.

Code:

(defun c:testWblock ( / AWS N PATH VLAAWS)
(setq path "c:\\wblocktest.dwg")
  ;;;Auswahlsatz für Entities und Einfügepunkt
  (if (and (princ "\nObjekte für Wblock:")
          (setq aws (ssget))
          (setq p (getpoint "\nEinfügepunkt:"))
          (setq p (trans p 1 0))
          )
    (progn
      ;;;Einfügepunkt (WKS) in INSBASE-Variable
      (setq InsbaseOld (getvar "INSBASE"))
      (setvar "INSBASE" p)
      ;;;vla-Auswahlsatz erstellen
      (setq vlaAws(vla-add
                    (vla-get-selectionsets
                      (vla-get-activedocument (vlax-get-acad-object)))
                    "testWblock"))
      (setq n 0)
      ;;;Entities aus Auswahlsatz in vla-Auswahlsatz
      (repeat (sslength aws)
        (vlax-invoke vlaAws 'AddItems
          (list (vlax-ename->vla-object (ssname aws n))))
        (setq n (+ n 1))
        )
      ;;;wblock für Objekte aus Vla-Auswahlsatz
      (vlax-invoke
        (vla-get-activedocument (vlax-get-acad-object))
        'Wblock path vlaAws)
     
      (vla-delete vlaAws)
      (vlax-release-object vlaAws)

      (setvar "INSBASE" InsbaseOld)
      )
    )
  (princ)
  )



------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Multifilter Youtube

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

Melmacker
Mitglied



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

Beiträge: 13
Registriert: 19.08.2019

erstellt am: 20. Feb. 2020 15: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

Vielen dank Jörn aber ich bekomme es immer noch nicht hin

Kannst du oder jemand anderster mir vielleicht sagen aus was das dritte Argument von vla-wblock besteht und mir vielleicht den kleinen Codeschnipsel für meinen Code schreiben?
Ich bin nähmlich gerade am verzweifeln...  

Mfg Melmacker

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1666
Registriert: 11.10.2004

Window 8.1
ACAD 2012-2020
CIVIL 2012 - 2020
BricsCAD V14-V20
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050

erstellt am: 20. Feb. 2020 16:45    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 Melmacker 10 Unities + Antwort hilfreich

Hallo Melmacker,
dann muss irgendetwas in Deinem VLA-Auswahlsatz was nicht stimmen.
Aus der AutoCAD-Hilfe:
(vla-Wblock doc "C:\\AutoCAD\\WBlock_example.dwg" ssetObj)

http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-4EEC4025-ACFC-41DA-899A-8264394D7691

Ich glaube, Dein Problem beginnt schon vorher, Du öffnest mit VLA-OPEN eine Datei.
Die Datei ist geöffnet, hat aber nicht den Focus.
Dann wird eine VLA-Auswahlwatz erstellt mit dem Namen "Test", gespeichert in die Variable LISTE.

Und dann sollen scheinbar aus der geöffneten Datei ein paar Blockdefinitionen ausgewählt werden. Das kann aber nicht gehen, weil Du ja noch in der ursprüngliche Zeichnung bist.

Dann die Variable "anzahl", was steht dadrin?
Wenn ich eine Blockdefinition aus einer Zeichnung mit VLA-ITEM haben möchte, dann muss ich auch den Blocknamen angeben, z.B.
(vla-item (vla-get-Blocks (vla-get-activedocument(vlax-get-acad-object)))"MeinBlock")

Vielleicht solltest Du alles nochmal überdenken, wie es genau sein soll, ich bin da erstmal ein wenig verwirrt.

Meine Vermutung:
Du möchtest aus einer fremden Datei ein oder mehrere Blockdefinitionen in einen Wblock schreiben.
Kannst Du die Datei nicht vorher öffnen und dann Dein LISP laufen lassen, das macht es doch einfacher ?!?

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Multifilter Youtube

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

Melmacker
Mitglied



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

Beiträge: 13
Registriert: 19.08.2019

erstellt am: 20. Feb. 2020 17:10    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 Jörn,

die Autocad Hilfe zu dem Thema kenne ich leider schon fast auswendig  
In der Variable "anzahl" ist die Nummer (count) zu dem Block definiert.
Habe das zwar jetzt in den Namen des Blocks geändert aber es funkt immer noch nicht.

So läuft meine Routine:
Ich öffne eine Datei die bei mir auch ab vla-open aktiv ist.
Aus dieser möchte ich eine Blockdefinition in einen WBlock schreiben.
Danach schließe ich die Datei mit vla-close aus der ich die Blockdefinition in einen WBlock geschrieben habe.
Nun bin ich automatisch wieder in meiner Ursprungsdatei und importiere nun den WBlock.
Danach lösche ich die WBlock Datei.
###Ende###

Das ist nur ein Codeschnipsel aus einer sehr großen Routine.
Deswegen kann ich auch nicht die Datei erst öffnen und dann mein Code drüber laufen lassen (und es liegt an diesem codeschnipsel bzw an dem vla-wblock Befehl).

Hier die Errormeldung die ich immer bekomme:
error : Automation Error DISP_E_TYPEMISMATCH; [IAcadDocument] Argument #0 can not be coerced to parameter in [WBLOCK] method.

Mfg Melmacker

[Diese Nachricht wurde von Melmacker am 20. Feb. 2020 editiert.]

[Diese Nachricht wurde von Melmacker am 20. Feb. 2020 editiert.]

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

cadffm
Moderator
良い精神




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

Beiträge: 19678
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 20. Feb. 2020 17: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 Melmacker 10 Unities + Antwort hilfreich

Wenn die Hilfe studiert wurde und klar ist das ein Selectionset gefordert ist,
dann ist in dem Moment auch klar das vla-wblock NICHT der nötigen WBLOCK, Option BLOCK entspricht
welche du haben möchtest.
vla-wblock entspricht der Option OBJEKT.

Und fast OffTopic: ES GIBT KEINE WBLÖCKE, AUSSER BLÖCKE WELCHE DEN NAMEN "W" HABEN.
Sorry, das ist so gruselig und wird so leicht aufgeschnappt, das kann ich nicht so stehen lassen 

Nach deiner Beschreibung erstellst du eine DWG nur um damit in einer anderen Dateie einen Block (neu) zu definieren?

Dann wäre ein guter Zeitpunkt zu prüfen ob es nicht Sinn macht die Objekte direkt zwischen den Dateien hin und her
zu kopieren, gar ohne öffnen per vla-open würde funktionieren, über ObjectDBX
Ich möcht enicht verheimlichen das man sich damit intensiver beschäftigen muß
(oder einfach Code aus dem www kopieren und einfach nutzen, hoffen das alles klappt).

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1666
Registriert: 11.10.2004

Window 8.1
ACAD 2012-2020
CIVIL 2012 - 2020
BricsCAD V14-V20
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050

erstellt am: 20. Feb. 2020 21:19    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 Melmacker 10 Unities + Antwort hilfreich

Hallo Melmacker,
wenn Du den Vorschlag von cadffm mit ObjectDBX weiterverfolgend willst solltest Du auch die Funktion vla-CopyObjects ins Visier nehmen, Beispiele im Netz gibt es viele, aber für dieses Thema ist in der Tat ein wenig Geduld ganz hilfreich.

@Sebastian: egal wie gruselig Du es findest, ich werde weiterhin WBlock sagen

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Multifilter Youtube

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

cadffm
Moderator
良い精神




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

Beiträge: 19678
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 21. Feb. 2020 09:47    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 Melmacker 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von joern bosse:
Hallo Melmacker, wenn Du den Vorschlag von..

das vla-copyObjects darf man sich aber auch gerne ansehen wenn man die Dateien weiterhin per vla-open öffnet.

@Joern: 

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2170
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2017
Plateia, Canalis
Visual Basic

erstellt am: 21. Feb. 2020 13:39    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 Melmacker 10 Unities + Antwort hilfreich

Hallo Melmacker,

So ganz habe ich Deine Vorgehensweise noch nicht verstanden

Zitat:
So läuft meine Routine:
Ich öffne eine Datei die bei mir auch ab vla-open aktiv ist.
Aus dieser möchte ich eine Blockdefinition in einen WBlock schreiben.
Danach schließe ich die Datei mit vla-close aus der ich die Blockdefinition in einen WBlock geschrieben habe.
Nun bin ich automatisch wieder in meiner Ursprungsdatei und importiere nun den WBlock.
Danach lösche ich die WBlock Datei.
###Ende###


Blockdefinitionen befinden sich nicht im Modellspace, dort gibt es nur Blockreferenzen, sondern in der Blocksliste.
Dann schreibst Du auch keinen WBlock sondern eine DWG, die Du dann in eine andere Zeichnung als Block einfügen kannst.

Möchtest Du jetzt ein Blockdefinition dublizieren müßtest Du in der Zeichnung eine BlockReferenz auswählen, diese auflösen und die Elemente in eine neue Zeichnung speichern (mittels vla-wblock).

Alternativ durchsuchst Du die Blocks-Section nach der gewünschten Blockdefinition und holst Dir die einzelnen Elemente in einen SelectionSet, den Du dann in die Zeichnung speicherst.

Der Fehler bei deinem dritten wblock Argument liegt meines Erachtens an der Tatsache, dass vla-Select als zweites Element ein Mode-Argument erwartet und keine Liste.

Grüße
Klaus   

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

cadffm
Moderator
良い精神




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

Beiträge: 19678
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 21. Feb. 2020 13: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 Melmacker 10 Unities + Antwort hilfreich

Bevor noch viele Zeit in diese Richtung drauf geht, lieber mal angemerkt:

Zitat:
Original erstellt von KlaK:
Möchtest Du jetzt ein Blockdefinition dublizieren müßtest Du in der Zeichnung eine BlockReferenz auswählen, diese auflösen  usw.


Besser nicht
Würde man sich darauf beschränken hat man die Probleme mit
1. dynamischen Parameter
2. Abhängigkeiten
3. alle sonstigen Blockeigenschaften (das ist lösbar, muß aber auch berücksichtigt werden)


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)2020 CAD.de | Impressum | Datenschutz