Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Geometrie verä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
Autor Thema:   Geometrie verändern (720 mal gelesen)
micha98
Mitglied


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

Beiträge: 2
Registriert: 03.01.2012

erstellt am: 03. Jan. 2012 13:28    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,
bin gerade dabei mein erstes lisp Programm zu schreiben. Dabei komme ich an folgender Stelle nicht mehr weiter. Und zwar möchte ich die Linienstärke wie folgt verändern:

(defun staerke( _element _a / )
  (entmod
      (list
        '(370 . _a)
          (assoc -1 _element)
      )
  ) 
)
Wenn ich es richtig verstanden hab liegt das Problem bei _a. Da _a nicht evaluiert wird. Wie kann ich dieses Problem beheben? Danke für die Hilfe.

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

System: F1
und Google

erstellt am: 03. Jan. 2012 13:53    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 micha98 10 Unities + Antwort hilfreich

Herzlich Willkommen !

Deine Annahme ist richtig, aber es gibt noch mehr Probleme..
das evaluieren schaffen wir so {wir nehmen das 'QUOTE weg und erschaffen ein dottedpair mit "cons"  (cons 1 "A")=> (1 . "A") }:

(defun staerke( _element _a / )
  (entmod
      (list
        (cons 370 _a)
          (assoc -1 _element)
      )
  ) 
)

wenn man es so verwenden würde, käme bei deinem entmod aber vermutlich dies an:

   (entmod   ((370 . 0.35)(-1 . <Objektname: 7e5643b0> )))

das wird Acad nicht akzeptieren, wenn dann müßte das

  (entmod
      (SUBST (cons 370 _a)(assoc 370 _element)_element)
  )

lauten. DAS wird aber nur bei Objekten funktionieren welche eine Linienstärke ungleich "VonLayer" haben
denn nur dann ist der gc(GruppenCode) 370 überhaupt vorhanden ! Und wenn er nicht vorhanden ist läuft das
Programm in einen Fehler !

Beispiel - Objekt OHNE Linienstärke ungleich VonLayer:
Befehl: (setq _element (entget(car(entsel))))

Objekt wählen: ((-1 . <Objektname: 7e5643a0> ) (0 . "LINE") (330 . <Objektname:
7e562c10> ) (5 . "154") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(100 . "AcDbLine") (10 2.03663 9.52242 0.0) (11 5.2955 11.6996 0.0) (210 0.0
0.0 1.0))

Befehl: (assoc 370 _element)
nil

Beispiel - Objekt MIT Linienstärke ungleich VonLayer:
Befehl: (setq _element (entget(car(entsel))))

Objekt wählen: ((-1 . <Objektname: 7e5643b0> ) (0 . "LINE") (330 . <Objektname:
7e562c10> ) (5 . "156") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(370 . 13) (100 . "AcDbLine") (10 4.96768 7.7884 0.0) (11 7.39737 11.006 0.0)
(210 0.0 0.0 1.0))

Befehl: (assoc 370 _element)
(370 . 13)


hier eine funktionsfähige Version:


(defun staerke ( _element _a / )
  (entmod
      (if (assoc 370 _element)
          (subst (cons 370 _a) (assoc 370 _element) _element)
          (append _element (list(cons 370 _a)))
      )
  )
)

dann kann man es aber auch gleich multifunktioneller erstellen:

(defun SETGC ( _element dxfc _a / )
  (if (= 'ENAME (type _element))(setq _element (entget _element))); falls ENAME übergeben wird
  (entmod
      (if (assoc dxfc _element)
          (subst (cons dxfc _a) (assoc dxfc _element) _element)
          (append _element (list(cons dxfc _a)))
      )
  )
)

anzuwenden wäre es dann so:
(setgc (car(entsel)) 370 70)
(setgc (entget(car(entsel))) 370 70)
oder so:
(setgc (car(entsel)) 62 3)
(setgc (entget(car(entsel))) 8 "0")
etc.


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

[Diese Nachricht wurde von cadffm am 03. Jan. 2012 editiert.]

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

micha98
Mitglied


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

Beiträge: 2
Registriert: 03.01.2012

erstellt am: 03. Jan. 2012 14:28    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

Danke für die schnelle und ausführliche Antwort.
Damit haben Sie mir sehr geholfen.

Wenn man weiß wie es geht, ists eigentlich ganz einfach. Aber als Anfänger...

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

System: F1
und Google

erstellt am: 03. Jan. 2012 14:53    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 micha98 10 Unities + Antwort hilfreich

..als Anfänger sollte man jede Funktion (für sich) Stück für Stück erlernen.
Auch wenn Axel keine Mail mehr beantworten kann      , seine Seiten werden auch dir weiter helfen:
http://www.autolisp-tutorial.mapcar.net/

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

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)2020 CAD.de | Impressum | Datenschutz