Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Strecken auf Maß

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:  Strecken auf Maß (1013 mal gelesen)
Maier2018
Mitglied
Schlaumaier


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

Beiträge: 25
Registriert: 15.01.2018

Autocad 2021

erstellt am: 08. Sep. 2021 16: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

Moin zusammen,

ich habe für uns einen eigenen Streckenbefehl gebastelt, welcher auf ein gewünschtes Maß streckt. Ist eigentlich ganz Simpel...
Das Problem ist nur, dass es bei mir wunderbar funktioniert - bei meinen Kollegen jedoch nicht. Ich kann mir aber nicht erklären, woran das liegt. Evtl. könnte jemand den Befehl bei sich testen und mir Rückmeldung geben obs funktioniert.
Das einzige was beachtet werden muss, ist dass man den 2. Punkt mit ins Auswahlfenster nimmt. Sonst wird in die falsche Richtung gestreckt.

Sollte noch jemand einen Verbesserungsvorschlag haben - oder sogar einen besseren Befehl parat haben - wäre das super!
Wir kennen den Befehl noch von Autocad 2005 mit dem CADI-Menü. Damals konnte man Strecken auf Bemaßung. Heißt, man klickt eine Bemaßung an, gibt das neue Maß ein, zieht das Auswahlfenster und es wird aufs neue Maß gestreckt.

Gruß,
Sergej

Code:
(defun c:strecken_s ()

(setq pt_1 (getpoint "Punkt 1 wählen!"))  ;Punkt 1
(setq pt_2 (getpoint pt_1 "Punkt 2 wählen!")) ;Punkt 2
(setq ist_wert (distance pt_1 pt_2)) ;Bem Wert

(setq soll_wert (getreal "\nNeue Länge angeben : ")) ;Neue Länge

(princ "\nBemPT 1 : ")(princ pt_1)
(princ "\nBemPT 2 : ")(princ pt_2)
(princ "\nBem Wert : ")(princ ist_wert)
(terpri)

(setq ss (ssget "_:L" )) ;Auswahlsatz erstellen

(setq winkel_rad (angle pt_1 pt_2))
(setq Winkel_grad (* Winkel_rad (/ 180 pi)))

(princ "\nWinkel Rad: ")(princ winkel_rad)
(princ "\nWinkel Grad: ")(princ winkel_grad)

(setq versatz (- soll_wert ist_wert)) ;Versatz berechnen

(princ "\nVersatz : ")(princ versatz)

(setq versatz_x (* (cos winkel_rad) versatz)) ;Versatz in X berechen
(setq versatz_y (* (sin winkel_rad) versatz)) ;Versatz in Y berechen

(princ "\nVersatz X : ")(princ versatz_x)
(princ "\nVersatz Y : ")(princ versatz_y)

(setq spt_1 pt_2) ;Basispunkt definieren
(setq spt_2 (list (+ (car spt_1) versatz_x) (+ (cadr spt_1) versatz_y) 0.0)) ; 2. Streckpunkt definieren

;(princ "\nStreckpunkt 2 : ")(princ spt_2)

(command "strecken" ss "" spt_1 spt_2) ;Streckbefehl

(princ "\n------ Programm Ende -------")
)


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

Alles

erstellt am: 08. Sep. 2021 21:50    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 Maier2018 10 Unities + Antwort hilfreich

Hi,
ich kann zwar nicht testen und du hast auch vergessen zu schreiben was bei dem Kollegen passiert..
aber das Erste was auffällt:
Du steuerst einen nativen Befehl (strecken) und kümmerst dich nicht um den Objektfang..
Also explizit _non / kein angeben vor den Koordinaten,
oder osnapcoord handeln,
denn das könnte der Unterschied zwischen dir und dem Kollegen sein,
Ein_ausgeschalteter Objektfall
bzw. verschieden Fänge.
Du möchtest aber kein Objektfangen,
also stell das sicher im Programm.

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

Maier2018
Mitglied
Schlaumaier


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

Beiträge: 25
Registriert: 15.01.2018

Autocad 2021

erstellt am: 09. Sep. 2021 08:15    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 Rückmeldung. Das könnte tatsächlich das Problem lösen. Bei meinen Kollegen wurde nämlich auf krumme Maße gestreckt oder in eine ganz andere Richtung.

Hier der Code mit OSNAPCOORD handling.

Code:
(defun c:strecken_s ()

(setq pt_1 (getpoint "Punkt 1 wählen!"))  ;Punkt 1
(setq pt_2 (getpoint pt_1 "Punkt 2 wählen!")) ;Punkt 2
(setq ist_wert (distance pt_1 pt_2)) ;Bem Wert

(setq soll_wert (getreal "\nNeue Länge angeben : ")) ;Neue Länge

(princ "\nBemPT 1 : ")(princ pt_1)
(princ "\nBemPT 2 : ")(princ pt_2)
(princ "\nBem Wert : ")(princ ist_wert)
(terpri)

(setq ss (ssget "_:L" )) ;Auswahlsatz erstellen

(setq winkel_rad (angle pt_1 pt_2))
(setq Winkel_grad (* Winkel_rad (/ 180 pi)))

(princ "\nWinkel Rad: ")(princ winkel_rad)
(princ "\nWinkel Grad: ")(princ winkel_grad)

(setq versatz (- soll_wert ist_wert)) ;Versatz berechnen

(princ "\nVersatz : ")(princ versatz)

(setq versatz_x (* (cos winkel_rad) versatz)) ;Versatz in X berechen
(setq versatz_y (* (sin winkel_rad) versatz)) ;Versatz in Y berechen

(princ "\nVersatz X : ")(princ versatz_x)
(princ "\nVersatz Y : ")(princ versatz_y)

(setq spt_1 pt_2) ;Basispunkt definieren
(setq spt_2 (list (+ (car spt_1) versatz_x) (+ (cadr spt_1) versatz_y) 0.0)) ; 2. Streckpunkt definieren

(setq oldsnap (getvar "OSNAPCOORD"))
(setvar "OSNAPCOORD" 1)

(command "strecken" ss "" spt_1 spt_2) ;Streckbefehl

(setvar "OSNAPCOORD" oldsnap)

(princ "\n------ Programm Ende -------")
)


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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 09. Sep. 2021 11: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 Maier2018 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Maier2018:

Sollte noch jemand einen Verbesserungsvorschlag haben - oder sogar einen besseren Befehl parat haben - wäre das super!

Code:
(defun c:strecken_s ()

(setq pt_1 (getpoint "Punkt 1 wählen!"))  ;Punkt 1
(setq pt_2 (getpoint pt_1 "Punkt 2 wählen!"))) ;Basispunkt definieren
(setq spt_2 (list (+ (car spt_1) versatz_x) (+ (cadr spt_1) versatz_y) 0.0)) ; 2.
)


Du brauchst natürlich nur einen Punkt auf der Linie anzugeben, denn die Linie kennt ihre Endpunkte ja selbst, und das machst Du mittels ENTSEL. Dabei würde ich dann die Streckrichtung einfach aus dem geringeren Abstand zu einem der Endpunkte ermitteln. Je nachdem, wo Du die Linie anklickst, wird dann auch in dieser Richtung gestreckt oder gekürzt. Wenn Du's ganz elegant haben willst, dann veränderst Du die Länge auch auf beiden Seiten der Linie um den halben Betrag, falls der Auswahlpunkt im mittleren Drittel der Linie liegt.

[Diese Nachricht wurde von archtools am 09. Sep. 2021 editiert.]

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

Maier2018
Mitglied
Schlaumaier


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

Beiträge: 25
Registriert: 15.01.2018

Autocad 2021

erstellt am: 09. Sep. 2021 15:31    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

Keine schlechte Idee... Wie weiß ich bzw. Lisp denn, wo ich mit ENTSEL eine Linie markiert habe? Wird da auch die Koordinate wo ich hinklicke gespeichert?

Kann ich auch irgendwie prüfen, ob im Auswahlsatz "ss" der Punkt "pt_1" oder "pt_2" enthalten ist?

Ich hatte nur lediglich hier im Forum mal einen Codeschnipsel rausgesucht, der mir alle markierten Objekt in einem Auswahlsatz auflistet.

Code:

(setq i 0)
(while(setq ent(ssname ss i))
(princ (strcat "Gewähltes Objekt " (rtos (+ 1 i)) " : \n"))
(setq data(entget ent))
(princ(strcat(cdr(assoc 0 data))"\n"))
(setq i(1+ i))
)

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 09. Sep. 2021 16: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 Nur für Maier2018 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Maier2018:
Keine schlechte Idee... Wie weiß ich bzw. Lisp denn, wo ich mit ENTSEL eine Linie markiert habe? Wird da auch die Koordinate wo ich hinklicke gespeichert?

Kann ich auch irgendwie prüfen, ob im Auswahlsatz "ss" der Punkt "pt_1" oder "pt_2" enthalten ist?
[/code]


Einfach mal in der Onlinehilfe nach ENTSEL gucken, und dann ausprobieren. Das gibt keinen Auswahlsatz zurück.

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

Maier2018
Mitglied
Schlaumaier


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

Beiträge: 25
Registriert: 15.01.2018

Autocad 2021

erstellt am: 10. Sep. 2021 15:34    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

Ok, ENTSEL ist nun klar.

Aber mit dem Auswahlsatz meinte ich den, den ich mit ssget bekomme. Da habe ich im Netz nicht gefunden, wie ich da Koordinaten mit rausbekomme.

Kannst du da evtl. einen Tipp geben?

Ich könnte natürlich die Punkte mit getpoint und getcorner vorher definieren und den Auswahlsatz mit ssget "_:C" ausführen.

Code:

(setq p1 (getpoint "\nErste Ecke:") )
(setq p2 (getcorner p1 "\nZweite Ecke:"))
(setq ss (ssget "_:C" p1 p2))

Dabei hat man aber nicht die Möglichkeit, während der Objektwahl einzelne Objekte zu entfernen.

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 10. Sep. 2021 16: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 Nur für Maier2018 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Maier2018:
Ok, ENTSEL ist nun klar.

Aber mit dem Auswahlsatz meinte ich den, den ich mit ssget bekomme. Da habe ich im Netz nicht gefunden, wie ich da Koordinaten mit rausbekomme.

Kannst du da evtl. einen Tipp geben?

Ich könnte natürlich die Punkte mit getpoint und getcorner vorher definieren und den Auswahlsatz mit ssget "_:C" ausführen.

Code:

(setq p1 (getpoint "\nErste Ecke:") )
(setq p2 (getcorner p1 "\nZweite Ecke:"))
(setq ss (ssget "_:C" p1 p2))

Dabei hat man aber nicht die Möglichkeit, während der Objektwahl einzelne Objekte zu entfernen.


Du brauchst keinen Auswahlsatz, weil Du die zu streckende Linie ja schon durch das ENTSEL hast. Unter DXF-Gruppencode 10 und 11 findest Du Anfangs- und Endpunkt.

Davon abgesehen: Einen Auswahlsatz wandelt man sinnvollerweise erst mal in eine Liste von Entities um. Mit Deinem SSGET erwischst Du aber eventuell gleich mehrere Linien. Welche davon willst Du denn strecken?

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

Maier2018
Mitglied
Schlaumaier


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

Beiträge: 25
Registriert: 15.01.2018

Autocad 2021

erstellt am: 14. Sep. 2021 15: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

Ich glaube, wir sprechen aneinander vorbei.  Sorry, hätte mich wohl deutlicher ausdrücken können...

Ich hab mal ein Screenshot einer Beispiel-Geometrie angehangen, die ich mit dem Befehl, bspw. das Maß 454.2mm auf 500mm nach rechts strecken würde. "pt_1", "pt_2" und "ss" habe ich markiert.

Screeshot ->https://imgur.com/a/v736SVF

Mit Entsel würde man das Maß nicht direkt strecken können, da keine Linie in der Länge vorhanden ist.


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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 14. Sep. 2021 16:48    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 Maier2018 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Maier2018:
Ich glaube, wir sprechen aneinander vorbei.   Sorry, hätte mich wohl deutlicher ausdrücken können...

Ich hab mal ein Screenshot einer Beispiel-Geometrie angehangen, die ich mit dem Befehl, bspw. das Maß 454.2mm auf 500mm nach rechts strecken würde. "pt_1", "pt_2" und "ss" habe ich markiert.

Screeshot ->https://imgur.com/a/v736SVF

Mit Entsel würde man das Maß nicht direkt strecken können, da keine Linie in der Länge vorhanden ist.


Ja, das ist was ganz anderes. Du willst offenbar zwei Linien aufeinander zu bzw voneinander weg strecken, also die Lücke zwischen den beiden Linien "strecken". Das geht dann eben mit zwei mal ENTSEL. Ob diese beiden Linien auf einer Geraden liegen sollen, musst Du selbst wissen, aber das kannst Du dann ja auch prüfen.

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