Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Wände über Lisp

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:   Wände über Lisp (208 mal gelesen)
Maxon777
Mitglied
TPD

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

Beiträge: 9
Registriert: 21.01.2019

erstellt am: 12. Jul. 2019 22:49    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 libe Lisp Freunde,
Da ich noch grosse Lücken in meine Lisp Kenntnisse habe benötige ich immer wieder Hilfe von erfahrenen Spezialisten
Das Programm soll Wände darstellen.
Wie kriege ich denn das es, nicht von vier Punkte Kordinate für plinie fragt sondan abhängig von Bedarf.
Danke im voraus.
(defun c:das ()
  (setq p (getpoint "\nPunkt"))
  (setq p1 (getpoint p "\nPunkt"))
  (setq p2 (getpoint p1 "\nPunkt"))
  (setq p3 (getpoint p2 "\nPunkt"))
  (setq ugl (angle p p1))
  (setq ugl1 (angle p2 p3))
  (setq m (polar p (+ ugl (/ (* 90.0 pi) 180)) 125))
  (setq m1 (polar p3 (+ ugl1 (/ (* 90.0 pi) 180)) 125))
  (setq m2 (polar p (+ ugl (/ (* 45.0 pi) 180)) 25))

  (setq OSM (getvar "osmode"))
(setq col (getvar "HPCOLOR"))
  (setvar "HPCOLOR" "2")
  (setvar "osmode" 0)
  (command "_.layer" "_s" "Trockenbau" "")
  (command "_.pline" p p1 p2 p3 "")

  (setq s (entlast))
  (command "_.pline" m p "")
  (setq s1 (entlast))
  (command "_.pline" m1 p3 "")
  (setq s2 (entlast))

(command "_.offset" 125 s m "")
(setq s3 (entlast))


(command "_.pedit" "_M" s s1 s2 s3 "" "_J" "_J" "_B" 0 "")
(setq s4 (entlast))
(command "_.offset" 25 s m2 "")
(setq s5 (entlast))
(command "_.layer" "_s" "Trockenbau Dunn" "")
(command "_.laycur" s5 "")
  (command "_.bhatch" "_p" "_ANSI37" 8 90 "_s" s5 "" "")

(setvar "osmode" OSM)

(setvar "HPCOLOR" col)

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: 1135
Registriert: 11.01.2006

WIN 10
ACAD 2017

erstellt am: 13. Jul. 2019 19: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 Maxon777 10 Unities + Antwort hilfreich

Hallo Maxon777,
ich nehme an dass du Punkte angeben möchtest und bei rechtsklick soll beendet werden.

Mach eine Schleife z.B. mit while.
Frage mit getpoint mach einem Punkt und füge diesen zu einer Liste hinzu.
Wenn du keinen Punkt angibst bricht die Schleife ab.
Werte dann die Liste aus.

Code:

  (setq p (getpoint "Startpunkt : "))
  (setq p_list (list p))
  (while (setq p (getpoint "nächster Punkt : " p))
    (setq p_list (cons p p_list))
  )

Irgendwie so.
Liste noch mit reverse umdrehen !!!

Müssen die Wände denn mit Polylinien gezeichnet werden ?
Ich verwende gerne Multilinien.
Vielleicht interessant, auch für die nachträgliche Auswertung der Wandstile oder für Lücken in der Wand (für eine Tür) die die Wand aber nicht wirklich unterbrechen.

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

Gruß
Andreas

http://kraus-cad.de

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1649
Registriert: 11.10.2004

Window 8.1
ACAD 2012-2019
CIVIL 2012 - 2019
BricsCAD V14-V18
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050

erstellt am: 15. Jul. 2019 07:54    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 Maxon777 10 Unities + Antwort hilfreich

Hallo Maxon777,

Ich habe mal ein Beispiel, indem die Funktion VLA-OFFSET verwendet wird.
Grundprinzip:
Wie bereits von Andreas vorgeschlagen, über eine WHILE-Schleife solange Punkte picken, wie die Wand benötigt, wenn kein Punkt mehr gepickt wird ist die Schleife beendet.
Ab dem 2. Koordinatenpunkte wird eine Polylinie erstellt, davon mit ab VLA-OFFSET die versetzte Polylinie.
Ab dem 3. Punkt werden die vorhandenen Polylinien gelöscht und wieder mit aktueller Koordinatenliste neu erzeugt.
Über die Variable "b" ist die Wandstärke festgelegt, über einen negativen Wert kann die Offset-Seite geändert werden.


Code:

(defun c:wand (/ b layer Do p KoordList vla-obj1 vla-obj2)
  (Setq b 0.2
        layer "Layer2"
  )

  (entmake (list '(0 . "LAYER")
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbLayerTableRecord")
                (cons 2 layer)
                (cons 62 1)
          )
  )

  (setq Do 'T)
  (while Do
    (if (and (if p
              (setq p (getpoint (trans p 0 1) "\nStützpunkt picken:"))
              (setq p (getpoint "\nStützpunkt picken:"))
            )

            (setq p (trans p 1 0))
        )
      (if KoordList
        (progn
          (Setq KoordList (append KoordList (list p)))
          (if vla-obj1 (vla-delete vla-obj1))
          (if vla-obj2 (vla-delete vla-obj2))
          (setq vla-obj1 (JB_Wand:2DPoly:vlaAdd koordList))
          (setq vla-obj2 (car (vlax-safearray->list
                                (vlax-variant-value
                                  (vla-offset vla-obj1 b)
                                )
                              )
                        )
          )
          (vla-put-layer vla-obj2 layer)
        )
        (Setq KoordList (append KoordList (list p)))
      )
      (Setq Do nil)
    )
  )
  (princ)
)
 

;;;2D-Polylinie aus Koordinatenliste erzeugen
(defun JB_Wand:2DPoly:vlaAdd (koordList / A)
  (setq koordList (apply 'append koordList))
 
  (setq KoordsArray (vlax-make-safearray vlax-vbDouble
(cons 0 (- (length koordList) 1))))
  (vlax-safearray-fill KoordsArray koordList)
 
  (vla-addpolyline
    (vla-get-modelSpace     
      (vla-get-activeDocument
(vlax-get-acad-object)))
KoordsArray)
)


------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Foto-Manager Youtube

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

Maxon777
Mitglied
TPD

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

Beiträge: 9
Registriert: 21.01.2019

erstellt am: 15. Jul. 2019 14: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

Vielen Dank! Es hat geklappt! )))

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

Maxon777
Mitglied
TPD

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

Beiträge: 9
Registriert: 21.01.2019

erstellt am: 15. Jul. 2019 20: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

Zeichnet aber leider nichts, wo könnte denn der Fähler sein?
Code:
(defun c:wa ()

(setq p (getpoint "Startpunkt : "))
  (setq p_list (list p))
  (while (setq p1 (getpoint "nächster Punkt : " p))
    (setq p_list (cons p1 p_list))
  )
(setq p_line (reverse  p_list))

 
(setq OSM (getvar "osmode"))

  (setvar "osmode" 0)

    (command "_.pline"  p_line "" )

   
  (setvar "osmode" OSM)


  )


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

System: F1
und Google

erstellt am: 15. Jul. 2019 22:49    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 Maxon777 10 Unities + Antwort hilfreich

Der Fehler ist: Der AutoCAD-Befehl _PLINE erwartet eine Koordinate und erhält stattdessen
eine List mit Koordinaten.

erwartet
Punkt,Koordinate
(10 20 0)

erhält
Liste mit Subslisten/Koordinaten
((10 20 0)(15 5 0)(55 66 0)..)


Wenn man dies über command/pline realisieren möchte anstatt über ENTMAKE eine Polylinie zu erzeugen:


Code:
    (command "_.pline")
    (foreach p p_list (command p))
    (command "")

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