Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  LISP Linientypfaktor und Farbe ändern

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 Linientypfaktor und Farbe ändern (1191 mal gelesen)
ReneReichel
Mitglied
Technischer Projektleiter


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

Beiträge: 58
Registriert: 07.02.2018

ACAD 2019
Win10, Intel Xeon CPU E3-1275 v6, 3.80 GHz, 32 GB RAM, NVIDIA Quadro P4000

erstellt am: 07. Apr. 2021 11: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


Folie.lsp

 
Hallo zusammen,

ich beginne gerade, mich mit LISP zu beschäftigen, um einige Zeichnungsabläufe einfacher zu gestalten. Ich habe jetzt eine LISP gebastelt, die für die Darstellung von Folien eine gewählte Polylinie um die halbe und ganze Foliendicke versetzt und die mittlere Polylinie auf LT verdeckt und Breite 0,9xFoliendicke setzt.

Ich würde diese mittlere PL gerne mit der Farbe 140 versehen und den Linientypfaktor in Abhängigkeit von der Foliendicke festlegen, wie kann ich das in die LISP einbauen?

Danke schonmal im Voraus.

Mfg René

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: 07. Apr. 2021 11: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 ReneReichel 10 Unities + Antwort hilfreich

Mit (entlast) bekommst du die zuletzt erzeugte Polylinie (aber Achtunh, _OFFSET kann in Sonderfällen z.B. Selbstüberschneidungen mehr als 1 Polylinie erzeugen).
(entlast) kannst du dann  nach _OFFSET wieder mit _CHPROP verwenden.

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

Udo Hübner
www.CAD-Huebner.de

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

ReneReichel
Mitglied
Technischer Projektleiter


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

Beiträge: 58
Registriert: 07.02.2018

ACAD 2019
Win10, Intel Xeon CPU E3-1275 v6, 3.80 GHz, 32 GB RAM, NVIDIA Quadro P4000

erstellt am: 07. Apr. 2021 11:59    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,

Zitat:
Original erstellt von CAD-Huebner:
Mit (entlast) bekommst du die zuletzt erzeugte Polylinie (aber Achtunh, _OFFSET kann in Sonderfällen z.B. Selbstüberschneidungen mehr als 1 Polylinie erzeugen).
(entlast) kannst du dann  nach _OFFSET wieder mit _CHPROP verwenden.


Vielleicht habe ich mich nicht ganz klar ausgedrückt, die Zuweisung für den Linientyp und die Breite der mittleren PL funktioniert, ich muss da ja gar nicht mit (entlast) arbeiten, da ich die Zuweisung direkt nach dem Offset vornehme. Nur weiß ich nicht, wie ich der PL eine Farbe und einen Linientypfaktor zuweisen kann.

Mit Selbstüberschneidungen habe ich keine Probleme, wer eine sich selbst schneidende Abdichtung zeichnet, darf ruhig merken, dass da was nicht richtig ist...

Mfg René

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: 07. Apr. 2021 14:32    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 ReneReichel 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von ReneReichel:
[i]... Nur weiß ich nicht, wie ich der PL eine Farbe und einen Linientypfaktor zuweisen kann....
/i]

Zum manipulieren der Objekte kann man auch direkt auf die Objektdaten zugreifen.
Sieh Dir mal an, was Du erhälst, wenn Du folgendes ausführst:

Code:

(setq obj (car (entsel "\nPolylinie wählen: "))) ; hast Du in Deinem Code ja schon
(setq obj_data (entget obj))

Die Liste enthält die Daten Deiner Polylinie in der Form (DFX-Gruppencode . Wert)
Eine Auflistung der DXF-Gruppencodes (GC) findest Du unter anderem hier.

GC 8 ist zum Beispiel der Layer, GC 62 die Farbe, GC 48 der Linientypfaktor.

Mit:

Code:

(if (assoc 62 obj_data)
    (setq obj_data (subst (cons 62 7) (assoc 62 obj_data) obj_data))
    (setq obj_data (reverse (cons (cons 62 3) (reverse obj_data))))
)
( ... weiter Aenderungen nach obigem Beispiel ...)

(entmod obj_data)


kannst Du Deiner Polylinie nun eine neue Farbe verpassen, wenn diese noch VONLAYER ist oder die bestehende Farbe ändern. Die Zahl bei (cons 62 ZAHL) ist die Farbnummer. Das Ganze geht natürlich auch für die schon per "command" geänderten Eigenschaften.

HTH

Gruß
Thomas

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

StephanJP
Mitglied
CAD-Admin


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

Beiträge: 829
Registriert: 09.11.2000

erstellt am: 07. Apr. 2021 14:59    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 ReneReichel 10 Unities + Antwort hilfreich

oder einfach die Zeile:
Zitat:
(command "_chprop" "_L" "" "_LT" "verdeckt" "")

durch
(command "_chprop" "_L" "" "_LT" "verdeckt" "_C" "140" "")

ersetzen?


------------------
 
gruß
Stephan

[Diese Nachricht wurde von StephanJP am 07. Apr. 2021 editiert.]

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

ReneReichel
Mitglied
Technischer Projektleiter


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

Beiträge: 58
Registriert: 07.02.2018

ACAD 2019
Win10, Intel Xeon CPU E3-1275 v6, 3.80 GHz, 32 GB RAM, NVIDIA Quadro P4000

erstellt am: 07. Apr. 2021 15:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Stephan,

Zitat:
Original erstellt von StephanJP:
oder einfach die Zeile:

durch
(command "_chprop" "_L" "" "_LT" "verdeckt" "_C" "140" "")

ersetzen?


das funzt super, danke. Geht das auch mit dem Linientypfaktor?

Mfg René


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

ReneReichel
Mitglied
Technischer Projektleiter


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

Beiträge: 58
Registriert: 07.02.2018

ACAD 2019
Win10, Intel Xeon CPU E3-1275 v6, 3.80 GHz, 32 GB RAM, NVIDIA Quadro P4000

erstellt am: 07. Apr. 2021 15: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

Hallo Thomas,

Zitat:
Original erstellt von spider_dd:

Eine Auflistung der DXF-Gruppencodes (GC) findest Du unter anderem hier.

GC 8 ist zum Beispiel der Layer, GC 62 die Farbe, GC 48 der Linientypfaktor.

Mit:

Code:

(if (assoc 62 obj_data)
     (setq obj_data (subst (cons 62 7) (assoc 62 obj_data) obj_data))
     (setq obj_data (reverse (cons (cons 62 3) (reverse obj_data))))
)
( ... weiter Aenderungen nach obigem Beispiel ...)

(entmod obj_data)


kannst Du Deiner Polylinie nun eine neue Farbe verpassen, wenn diese noch VONLAYER ist oder die bestehende Farbe ändern. Die Zahl bei (cons 62 ZAHL) ist die Farbnummer. Das Ganze geht natürlich auch für die schon per "command" geänderten Eigenschaften.

HTH

Gruß
Thomas


Hallo Thomas,

da steh ich ein bißchen auf dem Schlauch. Die Wenn-Prüfung erschient mir überflüssig, da ich der mittleren PL immer einen LTF in Abhängigkeit der Foliendicke zuweisen will (Farbe hab ich über Stephan's Ansatz gemacht...).

Zudem passiert nichts, wenn ich Deinen Ansatz probiere. Kann es sein, dass obj_data gar nicht abgerufen wird, weil ich die mittlere Linie ja nicht anklicke, sondern aus dem _Offset- und _pedit-Befehl komme?

Mfg René

[Diese Nachricht wurde von ReneReichel am 07. Apr. 2021 editiert.]

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

StephanJP
Mitglied
CAD-Admin


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

Beiträge: 829
Registriert: 09.11.2000

erstellt am: 07. Apr. 2021 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 ReneReichel 10 Unities + Antwort hilfreich

(command "_chprop" "_L" "" "_LT" "verdeckt" "_C" "140" "_LTS" "0.25" "")

zur Erklärung:
"_LT" = "LType"
"_C"  = "_Color"
"_LTS" = "LTScale"

------------------
 
gruß
Stephan

[Diese Nachricht wurde von StephanJP am 07. Apr. 2021 editiert.]

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

ReneReichel
Mitglied
Technischer Projektleiter


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

Beiträge: 58
Registriert: 07.02.2018

ACAD 2019
Win10, Intel Xeon CPU E3-1275 v6, 3.80 GHz, 32 GB RAM, NVIDIA Quadro P4000

erstellt am: 07. Apr. 2021 16:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von ReneReichel:
Hallo Thomas,

Zudem passiert nichts, wenn ich Deinen Ansatz probiere. Kann es sein, dass obj_data gar nicht abgerufen wird, weil ich die mittlere Linie ja nicht anklicke, sondern aus dem _Offset- und _pedit-Befehl komme?

Mfg René

[Diese Nachricht wurde von ReneReichel am 07. Apr. 2021 editiert.]



Edit:

Problem gelöst, wenn ich die PL über entlast neu anwähle, funzt es. Danke für Deinen Input!

Mfg René

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

ReneReichel
Mitglied
Technischer Projektleiter


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

Beiträge: 58
Registriert: 07.02.2018

ACAD 2019
Win10, Intel Xeon CPU E3-1275 v6, 3.80 GHz, 32 GB RAM, NVIDIA Quadro P4000

erstellt am: 07. Apr. 2021 16: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 Stephan,

Zitat:
Original erstellt von StephanJP:
(command "_chprop" "_L" "" "_LT" "verdeckt" "_C" "140" "_LTS" "0.25" "")

zur Erklärung:
"_LT" = "LType"
"_C"  = "_Color"
"_LTS" = "LTScale"


manchmal ist's ganz einfach... Passt super, danke.

Mfg René

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: 07. Apr. 2021 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 ReneReichel 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von ReneReichel:
... Die Wenn-Prüfung erschient mir überflüssig, da ich der mittleren PL immer einen LTF in Abhängigkeit der Foliendicke zuweisen will ...

Zudem passiert nichts, wenn ich Deinen Ansatz probiere. Kann es sein, dass obj_data gar nicht abgerufen wird, weil ich die mittlere Linie ja nicht anklicke...


zu 1) Wenn der Linientypfaktor 1 ist und Farbe oder Linientyp "VONLAYER", git es die entsprechenden Gruppen in den Daten nicht. Daher die Prüfung ob die Gruppe vorhanden ist.

zu 2) Das ist richtig, hatte ich nicht genau beachtet. Da müsste nach dem versetzen dann eher ein  (setq obj_data (entget (entlast))) folgen.

Es gibt immer viele Wege die zum Ziel führen.

Gruß
Thomas

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 10. Apr. 2021 13: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 ReneReichel 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von ReneReichel:
Nur weiß ich nicht, wie ich der PL eine Farbe und einen Linientypfaktor zuweisen kann.

Mit dieser SSMODENT Funktion kannst Du jeden DXF-Wert eines Entities verändern, also z.B. mit (ssmodent <en> 62 2) dem <en> die Farbe 2 zuweisen (hinter DXF Gruppencode 62 steht die Farbe). Du kannst damit auch bei einer Blockreferenz den referenzierten Block gegen einen anderen tauschen, kannst den Startpunkt einer Linie ändern, und was immer Du sonst noch ändern willst.

Code:

(defun ssmodent (ename dxf val)
  (entmod (at-subst
      (cons dxf val)
      (entget ename)
    )
    )
)

(defun at-subst (ntok lst)
  (cond
    ((not lst)
     (list ntok)
    )
    ((not (assoc (car ntok) lst))
     (reverse (cons ntok (reverse lst)))
    )
    ('T
     (subst ntok (assoc (car ntok) lst) lst)
    )
  )
)


[Diese Nachricht wurde von archtools am 10. Apr. 2021 editiert.]

[Diese Nachricht wurde von archtools am 12. Apr. 2021 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