| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Polylinie versetzen und enden schließen (3728 mal gelesen)
|
tklingler Mitglied Metallbautechniker
Beiträge: 24 Registriert: 07.06.2008
|
erstellt am: 27. Okt. 2008 10:07 <-- editieren / zitieren --> Unities abgeben:
Hallo, mit folgenden Script versetze ich ene Polylinie und runde diese ab. Wie kann ich di noch offenen ende schließen ? ;Erstelle eine Blech mittels versetzten ; blech1 (defun zpolyo (p) ; Polylinie ohne schließen (setq dp p) ; dp = Liste der Punkte (setq dl (length p)) ; dl = Anzahl der Punkte (command "plinie") (repeat dl ; Schleife = Anzahl Punkte (command (car dp)) ; erster Punkt aus Liste (setq dp (cdr dp)) ; löschen erster Punkt aus Liste ) (command "") ; Abbruch Plinie ) ;end zpolyo (defun grad (w) ; Winkel-Umrechnung (* pi (/ w 180.0)) ; in Bogenmaß ) ;end grad (defun C:Blech () (princ "\nBlech als Schnitt zeichnen \n" ) (princ "\n") (setq ECHOLD (getvar "CMDECHO")) (setq LAYOLD (getvar "CLAYER")) ;(setq PICKOLD (getvar "PICKBOX" )) (command "ZURÜCK" "B") (setq V:AUSW_1 (ssadd)) (setq V:AUSW_2 (ssadd)) (layset "M5S_Blech") (layset "M5S_Blech") (setvar "CMDECHO" 0) ;(setvar "pickbox" 0 ) (setvar "plinegen" 0) (command "LAYER" "SET" "M5S_Blech" "") (princ) (setq rund 1) (setvar "cmdecho" 0) (setvar "blipmode" 0) (setq pl nil) (princ) (setq von (getpoint "\n von Punkt: ")) ; erster Punkt (setq p von) (setq bis von) (setq start 1) (setq pl (cons von pl)) (while (setq p (getpoint "\nnach Punkt: " bis)) (setq pl (cons p pl)) ; Erstellung Liste der Punkte (setq we (angle bis p)) ; End-Winkel (if (= start 1) (setq wa we) ) ; Anfangs-Winkel (if (= start 1) (setq start 0) ) (setq bis p) ; bis = letzter Punkt ) ;end while (setq wa1 (+ wa (grad 90))) ; Anfangswinkel + 90 grad (setq we1 (+ we (grad 90))) ; Endwinkel + 90 grad (zpolyo pl) (setq V:AUSW_1 (ssadd (entlast) V:AUSW_1)) (setq dicke (getreal "\n Blech-Dicke in mm: ")) ; Blech-Dicke (if (= rund 1) (progn (command "abrunden" "R" (* dicke 1.5)); Abrunden (command "abrunden" "P" V:AUSW_1) ; Abrunden Ursprungslinie (princ) ) ;end progn ) ;end if (setq pda (polar von wa1 dicke)) ;Punkt: Dicke am Anfang (command "versetz" dicke V:AUSW_1 pda ""); Versetzten der Ursprungslinen um die Dicke (setq rund 0) (setvar "CMDECHO" ECHOLD) (setvar "CLAYER" LAYOLD) (command "ZURÜCK" "E") (princ) ) ;END OF FILE ------------------ Technik & Design Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 27. Okt. 2008 10:29 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Was auch immer Du da machst... Strukturierung und Co. auf die schnelle (defun zpolyo (p) ; Polylinie ohne schließen (setq dp p) ; dp = Liste der Punkte (setq dl (length p)) ; dl = Anzahl der Punkte (command "plinie") (repeat dl ; Schleife = Anzahl Punkte (command (car dp)) ; erster Punkt aus Liste (setq dp (cdr dp)) ; löschen erster Punkt aus Liste ) (command "schließen" "") ; Abbruch Plinie <----------------------- ) ;end zpolyo oder in der Liste die du übergibst (pl) prüfen ob erstes und lestztes Element gleich sind... mfg heiko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 28. Okt. 2008 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
|
tklingler Mitglied Metallbautechniker
Beiträge: 24 Registriert: 07.06.2008
|
erstellt am: 16. Dez. 2008 12:56 <-- editieren / zitieren --> Unities abgeben:
Hallo, das funtz nicht. Ich erkläre glaube ich was da passieren soll. 1. Zeichen einer Polylinie 2. Versetzen der Linine um en Bestimmtes maß 3. Schließen der Endpunkte Bis zum versetzen klappt das alles schon wunderbar. Nur das Schließen gelingt mir nicht. Die obigen Vorschläge gegen nicht, da die Polyline vor dem versetzen geschlossen würde was zu einenm nicht gewünschten ergenis führen würde. ------------------ Technik & Design Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 16. Dez. 2008 13:37 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
|
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 16. Dez. 2008 23:28 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Hi tklingler Wenn ich Dich richtig verstanden habe, dann willst Du die gezeichnete Pline mit der Offsetpline verbinden, so daß eine geschlossene Pline entsteht. Das läßt sich ganz gut mit einem PEDIT-Trick verwirklichen. - Bei der Anwahl der zu editierenden Pline die Option "mehrere Objekte" wählen, dann beide Plines anwählen. - Verbinden - Verbindungstyp - Hinzufügen - den Verbindungsfuzzy >= Plineabstand angeben -> fäddich (Stand AC2002 - kann sein daß die Parameter bei aktuellen ACAD Versionen etwas anders lauten - ich glaub da war mal was....) Ich konnte mich nicht zurückhalten und hab den Code etwas gepimpt...
Code:
(defun c:blech (/ pt spt plineobj1 plineobj2) (setq *blech:Dicke* (getreal>0 "Blech-Dicke in mm: " *blech:Dicke*) spt (getpoint "\nVon Punkt: ") pt spt ) ;; Radius setzen (setvar "FILLETRAD" (* 1.5 *blech:Dicke*)) ;; Punkte abfragen und Pline zeichnen (while (and pt (setq pt (getpoint pt "\nnach Punkt: "))) ;; Wenn Pline vorhanden... (if plineobj1 ;; -> dann Vertex hinzufügen + Offset (progn (vla-addvertex plineobj1 (1+ (vlax-curve-getendparam plineobj1)) (vlax*point->variant (2dpoint pt)) ) ;; verrrundn (command "_FILLET" "_P" (vlax-vla-object->ename plineobj1)) ;; erst alten Offset löschen (if plineobj2 (vla-delete plineobj2) ) ;; dann neuen Offset erstellen (setq plineobj2 (car (vlax-safearray->list (variant-value (vla-offset plineobj1 (- *blech:Dicke*))) ) ) ) ) ;; -> sonst neue Pline erstellen + Offset (setq plineobj1 (vla-addlightweightpolyline (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax*pointlist2d->variant (list (2dpoint spt) (2dpoint pt)) ) ) plineobj2 (car (vlax-safearray->list (variant-value (vla-offset plineobj1 (- *blech:Dicke*))) ) ) ) ) ) ;; and Funktion bricht Evaluierung ab, wenn ein Argument nil (if nicht erforderlich !) (and plineobj1 plineobj2 ;; schließen mit Pedit (beide Plines mit großem Fuzzyabstand verbinden) (command "_PEDIT" "_M" ; mehrere Objekte (vlax-vla-object->ename plineobj1) (vlax-vla-object->ename plineobj2) "" ; Ende Objektwahl "_J" ; Verbinden "_J" ; Verbindungstyp "_A" ; Hinzufügen (1+ *blech:Dicke*) ; Fuzzy (+1 zur Sicherheit) "_X" ; Exit ) ) (princ) ) ;;;-------------------------------- ;;; GETREAL>0 - getreal ohne Null/negativ ;;; Anfragetext,Vorgabe (Zahl) ;;;-------------------------------- (defun getreal>0 (anfrage vorgabe) (initget (+ 2 4)) (cond ((getreal (strcat "\n" anfrage " <" (if (numberp vorgabe) (rtos vorgabe 2 (getvar "LUPREC")) "" ) ">: " ) ) ) (t (float vorgabe)) ) ) ;;;--------------------------------- ;;; Wandelt 2D-Punktliste in Variant um ;;;--------------------------------- (defun vlax*pointlist2d->variant (ptlist / arrayspace sarray) (setq arrayspace (vlax-make-safearray vlax-vbdouble (cons 0 (- (* 2 (length ptlist)) 1)) ) ) (setq sarray (vlax-safearray-fill arrayspace (apply 'append ptlist))) (vlax-make-variant sarray) ) ;;;--------------------------------- ;;; Wandelt Punkt in Variant um ;;;--------------------------------- (defun vlax*point->variant (pt / arrayspace sarray) (setq arrayspace (vlax-make-safearray vlax-vbdouble (cons 0 (- (length pt) 1))) ) (setq sarray (vlax-safearray-fill arrayspace pt)) (vlax-make-variant sarray) ) ;;;--------------------------------- ;;; Punkt in 2D-Punkt wandeln ;;;--------------------------------- (defun 2dpoint (point) (list (car point) (cadr point)))
[Diese Nachricht wurde von andi2050 am 16. Dez. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tklingler Mitglied Metallbautechniker
Beiträge: 24 Registriert: 07.06.2008
|
erstellt am: 17. Dez. 2008 12:47 <-- editieren / zitieren --> Unities abgeben:
Es ist toll wenn du dich nicht zurückhalten kannst. Es funzt super. Wenn du mal ins Allgaü kommst dann kannst du dir bei mir eine Flasche Sekt abhohlen wenn du möchtest ------------------ Technik & Design Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Romuald Ferreux Mitglied
Beiträge: 4 Registriert: 25.03.2020
|
erstellt am: 25. Mrz. 2020 07:08 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Guten Morgen zusammen , Diese Tool ist Absolute Geil und für mich nötig ich benutze die Lisp alle Tage. Ich habe diese Lisp Angepasst um mein Struktur und möchte Gern noch ein Punkt noch Lösen. Gib es Möglichkeiten zu die Offset Einrichtung auf Bildschirm Definieren ? Code: (variant-value (vla-offset plineobj1 (- *blech:Dicke*)))
Vielen Danke für ihre Hilfe
Mfg Romu
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 25. Mai. 2020 09:27 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
die Frage finde ich gut, würde mich auch interessieren Was für mich noch Interessant wäre, kann man das Blech dann gleich auf einen bestimmten Layer setzen, und es mit einer bestimmten Schraffur und Schraffur-Abstand-Maßstab füllen? Das würde mir einiges an Zeit sparen, da ich meine Bleche immer mit ANSI31 in Winkel 0 und Maßstab 15 fülle Gruß Hämmy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Romuald Ferreux Mitglied
Beiträge: 4 Registriert: 25.03.2020
|
erstellt am: 25. Mai. 2020 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Hallo, Layer und Schraffur ersetzen hab gelöst durch Kondition materialen etw.. Es fehlt nür die möglichkeiten dass die benuzter auf welche Seite offset fest machen. Wenn jemand kann mir auf diese Punkt Lösung hat.... Dann kann ich diese lisp verteilen Vielen Dank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 27. Aug. 2020 12:19 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Zitat: Original erstellt von Romuald Ferreux: Hallo,Layer und Schraffur ersetzen hab gelöst durch Kondition materialen etw.. Es fehlt nür die möglichkeiten dass die benuzter auf welche Seite offset fest machen. Wenn jemand kann mir auf diese Punkt Lösung hat.... Dann kann ich diese lisp verteilen Vielen Dank
wie hast du das mit dem Layer und der Schraffur gelöst? Gruß Hämmy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 28. Aug. 2020 10:25 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Dazu einige Anmerkungen: 1. Versatzrichtung vorgeben Das Makro zeichnet aktuell den Versatz immer links von der Zeichenrichtung. Das könnte man z. B. über eine negative Blechdicke in die andere Richtung zeichnen lassen, dazu müsste das Makro aber moderat überarbeitet werden. 2. Die Polylinie wird immer auf dem aktuellen Layer gezeichnet. Will man die Polylinie auf einem bestimmten Layer zeichnen lassen, ohne Layer vorher zu wechseln, wäre ein Aufruf aus der Werkzeugpalette mit voreingestelltem Layer die einfachste Methode. Dadurch muss der Programmcode nicht angepasst werden und das Programm bleibt weiterhin universell. 3. Die Schraffur kann man anschließend (auch bequemerwqeise aus der Werkzeugpalette) aufrufen, man kann aber auch eine zusätzliche Zeile für die Schraffur im bestehenden Makro ergänzen. Hier
Code: (Defun C:UHSL() (Prompt "Schraffiere letztes Objekt:") ;(setvar "HPNAME" "ANSI31") ; Mustername ;(setvar "HPSCALE" 0.5) ; Skalierfaktor ;(setvar "HPANG" 0.0) ; Winkel ;(command "_hatch" "ANSI31" 0.5 0.0 "_last" "") ; Beispiel mit festen Werten (command "_hatch" "" "" "" "_last" ""); verwendet die aktuellen Schraffureinstellungen )
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 28. Aug. 2020 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
@CAD-Huebner, klar kann man auf den Layer wechseln auf dem das Blech sein soll, aber die Variante, das fest zu definieren ist einfacher. Das mit der Schraffur klappt bei mir nicht, irgendwie macht er keine rein. Die Versatzrichtung einzugeben, wäre ein riesen Vorteil, wäre toll wenn das jemand einbauen könnte, oder beschriebt wie das geändert werden kann. Gruß Hämmy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 28. Aug. 2020 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
|
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 31. Aug. 2020 06:29 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Zitat: Original erstellt von CAD-Huebner: Anbei mal eine überarbeitete Version mit Vorgabelayer "Blech", Wahl der Seite durch +- Blechdicke und anschließender Schraffur mit ANSI31. Details kann man dann im Lisp Code selbst noch anpassen.
@CAD-Huebner, super... das funktioniert jetzt wirklich prima, jetzt geht es auch in die andere Richtung. Aber eines bekomme ich immer noch nicht hin: Die Schraffur wird mit dieser Einstellung auf meine letzten Schraffur Einstellungen gesetzt, so weit so gut. Doch wenn ich einen anderen Skalier Faktor haben möchte, oder fest auf einen bestimmten Layer Namen, nimmt es das nicht an. Wenn ich bei (setvar "HPSCALE" 0.5) 15.0 eingebe, macht er trotzdem bei mir nur 0.4 Den Layer setzt er dank "Autolayer" auf meinen richtigen, schalte ich "Autolayer" aus wird die Schraffur in den vorgegebenen Blech Layer gesetzt. Woran kann das liegen? Gruß Hämmy [Diese Nachricht wurde von Hämmy am 31. Aug. 2020 editiert.]
[Diese Nachricht wurde von Hämmy am 31. Aug. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 31. Aug. 2020 07:15 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
du hast ja diese Zeile eingefügt: Code: (command "_hatch" "ANSI31" (* 0.4 (abs *blech Dicke*)) 0.0 "_last" "") ; Schraffur
wenn ich hier anstatt Code: (* 0.4 (abs *blech Dicke*))
Code: 15.0
eingebe, dann wird die bei mir auch so skaliert. Aber es funktioniert auch wenn ich das raus nehme, da oben nicht darauf zugegriffen wird oder? Code: (Defun C:UHSL() (Prompt "Schraffiere letztes Objekt:") ;(setvar "HPNAME" "ANSI31") ; Mustername ;(setvar "HPSCALE" 0.5) ; Skalierfaktor ;(setvar "HPANG" 0.0) ; Winkel ;(command "_hatch" "ANSI31" 0.5 0.0 "_last" "") (command "_hatch" "" "" "" "_last" "") ) (Prompt "BLECH geladen, Start mit BLECH.") (Print)
Ich habe einmal einzeln bei mir aus diesen Code eine .lsp gemacht und diese geladen (weil ich die Funktion klasse finde)
Code: (Defun C:UHSL() (Prompt "Schraffiere letztes Objekt:") ;(setvar "HPNAME" "ANSI31") ; Mustername ;(setvar "HPSCALE" 0.5) ; Skalierfaktor ;(setvar "HPANG" 0.0) ; Winkel ;(command "_hatch" "ANSI31" 0.5 0.0 "_last" "") (command "_hatch" "" "" "" "_last" "") ) (Prompt "BLECH geladen, Start mit BLECH.") (Print)
Aber egal was ich hier als Wert hinterlege, es wird immer meine Voreingestellte Skalierung genommen Wie verhält sich das? Gruß Hämmy [Diese Nachricht wurde von Hämmy am 31. Aug. 2020 editiert.] [Diese Nachricht wurde von Hämmy am 31. Aug. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 31. Aug. 2020 12:22 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
OK, ich nerve eventuell, aber ich möchte diese lsp für meine Ansprüche optimieren, darum poste ich hier laufend. Zu dem Code von CAD-Huebner ist mir jetzt alles klar, ich kann entweder die Variante der Voreinstellung nehmen oder die andere. Ist nur och die Frage offen warum dieser Code noch einmal am Schluss in lsp drin ist? Code: (Defun C:UHSL() (Prompt "Schraffiere letztes Objekt:") ;(setvar "HPNAME" "ANSI31") ; Mustername ;(setvar "HPSCALE" 0.5) ; Skalierfaktor ;(setvar "HPANG" 0.0) ; Winkel ;(command "_hatch" "ANSI31" 0.5 0.0 "_last" "") (command "_hatch" "" "" "" "_last" "") ) (Prompt "BLECH geladen, Start mit BLECH.") (Print)
Und dann habe ich noch eine andere Frage: wenn ich ein Blech in 2mm stärke zeichne, habe ich den vorgegebenen Radius von 1mm, doch wenn ich dann in die andere Richtung gehe, ist der Radius nicht 1mm sondern mehr. Kann man die lsp so anpassen das der Radius immer in beide Richtungen bei 1mm bleibt? Denn ein Blech hat auch keinen größeren Radius wenn ich es in die andere Richtung kante. Das wäre noch eine Super Erleichterung wenn das geht. Leider fehlt mir dazu das nötige Wissen um das selbst umzusetzen Gruß Hämmy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 01. Sep. 2020 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Frage 1: der Code am Schluss hat keine besondere Funktion - in einer Lisp Datei können beliebig viele Funktionen definiert sein, diese war ein separates Beispiel, dass ich einfach in der Lisp Datei belassen habe. Frage 2: Ja, dass Problem sehe ich genauso. Hier ist einfach der Quellcode so programmiert worden, dass zunächst eine Polylinie schrittweise gezeichnet wird (AddVertex) und dann nach jedem neuen Punkt komplett abgerundet wird (_FILLET Polyline) und dann einseitig versetzt wird. Richtigerweise müsste zunächst um halbe Blechbreite versetzt werden (um eine temporäre Mittellinie zu erzeugen), dann gerundet und dann von dieser Mittellinee zu beiden Seiten nochmal halbe Breite zurück versetzt werden. Aber so ist es halt nicht programmiert worden. [EDIT] einige Tippfehler korrigiert. ------------------ Mit freundlichem Gruß
Udo Hübner www.CAD-Huebner.de [Diese Nachricht wurde von CAD-Huebner am 01. Sep. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 01. Sep. 2020 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
|
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 09. Sep. 2020 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
wenn ich jetzt ein Blech zeichne, wir das auch auf meinen Voreingestellten Layer gemacht, doch danach bleibt dieser als aktueller Layer. Kann man das ändern, so das der aktuelle Layer nicht geändert wird? Gruß Hämmy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
heidi Mitglied CAD-Dienstleister
Beiträge: 1132 Registriert: 01.11.2001
|
erstellt am: 09. Sep. 2020 16:39 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Hallo Hämmy, edit: sorry, das erste Programm war ja von tklingler die Lösung steht im ersten Programm drin zum sichern des aktuellen Layers: (setq LAYOLD (getvar "CLAYER")) und zum Wiederherstellen (setvar "CLAYER" LAYOLD) ------------------ Gruß Heidi http://www.cad-point.de
[Diese Nachricht wurde von heidi am 09. Sep. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 10. Sep. 2020 07:13 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
wo muss ich das dann genau bei diesen Code einsetzen? Code: ;;; Originale Quelle: https://ww3.cad.de/foren/ubb/Forum145/HTML/002643.shtml ;;; überarbeitet von Udo Hübner am 28.8.20 um die Versatzrichtung zu steuern ;;; Blechstärke positiv = Versatz nach Links,bei negativer Blechstärke Versatz nach links ;;; sowie eine Layer voreinzustellen (defun c:blech (/ pt spt plineobj1 plineobj2 tmp cl ce)
;;;; Vorbelegungen ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq *Blech:layer* "THV-Aluteile") ; Vorgabe Blechlayer (if (not *blech:Dicke*) (setq *blech:Dicke* 2.0)) ; vorgabbe Blechstärke ; Schraffureinstellungen direkt Zeile 96 = command "_Hatch" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq cl (getvar "CLAYER")) (setq ce (getvar "CMDECHO")) (setvar "CMDECHO" 0) ; wenn Layer nicht vorhanden, dann anlegen, sonst nur tauen und aktuell setzen. (if (not (tblsearch "LAYER" *Blech:layer*)) (command "_Layer" "_Make" *Blech:layer* "") ; else (command "_Layer" "_Thaw" *Blech:layer* "_unlock" *Blech:layer* "_Set" *Blech:layer* "") ) (setq *blech:Dicke* (getrealnot0 "Blech-Dicke in mm: " *blech:Dicke*) spt (getpoint "\nVon Punkt: ") pt spt ) ;; Radius setzen (setvar "FILLETRAD" (* 0.3 (abs *blech:Dicke*))) ;; Punkte abfragen und Pline zeichnen (while (and pt (setq pt (getpoint pt "\nnach Punkt: "))) ;; Wenn Pline vorhanden... (if plineobj1 ;; -> dann Vertex hinzufügen + Offset (progn (vla-addvertex plineobj1 (1+ (vlax-curve-getendparam plineobj1)) (vlax*point->variant (2dpoint pt)) ) ;; verrrundn (command "_FILLET" "_P" (vlax-vla-object->ename plineobj1)) ;; erst alten Offset löschen (if plineobj2 (vla-delete plineobj2) ) ;; dann neuen Offset erstellen (setq plineobj2 (car (vlax-safearray->list (variant-value (vla-offset plineobj1 (- *blech:Dicke*))) ) ) ) ) ;; -> sonst neue Pline erstellen + Offset (setq plineobj1 (vla-addlightweightpolyline (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax*pointlist2d->variant (list (2dpoint spt) (2dpoint pt)) ) ) plineobj2 (car (vlax-safearray->list (variant-value (vla-offset plineobj1 (- *blech:Dicke*))) ) ) ) ) ) ;; and Funktion bricht Evaluierung ab, wenn ein Argument nil (if nicht erforderlich !) (and plineobj1 plineobj2 ;; schließen mit Pedit (beide Plines mit großem Fuzzyabstand verbinden) (progn (command "_PEDIT" "_M" ; mehrere Objekte (vlax-vla-object->ename plineobj1) (vlax-vla-object->ename plineobj2) "" ; Ende Objektwahl "_J" ; Verbinden "_J" ; Verbindungstyp "_A" ; Hinzufügen (1+ (abs *blech:Dicke*)) ; Fuzzy (+1 zur Sicherheit) "_X" ; Exit ) (command "_hatch" "ANSI31" 10.0 0.0 "_last" "") ; Schraffur ) ) (setvar "CLAYER" cl) (setvar "CMDECHO" ce) (princ) ) ;;;-------------------------------- ;;; GETREALnot0 - getreal ohne Null ;;; Anfragetext,Vorgabe (Zahl) ;;;-------------------------------- (defun getrealnot0 (anfrage vorgabe) (initget 2) (cond ((getreal (strcat "\n" anfrage " <" (if (numberp vorgabe) (rtos vorgabe 2 (getvar "LUPREC")) "" ) ">: " ) ) ) (t (float vorgabe)) ) ) ;;;--------------------------------- ;;; Wandelt 2D-Punktliste in Variant um ;;;--------------------------------- (defun vlax*pointlist2d->variant (ptlist / arrayspace sarray) (setq arrayspace (vlax-make-safearray vlax-vbdouble (cons 0 (- (* 2 (length ptlist)) 1)) ) ) (setq sarray (vlax-safearray-fill arrayspace (apply 'append ptlist))) (vlax-make-variant sarray) ) ;;;--------------------------------- ;;; Wandelt Punkt in Variant um ;;;--------------------------------- (defun vlax*point->variant (pt / arrayspace sarray) (setq arrayspace (vlax-make-safearray vlax-vbdouble (cons 0 (- (length pt) 1))) ) (setq sarray (vlax-safearray-fill arrayspace pt)) (vlax-make-variant sarray) ) ;;;--------------------------------- ;;; Punkt in 2D-Punkt wandeln ;;;--------------------------------- (defun 2dpoint (point) (list (car point) (cadr point)))
Wäre dankbar für einen kurzen tipp Gruß Hämmy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 10. Sep. 2020 07:18 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
das seltsame ist, als ich es heute getestet habe, blieb der eingestellte Layer Gruß Hämmy Edit:
ich habe jetzt gemerkt das dies immer auftritt wenn ich mit ESC abbreche, dann bleibt er auf dem Layer und geht nicht in den alten zurück [Diese Nachricht wurde von Hämmy am 10. Sep. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 14. Sep. 2020 14:28 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
|
Romuald Ferreux Mitglied
Beiträge: 4 Registriert: 25.03.2020
|
erstellt am: 24. Nov. 2020 09:11 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Hallo Udo, Vielen Dank bei dein Hilfe bei mir ich hab gelöst die materialen Eingeschalten durch Kondition Alu/Stahl/CNS als Beispiel. Ich habe noch und bis jetzt Problem zu die Abwicklung Seiten zu definieren . Für mich ich lade die Befehl dann blechdicke und nach die zweiten Punkte muss ich sage die Seite an Bildschirm abstimmen wo ich mochte diese Offset Kannst du mir helfen um diese Punkt Vielen Danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hämmy Mitglied Technischer Zeichner
Beiträge: 87 Registriert: 01.04.2020 Windows 10 Professional 64-Bit Intel Core i7-3770 3,40GHz 32,0 GB RAM Grafikkarte Radeon RX 470
|
erstellt am: 24. Nov. 2020 09:18 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
Zitat: Original erstellt von Romuald Ferreux: Hallo Udo,Vielen Dank bei dein Hilfe bei mir ich hab gelöst die materialen Eingeschalten durch Kondition Alu/Stahl/CNS als Beispiel. Ich habe noch und bis jetzt Problem zu die Abwicklung Seiten zu definieren . Für mich ich lade die Befehl dann blechdicke und nach die zweiten Punkte muss ich sage die Seite an Bildschirm abstimmen wo ich mochte diese Offset Kannst du mir helfen um diese Punkt Vielen Danke
Blechdicke 2 geht nacht rechts, Blechdicke -2 geht nach link Gruß Hämmy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Romuald Ferreux Mitglied
Beiträge: 4 Registriert: 25.03.2020
|
erstellt am: 24. Nov. 2020 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für tklingler
|