| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Lisp und dynamische Blöcke (5896 mal gelesen)
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2017/2018 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 31. Jan. 2013 14:10 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Es ist schon ne weile her, dass ich mich mit Lisp beschäftigt habe. Aber ich habe noch ältere Tools im gebrauch die ich gerade leicht angepaßt habe, was z.B. aktuelle Schraffuren etc. anbelangt. In diesem Zusammenhang wollte ich die alten starren Schraubenblöcke gegen unsere dynamischen Blöcke austauschen. Hab dazu auch verschiedene Beispiele hier im Forum gefunden. Aber leider komme ich danmit nicht wirklich klar. In den Anhängen seht ihr die Eigenschaften. Ich möchte nach dem einfügendes Blocks folgende Eigenschaften ändern: - Sichbarkeit1 - Länge Ø3 - Winkel Code:
(command "-einfüge" "N:/Konstruktion/AutoCAD/Block_Konstruktion/Verbinder/Spax-Schraube.dwg" P20 "" "" "") (setq DBobj (vlax-ename->vla-object (entlast))) (setProperty (vlax-ename->vla-object DBobj) "Sichtbarkeit" "Ø4mm verdeckt") (setProperty (vlax-ename->vla-object DBobj) "Länge Ø4" 45) (setProperty (vlax-ename->vla-object DBobj) "Winkel2" 90)
Könnte mir da jemand weiterhelfen? Das wäre super.
------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 31. Jan. 2013 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
was ist das für eine Funktion setProperty? Ohne die zu kennen, kann man wohl kaum was sagen. Was hat die SQL-fehlermeldung mit diesem Thema zu tun? Grüße! Holger ------------------ Holger Brischke FREIE SCHULUNGSPLÄTZE -- C#.NET-Schulung im Mai 2013 Bei Interesse bitte melden! 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 |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2017/2018 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 31. Jan. 2013 14:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger! Sorry, dass Bildchen SQL - Fehlermeldung ist natürlich falsch. Da habe ich das falsche Bildchen erwischt. Den Codeschnipsel hätte ich auch weglassen können, da er aus verschiedensten Tests stammt. Alles, was ich bislang ausprobiert habe, habe ich mir aus dem Forum zusammengesucht jedoch ohne Erfolg. Da ich schon lange nichts mehr mit Lisp programmiert habe, fehlt mir da auch die Basis, wie ich mit den dynamischen Blöcken umgehen kann bzw. muß um solch einen Block zu manipulieren. Wie müßte ich denn da vorgehen?
------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 31. Jan. 2013 16:21 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
vielleicht helfen dir die Schagworte weiter: vla-GetDynamicBlockProperties vla-get-PropertyName vla-get-AllowedValues Code: (setq o (vlax-ename->vla-object (car (entsel "\nBlockwahl")))) (foreach a (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties o))) (vla-get-PropertyName a) (vlax-safearray->list (vlax-variant-value (vla-get-AllowedValues a))) )
------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2017/2018 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 31. Jan. 2013 19:29 <-- editieren / zitieren --> Unities abgeben:
Hallo CADwiesel! Wenn ich das richtig verstehe, durhläufst Du mit der foreach - Schleife die BlockProperties nach a. Das ganze läuft über vla-GetDynamicBlockProperties. Wie aber setze ich dann den Wert "Sichtbarkeit1" Ø3 mm auf "Sichtbarkeit1" Ø4 mm um? Code:
(set (vlax-ename->vla-object a) "Sichtbarkeit1" "Ø4 mm")
Sorry, aber ich komm damit noch nicht klar Geht das denn überhaupt mit den Werten ändern?
------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2017/2018 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 01. Feb. 2013 10:52 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Ich hab noch mal was probiert aber leider ohne Erfolg. Code:
(defun c:FT()(defun setProperty (vlaDynBlock sPropertyName rValue / vlaProperty) (foreach vlaProperty (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties vlaDynBlock))) (if (= (vla-get-PropertyName vlaProperty) sPropertyName) (vla-put-value vlaProperty (vlax-make-variant rValue)) ); end if ); end foreach ); end defun (setProperty (vlax-ename->vla-object (car (entsel))) "Strecken1" 50.0) )
Wenn ich nun einen Block auswähle bekomme ich als Rückgabe nil. Für Hilfe wäre ich sehr dankbar. ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 01. Feb. 2013 12:38 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
und? NIL als Rückgabe ist doch schonmal Besser als eine Fehlermeldung wurde denn deine Property gesetzt? Wenn ja, wird dir die Rückgabe 'nil' ja relativ egal sein, wenn nein, müsstest du mal deinen Code debuggen (vlide) und sehen, was da so pessiert.. ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2017/2018 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 01. Feb. 2013 16:26 <-- editieren / zitieren --> Unities abgeben:
Hallo CADwiesel! Ich glaube es liegt an meinem dynamischen Block. Der hat einige Verschachtelungen. Nehme ich eine ganz einfachen Block mit nur einem Längenparameter "Abstand1", so funktioniert es. Code:
(defun c:FT()(defun setProperty (vlaDynBlock sPropertyName rValue / vlaProperty) (foreach vlaProperty (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties vlaDynBlock))) (if (= (vla-get-PropertyName vlaProperty) sPropertyName) (vla-put-value vlaProperty (vlax-make-variant rValue)) ); end if ); end foreach ); end defun ;dynamischer Block TestBlock!!!!! (setProperty (vlax-ename->vla-object (car (entsel))) "Abstand1" 80.0) ;dynamischer Block Spax-Schraube!!!! ;;;(setProperty (vlax-ename->vla-object (car (entsel))) "Sichbarkeit1" "Ø4,5mm verdeckt") )
Ich hab mal die Blöcke angehangen. Es wäre super nett, wenn Du oder jemand im Forum eine Tipp oder Lösung für mein Problem hätte. Vielen Dank im Voraus. ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 02. Feb. 2013 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Zitat: Original erstellt von Dirk.B: ...Ich glaube es liegt an meinem dynamischen Block. ... ;;;(setProperty (vlax-ename->vla-object (car (entsel))) "Sichbarkeit1" "Ø4,5mm verdeckt") ... Ich hab mal die Blöcke angehangen.
Nö Es liegt einfach daran, das du dich beim dynamischen Parameter vertippt hast. Ergänze mal das fehlende "t" in " Sichbarkeit1" und schon läuft dein Programm FT wie gewünscht.
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2017/2018 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 23. Feb. 2013 14:07 <-- editieren / zitieren --> Unities abgeben:
Hallo Udo! Hallo Forum! Ok, dass mit der Änderung der Sichtbarkeit1 funktioniert. Aber leider nur die. Die anderen Prameter ändern sich nicht. Wie z.B. Winkel2 oder Länge Ø3. Was muß ich da machen? Kann man immer nur 1 Wert ändern? Ich möchte folgendes ereichen. - Block einfügen - Letztes Objekt erkennen - Sichtbarkeit1 von "Ø3mm sichtbar" auf "Ø4mm verdeckt" ändern - Länge Ø4 auf 45 ändern - Winkel2 auf 90° ändern Code:
(command "-einfüge" "N:/Konstruktion/AutoCAD/Block_Konstruktion/Verbinder/Spax-Schraube.dwg" P20 "" "" "") (setq DBobj (vlax-ename->vla-object (entlast))) (setProperty (vlax-ename->vla-object DBobj) "Sichtbarkeit" "Ø4mm verdeckt") (setProperty (vlax-ename->vla-object DBobj) "Länge Ø4" 45) (setProperty (vlax-ename->vla-object DBobj) "Winkel2" 90
Das funktioniert aber leider nicht Könnte mir da noch mal jemand bei helfen. Danke. ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 24. Feb. 2013 09:34 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Zitat: Original erstellt von Dirk.B:
Code: ... (setProperty (vlax-ename->vla-object DBobj) "Sichtbarkeit" "Ø4mm verdeckt") (setProperty (vlax-ename->vla-object DBobj) "Länge Ø4" 45) (setProperty (vlax-ename->vla-object DBobj) "Winkel2" 90
Das funktioniert aber leider nicht Könnte mir da noch mal jemand bei helfen. Danke.
- Der Sichtbarkeitsparameter muss richtig geschrieben werden (am Ende fehlt bei dir eine 1) - Reelle Werte drürfen nicht als Integer übergeben werden, also 45.0 statt 45 - Winkel müssen ungeachtet der Einheiteneinstellungen immer in rad angegeben werden (setProperty VlaxDBobj "Sichtbarkeit1" "Ø4mm verdeckt") (setProperty VlaxDBobj "Länge Ø4" 45.0) (setProperty VlaxDBobj "Winkel2" (* 90.0 (/ PI 180.0))) dann läuft es auch durch.
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2017/2018 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 24. Feb. 2013 15:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Udo! Vielen Dank. Dann müßte es doch eigentlich so funktionieren:
Code:
(defun C:Db01()(defun setProperty (vlaDynBlock sPropertyName rValue / vlaProperty) (foreach vlaProperty (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties vlaDynBlock))) (if (= (vla-get-PropertyName vlaProperty) sPropertyName) (vla-put-value vlaProperty (vlax-make-variant rValue)) ); end if ); end foreach ); end defun (command "_Insert" "N:/Konstruktion/AutoCAD/Block_Konstruktion/Verbinder/Spax-Schraube.dwg" (setq pt (getpoint "Einfügepunkt: ")) "" "" "") (SETQ object (entlast)) (setProperty (vlax-ename->vla-object object) "Sichbarkeit1" "Ø4mm verdeckt") (setProperty (vlax-ename->vla-object object) "Länge Ø4" 45.0) (setProperty (vlax-ename->vla-object object) "Winkel2" (* 90.0(/ PI 180.0))) )
Nun bekomme ich aber diese Fehlermeldung: Fehler: no function definition: VLAX-ENAME->VLA-OBJECT Ich möchte Dich nicht nerven, aber woran liegt das nun? Kann es an der AutoCAD Version liegen? Ich arbeite mit 2012 / Win 7 / 64Bit. Nochmals Danke für Deine Geduld. ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 24. Feb. 2013 16:31 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
es fehlt das Laden der "Visual LISP Extensions" mit (vl-load-com) welches man im Programmcode oder aber auch gern am Anfang der Lisp Datei einfügen sollte. Manuelles Laden auf der AutoCAD Befehlszeile reicht auch schon. Damit werden die vlax-Funktionen erst verfügbar. ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de [Diese Nachricht wurde von CAD-Huebner am 24. Feb. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2017/2018 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 25. Feb. 2013 07:10 <-- editieren / zitieren --> Unities abgeben:
|
mazur-ch Mitglied
Beiträge: 74 Registriert: 31.10.2008 ACAD 2020, Win 10 64Bit
|
erstellt am: 17. Feb. 2015 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo zusammen Ich möchte einer Auswahl von Blöcken, die innerhalb einer Polyline liegt andere Attributwerte zuweisen. Die erste Änderung soll die Sichtbarkeit sein (damit die Blöcke sauber ausgewählt werden können, ist zu Beginn des Programms jeder Block nur mit einem Punkt im Zentrum sichtbar) geändert werden. Nach dem ändern der Sichtbarkeit kann ich dann in ein Attribut einen Text schreiben lassen (Nebenfrage: funktioniert dies auch, wenn das Attribut nicht sichtbar ist?). Dafür habe ich versucht zwei Lisps hier im Forum zu kombinieren. Eines ist dieses in diesem Thema. Nun scheint mir das Lisp hier noch etwas mühe zu bereiten. Ich vermute, dass das Problem bei der Übergabe der Übergabewerte an die Funktion "setProperty" liegt. Alles weiter oben habe ich durchgetestet und dort erscheint keine Fehlermeldung. Hier der Code:
Code: (defun C:NE_Anpassen2() (vl-load-com) (setq object (ssget "_WP" (vox-get-lwp-points (car (entsel "\nLWPOLYLINE wählen:"))))) (sssetfirst nil object) ;Auswahlsatz "object" zum aktuell ausgewählten Auswahlsatz machen (setq selObj (ssget '((0 . "INSERT")))) ;im aktuellen Auswahlsatz nur noch jene mit Block ("insert") auswählen (princ (strcat "\n" (itoa (sslength selObj)) " Objekte ausgewählt."))
(sssetfirst nil selObj) ;Auswahlsatz "selObj" zum aktuell ausgewählten Auswahlsatz machen ;bis hier her alles OK, keine Fehlermeldung. (setProperty (vlax-ename->vla-object selObj) "Sichtbarkeit1" "Alles sichtbar") ; ab hier mit Fehlermeldung abgebrochen. Funktion wird nicht ausgeführt ) (defun setProperty (vlaDynBlock sPropertyName rValue / vlaProperty) (foreach vlaProperty (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties vlaDynBlock))) (if (= (vla-get-PropertyName vlaProperty) sPropertyName) (vla-put-value vlaProperty (vlax-make-variant rValue)) ); end if ); end foreach ); end defun (defun vox-get-lwp-points (ele) (mapcar 'cdr (vl-remove-if '(lambda(x) (/= (car x) 10)) (entget ele))) )
Kann mir da jemand weiterhelfen?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 17. Feb. 2015 08:37 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 17. Feb. 2015 13:35 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
|
mazur-ch Mitglied
Beiträge: 74 Registriert: 31.10.2008 ACAD 2020, Win 10 64Bit
|
erstellt am: 17. Feb. 2015 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hier habe ich die Datei mit einem Block angehängt. mit LISP kenne ich mich nur Anfängermässig mit Programmieren aus. Leider gibt es da auch nicht all zu viel deutschsprachige Literatur (oder ist mir nicht so bekannt). Ich hätte jetzt gedacht, dass diese Funktion setProperty den Auswahlsatz entgegen nimmt. Was ein "Enamen" ist, weiss ich nicht. Kommt mir auch aus anderen Programmiersprachen nicht bekannt vor. Was ich gemacht habe: ich nahm das Programm von oben (6 Antworten weiter oben). Dort wird ja nach meinem Verständnis ebenfalls eine ganze Auswahl übergeben (dort aus einer Datei). Falls noch mehr Infos benötigt werden, einfach sagen. Ich weiss gerade nicht, was noch helfen könnte. Gruss & Dank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 17. Feb. 2015 15:48 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
ename ist der entityname, also der Name in Autocad, mit dem ein Objekt eindeutig identifiziert und angesprochen werden kann. setproperty erwartet nun den EntityNamen eines Blocks. die ENamen der Objekte in einem Auswahlsatz bekommst Du mit der Funktion "ssname", also z.B. den Namen des ersten Elements mit (ssname Asatz 0). Die Anzahl der Elemente im Asatz kriegst Du mit (sslength Asatz) heraus. und jetzt mußt Du nur noch durch alle Elemente der Auswahlsatzes iterieren. Grüsse, Henning
------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mazur-ch Mitglied
Beiträge: 74 Registriert: 31.10.2008 ACAD 2020, Win 10 64Bit
|
erstellt am: 17. Feb. 2015 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hm, dann müsste diesem Code: Code: (setProperty (vlax-ename->vla-object selObj) "Sichtbarkeit1" "Alles sichtbar")
Diesen heraus nehmen: (vlax-ename->vla-object selObj) und mit einer Schlaufe ergänzen wo jeweils an dieser Stelle ein ssname übergeben wird? Für was ist denn die Schlaufe innerhalb der Funktion setProperty noch gut, wenn nur noch ein Element übergeben wird? Weitere Frage, bei der Deklaration der Funktion sind in der Klammer 4 Variablen, eine ist mit "/" von der anderen getrennt. Was bedeutet dieses "/" und wieso müssen beim Aufruf nur 3 Werte übergeben werden? Beim Programm von Dirk.B wird nach meiner Einschätzung nicht nur ein Element übergeben. Oder sehe ich dies falsch? vielen Dank!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 17. Feb. 2015 17:43 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo mazur-ch, zu 3.) die 3 Variablen vor dem / sind die 3 Parameter die an die Funktion übergeben werden, die Variable nach dem / ist nur eine lokal für diese Funktion definierte Variable, die von außerhalb nicht sichtbar ist. zu 2.) die Schleife in setProperty läuft offensichtlich durch alle "DynamicBlockProperties" des Blocks zu 1.) probier mal folgendes Code:
statt: (setProperty (vlax-ename->vla-object selObj) "Sichtbarkeit1" "Alles sichtbar")dieses hier: (setq i 0) (while (< i (sslength selObj)) (setProperty (vlax-ename->vla-object (ssname selObj i)) "Sichtbarkeit1" "Alles sichtbar") (setq i (1+ i)) )
... ungetestet. Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 17. Feb. 2015 17:52 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
|
mazur-ch Mitglied
Beiträge: 74 Registriert: 31.10.2008 ACAD 2020, Win 10 64Bit
|
erstellt am: 17. Feb. 2015 18:54 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Super, vielen Dank einmal bisher!!! Also den Code habe ich angepasst, hat noch anderes dabei. Ich hoffe der Kommentar hilft da. Das mit der Sichtbarkeit umschalten funktioniert dank euch nun tipp topp!! Danke. Nun möchte ich auf dem gleichen Weg auch ein Attribut anpassen. Dies will noch nicht so. Seht ihr da gerade den Fehler?
Code: (defun C:NE_Anpassen7()(vl-load-com) (setq object (ssget "_WP" (vox-get-lwp-points (car (entsel "\nLWPOLYLINE wählen:"))))) ;Objekte innerhalb einer Polylinie auswählen ;(Blöcke dürfen aktuell nur einen Punkt im Zentrum zeigen, sonst werden jene mit Überschneidung nicht mitgenommen)
(sssetfirst nil object) ;Auswahlsatz "object" zum aktuell ausgewählten Auswahlsatz machen (setq selBloecke (ssget '((0 . "INSERT")))) ;im aktuellen Auswahlsatz nur noch jene mit Block ("insert") auswählen (sssetfirst nil object) ;Auswahlsatz "object" zum aktuell ausgewählten Auswahlsatz machen (setq selMtext (ssget '((0 . "MTEXT")))) ;im aktuellen Auswahlsatz nur noch jene mit MTEXTen ("MTEXT") auswählen (princ (strcat "\n" (itoa (sslength selBloecke)) " Objekte sind ausgewählt."))
(princ "\n") (princ "\n")
(setq VKtext (if (setq VKtext (car(nentsel "\nTextobjekt für VK Name wählen: "))) ;muss ein Text und darf kein MText sein. Evtl. vorgängig alle MTEXT explodieren lassen (setq VKtext (cdr(assoc 1 (entget VKtext)))))) ;hier müsste der Text als String in die Variable geschrieben werden (princ "VK Name: ") (princ VKtext) ;Die Blöcke innerhalb der Polylinie ganz sichtbar machen (setq i 0) (while (< i (sslength selObj)) (setProperty (vlax-ename->vla-object (ssname selObj i)) "Sichtbarkeit1" "Alles sichtbar") (setq i (1+ i)) )
;Den Blöcken innerhalb der Polylinie im Attributfeld "Notiz" den Wert VKtext zuweisen. Müsste ein String sein (setq i 0) (while (< i (sslength selObj)) (setProperty (vlax-ename->vla-object (ssname selObj i)) "NOTIZ" VKtext) (setq i (1+ i)) )
) ;Ende Main-Funktion (defun setProperty (vlaDynBlock sPropertyName rValue / vlaProperty)
(foreach vlaProperty (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties vlaDynBlock))) (if (= (vla-get-PropertyName vlaProperty) sPropertyName) (vla-put-value vlaProperty (vlax-make-variant rValue)) ); end if ); end foreach ); end defun (defun vox-get-lwp-points (ele) (mapcar 'cdr (vl-remove-if '(lambda(x) (/= (car x) 10)) (entget ele))) )
Das Kochbuch habe ich als PDF, aber da finde ich auch nicht immer alles drin (im PDF ist das Suchen etwas weniger komfortabel). Nach den anderen Begriffen werde ich noch suchen. Danke ------------------ ----------- Auch wenn ich noch so viel Bier trinke, Goethe war dichter... [Diese Nachricht wurde von mazur-ch am 17. Feb. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |