• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Unpolare Funktion

  • Ersteller Ersteller memyself
  • Erstellt am Erstellt am

memyself

Guest
Hallo alle,
Ich möchte eine Lisp-Funktion erstellen, sie als Argumente einen Punkt, Winkel und eine Nachrichtenfolge übergeben, die als Eingabe vom Benutzer einen Punkt wartet, der auf einem Durchgang gerade zum gegebenen und gekippten Punkt des gegebenen Winkels liegt. Es ist nicht schwierig zu planen, aber die Besonderheit der Funktion ist, dass es auch eine Gummilinie zeigen sollte, die sich nur entlang des vorgegebenen Winkels bewegt.
um die Wahrheit zu sagen, diese Funktion habe ich bereits programmiert und ist die folgende (versuch es, genau zu verstehen, was ich will es tun):

(defun getpolar (pt ang msg / r)
(vl-cmdf "_line" pt (strcat "<" (angtos ang (getvar "aunits"))
(prompt msg)
(Befehlspausen)
(Befehl)
(setq r (getvar "lastpoint")
(Telefon)
(polarp pt ang (Abstand r pt) (cos (- (Winkel pt r) ang)))
)

Ich möchte wissen, dass die Funktion keine Zeilenentität erstellen und dann löschen sollte.
zum Beispiel, wenn vom Befehlszeilentyp:

(getpoint(0 0 0 0) " Ankunftspunkt angeben: "

und dann eingeben:

< 45

Dadurch bekomme ich eine Gummilinie, die sich nur entlang eines 45° Winkels bewegt.

aber wie implementiere ich es in einer lisp-Funktion?

Vielen Dank, bald.
 
Aber Sie kennen die Ecke, bevor Sie das Verfahren beginnen, richtig?
und wenn Sie eine Snap ->rotation verwenden?
Code:
(seq Winkel (getreal "Drehwinkel: ")
(Befehl "_snap" "_r" Ecke)
(Befehl "_snap"_off)
dann setzen Sie den gewünschten Code

und dann den Snap zurücksetzen
Code:
(Befehl "_snap" "_r" "" "0.00")
(Befehl "_snap" "_off")
 
Hallo Kristall,
Ich habe es versucht:

(defun gp (/ Winkel r)
(Querwinkel 30)
(Befehl "_snap" "_r" Ecke)
(Befehl "_snap"_off)
(setq r (getpoint '(0 0 0) "Endpunkt: ")
(Befehl "_snap" "_r" "0.00")
(Befehl "_snap"_off)

)

aber der einzige Effekt, den ich bekomme, ist, das Kreuz des Cursors zu drehen. die Gummi-Linie bewegt sich stattdessen frei zusammen mit dem Maus-Cursor.
wenn Sie die Funktion starten, die ich zuerst so geschrieben:

(getpolar '(0 0 0 0 0) 30" Endpunkt: "

Sie sehen eine Linie ab Punkt 0.0.0 und bewegen sich nur entlang einer Ecke von 30°, während die Maus bewegt. Das will ich. Aber ich würde es vorziehen, dass die Funktion keine Zeilenentität erstellen würde und dann löschen würde.
 
Dies ist ein klassisches Verfahren , aber da ich keine Zeit habe, etwas zu setzen, schlage ich dieses "schnell" vor, ich weiß nicht, wo ich die Nachricht einfügen soll, so dass es bei der Auswahl des Endpunktes vorgeschlagen wird.
Code:
(defun getpolar ( pt ang / )
(vl-load-com)
(vla-sendcommand
(vla-get-activedocument (vlax-get-acad-Objekt))
(Strkat)
"_line"
"
(Strcat (rtos) "," (rtos (cadr pt))
"
(Strcated "<" (angtos ang (get "units"))
"
)
)
)
 
die Zeilen in rot einfügen
Code:
(Defun gp)
(setq angolo 30)
(Befehl "_snap" "_r" "" angolo)
(Befehl "_snap" "_off")[COLOR=#ff0000](setq oldorthomode (getvar "orthomode"))
(Setvar "orthomode" 1)[/COLOR](setq r (getpoint '(0 0 0) "Endpunkt: ")[COLOR=#ff0000](setvar "orthomode" oldorthomode)[/COLOR](Befehl "_snap" "_r" "" "0.00")
(Befehl "_snap" "_off")
R
)
 
die Zeilen in rot einfügen
Code:
(Defun gp)
(setq angolo 30)
(Befehl "_snap" "_r" "" angolo)
(Befehl "_snap" "_off")[COLOR=#ff0000](setq oldorthomode (getvar "orthomode"))
(Setvar "orthomode" 1)[/COLOR](setq r (getpoint '(0 0 0) "Endpunkt: ")[COLOR=#ff0000](setvar "orthomode" oldorthomode)[/COLOR](Befehl "_snap" "_r" "" "0.00")
(Befehl "_snap" "_off")
R
)
Wir gingen näher. die Gummilinie sollte sich jedoch nur und ausschließlich entlang des Winkels von 30° und nicht auf 30°/120° bewegen.
andere Ideen?
 
Dies ist ein klassisches Verfahren , aber da ich keine Zeit habe, etwas zu setzen, schlage ich dieses "schnell" vor, ich weiß nicht, wo ich die Nachricht einfügen soll, so dass es bei der Auswahl des Endpunktes vorgeschlagen wird.
Code:
(defun getpolar ( pt ang / )
(vl-load-com)
(vla-sendcommand
(vla-get-activedocument (vlax-get-acad-Objekt))
(Strkat)
"_line"
"
(Strcat (rtos) "," (rtos (cadr pt))
"
(Strcated "<" (angtos ang (get "units"))
"
)
)
)
Dies ist fast die gleiche Funktion, die ich zuerst geschrieben, nur dass, wie es ist, nicht einen Punkt zurückgibt. Ich verweise darauf, dass die Funktion nicht eine Linie zeichnen sollte, sondern eine temporäre Gummilinie nur als Referenz für den Benutzer zeigen muss. Es muss auch einen Punkt wie die getpoint oder getcorner Funktionen zurückgeben.
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben