Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Textfilter nach Höhe in Skript

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:  Textfilter nach Höhe in Skript (761 mal gelesen)
ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 09. Nov. 2006 14:14    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,

habe nach langer Suche in den Foren nichts passendes für mein Problem gefunden, deshalb so:

Ich möchte mit Hilfe eines Skriptes Text filtern und zwar nach der Text-Höhe. Mit ssx schaffe ich nur, den gesamten Text zu wählen, kann aber
keinen Höhen-Filter setzen. Gibt es da eine einfache Möglichkeit, sprich ein AutoCAD Befehl ohne lispeln zu müssen?;-)

Chris

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.

erstellt am: 09. Nov. 2006 14: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 ChrisSin 10 Unities + Antwort hilfreich

_qselect

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 09. Nov. 2006 14: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


_qselect/sauswahl habe ich schon ausprobiert, ich bekomme ACAD aber nicht dazu, statt mit Dialogfeld die Filter im Auswahlfenster abzuarbeiten..

gibt es da noch einen Kniff? -sauswahl funktioniert bei mir jdf nicht.

Chris

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.

erstellt am: 09. Nov. 2006 14: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 ChrisSin 10 Unities + Antwort hilfreich

ach so .. script .. hatte ich überlesen .. wird ohne Lisp nicht gehen
... (ssget "_x" '((0 . "*TEXT")(40 . 3.0))) filtert TEXTE mit Texthöhe 3.0
(sssetfirst (setq a(ssget "_x" '((0 . "*TEXT")(40 . 3.0)))a)

aktiviert ihn auch gleich

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 09. Nov. 2006 14:42    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,
aber um die Zeilen richtig zu verstehen, muss ich wohl noch etwas tiefer einsteigen.

...und trotzdem, Hut ab, daß ich so schnell eine Antwort bekomme, hätte ich nicht gedacht:-)

Chris

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

Katana
Mitglied



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

Beiträge: 24
Registriert: 13.09.2006

Win XP SP2
ACAD 08

erstellt am: 09. Nov. 2006 14:58    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 ChrisSin 10 Unities + Antwort hilfreich

Hallo Chris

Da du ja nur ein Skript möchtest, wenn es keine einfacher Möglichkeit gibt versuch doch mal das ganze über den Befehl "filter". Dort kannst du  die Texthöhe auswählen. Ich persönlich arbeite am liebsten mit "filter" und nicht mit der Schnellauswahl.

Habe es kurz bei mir probiert und es hat wunderbar geklappt.

Freundliche Grüsse

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 09. Nov. 2006 15: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


Hi, Katana,

bei mir lässt sich "filter" nicht in Befehlsfolgen in Form eines Skriptes einbauen. Immer erscheint das Dialogfenster, in dem Einstellungen gemacht werden müssen, die Befehle sollen aber im Befehlszeilenfenster abgearbeitet werden. Auch "-filter" funktioniert nicht.
Gibt es da doch noch einen Kniff??

Chris

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

Katana
Mitglied



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

Beiträge: 24
Registriert: 13.09.2006

Win XP SP2
ACAD 08

erstellt am: 09. Nov. 2006 21: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 ChrisSin 10 Unities + Antwort hilfreich

Hi Chris

Zitat:
bei mir lässt sich "filter" nicht in Befehlsfolgen in Form eines Skriptes einbauen.

Der Befehl "filter" wird auch nicht ins Skript eingebaut (da du ja wie oben erwähnt nicht lispeln möchtest) so hast du eine Filterfunktion von ACAD, welchen du direkt mit diesem Befehl aufrufen kannst.

Oder anderst ausgedrückt, die einfachste möglichkeit einen Text in der Zeichnung mit einem bestimmten Höhenwert auszufiltern.

Einfach mal probieren...

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

AutoCAD 2.5 - 2022, Civil 3D, MAP 3D, ACADM
Inventor AutoCAD 2022, AIP 4-2022
Win 10

erstellt am: 09. Nov. 2006 22: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 ChrisSin 10 Unities + Antwort hilfreich

@Katana,
ich habe die Aufgabe so verstanden, dass ChrisSin ein SCRIPT hat, welches er auf mehrere Zeichnungen anwenden will, deshalb sucht er einen Objektwahlbefehl, der als Kommandozeile ausgeführt wird.

 

Zitat:
Original erstellt von ChrisSin:
...Ich möchte mit Hilfe eines Skriptes Text filtern ...

da bleibt aber tatsächlich nur ein
Lisp-Auswahlssatzaufruf (SSGET ...). SAUSWAHL oder FILTER sind nun mal dialogbasierte Auswahlfilter.

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

Udo Hübner

[Diese Nachricht wurde von CAD-Huebner am 09. Nov. 2006 editiert.]

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 10. Nov. 2006 09: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 ChrisSin 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von ChrisSin:
Vielen Dank,
aber um die Zeilen richtig zu verstehen, muss ich wohl noch etwas tiefer einsteigen.

Vielleicht hilft Dir meine Erklärung ein wenig?

Code:
;; Auswahlsatz mit Griffen versehen... benötigt zwei Argumente: gripset und pickset
(sssetfirst
  ;; gripset als Variable A festlegen
  (setq A
        ;; ssget "_x" dursucht die gesamte Zeichnungsdatenbank
        (ssget "_x"
                ;; Nachfolgen der Filterausdruck für ssget...
                ;; 1. Filter DXF 0 = Objekttyp "*TEXT" = TEXT, DTEXT, MTEXT (wildcard *)
                '((0 . "*TEXT")
                  ;; 2. Filter DXF Code 40 = Texthöhe 3.0
                  (40 . 3.0)
                ) ;_ Ende ssget Filterargument
        ) ;_ ende ssget
  ) ;_ ende Variable A definieren
  ;; zweites Argument pickset für sssetfirst; gleich erstem Argument > gripset=pickset
  A
) ;_ ende sssetfirst

Alternativ könnte man dem Filterargument von ssget noch hinzufügen, das er nur im aktuellen Bereich,
Modellbereich oder Layout suchen soll.

Dann sähe der Filter so aus:

Code:
(ssget "_x"
       (list
         '(0 . "*TEXT")
         '(40 . 3.0)
         (cons 410 (getvar "ctab"))
       )
)

...


------------------
Ciao,
Marc
   

[Diese Nachricht wurde von marc.scherer am 10. Nov. 2006 editiert.]

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 10. Nov. 2006 11: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

@marc.scherer
Ja, die zusätzlichen Erklärungen sind sehr hilfreich, danke, zumal ich auf dem Gebiet ein ziemliche Rookie bin....

Habe hier etwas zusammengebastelt.Text soll mit "ssget" nach der Höhe sortiert und über "eigändr" auf die Layer Text25,Text35,Text50,Text70 gelegt werden.

Problem ist nur:
wenn kein Text in der Größe z.B. 7 vorhanden ist und "nil" zurückgegeben wird, greift er in "eigändr V" auf die letzte Auswahl zurück, in diesem Fall auf die Auswahl mit der Texthöhe 5.

Habe versucht mit "(setq ss* nil)" die Auswahlsets zu löschen, schaffe ich aber nicht, die letzte Auswahl bleibt erhalten.

Gibt es da einen Kniff, wie die alles Auswahlsets gelöscht werden können, oder vertragen sich die AutoCAD mit den LISP-Befehlen nicht?

(ssget "_X" '((0 . "*TEXT") (40 . 2.5)))
eigändr V  LA Text25
(ssget "_X" '((0 . "*TEXT") (40 . 3.5)))
eigändr V  LA Text35
(ssget "_X" '((0 . "*TEXT") (40 . 5)))
eigändr V  LA Text50
(ssget "_X" '((0 . "*TEXT") (40 . 7)))
eigändr V  LA Text70

Chris

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.

erstellt am: 10. Nov. 2006 11: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 ChrisSin 10 Unities + Antwort hilfreich

auf die Schnelle: -> machs so:

(if(ssget "_X" '((0 . "*TEXT") (40 . 2.5)))(command "eigändr" "V"  "LA" "Text25"))
(if(ssget "_X" '((0 . "*TEXT") (40 . 3.5)))(command"eigändr" "V"  "LA" "Text35"))

usw.


obwohl ich dann alles in Lisp machen würde...
------------------
      - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 10. Nov. 2006 13: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

@CADmium,
super Tipp, hat bei mir funktioniert, fehlte nur ein "".
Muss noch etwas rumbasteln.

Die Sache mit (setq ss* nil) war wohl ein Holzweg?!

Zu LISP: Würde gerne alles in LISP schreiben, lese eure Tipps und parallel dazu die AutoCAD-Reference, welche aber leider recht knapp ist für den Umfang an Befehlen...

Chris

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 10. Nov. 2006 15: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 ChrisSin 10 Unities + Antwort hilfreich

Hi ChrisSin,
hier mal 'ne Anregung wie so'n Code aussehen könnte:

Code:
;|
Funktion sucht Texte einer bestimmten Höhe in einer Zeichnung
und ordnet sie dann bestimmten Layern zu.
Die Texthöhe wird im DXF-Code 40 bestimmt.
Argumente:
LIST-OF-PAIRS = Liste von Texthöhen - Layerzuweisungen als
  "dotted pair" Listen
  z.B. '((2.5 . "Text25")
  (3.5 . "Text35")
  (5.0 . "Text50")
  (7.0 . "Text70")
)

Beispielaufruf:
(TXTHEIGHT2LAYER '((2.5 . "Text25")(3.5 . "Text35")))

Im Skript zu verwenden wenn Lisp-Programm als
z.B. >TXTHEIGHT2LAYER.LSP< im Suchpfad z.B. so:

(if (null TXTHEIGHT2LAYER)(load TXTHEIGHT2LAYER))
(TXTHEIGHT2LAYER '((10 . "Text100")(2.5 . "Text25")(3.5 . "Text35")(5.0 . "Text50")(7.0 . "Text70")))

|;
(defun TXTHEIGHT2LAYER (LIST-OF-PAIRS / SGET ALTCMDECHO)
  (setq ALTCMDECHO (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (foreach PAIR LIST-OF-PAIRS
    (if (setq SGET (ssget "_X"
  (list
    '(0 . "*TEXT")
    (cons 40 (car PAIR))
  )
  )
)
      (progn
(CREATE-LAYER-IF-NOT (cdr PAIR))
(command "_.chprop" SGET "" "_layer" (cdr PAIR) "")
(princ (strcat "\n>"
      (itoa (sslength SGET))
      "< Texte der Höhe >"
      (rtos (car PAIR) 2 2)
      "< auf Layer >"
      (cdr PAIR)
      "< gelegt!"
      )
)
      )
    )
  )
  (setvar "cmdecho" ALTCMDECHO)
  (princ)
)

;|
Subfunktion zum erzeugen eines Layernamens, wenn dieser
in der Zeichnung nicht existiert...
Quick & Dirty ;-)
|;
(defun CREATE-LAYER-IF-NOT (NAME /)
  (if (not (tblsearch "LAYER" NAME))
    (command "_.-layer" "_m" Name "")
  )
)



...

------------------
Ciao,
Marc

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 10. Nov. 2006 16: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

@marc.scherer,

danke für die Hilfe, aber um den gesamten Text zu verstehen, brauche ich noch etwas
- und mir raucht schon der Kopf!

Ich suche noch eine weitere Filtermöglichkeit, und zwar soll Text mit einem bestimmten Textstil- hier "ISOCP" - ausgewählt und der Textstil in "ISOCP3" gändert werden.

Mit

(ssget "_X" '((0. "*text") (7 . "ISOCP")))

ließe sich ja der Text wählen, aber wie ändere ich den Stil -"ändern" funktioniert nicht, gibts noch einen anderen ACAD-Befehl?

Chris


2

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 12. Nov. 2006 19: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 ChrisSin 10 Unities + Antwort hilfreich

Hi ChrisSin,
benutzt Du eigentlich zum Lisp Code checken und schreiben die eingebaute  VisualLisp Entwicklungsumgebung? (vlide) Hier wir der Code farbig dargestellt und Du kannst ihn auch Schritt für Schritt ausführen lassen und beobachten was gerade im Programm passiert und welche Rückgaben von Funktionen kommen. Das erleichtert das Verständnis immens...

------------------
Ciao,
Marc

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 13. Nov. 2006 09:09    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

Guten Moregen,
um ehrlich zu sein, nein! - Kannte ich bis gerade nicht, werde ich aber mal ausprobieren. Habe mich bis vor 4 Tagen noch nicht mit AutoCAD-Skripten auseinandersetzen müssen.

Es ist nur so, dass wir Zeichnungen in X-STeel haben, die aber als .dwg bzw. .dxf mit bestimmeten Layerzuordnungen abgegeben werden müssen, also

    auf Layer Text50  Texte mit der Höhe 5 mm
    auf Layer Text35  Texte mit der Höhe 3.5 mm
    usw.

sowie bestimmte Textstile und Linienzuordnugen. Nun will ich die Sachen in jeder Zeichnung nicht zu Fuß ändern, sondern mir Hilfe eines Skriptes. Dabei ist es eigentlich egal, ob in LISP oder einfach nur als ACAD-Befehlsfolge.

Und die Textstiländerung scheint, wie ich hier so lese nicht so leicht zu sein, habe bislang nur die LISP-Routine cht.lsp gefunden, sieht aber vielversprechend aus.

Chris

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 13. Nov. 2006 09: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 ChrisSin 10 Unities + Antwort hilfreich

Hi ChrisIn,
Du solltest UNBEDINGT die VLIDE benutzen (Befehl: VLIDE)!
Insbesondere die Debugging-Funktionen (Hilfe: Introducing Visual LISP Debugging Features).
Zum Textstil hab ich Dir hier noch mal 'ne Beispiel-Anwendung zusammengeschraubt. Hier auch wieder die Technik mit Subroutinen-Aufruf. In diesem Fall eine Subroutine zum erzeugen von Objektlisten gemäß ssget-Filterbedingungen...
Code:

;|
Textstyle-Changer
Ändert den Stil von Textobjekten.
Beim MText nicht den eventuell manuell veränderten Font,
das ist 'ne andere Baustelle ;-)
Argumente:
OLDSTYLE = Alter und zu suchender Stil als String
NEWSTYLE = Neuer, zuzuweisender Stil als String

Beispiele:
(TSCHANGE "Standard" "Stil1")
(TSCHANGE "Stil1" "Standard")

Rückgabe:
Anzahl der geänderten Objekte als Integer oder nil

|;
(defun TSCHANGE (OLDSTYLE NEWSTYLE /)
  ;; Ist der Zielstil überhaupt in der DWG vorhanden?
  (if (not (tblsearch "style" NEWSTYLE))
    ;; Wenn nicht, Fehlermeldung
    (princ
      (strcat
"\nZieltextstil >"
NEWSTYLE
"< nicht in aktueller Zeichnung definiert! Funktionsende."
      )
    )
    (progn
      ;; Zähler für Rückgabe initialisieren
      (setq INDEX 0)
      ;; Foreach-Schleife...
      (foreach TEXT
       ;; Funktionsaufruf zur Bildung einer Objektliste
       (SELSET-LISTER
      (list '(0 . "*TEXT") (cons 7 OLDSTYLE))
      't
    )
;; Neuen Stilnamen für jedes einzelne Textobjekt der Liste setzen
(vla-put-stylename TEXT NEWSTYLE)
;; Zähler Rückgabe hochzählen
(setq INDEX (1+ INDEX))
      )
    )
  )
  ;; Rückmeldung für Benutzer definieren
  (if (> INDEX 0)
    (princ (strcat "\nFür >"
   (itoa INDEX)
   "< Texte den Stil von >"
   OLDSTYLE
   "< auf >"
   NEWSTYLE
   "< geändert!"
   )
    )
    (progn
      (setq INDEX NIL)
      (princ (strcat "\nKeinen Text des Stils >"
     OLDSTYLE
     "< gefunden, nichts verändert!"
     )
      )
    )
  )
  ;; Rückgabewert der Funktion
  INDEX
)


;|
Funktion erzeugt ein Selection-Set anhand der als Argument übergebenen
Filterliste und gibt eine Liste von Objekten dieses Selection-Sets zurück.
Das Flag FLAG-ACTIVEXOBJECTS? steuert, ob die Liste Elementnamen (für Lisp pur)
oder ActiveX Objekte (für ActiveX verwendung) zurückgibt.
Argumente:
FILTERLIST = Eine Liste von dotted Pairs wie sie normal auch für ssget verwendet wird
  z.B. '((0 . "*TEXT")) oder '((0 . "INSERT")(8 . "Blocklayer*"))

FLAG-ACTIVEXOBJECTS? = 'T oder nil. Wenn T werden ActiveX Objekte zurückgegeben, ansonsten
  Lisp-Objektnamen

Beispiele:
(setq Objectlist (SELSET-LISTER '((0 . "*TEXT")(7 . "Stil1")) nil))

(setq AXlist (SELSET-LISTER '((0 . "*TEXT")(7 . "Stil1")) 'T))

|;
(defun SELSET-LISTER
       (FILTERLIST FLAG-ACTIVEXOBJECTS? / INDEX RETVAL SELSET)
  (vl-load-com) ;_ AX Schnittstelle initialisieren
  (setq INDEX -1) ;_ Variable Index als Counter initialisieren
  (if (setq SELSET (ssget "_X" FILTERLIST)) ;_ Auswahlsatz erzeugen
    (progn
      (repeat (sslength SELSET) ;_ Auswahlsatz zu Liste von Objektnamen machen
(setq
  RETVAL (cons (ssname SELSET (setq INDEX (1+ INDEX))) RETVAL)
)
      )
      ;; Wenn Flag 'T, dann Listenobjekte zu ActiveX Objekten konvertieren
      (if FLAG-ACTIVEXOBJECTS?
(setq RETVAL (mapcar 'vlax-ename->vla-object RETVAL))
      )
    )
  )
  ;; Rückgabe der Variablen RETVAL
  RETVAL
)


Der Code in der VLIDE sieht dann übrigens so aus:

Deutlich übersichtlicher, oder?
Have fun ;-)

------------------
Ciao,
Marc
   

[Diese Nachricht wurde von marc.scherer am 13. Nov. 2006 editiert.]

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 13. Nov. 2006 10:57    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

@marc.scherer,

danke für die Mühe, aber
oje,oje.....!

Habe folgendes gemacht:

Deine TSCHANGE Lisp-Routine in TSCHANGE.lsp Dokument gespeichert und geladen (appload),
dann im Skript über (TSCHANGE "ARIAL" "ISOCP") Befehl aufgerufen, dann Skript ausgeführt.

Meldung:
no function defintion (?!?) Was mache ich da falsch?


Probierte als totaler Rookie dann die cht.lsp-Routine

(command "(chtxt)" "V" "" "S" "ISOCP" "")
funktionierte aber auch nicht

Meldung: LISP-Befehl nicht verfügbar

, obwohl sich Befehl (chtxt) in Befehlszeile ausführen lässt?!

Chris


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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 13. Nov. 2006 11:14    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 ChrisSin 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von ChrisSin:
Deine TSCHANGE Lisp-Routine in TSCHANGE.lsp Dokument gespeichert und geladen (appload),
dann im Skript über (TSCHANGE "ARIAL" "ISOCP") Befehl aufgerufen, dann Skript ausgeführt.

Meldung:
no function defintion (?!?) Was mache ich da falsch?



Tja, keine Ahnung was Du falsch machst. Im Script müßte folgender Aufruf stehen:
Code:
(if (null TSCHANGE)(load TSCHANGE))
(TSCHANGE "ARIAL" "ISOCP")

Damit wird die Lisp Datei erstmal geladen, wenn die Funktion denn noch nicht in dem Namensraum der aktuellen Zeichnung definiert ist.
Vorraussetung ist natürlich, das sich dei Datei TSCHANGE.LSP im Acad-Suchpfad befindet.

Zitat:
Original erstellt von ChrisSin:
Probierte als totaler Rookie dann die cht.lsp-Routine

(command "(chtxt)" "V" "" "S" "ISOCP" "")
funktionierte aber auch nicht


Kann auch nicht funktionieren. Der Aufruf "(chtxt)" ist so was von falsch. Ich kenne chtxt.lsp nicht, deswegen kann ich Dir da auch ned weiterhelfen, sorry.

------------------
Ciao,
Marc

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 13. Nov. 2006 12:36    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

Bingo, TSchange.lsp einladen funktioniert wunderbar;-)
, weiß nicht was ich da vorher falsch hatte.

Nur stolpert das Programm immer über Selset-Lister: no function definition: SELSET-LISTER.

Habe
über (ssget "_X" '((0 . "*TEXT")(7 . "ARIAL")))
48 ARIAL-Textobjekte gewählt

und dann

(TSCHANGE "ARIAL" "ISOCP") --> no function definition: SELSET LISTER.??

Chris

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 13. Nov. 2006 17: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 ChrisSin 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von ChrisSin:

Nur stolpert das Programm immer über Selset-Lister: no function definition: SELSET-LISTER.

Habe
über (ssget "_X" '((0 . "*TEXT")(7 . "ARIAL")))
48 ARIAL-Textobjekte gewählt

und dann

(TSCHANGE "ARIAL" "ISOCP") --> no function definition: SELSET LISTER.??



Ich verkneife mir jetzt einfach mal ein paar Kommentare...
Aber liest Du auch mal was in meinem Code drinsteht? Du mußt natürlich den GESAMTEN Code, INKLUSIVE der "(defun SELSET-LISTER..." in Deine TSCHANGE.LSP aufnehmen. Die Funktion TSCHANGE ermittelt den Auswahlsatz selbständig. Da brauchst Du kein ssget "_x" vorweg schicken....

------------------
Ciao,
Marc

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 14. Nov. 2006 08: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

@marc.scherer,

tja, was soll ich sagen.... ?!
Danke für die Geduld:-)!

Chris

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 14. Nov. 2006 08: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 ChrisSin 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von ChrisSin:

Danke für die Geduld:-)!

@ChrisSin: Bitte, bitte. Gern' geschehen. Nix für ungut, aber manchmal hab' ich einfach den Eindruck das hier ganz allgemein gepostet wird bevor auch nur EIN klarer Gedanke an das Problem verschwendet wurde, und da kann ich auch schon mal "witzig" werden. Hast nun leider nur Du als Stellvertreter hierfür abbekommen  . Aber Schwamm drüber, ich helfe ja gerne. Klappt es denn jetzt? VLide mal angeschaut?

------------------
Ciao,
Marc
   

[Diese Nachricht wurde von marc.scherer am 14. Nov. 2006 editiert.]

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

ChrisSin
Mitglied
Bauingenieur


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

Beiträge: 17
Registriert: 09.11.2006

ACAD2002

erstellt am: 14. Nov. 2006 09: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

Ja, läuft anstandslos:-)

Ich bastel mir jetzt noch mein skript zusammen, dass dann in einem Rutsch Text und Layer ändert. Dürfte jetzt mit eurer Hilfe - auch von CADmium - aber funktionieren...(wenn nicht meld' ich mich noch mal;-))!

Und um LISP richtig zu lernen, muss ich mir wohl auch mal richtig Zeit nehmen! Bislang gab's dazu aber nicht die Notwendigkeit, weil ich mit AUTOCAD eher weniger zu tun habe...
So im Hauruck-Vefahren gehts jedenfalls nicht, oder nur mit Unterstützung;-)

Chris

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