Verschieben auf einer Achse

1030Auto
Explorer
Explorer

Verschieben auf einer Achse

1030Auto
Explorer
Explorer

Hallo zusammen,

 

ich möchte eine einfache verschieben Funktion in AutoLisp erstellen komm aber nicht weiter. 

Ich möchte ein Objekt auswählen können an diesem dann einen Basispunkt bestimmt und diesen Basispunkt dann entweder verschieben um eine gewisse Zahl oder an einen anderen Punkt. 

Allerdings möchte ich das ganze nur auf einer Achse machen. 

Ich weis dass das auch per Schieben geht allerdings ist mir das zu viel tippen. Ich möchte schnell ein Objekt wählen, einen Basispunkt und ein Zielpunkt. 


Hoffe das ist verständlich. Danke schonmal!

0 „Gefällt mir“-Angaben
Antworten
Akzeptierte Lösungen (1)
395Aufrufe
11Antworten
Antworten (11)

Kent1Cooper
Consultant
Consultant

Does turning ORTHO mode on not do what you want?  Yes, it allows movement on two axes, but is it not easy enough to keep your movement along the one you want?

Kent Cooper, AIA
0 „Gefällt mir“-Angaben

Alfred.NESWADBA
Consultant
Consultant

Hi,

 

>> ich möchte eine einfache verschieben Funktion in AutoLisp

>> erstellen komm aber nicht weiter. 

Bitte zeige, wie weit Du gekommen bist und wo Du dann nicht weiterkommst (bzw. eine Beschreibung, ob dann ein Fehler auftritt oder was Ursache dafür ist, dass Du nicht weiterkommst).

 

>> das ganze nur auf einer Achse

Es gibt mehrere Arten von Achsen, die des Koordinatensystems X/Y/Z, die Straßenbauachse (die i.d.R. nicht gerade wäre), Diagrammachsen (wenn es z.B. Längsschnitte sind), oder Bauachsen (rasterähnlich, i.d.R. orthogonal ausgerichtet), Schnittachsen für Schnittableitungen (die eckige Verläufe haben kann), ...

 

- alfred -

------------------------------------------------------------------------------------
Alfred NESWADBA
ISH-Solutions GmbH / Ingenieur Studio HOLLAUS
www.ish-solutions.at ... blog.ish-solutions.at ... LinkedIn ... CDay 2025
------------------------------------------------------------------------------------

(not an Autodesk consultant)
0 „Gefällt mir“-Angaben

1030Auto
Explorer
Explorer

Orthomodus macht nicht wirklich das was ich möchte. 

Hier eine bessere Beschreibung was ich machen möchte:

Im Anhang sieht man zwei Objekte. Objekt B soll mit der Ecke C auf die X-Koordinate von Ecke D geschoben werden. Allerdings nur die X Koordinate. Y soll sich nicht ändern. So wie es sein soll sieht man dann in der zweiten Abbildung. Da ist die X Koordinate von C und D gleich und der Y Wert von B hat sich nicht geändert.

Also möchte ich einen Befehl der mich zuerst dass zu verschiebende Objekt (B) wählen lässt, einen Punkt am Objekt an dem verschoben (C) wird und einen Ziel Punkt (D). Nachdem der Befehl ausgeführt wurde sollen die X Koordinaten dann gleich sein während Y sich nicht geändert hat.

 

@Alfred.NESWADBA Durch verschiedene Foren hatte ich am Ende Code der mich ein Objekt wählen lässt und die X und Y Verschiebung in Zahlen eingeben lässt. Das wollte ich einfach erweitern anstatt Zahlen Punkte am Bildschirm zu wählen. Ich stieß dann auf die Funktion getpoint.

 

(defun c:XSchieben (/ ss p1 p2 verschiebung)
	(setq ss (ssget)
		p1 (getpoint "\nBasispunkt der Verschiebung")
		p2 (getpoint "\nZiel der Verschiebung")
	
	)
	(command "Schieben" ss "p1" "p2")
   (princ)
)

 Den code hab ich mir zusammen gebastelt allerdings immer nachdem ich den zweiten Punkt angeklickt hab krieg ich folgende Fehlermeldung:

*Ungültige Auswahl*
Erwartet einen Punkt oder Fenster/Letztes/Kreuzen/QUADER/ALLE/ZAun/FPolygon/KPolygon/Gruppe/Hinzufügen/Entfernen/Mehrere/Vorher/ZUrück/AUto/EInzeln/Unterobjekt/Objekt
Funktion abgebrochen

 

Woran es genau liegt weis ich nicht.

Bin neu in der ganzen Thematik dankeschonmal für die Hilfe!!

0 „Gefällt mir“-Angaben

Alfred.NESWADBA
Consultant
Consultant

Hi,

 

versuche die Zeile mit (command ... auf dieses zu tauschen:

(command "Schieben" ss "" p1 p2)

 

- alfred -

------------------------------------------------------------------------------------
Alfred NESWADBA
ISH-Solutions GmbH / Ingenieur Studio HOLLAUS
www.ish-solutions.at ... blog.ish-solutions.at ... LinkedIn ... CDay 2025
------------------------------------------------------------------------------------

(not an Autodesk consultant)
0 „Gefällt mir“-Angaben

cadffm
Consultant
Consultant

Hi,

 

also Lisp benötigt man dafür nicht, aber es eignet sich natürlich prima um einen beuen Befehl zu definieren,

ansonsten erstellt man einfach eine neue Schaltfläche und erledigt es durekt dort mit einem simplen Makro.

 

Erarbeite es einmal ordentlich manuell, dann setze es als Makro oder in Lisp um.

 

Der Befehl ist schieben /_move,

man wählt die Objekte und gibt den ersten Punkt der Verschiebung an

und dann nutzt man die PUNKTFILTER .YZ als  Befehlsmodifizierer um Y und Z Wert des Vorherigen Punktes(@) anzugeben und

danach klickst du den Zielpunkt an, von dem nur noch der X Wert übernommen wird.

 

Wenn du diesen Ablauf verstanden hast, schreib deine Eingaben(Tastatur/Maus) genau auf 

und du kannst dein Makro oder Lisp schreiben.

 

PS: Dein (command Ausdruck ist falsch,

du würdest das sehr gut erkennen wenn du es einmal per Hand durchführst.

Oder auch nach dem Ausführen alle Zeilen lesen und nicht erst ab dem *Ungültige Auswahl

 

Also, mache es einmal per Hand wie du es im Lisp machst:

Schieben starten

1x Objekt(e) wählen

die Objektwahl nicht beenden

Zwei Punkte klicken.

 

Du mußt die Objektwahl beenden, das machst du oer Hand durch eine Leereingabe, so auch in deinem (command Statement, also NICHTS in Anführungszeichen: ""

Dann sollte das Lisp durchlaufen.

 

Teste es

 

 

 

Sebastian

1030Auto
Explorer
Explorer

@Alfred.NESWADBA Danke das funktioniert jetzt erstmal so halb. Mein Objekt verschiebt sich jetzt allerdings auf jeder Achse und nicht nur auf der X Achse. Ist jetzt also wie ein normaler Schieben Befehl.

 

@cadffm Danke für den Tipp! Als Makro hab ichs am Anfang probiert bin aber gescheitert mir die ehemligen yz Koordinaten geben zu lassen. Über die Befehlszeile mach ich das immer mit @das ging aber irgendwie nicht deswegen der Versuch über Lisp.

Vom Ablauf her ist mir klar was passieren soll nur nicht vom Code. Wie gesagt bin neu was das anggeht.

 

Danke für die schnellen Antworten!

0 „Gefällt mir“-Angaben

1030Auto
Explorer
Explorer

Kann mir jemand noch erklären was bei Command die "" bedeuten? Wann kommt etwas dazwischen wann nicht? Und haben Leerzeichen eine Bedeutung?

Wäre super wenn mich da noch jemand bisschen aufklären könnte.

0 „Gefällt mir“-Angaben

Alfred.NESWADBA
Consultant
Consultant

Hi,

 

>> was bei Command die "" bedeuten?

Entspricht <ENTER> über Tastatur.

 

- alfred -

------------------------------------------------------------------------------------
Alfred NESWADBA
ISH-Solutions GmbH / Ingenieur Studio HOLLAUS
www.ish-solutions.at ... blog.ish-solutions.at ... LinkedIn ... CDay 2025
------------------------------------------------------------------------------------

(not an Autodesk consultant)

cadffm
Consultant
Consultant
Akzeptierte Lösung

Hi,

 

>>Kann mir jemand noch erklären was bei Command die "" bedeuted?

Ja: Text! oder wie Alfred schrieb: Enter

Ich möchte es mal mit "TEXT" erklären, auch wenn ich sonst auch immer nur kurz mit "ENTER" antworte:

 

Command soll dies als einfachen/dummen TEXT behandeln, der wird in Anführungszeichen geschrieben.

Dummer Text wird von der Command-Funktion 1:1 an die Befehlszeile weitergeleitet (oder für die Progger: Text evaluiert zu sich selbst, wird also praktisch einfach weitergeleitet).

Alles was nicht in "" steht wird ausgeführt und erst das Ergebnis dieser Auswertung wird dann an die Befehlszeile weitergeleitet

Beispiel:

(command "pi") sendet die Eingabe pi an die Befehlszeile.

(command pi) sendet als Eingabe die Zahl pi an die Befehlszeile.

dewegen wird bei (command "LISTE") auch der Befehl LISTE ausgeführt (denn die Testenfolge LISTE<enter> startet diesen),

aber bei (command LISTE) erfolgt nur ein  *Abbruch* nil , denn es gibt keine Lispfunktion oder Variable LISTE

 

 

>>" Und haben Leerzeichen eine Bedeutung?"

Ausserhalb von "" haben diese keine Bedeutung,

innerhalb von "" haben sie die Bedeutung welche sie in der jeweiligen Situation haben im Programm,

also entweder ein Leerzeichen in einer Textangabe, oder als Bestätigung einer Eingabe.

Genau so wie es beim "normalen Arbeiten" auch ist.

 

 

 

>>" Über die Befehlszeile mach ich das immer mit @das ging aber irgendwie nicht"

Dann hast du nicht die exakt selbe Eingabe niedergeschrieben in deinem Makro.

 

>>"deswegen der Versuch über Lisp."

Sofern du nicht richtig über API Funktionen alles selbst programmierst und nur Befehlseingaben automatisierst,

solange ist es dasselbe wie mit dem Makro.

Du musst die Eingabe ordentlich aufschreiben - egal ob Makro oder (command

 

(einfaches Beispiel für 1 Objekt, gewählt nach Befehlsaufruf)

 

Wenn du es per Hand kannst, also so:

schieben<enter>

Objektwahl

<enter>

Punkt1wählen

.ZY<enter>

letztenPunktangeben

ZielPunktXangeben

fertig

 

 

dann auch per makro, wo der Backslash eine Benutzereingabe ist

editiert schieben\;\.ZY;@;\

schieben;\;\.ZY;@;\

 

und identisch auch in einer (command-Anweisung, wo PAUSE eine Benutzereingabe ist

(command "schieben" Pause "" PAUSE ".ZY" "@" PAUSE)

 

Sebastian

1030Auto
Explorer
Explorer

Super jetzt funktioniert es. Makro sowie der eigene Befehl. Danke für die Hilfe!

0 „Gefällt mir“-Angaben

cadffm
Consultant
Consultant

Das Makro funktioniert? Das hatte ich doch falsch geschrieben 😂

 

so passt es:

schieben;\;\.ZY;@;\

 

und als ordentliches Makro dann

^C^C^C.SCHIEBEN;\;\.ZY;@;\

 

und noch besser, damit es in allen Sprachversionen funktioniert:

^C^C^C_.MOVE;\;\.ZY;@;\

 

 

 

 

 

Dann wünsche ich weiterhin viel Erfolg 👍

Sebastian