Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Blöcke skalieren

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:  Blöcke skalieren (5695 mal gelesen)
ChristianV
Mitglied



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

Beiträge: 79
Registriert: 14.01.2009

AutoCAD Map 2013, 64 Bit

erstellt am: 12. Okt. 2011 15: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

Hallo zusammen
Folgende Situation: Habe eine Zeichnung mit verschiedenen Blöcken. Nun möchte ich alle diese diese Blöcke um einen Faktor skalieren. Der Basispunkt der Skalierung ist der Basispunkt des Blockes. Für die Texte gibt es ja den Befehl Textscale. Ich möchte das Ganze in ein Script einbinden. Ohne Skript könnte ich ja alles auswählen, im Eigenschaftsfenster die Blöcke wählen und anschliessen den X und Y Faktor anpassen. Da ich mit dem Script noch andere Anpassungen in der Zeichnung mache, möchte ich die Blockanpassung auch noch mit dem Skript ausführen. Also muss ich die Anpassung irgendwie über die Befehlszeile hinbekommen. Es sind etwa 20 verschieden Blockdefinitionen. Hat jemand eine Idee, mit welchem Befehl ich das machen kann?
Danke für die Hilfe

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

Dig15
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. für Markscheidewesen und Geodäsie



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

Beiträge: 5833
Registriert: 27.02.2003

DWG TrueView 2014

erstellt am: 12. Okt. 2011 15: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 Nur für ChristianV 10 Unities + Antwort hilfreich

Lange her, ähnliches Problem. Mit Lisp machbar. >>Link<<

------------------
Viele Grüße Lutz

Glück Auf!

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

ChristianV
Mitglied



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

Beiträge: 79
Registriert: 14.01.2009

AutoCAD Map 2013, 64 Bit

erstellt am: 12. Okt. 2011 21:40    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
Besten Dank für die Antwort, das LSP funktioniert. Nun wäre es für mich ideal, wenn ich anstelle der Blockauswahl den Blockname fix ins lisp schreiben kann (z.B. AV001). Das gleiche auch bei der Skalierung (x=2 und y=2 und z=1). Ich versuchte die Auswahl durch einen fixen Wert zu ersetzten, aber habe etwas falsch gemacht. Hat leider nicht funktioniert! Dies muss ich dann für die Blöcke AV002, AV003, … auch noch machen, wobei die Skalierung bei diesen Blöcken gleich bleibt. Eventuell kann man das in einem Guss programmieren oder muss ich es dann für jeden Block kopieren und den Namen anpassen?
Für Tipps und Hinweise wäre ich sehr dankbar


Der Code von CADmium wo ich verwendet habe:

(defun INSERT-SCALE (AUSWAHL X Y Z / NAME OBJEKT OBJEKTDATEN BLOCKDEF INDEX)
  (setq NAME(cdr(assoc 2 (entget (ssname AUSWAHL 0)))))
  ; und jetzt alle Blockreferenzen auf Blattebene updaten ..
  (setq INDEX -1)
  (if(setq AUSWAHL (ssget "_X"  '((0 . "INSERT"))))
  ;(ssget "_X" (list '(0 . "INSERT")(cons 2  NAME) ))) funzt nicht bei unbenannten Blöcken !
    (repeat (sslength AUSWAHL)
      (setq OBJEKTDATEN(entget(ssname AUSWAHL(setq INDEX(1+ INDEX)))))
      (if(=(strcase(cdr(assoc 2 OBJEKTDATEN))) (strcase NAME))
        (progn         
          (setq OBJEKTDATEN(subst(cons 41 (* (cdr(assoc 41 OBJEKTDATEN)) X))
                                  (assoc 41 OBJEKTDATEN)
                                  OBJEKTDATEN
                            )
          )
          (setq OBJEKTDATEN(subst(cons 42 (* (cdr(assoc 42 OBJEKTDATEN)) Y))
                                  (assoc 42 OBJEKTDATEN)
                                  OBJEKTDATEN
                            )
          )
          (setq OBJEKTDATEN(subst(cons 43 (* (cdr(assoc 43 OBJEKTDATEN)) Z))
                                  (assoc 43 OBJEKTDATEN)
                                  OBJEKTDATEN
                            )
          )
          (entmod OBJEKTDATEN)
        )
      )
    )
  )
  ; und jetzt alle Blockreferenzen in verschachtelten Blöcken..         
  (while (setq BLOCKDEF (tblnext "BLOCK" (null BLOCKDEF)))
    (if (and(/=(logand(cdr(assoc 70 BLOCKDEF))4)4)
            (or(/= (logand(cdr(assoc 70 BLOCKDEF))1)1)
              (=(substr (cdr(assoc 2 BLOCKDEF)) 1 2) "*U")
            )
        )
      (progn
        (setq OBJEKT (cdr (assoc -2 BLOCKDEF)))
        (while OBJEKT
          (setq OBJEKTDATEN (entget OBJEKT))
          (if (and (=(cdr(assoc 0 OBJEKTDATEN)) "INSERT") 
                  (=(cdr(assoc 2 OBJEKTDATEN))    NAME)
            )
          (progn
              (setq OBJEKTDATEN(subst(cons 41 (* (cdr(assoc 41 OBJEKTDATEN)) X))
                                    (assoc 41 OBJEKTDATEN)
                                    OBJEKTDATEN
                              )
              )
              (setq OBJEKTDATEN(subst(cons 42 (* (cdr(assoc 42 OBJEKTDATEN)) Y))
                                    (assoc 42 OBJEKTDATEN)
                                    OBJEKTDATEN
                              )
              )
              (setq OBJEKTDATEN(subst(cons 43 (* (cdr(assoc 43 OBJEKTDATEN)) Z))
                                    (assoc 43 OBJEKTDATEN)
                                    OBJEKTDATEN
                              )
              )
              (entmod OBJEKTDATEN)
            )
          )
          (setq OBJEKT (entnext OBJEKT))
        )
        (entupd (cdr (assoc -2 BLOCKDEF)))
      )
    )
  )
)

(defun C:INSERT-SCALE ( / AUSWAHL X Y Z )
  (if (and(setq AUSWAHL (ssget "_:S" '((0 . "INSERT"))))
          (setq X (getreal "\nRelativen Vergrößerungsfaktor X : "))(> X 0)
          (setq Y (getreal "\nRelativen Vergrößerungsfaktor Y : "))(> Y 0)
          (setq Z (getreal "\nRelativen Vergrößerungsfaktor Z : "))(> Z 0)
      )
    (progn
      (INSERT-SCALE AUSWAHL X Y Z)
      (command "._regen")
    )
    (princ "\nKeine Blockreferenz gewählt!\n")
  )
  (princ)
)

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

System: F1
und Google

erstellt am: 12. Okt. 2011 22: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 Nur für ChristianV 10 Unities + Antwort hilfreich

(and(setq AUSWAHL (ssget "_:S" '((0 . "INSERT"))))
          (setq X (getreal "\nRelativen Vergrößerungsfaktor X : "))(> X 0)
          (setq Y (getreal "\nRelativen Vergrößerungsfaktor Y : "))(> Y 0)
          (setq Z (getreal "\nRelativen Vergrößerungsfaktor Z : "))(> Z 0)
  )

wird zu

(and(setq AUSWAHL (ssget "_:S" '((0 . "INSERT")(2 . "Blockname1,Blockname2,Blockname3"))))
      (setq X 2 Y 2 Z 1)
          ;(setq X (getreal "\nRelativen Vergrößerungsfaktor X : "))(> X 0)
          ;(setq Y (getreal "\nRelativen Vergrößerungsfaktor Y : "))(> Y 0)
          ;(setq Z (getreal "\nRelativen Vergrößerungsfaktor Z : "))(> Z 0)

  )


SO würde jetzt Blockname1+2+3 ausgewählt werden und allen die Faktoren 2 2 und 1 zugewiesen werden.

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

ChristianV
Mitglied



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

Beiträge: 79
Registriert: 14.01.2009

AutoCAD Map 2013, 64 Bit

erstellt am: 13. Okt. 2011 08:18    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
Irgendwie läuft es noch nicht richtig. (Meine Blöcke heisen AV001,AV002,AV003).


So kann ich den Code mit INSERT-SCALE nicht starten: Ersetzer Code:

.
.
.
(defun C:INSERT-SCALE ( / AUSWAHL X Y Z )
  (if (and(setq AUSWAHL (ssget "_:S" '((0 . "INSERT")(2 . "AV001,AV002,AV003"))))
      (setq X 2 Y 2 Z 1)
          ;(setq X (getreal "\nRelativen Vergrößerungsfaktor X : "))(> X 0)
          ;(setq Y (getreal "\nRelativen Vergrößerungsfaktor Y : "))(> Y 0)
          ;(setq Z (getreal "\nRelativen Vergrößerungsfaktor Z : "))(> Z 0)
  )
.
.
.


Mit dem folgenden Code, muss nun immernoch die Block auswählen und die skalierung (x,y,z) von hand eingeben werden


.
.
.
(defun C:INSERT-SCALE ( / AUSWAHL X Y Z )
  (if (and(setq AUSWAHL (ssget "_:S" '((0 . "INSERT")(2 . "AV001,AV002,AV003"))))
      (setq X 2 Y 2 Z 1)
          (setq X (getreal "\nRelativen Vergrößerungsfaktor X : "))(> X 0)
          (setq Y (getreal "\nRelativen Vergrößerungsfaktor Y : "))(> Y 0)
          (setq Z (getreal "\nRelativen Vergrößerungsfaktor Z : "))(> Z 0)
  )
.
.
.

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

System: F1
und Google

erstellt am: 13. Okt. 2011 09:15    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 ChristianV 10 Unities + Antwort hilfreich

;;; Der Code von CADmium(sorry) für dich überarbeitet:


(defun INSERT-SCALE (AUSWAHL X Y Z / NAME OBJEKT OBJEKTDATEN BLOCKDEF INDEX)
  ;(setq NAME(cdr(assoc 2 (entget (ssname AUSWAHL 0)))))
  ; und jetzt alle Blockreferenzen auf Blattebene updaten ..
  (setq INDEX -1)
  ;(if(setq AUSWAHL (ssget "_X"  '((0 . "INSERT"))))
  ;(ssget "_X" (list '(0 . "INSERT")(cons 2  NAME) ))) funzt nicht bei unbenannten Blöcken !
    (repeat (sslength AUSWAHL)
      (setq OBJEKTDATEN(entget(ssname AUSWAHL(setq INDEX(1+ INDEX)))))
      ;(if(=(strcase(cdr(assoc 2 OBJEKTDATEN))) (strcase NAME))
        (progn         
          (setq OBJEKTDATEN(subst(cons 41 (* (cdr(assoc 41 OBJEKTDATEN)) X))
                                  (assoc 41 OBJEKTDATEN)
                                  OBJEKTDATEN
                            )
          )
          (setq OBJEKTDATEN(subst(cons 42 (* (cdr(assoc 42 OBJEKTDATEN)) Y))
                                  (assoc 42 OBJEKTDATEN)
                                  OBJEKTDATEN
                            )
          )
          (setq OBJEKTDATEN(subst(cons 43 (* (cdr(assoc 43 OBJEKTDATEN)) Z))
                                  (assoc 43 OBJEKTDATEN)
                                  OBJEKTDATEN
                            )
          )
          (entmod OBJEKTDATEN)
        )
      ;)
    )
  ;)
  ; und jetzt alle Blockreferenzen in verschachtelten Blöcken..         
  (while (setq BLOCKDEF (tblnext "BLOCK" (null BLOCKDEF)))
    (if (and(/=(logand(cdr(assoc 70 BLOCKDEF))4)4)
            (or(/= (logand(cdr(assoc 70 BLOCKDEF))1)1)
              (=(substr (cdr(assoc 2 BLOCKDEF)) 1 2) "*U")
            )
        )
      (progn
        (setq OBJEKT (cdr (assoc -2 BLOCKDEF)))
        (while OBJEKT
          (setq OBJEKTDATEN (entget OBJEKT))
          (if (and (=(cdr(assoc 0 OBJEKTDATEN)) "INSERT") 
                  (=(cdr(assoc 2 OBJEKTDATEN))    NAME)
            )
          (progn
              (setq OBJEKTDATEN(subst(cons 41 (* (cdr(assoc 41 OBJEKTDATEN)) X))
                                    (assoc 41 OBJEKTDATEN)
                                    OBJEKTDATEN
                              )
              )
              (setq OBJEKTDATEN(subst(cons 42 (* (cdr(assoc 42 OBJEKTDATEN)) Y))
                                    (assoc 42 OBJEKTDATEN)
                                    OBJEKTDATEN
                              )
              )
              (setq OBJEKTDATEN(subst(cons 43 (* (cdr(assoc 43 OBJEKTDATEN)) Z))
                                    (assoc 43 OBJEKTDATEN)
                                    OBJEKTDATEN
                              )
              )
              (entmod OBJEKTDATEN)
            )
          )
          (setq OBJEKT (entnext OBJEKT))
        )
        (entupd (cdr (assoc -2 BLOCKDEF)))
      )
    )
  )
)

(defun C:INSERT-SCALE ( / AUSWAHL X Y Z )
  (if (and(setq AUSWAHL (ssget "_X" '((0 . "INSERT")(2 . "AV001,AV002,AV003"))))
          (setq X 2 Y 2 Z 1)
          ;(setq X (getreal "\nRelativen Vergrößerungsfaktor X : "))(> X 0)
          ;(setq Y (getreal "\nRelativen Vergrößerungsfaktor Y : "))(> Y 0)
          ;(setq Z (getreal "\nRelativen Vergrößerungsfaktor Z : "))(> Z 0)

      )
    (progn
      (INSERT-SCALE AUSWAHL X Y Z)
      (command "._regen")
    )
    (princ "\nKeine Blockreferenz gewählt!\n")
  )
  (princ)
)

Jetzt bleibt nur zu hoffen das du das wirklich wolltest (kann ich mir fast nicht vorstellen).

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

ChristianV
Mitglied



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

Beiträge: 79
Registriert: 14.01.2009

AutoCAD Map 2013, 64 Bit

erstellt am: 13. Okt. 2011 09: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
Es scheint nun zu funktionieren. Muss es noch genauer testen. Aber auf jedenfall ein sehr grosses Dankeschön.
Doch es ist schon das, was ich wollte. Grund: wir erhalten immerwieder Zeichnungen mit disen Blocknamen, wobei diese immer zu klein sind. Nun können dies Zeichnungen einfach nach unseren Vorstellungen angepasst werden.

Nocheinmal besten Dank
Gruss

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

-sauer
Mitglied
Zeichner


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

Beiträge: 314
Registriert: 01.03.2007

ACAD 2020, MEP 2020 CiVil 2020
64 bit, Windows 10,

erstellt am: 15. Dez. 2011 09:23    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 ChristianV 10 Unities + Antwort hilfreich

Hi Lisp´ler...

hab heute dieses Lisp hier gefunden... und hab zuerst selbst probiert ob ich es finde...in dem ich einfach mal an verschiedenen Stellen meine Werte eingetragen habe.... bin aber nicht auf die Lösung gekommen....

vielleicht kann mir jemand helfen... brauche eigentlich genau sowas... allerdings immer mit den gleichen Skalierungsfaktor... z.B. für X-Wert = 4, Y-Wert = 20, Z-Wert = 1..... wo kann ich das in diesem Lisp ohne die Abfrage die da kommt fest einstellen... da ich viele verschiedene Blöcke habe mit unterschiedlichen Namen.... könnte ich mir damit das mühselige eintippen sparen.... wäre sonst auch net schneller als über die Eigenschaften...

Danke...

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

System: F1
und Google

erstellt am: 15. Dez. 2011 09: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 ChristianV 10 Unities + Antwort hilfreich

Der [Skalierfaktor] in AutoCAD ist ja nicht das gleiche wie "um einen Faktor Skalieren" und darum geht es in diesem Lisp,
unabhängig von der bestehenden Skalierung sollen die Referenzen um FaktorX gehändert werden. Deine Anfrage ist aber:
Ich möchte alle Referenzen, unabhängig von der bestehenden Skalierung, auf einen fest vorgegebenen Faktor einstellen,
zumindest wenn ich dich recht verstehe.

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 15. Dez. 2011 09: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 ChristianV 10 Unities + Antwort hilfreich

siehe cadffm

 

Zitat:
Original erstellt von cadffm:
;;; Der Code von CADmium(sorry) für dich überarbeitet:


(defun C:INSERT-SCALE ( / AUSWAHL X Y Z )
  (if (and(setq AUSWAHL (ssget "_X" '((0 . "INSERT")(2 . "AV001,AV002,AV003"))
          (setq X 2 Y 2 Z 1)
          ;(setq X (getreal "\nRelativen Vergrößerungsfaktor X : "))(> X 0)
          ;(setq Y (getreal "\nRelativen Vergrößerungsfaktor Y : "))(> Y 0)
          ;(setq Z (getreal "\nRelativen Vergrößerungsfaktor Z : "))(> Z 0)

      )
    (progn
      (INSERT-SCALE AUSWAHL X Y Z)
      (command "._regen")
    )
    (princ "\nKeine Blockreferenz gewählt!\n")
  )
  (princ)
)

Jetzt bleibt nur zu hoffen das du das wirklich wolltest (kann ich mir fast nicht vorstellen).


ggf. die sel-method anpassen (setq AUSWAHL (ssget '((0 . "INSERT")))

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

[Diese Nachricht wurde von Dorfy am 15. Dez. 2011 editiert.]

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 15. Dez. 2011 10: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 ChristianV 10 Unities + Antwort hilfreich

wenn cadffm recht haben sollte
dann q&d ohne Netz

Code:
(defun C:INSSCALE (/ AUSWAHL BlkObj INDEX X Y Z)
  (if (setq AUSWAHL (ssget '((0 . "Insert")))
    X     2
    Y     2
    Z     1
      )
    (progn
      (setq INDEX -1)
      (repeat (sslength AUSWAHL)
(setq BlkObj (vlax-ename->vla-object
      (ssname AUSWAHL (setq INDEX (1+ INDEX)))
    )
)
(vla-put-XScaleFactor BlkObj x)
(vla-put-YScaleFactor BlkObj y)
(vla-put-ZScaleFactor BlkObj z)
      )
    )
  )
  (princ)
)

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

-sauer
Mitglied
Zeichner


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

Beiträge: 314
Registriert: 01.03.2007

ACAD 2020, MEP 2020 CiVil 2020
64 bit, Windows 10,

erstellt am: 15. Dez. 2011 11: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 ChristianV 10 Unities + Antwort hilfreich

Merci für die ausführlichen Antworten....

hat geklappt.... hab das von Dorfy genommen... weil klein aber fein...

Danke....

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

neo4matrix
Mitglied



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

Beiträge: 136
Registriert: 15.01.2008

HP™ z2 Tower G4 Workstation mit
Intel® Core™ i9-9900K 8x 3.6 GHz-5.0 GHz
32 GB Arbeitsspeicher
1 TB HP Z Turbo PCIe® SSD
NVIDIA® Quadro® P2200 mit 5 GB RAM
HP™ 24" LPS LED TFT 16:10 ZR2440w.
Windows 10 Pro, 64 Bit
AutoCAD 2019 Design Suite Standard, SP1, 64 Bit
ecscad 2019, v19.1.0.20, 64 Bit
Microstation v8 2004, 32 Bit
MicroStation CONNECT Edition Update 11
Microsoft Office 365, 32 Bit
Microsoft Visio 2013, 32 Bit

erstellt am: 28. Jul. 2017 14:41    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 ChristianV 10 Unities + Antwort hilfreich

Hallo Leute


Das LISP von Dorfy erfüllt schon fast meine Wünsche. Ich möchte aber, dass das LISP den X-Faktor des Blocks zuerst ausliest, und dann den selben Wert als Z-Faktor einträgt. Aber nur bei Blöcken mit dem Namen ?_*_* (also z.B.: T_5002_10, U_0021_11, V_8000_11 oder L_311112_10). Die X-Faktoren (und somit später die Z-Faktoren) können also bei jedem Block verschieden sein. Der Y-Faktor soll unangetastet bleiben.

Mit meiner Anpassung kann ich schon mal mit dem Befehl "INSSCALE all" alle Blöcke mit dem Namen ?_*_* auf den X, Y und Z-Faktor von 0.01 stellen:

Code:
(defun C:INSSCALE (/ AUSWAHL BlkObj INDEX X Y Z)
  (if (setq AUSWAHL (ssget '((0 . "Insert")(2 . "?_*_*")))
    X    0.01
    Y    0.01
    Z    0.01
      )
    (progn
      (setq INDEX -1)
      (repeat (sslength AUSWAHL)
(setq BlkObj (vlax-ename->vla-object
      (ssname AUSWAHL (setq INDEX (1+ INDEX)))
    )
)
(vla-put-XScaleFactor BlkObj x)
(vla-put-YScaleFactor BlkObj y)
(vla-put-ZScaleFactor BlkObj z)
      )
    )
  )
  (princ)
)

Für Antworten bin ich sehr dankbar!

mfg neo

------------------
Welcome to the Real

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: 28. Jul. 2017 15:00    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 ChristianV 10 Unities + Antwort hilfreich

Also wenn ich das richtig verstanden habe möchtest du nur für Z den selben Wert der schon in X steht haben.

Also am Ende:
(vla-put-ZScaleFactor BlkObj (vla-get-XScaleFactor BlkObj))

Oder ?

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

Gruß
Andreas

http://kraus-cad.de

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

neo4matrix
Mitglied



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

Beiträge: 136
Registriert: 15.01.2008

HP™ z2 Tower G4 Workstation mit
Intel® Core™ i9-9900K 8x 3.6 GHz-5.0 GHz
32 GB Arbeitsspeicher
1 TB HP Z Turbo PCIe® SSD
NVIDIA® Quadro® P2200 mit 5 GB RAM
HP™ 24" LPS LED TFT 16:10 ZR2440w.
Windows 10 Pro, 64 Bit
AutoCAD 2019 Design Suite Standard, SP1, 64 Bit
ecscad 2019, v19.1.0.20, 64 Bit
Microstation v8 2004, 32 Bit
MicroStation CONNECT Edition Update 11
Microsoft Office 365, 32 Bit
Microsoft Visio 2013, 32 Bit

erstellt am: 28. Jul. 2017 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 ChristianV 10 Unities + Antwort hilfreich

Haargenau!
Besten Dank für den Tip!

Von mir aus, auch ohne defun. Also ein LISP, das direkt beim Ausführen (via Schaltfläche) bei allen Blöcken mit Namen "?_*_*" den Z-Faktor analog vom X-Faktor übernimmt.

So in der Art:

Code:
(progn (setq INDEX -1)
  (repeat (sslength (setq aws (ssget  "_X" '((0 . "Insert")(2 . "?_*_*")))))
    (setq BlkObj (vlax-ename->vla-object
      (ssname aws (Setq INDEX (1+ INDEX)))
    )
  )
(vla-put-ZScaleFactor BlkObj (vla-get-XScaleFactor BlkObj))
))

Kann das nochmal jemand auf Fehler überprüfen?
Und ob man das evtl. noch vereinfachen kann?
Warum schreibt AutoCAD immer "nil" in die Befehlszeile, obwohl alles zu funktionieren scheint?

mfg neo

[Diese Nachricht wurde von neo4matrix am 28. Jul. 2017 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: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 28. Jul. 2017 20: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 Nur für ChristianV 10 Unities + Antwort hilfreich

Wenn es läuft, dann passt es für nicht-dynamische Blockreferenzen welche auf entsperrten Layern liegt.
Vereinfachen: Nein, ist vollkommen ok.

Ich würde daraus nur eine benannte Funktion machen und am besten direkt als Autocad-Befehl erstellen.

Diese würde man dann in "MeineDatei.lsp" packen (mit anderen Lispfunktionen die man hat oder noch sammelt), diese fügt man dann der
Startgruppe (Befehl Appload) hinzu.

Dazu würde ich das Wort
progn
tauschen gegen
defun c:BlockfaktorZgleichX (/ INDEX AWS BLKOBJ)

Als Menümakro zum aufrufen steht dann ^C^CBlockfaktorZgleichX

Die Rückgabe nil ist die letzte Rückgabe aus dem Code und in diesem Fall wird nichts zurückgegeben.
Nichts / nothing in list oder so ähnlich ;-)

Es ist also kein Fehler wie du evtl. denkst.
Um dieses unschöne nil zu unterbinden gibt es nur eines: Man sorgt für  eine andere letzte Rückgabe!
Vor der letzten schliessenden Klammer setze ein (princ) ein.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

neo4matrix
Mitglied



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

Beiträge: 136
Registriert: 15.01.2008

HP™ z2 Tower G4 Workstation mit
Intel® Core™ i9-9900K 8x 3.6 GHz-5.0 GHz
32 GB Arbeitsspeicher
1 TB HP Z Turbo PCIe® SSD
NVIDIA® Quadro® P2200 mit 5 GB RAM
HP™ 24" LPS LED TFT 16:10 ZR2440w.
Windows 10 Pro, 64 Bit
AutoCAD 2019 Design Suite Standard, SP1, 64 Bit
ecscad 2019, v19.1.0.20, 64 Bit
Microstation v8 2004, 32 Bit
MicroStation CONNECT Edition Update 11
Microsoft Office 365, 32 Bit
Microsoft Visio 2013, 32 Bit

erstellt am: 31. Jul. 2017 11: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 ChristianV 10 Unities + Antwort hilfreich

Herzlichen Dank für die Ausführungen! Jetzt bin ich schlauer.
Mein LIST sieht nun so aus:

Code:
(defun c:BlockfaktorZgleichX (/ INDEX AWS BLKOBJ) (setq INDEX -1)
  (repeat (sslength (setq aws (ssget  "_X" '((0 . "Insert")(2 . "?_*_*")))))
    (setq BlkObj (vlax-ename->vla-object
      (ssname aws (Setq INDEX (1+ INDEX)))
    )
  )
(vla-put-ZScaleFactor BlkObj (vla-get-XScaleFactor BlkObj))
)
(princ "Bei allen relevanten Blöcken wurde der Z-Faktor korrigiert.")
(princ)
)

Falls es keine relevanten Blöcke hat kommt folgende Fehlermeldung:
; Fehler: Fehlerhafter Argumenttyp: lselsetp nil

Könnte man das noch verbessern? Mit einer Meldung in der Befehlszeile: "Keine relevanten Blöcke gefunden."

Vielen Dank!

mfg neo

------------------
Welcome to the Real

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

System: F1
und Google

erstellt am: 31. Jul. 2017 11: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 ChristianV 10 Unities + Antwort hilfreich

 
Code:
(defun c:BlockfaktorZgleichX (/ INDEX AWS BLKOBJ) (setq INDEX -1)
    (if (setq aws (ssget  "_X" '((0 . "Insert")(2 . "?_*_*"))))
        (progn
          (repeat (sslength aws)
            (setq BlkObj (vlax-ename->vla-object (ssname aws (Setq INDEX (1+ INDEX)))))
            (vla-put-ZScaleFactor BlkObj (vla-get-XScaleFactor BlkObj))
          )
          (princ "\nBei allen relevanten Blöcken wurde der Z-Faktor korrigiert.")
)
        (princ "\nKeine relevanten Blöcke gefunden.")
    )
  (princ)
)

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

neo4matrix
Mitglied



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

Beiträge: 136
Registriert: 15.01.2008

HP™ z2 Tower G4 Workstation mit
Intel® Core™ i9-9900K 8x 3.6 GHz-5.0 GHz
32 GB Arbeitsspeicher
1 TB HP Z Turbo PCIe® SSD
NVIDIA® Quadro® P2200 mit 5 GB RAM
HP™ 24" LPS LED TFT 16:10 ZR2440w.
Windows 10 Pro, 64 Bit
AutoCAD 2019 Design Suite Standard, SP1, 64 Bit
ecscad 2019, v19.1.0.20, 64 Bit
Microstation v8 2004, 32 Bit
MicroStation CONNECT Edition Update 11
Microsoft Office 365, 32 Bit
Microsoft Visio 2013, 32 Bit

erstellt am: 31. Jul. 2017 14:06    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 ChristianV 10 Unities + Antwort hilfreich

Herzlichen Dank!
Funktioniert perfekt!

------------------
Welcome to the Real

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