Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Lisp und dynamische Blöcke

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:  Lisp und dynamische Blöcke (5753 mal gelesen)
Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

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 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


DB_Lisp_01.jpg


DB_Lisp_02.jpg


Fehler_SQL_Installation.jpg

 
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




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: 31. Jan. 2013 14:30    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 Dirk.B 10 Unities + Antwort hilfreich

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


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

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 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


DB_Lisp_03.jpg

 
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




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 31. Jan. 2013 16:21    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 Dirk.B 10 Unities + Antwort hilfreich

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


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

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 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 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


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

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 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 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




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 01. Feb. 2013 12:38    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 Dirk.B 10 Unities + Antwort hilfreich

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


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

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 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


DB_Sichtbarkeit1.jpg


DB_Langexx.jpg


Bloecke.zip

 
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



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 02. Feb. 2013 16:13    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 Dirk.B 10 Unities + Antwort hilfreich

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


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

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 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 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



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 24. Feb. 2013 09:34    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 Dirk.B 10 Unities + Antwort hilfreich

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


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

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 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 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



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 24. Feb. 2013 16: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 Nur für Dirk.B 10 Unities + Antwort hilfreich

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


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

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 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 Udo!

Nochmals Danke für Deine Geduld und Unterstützung.
Nun funktioniert es prima.

Ich wünsch Dir noch einen guten Start in die neue Woche.

------------------
Gruß

Dirk

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

mazur-ch
Mitglied



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

Beiträge: 73
Registriert: 31.10.2008

ACAD 2014, Win 7 64Bit

erstellt am: 17. Feb. 2015 08:27    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 Dirk.B 10 Unities + Antwort hilfreich

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



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 17. Feb. 2015 08:37    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 Dirk.B 10 Unities + Antwort hilfreich

Man müsste dazu die Beispielzeichnung sehen, ob die Blöcke auch exakt die Propertynamen besitzen, die das Programm setzten will.

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

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 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 Dirk.B 10 Unities + Antwort hilfreich

So wie ich das sehe übergibst Du der Funktion "SetProperty" einen Auswahlsatz, diese benötigt aber einen Enamen und bricht dann ab.

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



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

Beiträge: 73
Registriert: 31.10.2008

ACAD 2014, Win 7 64Bit

erstellt am: 17. Feb. 2015 15:35    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 Dirk.B 10 Unities + Antwort hilfreich


Vorlagedatei_mit_Block.zip

 
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



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

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 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 Dirk.B 10 Unities + Antwort hilfreich

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



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

Beiträge: 73
Registriert: 31.10.2008

ACAD 2014, Win 7 64Bit

erstellt am: 17. Feb. 2015 17:04    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 Dirk.B 10 Unities + Antwort hilfreich

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



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

Beiträge: 1111
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 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 Dirk.B 10 Unities + Antwort hilfreich

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
良い精神




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: 21533
Registriert: 03.06.2002

Alles

erstellt am: 17. Feb. 2015 17:52    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 Dirk.B 10 Unities + Antwort hilfreich

auch wenn das ja kein Acad/Lisp Anfänger Thema ist, die einzelnen Fragen bekommst du gleich beantwortet:

Schleife und jedes INSERT(AcadBlockReferenz) übergeben wäre möglich und sinnig,
schau mal im Forum nach BAU_ELEMLI oder SSNAMEX, da findest du so eine Schleife durch Foreach zB.

Die Schleife innerhalb der Funktion geht alle Parameter im Block der Referenz durch und vergleicht den Namen mit dem von dir Übergebenen Parameternamen, im Block können ja hunderte sein, du willst aber nur einen bestimmten ändern..

In der Klammer (wenn vorhanden) stehen die Variablen zu denen eine Funktion Werte erwartet (vor dem / ) und die lokalen Variablen (nach dem /).

In Dirks Code wird genau 1 Objekt übergeben, nämlich das Insert welches er direkt vorher über den AutoCadBefehl _Insert/Einfüge erstellt.

Es gibt einige Tutorials und viele Bücher (auf deutsch, in engl gibt tausende), ich lege dir mal das KOCHBUCH ans Herz oder die Tutorialversion www.tutorial.autolisp.info

------------------
HREF="http://www.cad-on-demand.de" TARGET=_blank>CAD on demand GmbH
- Beratung und Programmierung rund um AutoCAD

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

mazur-ch
Mitglied



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

Beiträge: 73
Registriert: 31.10.2008

ACAD 2014, Win 7 64Bit

erstellt am: 17. Feb. 2015 18: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 Dirk.B 10 Unities + Antwort hilfreich

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

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