Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Layereinstellung funktioniert nicht sauber

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:  Layereinstellung funktioniert nicht sauber (1704 mal gelesen)

Ex-Mitglied

erstellt am: 10. Mai. 2004 09:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo,

ich habe in den nachfolgenden Code den Layer mit eingearbeitet. Das heißt er
soll sich bei Programm start den aktuellen Layer merken und einen neuen zugewiesen
bekommen z.B. 0_Li_Gr_018. Nach Programm ende soll dann der gemerkte Layer
wieder aktiv sein.
Wenn ich nun den nachfolgenden Code ausführe bekomme ich manchmal die Meldung :
Fehler: „Einstellung für CAD-Variable zurückgewiesen“
Woran kann das liegen ?
Wie kann ich das mit dem Layer sauber reinkriegen.
Mit den Code kann man Böschungslinien erstellen.
Danke für Eure Hilfe.
Nun der Code:

(defun C:BOESCH (/ boesch_err getent getd oech obm en1 en2 d
                  ss ssneu i en ent insp pt2 al pt ang j)
  (setq oldlayer (getvar "CLAYER"))
  (if (tblobjname "LAYER" "0_Li_Gr_018")
    (setvar "CLAYER" "0_Li_Gr_018")
    )

  (defun *boesch_err* (s)  ; Fehlerroutine
    (setq *error* oerr)
    (command "_.UNDO" "_End")
    (setvar "CMDECHO" oech)
    (setvar "BLIPMODE" obm)
    (princ)
  )

  (defun getent (txt / en)
    (princ txt)
    (initget " ")
    (while (not (setq en (entsel "")))
      (initget " ")
    )
    en
  )

  ;; (getd <txt> )
  ;; erweiterte (getdist) Funktion
  ;;
  (defun getd (txt / cont pt1 pt2 d)
    (setq cont T)
    (while cont
      (initget 128)
      (setq pt1 (getpoint txt))
      (cond
        ( (null pt1) (setq cont nil))
        ( (= 'LIST (type pt1))
          (setq pt2
            (getpoint pt1 "\nZweiter Punkt (nach Links = neg. Abstand): ")
          )
          (if pt2
            (progn
              (setq d (distance pt1 pt2))
              (if (> (car pt1) (car pt2))
                (setq d (- d))
              )
              (setq cont nil)
            )
          )
        )
        ( (setq d (distof pt1))
          (setq cont nil)
        )
      )
    )
    d
  )

  (setq oerr *error*
        *error* *boesch_err*
        oech (getvar "CMDECHO")
        obm (getvar "BLIPMODE")
  )
  (setvar "CMDECHO" 0)
  (setvar "BLIPMODE" 0)

  (setq en1 (getent "\nObere Grenzkante picken: "))
  (if (/= "" en1)
    (progn
      (redraw (car en1) 3)
      (setq en2 (getent "\nUntere Grenzkante picken: "))
      (if (/= "" en2)
        (progn
          (redraw (car en2) 3)
          (setq d (getd "\nSchraffurabstand (neg. Abstand wechselt die Richtung): "))
          (if d
            (progn
              (princ "\nErzeuge Boeschungsschraffur...")
              (if (= 0 (getvar "UNDOCTL")) (command "_.UNDO" "_All"))
              (command "_.UNDO" "_End" "_.UNDO" "_Group")

              ;; Blockdefinition fuer temp. Linienbloecke erzeugen:
              (entmake '((0 . "BLOCK")(2 . "BOESCH")(10 0.0 0.0 0.0)(70 . 0)))
              (entmake
                (list
                  '(0 . "LINE")
                  '(10 0.0 0.0 0.0)
                  (if (minusp d)
                    '(11 0.0 0.0001 0.0)
                    '(11 0.0 -0.0001 0.0)
                  )
                )
              )
              (entmake '((0 . "ENDBLK")))

              ;; temp. Linienbloecke einfuegen:
              (command "_.MEASURE" en1 "_Block" "BOESCH" "_Y" (abs d))
              (setq ss (ssget "_P")
                    ssneu (ssadd)
                    i 0
              )
              ;; temp. Linienbloecke explodieren:
              (while (setq en (ssname ss i))
                (command "_.EXPLODE" en)
                (setq en (entlast)
                      ssneu (ssadd en ssneu)
                      i (1+ i)
                )
              )

              (setq i 0
                    j 1
                    ss (ssadd)
                    ssd (ssadd)
              )
              ;; Linien dehnen und kuerzen:
              (command "_.EXTEND" en2 "")
              (while (setq en (ssname ssneu i))
                (setq i (1+ i)
                      ent (entget en)
                      pt1 (cdr (assoc 10 ent))
                      pt2 (cdr (assoc 11 ent))
                )
                (command (list en (trans pt2 0 1)))
                (if (equal pt2 (setq pt3 (cdr (assoc 11 (setq ent (entget en '("*")))))) 0.00001)
                  (ssadd en ssd)
                  (if (= j 1)
                    (progn
                      (ssadd en ss)
                      (setq j 0)
                    )
                    (setq j (1+ j))
                  )
                )
              )
              (command)
              (setq i 0)
              (while (setq en (ssname ss i))
                (setq ent (entget en)
                      pt1 (cdr (assoc 10 ent))
                      pt2 (cdr (assoc 11 ent))
                        d (/ (distance pt1 pt2) 2)
                      ang (angle pt1 pt2)
                      pt2 (polar pt1 ang d)
                      ent (subst (cons 11 pt2) (assoc 11 ent) ent)
                        i (1+ i)
                )
                (entmod ent)
              )
              (setq i 0)
              (while (setq en (ssname ssd i))
                (entdel en)
                (setq i (1+ i))
              )
              (command "_.-GROUP" "_Create" "*" "Boeschung" ssneu "")
              (command "_.UNDO" "_End")
            )
          )
        )
      )
    )
  )
  (if (and en1 (/= "" en1)) (redraw (car en1) 4))
  (if (and en2 (/= "" en2)) (redraw (car en2) 4))
  (setvar "CMDECHO" oech)
  (setvar "BLIPMODE" obm)
  (setq *error* oerr)
  (princ)
  (setvar "CLAYER" oldlayer)
)

Gruß
Ralph

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

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

erstellt am: 10. Mai. 2004 10:02    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

die Fehlermeldung ist nicht Vollständig. Er sagt sicherlich, das der CLAYER nicht gesetzt werden kann.
Du musst sicherstellen, das der Azsgangslayer auch noch vorhanden und nicht gefrohren o.ä. ist.

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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


Ex-Mitglied

erstellt am: 10. Mai. 2004 10:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

der Fehler lautet genau:
; Fehler: Einstellung für AutoCAD-Variable zurückgewiesen: "CLAYER"
"0_Li_Or_013"
Dieser Layer ist der aktuelle Layer.
Der ist aber nicht gefroren.
Woran kann es noch liegen?
Gib mir noch einen Tipp
Ralph

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 10. Mai. 2004 10: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

Hallo Ralph,

Ist vielleicht noch irgendein anderer Befehl aktiv? Was steht denn im Textfenster?

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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


Ex-Mitglied

erstellt am: 10. Mai. 2004 10:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo,
dies steht im Textfenster:
Befehl: _BOESCH

Obere Grenzkante picken:
Untere Grenzkante picken:
Schraffurabstand (neg. Abstand wechselt die Richtung): 1

Erzeuge Boeschungsschraffur...
Definiert Block "BOESCH" neu
; Fehler: Einstellung für AutoCAD-Variable zurückgewiesen: "CLAYER"
"0_Li_Or_013"

Befehl:

Wenn ich das Programm ein zweites mal ausführe, funktioniert es
komisch oder?
Ralph

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 10. Mai. 2004 10: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

Hallo Ralph,

verändere mal die Zeile
(setvar "CMDECHO" 1) auf 1
dann schau noch einmal, was im Textfenster so steht.

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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


Ex-Mitglied

erstellt am: 10. Mai. 2004 10:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,
jetzt kommen diese Meldungen:

Befehl: _BOESCH

Obere Grenzkante picken:
Untere Grenzkante picken:
Schraffurabstand (neg. Abstand wechselt die Richtung): 1

Erzeuge Boeschungsschraffur..._.UNDO Anzahl der rückgängig zu machenden
Operationen eingeben oder [Auto/Steuern/Beginn/Ende/Markierung/Rück] <1>: _End
Befehl: _.UNDO Anzahl der rückgängig zu machenden Operationen eingeben oder
[Auto/Steuern/Beginn/Ende/Markierung/Rück] <1>: _Group
Befehl: _.MEASURE
Objekt wählen, das gemessen werden soll:
Segmentlänge angeben oder [Block]: _Block
Namen des einzufügenden Blocks eingeben: BOESCH
Soll der Block mit dem Objekt ausgerichtet werden? [Ja/Nein] <J>: _Y
Segmentlänge angeben: 1.000000000000000
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXPLODE
Objekt wählen:
Befehl: _.EXTEND
Aktuelle Einstellungen: Projektion=BKS, Kante=Keine
Grenzkanten wählen ...
Objekte wählen:  1 gefunden

Objekte wählen:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Zu dehnendes Objekt wählen bzw. zum Stutzen mit der Umschalttaste wählen oder
[Projektion/Kante/ZUrück]:
Befehl: _.-GROUP Option für Gruppe eingeben
[?/Reihenfolge/Hinzufügen/ENtfernen/URsprung/UMbenennen/Wählbar/ERstellen]
<ERstellen>: _Create
Gruppennamen eingeben oder [?]: * Gruppenbeschreibung eingeben: Boeschung
Objekte wählen:  14 gefunden

Objekte wählen:
Befehl: _.UNDO Anzahl der rückgängig zu machenden Operationen eingeben oder
[Auto/Steuern/Beginn/Ende/Markierung/Rück] <1>: _End
Befehl: ; Fehler: Einstellung für AutoCAD-Variable zurückgewiesen: "CLAYER"
"0_Li_Cy_013"

Gruß
Ralph

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 10. Mai. 2004 11:17    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

Sicher, dass dieser Layer "0_Li_Cy_013" existiert?

Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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


Ex-Mitglied

erstellt am: 10. Mai. 2004 11:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Holger,
ja er existiert!
Ralph

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. Mai. 2004 18:11    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 ABDN,
das Acad unter irgendwelchen Umständen ab so ca. 2002 Probleme mit dem setzen der Sysvar "CLAYER" aus AutoLisp heraus hat, kenne ich schon.
Habe schon seit Jahren ein Lisp im Einsatz, welches mir Layer so setzt, wie sie aus 'ner externen Parameter-Datei kommen.
Lief immer bestens mit setvar "clayer" am Ende bis irgenwann (R2002??) sporadisch die Fehlermeldung: "Fehler: Einstellung für AutoCAD-Variable zurückgewiesen: "CLAYER"" kam.
Daraufhin habe ich mein Tool abgeändert. Den aktuellen Layer stelle ich jetzt nur noch mit vl- Befehlen um. Das funzt zuverlässig.

Code:

(vl-load-com)

; Macht einen Layer aktuell
(defun set-layer(name / )
  (vla-put-ActiveLayer
    (current-document)
    (vla-item(document-layers)name)
  )
)

; gibt die aktuelle Zeichnung zurück
(defun current-document( / )
  (vla-get-activedocument
    (vlax-get-acad-object)
  )
)

; Gibt die Layer-Collection zurück
(defun document-layers( / )
  (vla-get-layers
    (current-document)
  )
)



..

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

[Diese Nachricht wurde von marc.scherer am 10. Mai. 2004 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. Mai. 2004 19: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

Uuund anbei noch mal 'n komplettes Ding...
Code:

(vl-load-com)

; Macht einen Layer aktuell
(defun SET-LAYER (NAME / RETVAL)
  (vla-put-activelayer
    (CURRENT-DOCUMENT)
    (setq RETVAL (vla-item (DOCUMENT-LAYERS) NAME))
  ) ;_ Ende von vla-put-ActiveLayer
  RETVAL
) ;_ Ende von defun


; gibt das Vla-Object zu einem
; Layernamen zurück
(defun layer-object(name / result)
  (vlax-for layer(document-layers)
    (if
      (=(strcase name)
        (strcase(vla-get-name layer))
      )
      (setq result layer)
    )
  )
  result
)

;; Erzeugt einen neuen Layer
;; Props ist 'ne Liste aus Eigenschaftswerten
;| z.B.

(list (cons 'COLOR Integer) -> Integer = Farbnummer
      (cons 'LINETYPE Linientypstring) -> String der einen existierenden Linientyp benennt
      (cons 'PLOTTABLE Druckbar-Flag) -> bestimmt den Druck-Status des Layers 0 = Nicht druckbar, -1 = druckbar
      (cons 'LINEWEIGHT IntegerFlag) -> Linienstärkenvorgabe für den Layer von 0 bis 211 und -1 = VonLayer -2 = VonBlock -3 = Vorgabe
) ;_ Ende von list

|;
;; Es finden keinerlei Prüfungen auf Gültigkeit statt!!!
;|
Beispiel:
(CREATE-IF-NOT-AND-SET "HaselDasel" (list (cons 'COLOR 3)(cons 'LINETYPE "CONTINUOUS")(cons 'PLOTTABLE -1)(cons 'LINEWEIGHT -1)))
oder
(CREATE-IF-NOT-AND-SET "HaselDasel" nil) wenn die Eigenschaften egal sind
|;
(defun CREATE-IF-NOT-AND-SET (NAME PROPS / NEWLAYER RETVAL)
  (if
    (not
      (member (strcase NAME)
              (mapcar (function (lambda (X) (strcase X))) (LAYERLIST))
      ) ;_ Ende von member
    ) ;_ Ende von not
     (progn
       (setq NEWLAYER
              (vla-add (DOCUMENT-LAYERS) NAME)
       ) ;_ Ende von setq
       (if props
       (foreach PROP PROPS
         (vlax-put-property
           NEWLAYER
           (car PROP)
           (cdr PROP)
         ) ;_ Ende von vlax-put-property
       ) ;_ Ende von foreach
         )
       (setq retval (set-layer NAME))
     ) ;_ Ende von progn
    (setq retval (set-layer NAME))   
  ) ;_ Ende von if
  retval
) ;_ Ende von defun


(defun LAYERLIST (/ RETVAL)
  (vlax-for FOR-ITEM (DOCUMENT-LAYERS)
    (setq RETVAL (cons (vla-get-name
                         FOR-ITEM
                       ) ;_ Ende von vla-get-name
                       RETVAL
                 ) ;_ Ende von cons
    ) ;_ Ende von setq
  ) ;_ Ende von vlax-for
  RETVAL
) ;_ Ende von defun


; Ermittelt den aktuellen Layer
(defun get-current-layer( / )
  (vla-get-activelayer
    (current-document)
  )
)

; Gibt die Layer-Collection zurück
(defun document-layers( / )
  (vla-get-layers
    (current-document)
  )
)

; gibt die aktuelle Zeichnung zurück
(defun current-document( / )
  (vla-get-activedocument
    (vlax-get-acad-object)
  )
)

(defun C:BOESCH (/     BOESCH_ERR  OECH  OBM   EN1   EN2   D     SS
                 SSNEU I     EN    ENT   INSP  PT2   AL    PT    ANG
                 J
                )
  (setq OLDLAYER (getvar "CLAYER")
        CLAYER   "0_Li_Gr_018"
  ) ;_ Ende von setq
  (CREATE-IF-NOT-AND-SET CLAYER (list (cons 'COLOR 3)(cons 'LINETYPE "CONTINUOUS")(cons 'PLOTTABLE -1)(cons 'LINEWEIGHT -1)))


  (defun *BOESCH_ERR* (S)               ; Fehlerroutine
    (setq *ERROR* OERR)
    (command "_.UNDO" "_End")
    (setvar "CMDECHO" OECH)
    (setvar "BLIPMODE" OBM)
    (princ)
  ) ;_ Ende von defun

  (defun GETENT (TXT / EN)
    (princ TXT)
    (initget " ")
    (while (not (setq EN (entsel "")))
      (initget " ")
    ) ;_ Ende von while
    EN
  ) ;_ Ende von defun

  ;; (getd <txt> )
  ;; erweiterte (getdist) Funktion
  ;;
  (defun GETD (TXT / CONT PT1 PT2 D)
    (setq CONT t)
    (while CONT
      (initget 128)
      (setq PT1 (getpoint TXT))
      (cond
        ((null PT1) (setq CONT NIL))
        ((= 'list (type PT1))
         (setq PT2
                (getpoint PT1
                          "\nZweiter Punkt (nach Links = neg. Abstand): "
                ) ;_ Ende von getpoint
         ) ;_ Ende von setq
         (if PT2
           (progn
             (setq D (distance PT1 PT2))
             (if (> (car PT1) (car PT2))
               (setq D (- D))
             ) ;_ Ende von if
             (setq CONT NIL)
           ) ;_ Ende von progn
         ) ;_ Ende von if
        )
        ((setq D (distof PT1))
         (setq CONT NIL)
        )
      ) ;_ Ende von cond
    ) ;_ Ende von while
    D
  ) ;_ Ende von defun

  (setq OERR    *ERROR*
        *ERROR* *BOESCH_ERR*
        OECH    (getvar "CMDECHO")
        OBM     (getvar "BLIPMODE")
  ) ;_ Ende von setq
  (setvar "CMDECHO" 0)
  (setvar "BLIPMODE" 0)

  (setq EN1 (GETENT "\nObere Grenzkante picken: "))
  (if (/= "" EN1)
    (progn
      (redraw (car EN1) 3)
      (setq EN2 (GETENT "\nUntere Grenzkante picken: "))
      (if (/= "" EN2)
        (progn
          (redraw (car EN2) 3)
          (setq D
                 (GETD
                   "\nSchraffurabstand (neg. Abstand wechselt die Richtung): "
                 ) ;_ Ende von getd
          ) ;_ Ende von setq
          (if D
            (progn
              (princ "\nErzeuge Boeschungsschraffur...")
              (if (= 0 (getvar "UNDOCTL"))
                (command "_.UNDO" "_All")
              ) ;_ Ende von if
              (command "_.UNDO" "_End" "_.UNDO" "_Group")

              ;; Blockdefinition fuer temp. Linienbloecke erzeugen:
              (entmake '((0 . "BLOCK")
                         (2 . "BOESCH")
                         (10 0.0 0.0 0.0)
                         (70 . 0)
                        )
              ) ;_ Ende von entmake
              (entmake
                (list
                  '(0 . "LINE")
                  '(10 0.0 0.0 0.0)
                  (if (minusp D)
                    '(11 0.0 0.0001 0.0)
                    '(11 0.0 -0.0001 0.0)
                  ) ;_ Ende von if
                ) ;_ Ende von list
              ) ;_ Ende von entmake
              (entmake '((0 . "ENDBLK")))

              ;; temp. Linienbloecke einfuegen:
              (command "_.MEASURE" EN1 "_Block" "BOESCH" "_Y" (abs D))
              (setq SS    (ssget "_P")
                    SSNEU (ssadd)
                    I     0
              ) ;_ Ende von setq
              ;; temp. Linienbloecke explodieren:
              (while (setq EN (ssname SS I))
                (command "_.EXPLODE" EN)
                (setq EN    (entlast)
                      SSNEU (ssadd EN SSNEU)
                      I     (1+ I)
                ) ;_ Ende von setq
              ) ;_ Ende von while

              (setq I   0
                    J   1
                    SS  (ssadd)
                    SSD (ssadd)
              ) ;_ Ende von setq
              ;; Linien dehnen und kuerzen:
              (command "_.EXTEND" EN2 "")
              (while (setq EN (ssname SSNEU I))
                (setq I   (1+ I)
                      ENT (entget EN)
                      PT1 (cdr (assoc 10 ENT))
                      PT2 (cdr (assoc 11 ENT))
                ) ;_ Ende von setq
                (command (list EN (trans PT2 0 1)))
                (if (equal PT2
                           (setq PT3
                                  (cdr (assoc 11 (setq ENT (entget EN '("*")))))
                           ) ;_ Ende von setq
                           0.00001
                    ) ;_ Ende von equal
                  (ssadd EN SSD)
                  (if (= J 1)
                    (progn
                      (ssadd EN SS)
                      (setq J 0)
                    ) ;_ Ende von progn
                    (setq J (1+ J))
                  ) ;_ Ende von if
                ) ;_ Ende von if
              ) ;_ Ende von while
              (command)
              (setq I 0)
              (while (setq EN (ssname SS I))
                (setq ENT (entget EN)
                      PT1 (cdr (assoc 10 ENT))
                      PT2 (cdr (assoc 11 ENT))
                      D   (/ (distance PT1 PT2) 2)
                      ANG (angle PT1 PT2)
                      PT2 (polar PT1 ANG D)
                      ENT (subst (cons 11 PT2) (assoc 11 ENT) ENT)
                      I   (1+ I)
                ) ;_ Ende von setq
                (entmod ENT)
              ) ;_ Ende von while
              (setq I 0)
              (while (setq EN (ssname SSD I))
                (entdel EN)
                (setq I (1+ I))
              ) ;_ Ende von while
              (command "_.-GROUP" "_Create" "*" "Boeschung" SSNEU "")
              (command "_.UNDO" "_End")
            ) ;_ Ende von progn
          ) ;_ Ende von if
        ) ;_ Ende von progn
      ) ;_ Ende von if
    ) ;_ Ende von progn
  ) ;_ Ende von if
  (if (and EN1 (/= "" EN1))
    (redraw (car EN1) 4)
  ) ;_ Ende von if
  (if (and EN2 (/= "" EN2))
    (redraw (car EN2) 4)
  ) ;_ Ende von if
  (setvar "CMDECHO" OECH)
  (setvar "BLIPMODE" OBM)
  (setq *ERROR* OERR)
  (CREATE-IF-NOT-AND-SET OLDLAYER nil)
  (princ)

) ;_ Ende von defun



..

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

[Diese Nachricht wurde von marc.scherer am 10. Mai. 2004 editiert.]

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


Ex-Mitglied

erstellt am: 11. Mai. 2004 07:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Marc,

das mit der Fehlermeldung stimmt, sie kommt
nicht mehr.
Nun funktioniert mein Programm aber nicht mehr so wie es soll.
Er soll Böschungslinien zeichnen, dass heißt eine kurze und
eine lange Linie. Jetzt zeichnert er aber nur noch gleich
lange linien.
Woran kann das liegen?
Kannst du mir Helfen?
Gruß
Ralph

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: 11. Mai. 2004 10:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,
habe nix an Deinem Code verändert, außer dem Layerkram.
Bei mir zeichnet er die Böschung korrekt.
Da ist bestimmt 'ne Sysvar im Spiel.
Check mal die eventuell in Frage kommenden.

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

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