| |
| 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: Alle Konturen nach innen versetzen (3999 mal gelesen)
|
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 12. Aug. 2008 19:23 <-- editieren / zitieren --> Unities abgeben:
Hallo, es sollen auf eine Zeichnung alle Konturen (Polylinien oder LW-Polylinien) "automatisch" nach innen versetzt werden. Es sind meistens Rechtecke oder Kreise. Die Konturen liegen auf einem bestimmten Layer z.b. "kontur_innen", damit kann bestimmt werden welche Elemente in Frage kommen. Der Versetz-Abstand ist für alle Elemente gleich. Wer kennt ein Tool dafür oder ist bereit so ein Tool (nicht für umsonst)in Lisp zu programmieren. Gruß Theodor Schönwald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 12. Aug. 2008 20:04 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
..immer geschlossende Kurven ? ..reicht nicht ein offset mit vorheriger Bestimmung was innen ist? ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 12. Aug. 2008 20:25 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
|
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 12. Aug. 2008 20:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, doch das würde reichen, aber wie: "... Bestimmung was innen ist?" Bei einem Kreis ganz einfach, wie aber bei anderen Konturen? Es sind immer geschlossene Polylinien oder Kreise. Gruß Theodor [Diese Nachricht wurde von Theodor Schoenwald am 12. Aug. 2008 editiert.] [Diese Nachricht wurde von Theodor Schoenwald am 12. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 12. Aug. 2008 20:57 <-- editieren / zitieren --> Unities abgeben:
|
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 12. Aug. 2008 21:13 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
|
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 12. Aug. 2008 21:30 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hab mal schnell was zusammenkopiert... Die gewählte Pline wird dabei immer um 2ZE nach innen versetzt. Code:
(defun c:test (/ ename) (if (= "CW" (getdir-pline (setq ename (car (entsel "\nPline wählen:"))))) (vla-offset (vlax-ename->vla-object ename) 2.0) (vla-offset (vlax-ename->vla-object ename) -2.0) ) (princ) )(defun getdir-pline (ename /) (if (minusp (seglist-area (obj2seglist (vlax-ename->vla-object ename)))) "CW" "CCW" ) ) (defun seglist-area (seglist /) (* 0.5 (apply '+ (mapcar '(lambda (seg) (+ (if (zerop (caddr seg)) 0.0 (* 2 (seg-area seg)) ) (* (- (caar seg) (caadr seg)) (+ (cadar seg) (cadadr seg))) ) ) seglist ) ) ) ) (defun seg2rad (seg /) (/ (* 0.5 (distance (car seg) (cadr seg))) (sin (* 0.5 (* 4 (atan (caddr seg))))) ) ) (defun seg-area (seg / alfa r) (setq alfa (* 4 (atan (caddr seg))) r (seg2rad seg) ) (* (* 0.5 (* r r)) (- alfa (sin alfa))) ) (defun obj2seglist (obj / endpara para seglist) (setq endpara (vlax-curve-getendparam obj) para (vlax-curve-getstartparam obj) ) (while (< para endpara) (setq seglist (cons (list (vlax-curve-getpointatparam obj para) (vlax-curve-getpointatparam obj (1+ para)) (vla-getbulge obj para) ) seglist ) para (1+ para) ) ) (reverse seglist) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 12. Aug. 2008 23:10 <-- editieren / zitieren --> Unities abgeben:
Hallo Andy, zuerst vielen Dank. Das Ergebnis: in ACAD einwandfrei, in ZWCAD auch einwandfrei, in Bricscad leider nur eine Fehlermeldung. Wie Du schon vermutet hast, sind es die VL Befehle. Seit Torsten Moses bei Bricscad ist, funktionieren schon viele VL-Befehle aber es gibt damit immer noch Probleme. Gruß Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 12. Aug. 2008 23:32 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Zitat: Original erstellt von Theodor Schoenwald: [i]Hallo Thomas,doch das würde reichen, aber wie: "... Bestimmung was innen ist?" Bei einem Kreis ganz einfach, wie aber bei anderen Konturen? Es sind immer geschlossene Polylinien oder Kreise.
Es gibt zwei einfache Methoden, um für einen beliebigen Punkt festzustellen, ob er innerhalb oder außerhalb einer Kontur liegt. Beide Methoden funktionieren auch mit offenen Polylinien, wobei dann Anfangs- und Endpunkt als verbunden betrachtet werden. Beide Methoden können auch mit sich selbst schneidenden Polygonen umgehen. 1. Schnittpunkt-Methode: hier ziehst Du vom zu prüfenden Punkt einen Strahl ins Unendliche (also außerhalb der aktuellen Zeichnungsgrenzen) und zählst die Anzahl der Schnittpunkte des Strahls mit den Kanten des Polygons. Für einen Punkt innerhalb des Polygons ist die Anzahl größer Null und ungerade. Probleme gibt's, wenn zufälligerweise der Strahl genau auf einen Knoten des Polygons fällt. 2. Winkel-Methode: Du misst für jede Kante des Polygons den Winkel, den die beiden Linien vom zu prüfenden Punkt zu den Ecken bilden - gegen den Uhrzeigersinn laufende Winkel müssen als negative Winkel gerechnet werden. Bei einem Punkt innerhalb des Polygons ist die Winkelsumme ein ganzzahliges Vielfaches von 360 Grad. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 13. Aug. 2008 07:23 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Mein erster Gedanke war, die PLs in beide Richtungen zu versetzen - Umfang/Länge der beiden prüfen - die mit dem größeren Umfang/Länge wieder wegschmeissen. ??? (Hab aber jetzt Andis Code nur überflogen - könnte ähnlich sein ?) ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 15. Aug. 2008 14:03 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Servus Theodor Teste mal - ich hoffe, es tut, was Du willst. Code: ;Hauptprogramm - (LW)POLY's um #versatz nach innen versetzen (defun c:niv (/ #versatz #aws #ename #2plist #spkt #p2 #vobj1 #vobj2 #lg1 #lg2) (setvar "OSMODE" 0) (setq #versatz 2.0) (setq #aws (f#sstolist (ssget "X" '((0 . "LWPOLYLINE,POLYLINE")(8 . "kontur_innen"))))) (foreach #ename #aws (setq #2plist (f#pkte #ename)) (setq #spkt (polar (setq #p2 (cadr #2plist)) (+ (angle #p2 (car #2plist)) (/ pi 2)) #versatz ) ) (command "_OFFSET" #versatz (list #ename #p2) #spkt "") (command "_AREA" "_O" (setq #vobj1 (entlast))) (setq #lg1 (getvar "PERIMETER")) (setq #spkt (polar (setq #p2 (cadr #2plist)) (- (angle #p2 (car #2plist)) (/ pi 2)) #versatz ) ) (command "_OFFSET" #versatz (list #ename #p2) #spkt "") (command "_AREA" "_Object" (setq #vobj2 (entlast))) (setq #lg2 (getvar "PERIMETER")) (cond ( (< #lg1 #lg2) (entdel #vobj2) ) ( (> #lg1 #lg2) (entdel #vobj1) ) ( (= #lg1 #lg2) (Alert "Kann innen und aussen nicht unterscheiden") ) );cond );foreach );defun(defun f#sstolist (#sset / #list #counter) (setq #counter 0) (repeat (sslength #sset) (setq #list (cons (ssname #sset #counter) #list) #counter (1+ #counter) ) ) #list );defun (defun f#plist (#ename / #elist #pktlist) (setq #elist (entget #ename)) (setq #pktlist nil) (while #elist (if (/= (caar #elist) 10) (setq #elist (cdr #elist)) (progn (setq #pktlist (cons (cdar #elist) #pktlist)) (setq #elist (cdr #elist)) ) ) ) (reverse #pktlist) );defun (defun f#pkte (#ename / ) (if (= "LWPOLYLINE" (cdr (assoc 0 (entget #ename)))) (list (car (f#plist #ename)) (cadr (f#plist #ename))) (list (cdr (assoc 10 (entget (entnext #ename)))) (cdr (assoc 10 (entget (entnext (entnext #ename))))) ) );if );defun
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 15. Aug. 2008 16:44 <-- editieren / zitieren --> Unities abgeben:
|
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 16. Aug. 2008 18:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Ernst, funktioniert, doch nicht ganz. Wenn eine Kontur im UZ-Sinn läuft ja, wenn im GUZ wird 2 x nach außen versetzt. Beim Probieren habe ich auch ein Fehler von ACAD entdeckt. Beispiel: Viereck von 10,10 nach 120,120, Versatz 2 mm Acad-Befehl: "Versetz" Abstand: 2 ACAD-Abfrage: Auf welche Seite soll versetzt werden? Wenn ich als Punkt "8,120" eingebe, wird die Kontur nach innen versetzt, obwohl der Punkt "8,120" außerhalb liegt. Den Test habe ich mit ACAD 2000 gemacht. Da BricsCad eine Option hat nach beiden Seiten zu versetzen, wäre damit alles noch viel einfacher als bei ACAD. Wenn ich die nächste Woche zurück bin, werde ich alles noch ausführlicher testen. Gruß Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 16. Aug. 2008 20:53 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
|
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 17. Aug. 2008 19:21 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hi Andy OSMODE ist schon auf 0. Hallo Theodor Zitat: Beim Probieren habe ich auch ein Fehler von ACAD entdeckt. Beispiel: Viereck von 10,10 nach 120,120, Versatz 2 mm Acad-Befehl: "Versetz" Abstand: 2 ACAD-Abfrage: Auf welche Seite soll versetzt werden? Wenn ich als Punkt "8,120" eingebe, wird die Kontur nach innen versetzt, obwohl der Punkt "8,120" außerhalb liegt.
Das würde ich nicht unbedingt als Fehler sehen: Mit dem Pickpunkt (bei der Objektwahl) und dem Punkt (8,120) gibst Du eine Richtung an und die zeigt erstmal nach innen, auch wenn Du auf dem Weg zum Punkt das Rechteck später wieder verlässt. Allerdings - mit den Sonderfällen beim Versetzen werden wir leben müssen. Der UZ ist bei mir (2002) egal - versetzt immer nach innen Müßte von der Logik auch egal sein: stell dich auf den 2.Pkt der (LW-)Polylinie orientiere dich auf den 1.Pkt rechne einen Pkt nach rechts versetze die Linie in diese Richtung ermittle die Länge rechne einen Pkt nach links versetze die Linie in diese Richtung ermittle die Länge lösche die Linie mit der größeren Länge Vielleicht kannst Du die DWG hier einstellen? ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 17. Aug. 2008 21:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Ernst, im Anhang ist eine Musterzeichnung. Der Fang war ausgeschaltet. Unten 2 Rechtecke als Polylinie, ein UZ die andere GUZ. Oben 2 x als LW-Polylinien eine UZ die andere GUZ. Bei der unteren rechts wurde 2 x nach innen versetzt. Da sind innen 2 Konturen. Die Datei habe ich umbenannt als .TXT einfach wieder zu .DWG machen. Gruß Theodor
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 18. Aug. 2008 09:22 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
|
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 18. Aug. 2008 19:56 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hallo Theodor Die Idee, den Seitpunkt einfach nach links und rechts (im rechten Winkel) zu rechnen, war nicht so gut. Ich hab leider nur mit Vielecken getestet. Im "Spezialfall Rechteck" fällt dann ein Punkt genau auf die Linie. Wenn man aber beim Berechnen der Seitpunkte -
Code: (setq #spkt (polar #p2 ([+/-] (angle #p2 #p1) (/ pi 3)) #versatz ) )
anstelle von pi/2 pi/3 nimmt, sollte es bei Rechtecken und Kreisen funktionieren. Bei Konturen mit spitzen Winkeln (falls Du solche auch hast) wird das Programm aber nach wie vor scheitern. Zitat: Da BricsCad eine Option hat nach beiden Seiten zu versetzen...
Das könnte die Lösung sein, wenn Du dieses Prog. nur für Briscad nehmen willst und sonst das von Andi. Müßtest mir aber die Syntax des Befehls liefern ?(command "_offset" ... )? - ich kenne Briscad nämlich nicht.------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 18. Aug. 2008 21:09 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Eine Möglichkeit wäre z.B den Offsetpunkt vom Mittelpunkt des ersten Plinesegments aus zu berechnen. (Achtung bei Bogensegmenten...) Pline CW -> Mittelpunkt des Segments nach rechts Pline CCW -> ... nach links Die Pline einfach in beide Richtungen verstezen, und dann die längere weglöschen, kann auch in die Hose gehen, wenn beim Versetzen mehrere Offsetkonturen entstehen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 19. Aug. 2008 07:03 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hi Andi Zitat: ...Offsetpunkt vom Mittelpunkt des ersten Plinesegments...
Hatte ich auch versucht, bin aber gleich bei der ersten "runden" PL gescheitert - Ausbuchtung war größer als #versatz. Dass beim Versetzen mehrere neue Konturen entstehen können wusste ich bis jetzt nicht. Wann ist das der Fall? ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 19. Aug. 2008 18:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Ernst, so geht es bei BricsCad: _offset Abstand: Objekt wählen: _b (oder b) danach Return wie beim normalen Versetzbefehl auch. Jetzt kann ich Dein Programm für BricCad verwenden und für ACAD das von Andy. Nochmals vielen Dank an euch Beide. Gruß Theodor Schönwald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 21. Aug. 2008 17:36 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hallo Theodor Das ist jetzt mit einigen "?" behaftet, da ichs ja nicht testen kann - das überlass' ich Dir. Code: (defun c:niv (/ #versatz #letztes #aws #ename #p1 #vobj1 #vobj2 #lg1 #lg2) (setvar "OSMODE" 0) (setq #versatz 2.0) (setq #letztes (entlast)) (if (setq #aws (ssget "X" '((0 . "LWPOLYLINE,POLYLINE")(8 . "kontur_innen")))) (progn (setq #aws (f#sstolist #aws)) (foreach #ename #aws (if (= "LWPOLYLINE" (cdr (assoc 0 (entget #ename)))) (setq #p1 (cdr (assoc 10 (entget #ename)))) (setq #p1 (cdr (assoc 10 (entget (entnext #ename))))) ) (command "_OFFSET" #versatz (list #ename #p1) "_B" "") (command "_AREA" "_O" (setq #vobj1 (entnext #letztes))) (setq #lg1 (getvar "PERIMETER")) (command "_AREA" "_O" (setq #vobj2 (entnext #vobj1))) (setq #lg2 (getvar "PERIMETER")) (cond ( (< #lg1 #lg2) (entdel #vobj2) ) ( (> #lg1 #lg2) (entdel #vobj1) ) ( (= #lg1 #lg2) (alert "Kann innen und aussen nicht unterscheiden") ) ) ) ) (alert "Keine Objekte entsprechen den Auswahlkriterien") ) ) (defun f#sstolist (#sset / #list #counter) (setq #counter 0) (repeat (sslength #sset) (setq #list (cons (ssname #sset #counter) #list) #counter (1+ #counter) ) ) #list )
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 21. Aug. 2008 22:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Ernst, der Versatz nach beiden Seiten funktioniert einwandfrei. Danach komme ich nicht weiter, weil nach "_AREA" 2 x die gleiche Länge ausgegeben wird. Wenn ich den Elementen (entlast) eine andere Farbe gebe wird eines gefärbt. Je nach Konturrichtung einmal das äußere oder das innere Element Element gefärbt. Gruß Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 22. Aug. 2008 07:48 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 22. Aug. 2008 07:56 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Zitat: Original erstellt von Geos: Ich glaube, ich kenn den Fehler: das (entnext) einer Polyline/Insert/... ist ein Vertex/Attribut/ ... und nicht das gesuchte nächste Hauptobjekt.Über die Lösung muss ich aber noch nachdenken ...
sowas (ähnliches) ? (while (and(setq OBJ(entnext OBJ)) (setq DATA(entget OBJ)) (/=(cdr(assoc 0 DATA)) "SEQUEND") ) )
------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 23. Aug. 2008 19:25 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Servus Ich hätte vor dem Nachdenken nochmal hier reinschauen sollen ... Thomas, in diese Richtung hab ich auch gedacht, war mir dann aber nicht sicher, ob alle dies "zusammengesetzten Objekte " mit SEQUEND enden. Aber nachdem Du es hier vorschlägst, geh ich mal davon aus (für die Zukunft ...) . Hier sollte es reichen, wenn ich das garantiert letzte Objekt sichere - dann ist (entnext) die eine Kontur und (entlast) die andere - gibt ja nur 2 Neue (meines Wissens nach ...?) Theodor, probier noch mal: Code: (defun c:niv (/ #versatz #letztes #aws #ename #p1 #vobj1 #vobj2 #lg1 #lg2) (setvar "OSMODE" 0) (setq #versatz 2.0) (setq #letztes (entlast)) (while (entnext (entlast)) (setq #letztes (entnext (entlast))) ) (if (setq #aws (ssget "X" '((0 . "LWPOLYLINE,POLYLINE")(8 . "kontur_innen")))) (progn (setq #aws (f#sstolist #aws)) (foreach #ename #aws (if (= "LWPOLYLINE" (cdr (assoc 0 (entget #ename)))) (setq #p1 (cdr (assoc 10 (entget #ename)))) (setq #p1 (cdr (assoc 10 (entget (entnext #ename))))) ) (command "_OFFSET" #versatz (list #ename #p1) "_B" "") (command "_AREA" "_O" (setq #vobj1 (entnext #letztes))) (setq #lg1 (getvar "PERIMETER")) (command "_AREA" "_O" (setq #vobj2 (entlast))) (setq #lg2 (getvar "PERIMETER")) (cond ( (< #lg1 #lg2) (entdel #vobj2) ) ( (> #lg1 #lg2) (entdel #vobj1) ) ( (= #lg1 #lg2) (Alert "Kann innen und aussen nicht unterscheiden") ) ) ) ) (alert "Keine Objekte entsprechen den Auswahlkriterien") ) ) (defun f#sstolist (#sset / #list #counter) (setq #counter 0) (repeat (sslength #sset) (setq #list (cons (ssname #sset #counter) #list) #counter (1+ #counter) ) ) #list )
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 23. Aug. 2008 20:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Ernst, BricsCad kann das Tool nicht leiden und stürzt ab. Wenn ich die folgenden Zeilen: ------------------------------------ (while (entnext (entlast)) (setq #letztes (entnext (entlast))) ) --------------------------------------- auskommentiere, dann stützt es nicht ab. Dann wird bei einem Element die Kontur richtig versetzt, beim nächsten wird das innere gelöscht und bei anderen Konturen sind beide da und keines wird gelöscht, obwohl alles Rechtecke waren. Dann habe ich Kreise zu Polylinen gemacht, auch hierbei ist alles willenlos. Um noch eines drauf zu setzen, wenn ich den Befehl wiederhole, werden auf der gleichen Zeichnung wieder andere Konturen richtig und falsch versetzt. D.h versetzt werden sie alle auf beiden Seiten nur die falschen oder keine gelöscht. Außer Deinen Vorschlägen habe ich auch selbst verschiedene Varianten probiert, ich kam zu keinem brauchbaren Ergebnis. Gruß Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 23. Aug. 2008 21:14 <-- editieren / zitieren --> Unities abgeben:
Hallo Ernst, da BricsCad so ärgerlich abstürzt, dass der PC nur noch am Schalter an der Steckerleiste ausgeschaltet werden kann, habe ich nochmals mit Deiner ersten Version probiert. ;;Hauptprogramm - (LW)POLY's um #versatz nach innen versetzen (defun C:NIV (/ #VERSATZ #AWS #ENAME #2PLIST #SPKT #P2 #VOBJ1 #VOBJ2 #LG1 #LG2) (setvar "OSMODE" 0) (setq #VERSATZ 2.0) (setq #AWS (F#SSTOLIST (ssget "X" '((0 . "LWPOLYLINE,POLYLINE") (8 . "kontur_innen"))))) (foreach #ENAME #AWS (setq #2PLIST (F#PKTE #ENAME)) (setq #SPKT (polar (setq #P2 (cadr #2PLIST)) (+ (angle #P2 (car #2PLIST)) (/ pi 2)) #VERSATZ ) ) (command "_OFFSET" #VERSATZ (list #ENAME #P2) #SPKT "") (command "_AREA" "_O" (setq #VOBJ1 (entlast))) (setq #LG1 (getvar "PERIMETER")) (setq #SPKT (polar (setq #P2 (cadr #2PLIST)) (- (angle #P2 (car #2PLIST)) (/ pi 3)) #VERSATZ ) ) (command "_OFFSET" #VERSATZ (list #ENAME #P2) #SPKT "") (command "_AREA" "_Object" (setq #VOBJ2 (entlast))) (setq #LG2 (getvar "PERIMETER")) (cond ((< #LG1 #LG2) (entdel #VOBJ2) ) ((> #LG1 #LG2) (entdel #VOBJ1) ) ((= #LG1 #LG2) (alert "Kann innen und aussen nicht unterscheiden") ) ) ;_ cond ) ;_ foreach ) ;_ defun (defun F#SSTOLIST (#SSET / #LIST #COUNTER) (setq #COUNTER 0) (repeat (sslength #SSET) (setq #LIST (cons (ssname #SSET #COUNTER) #LIST) #COUNTER (1+ #COUNTER) ) ) #LIST ) ;_ defun (defun F#PLIST (#ENAME / #ELIST #PKTLIST) (setq #ELIST (entget #ENAME)) (setq #PKTLIST NIL) (while #ELIST (if (/= (caar #ELIST) 10) (setq #ELIST (cdr #ELIST)) (progn (setq #PKTLIST (cons (cdar #ELIST) #PKTLIST)) (setq #ELIST (cdr #ELIST)) ) ) ) (reverse #PKTLIST) ) ;_defun (defun F#PKTE (#ENAME /) (if (= "LWPOLYLINE" (cdr (assoc 0 (entget #ENAME)))) (list (car (F#PLIST #ENAME)) (cadr (F#PLIST #ENAME))) (list (cdr (assoc 10 (entget (entnext #ENAME)))) (cdr (assoc 10 (entget (entnext (entnext #ENAME))))) ) ) ;_ if ) ;_defun (princ) Wenn ich "(- (angle #P2 (car #2PLIST)) (/ pi 3))" ändere, funktioniert es bei Polylinien aus Kreisen und bei Rechtecken, bei spitzen Konturen nicht. Wenigstens so viel. Gruß Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 24. Aug. 2008 01:07 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hab das Thema nicht genau verfolgt, aber so wie ich es sehe hakt es beim Berechnen des Offsetpunktes. Habe meinen ersten Code von VLA-Funktionen befreit - Back to the roots Der Offsetpunkt wird am tatsächlichen Mittelpunkt des 1. Plinesegments senkrecht zur Kontur berechnet. Ich habe hierfür einen sehr geringen Abstand (0.001) gewählt. Die Offsetrichtung bestimme ich wieder in Abhängigkeit der Laufrichtung. Es wird aber nur eine Pline versetzt. Das Gebrösel mit dem Auswahlsatz für alle Pline's war mir jetzt zu blöd. Dürfte für Dich eigentlich kein Problem sein das noch einzubauen !
Code:
(defun c:test (/ ename midpt1st p1 p2 seglist offsetpt) (setq ename (car (entsel "\nPline wählen:")) ;; Pline -> Segmentliste seglist (dxf2seglist (entget ename)) ;; Mittelpunkt von 1. Segment midpt1st (getmid-seg (car seglist)) ;; 1. Vertex p1 (caar seglist) ;; 2.Vertex p2 (cadar seglist) ) ;; Offsetpunkt in Abhängigkeit der Laufrichtung bestimmen ;; der Offsetpunkt wird in einem Abstand von 0.001 vom Mittelpunkt des 1. Plinesegments berechnet (setq offsetpt (polar midpt1st (+ (angle p1 p2) (if (minusp (seglist-area seglist)) ;; "CW" -> Offset nach rechts (* -0.5 pi) ;; "CCW" -> Offset nach links (* 0.5 pi) ) ) 0.001 ) ) ;; Offset (command "_OFFSET" 2.0 ename "_non" offsetpt "") ;; nur zum Testen Offsetpunkt einzeichnen (setvar "PDmode" 2) (setvar "PDsize" 2) (command "_POINT" "_non" offsetpt) (princ) ) ;;;--------------------------------------- ;;; Fläche von SegList (Pline) berechnen ;;; wenn Fläche negativ, dann ist die Laufrichtung "CW" ;;; positiv "CCW" ;;;--------------------------------------- (defun seglist-area (seglist /) (* 0.5 (apply '+ (mapcar '(lambda (seg) (+ (if (zerop (caddr seg)) 0.0 (* 2 (seg-area seg)) ) (* (- (caar seg) (caadr seg)) (+ (cadar seg) (cadadr seg))) ) ) seglist ) ) ) ) (defun seg2rad (seg /) (/ (* 0.5 (distance (car seg) (cadr seg))) (sin (* 0.5 (* 4 (atan (caddr seg))))) ) ) (defun seg-area (seg / alfa r) (setq alfa (* 4 (atan (caddr seg))) r (seg2rad seg) ) (* (* 0.5 (* r r)) (- alfa (sin alfa))) );;;---------------------------------- ;;; Mittelpunkt von Segment berechnen ;;;---------------------------------- (defun getmid-seg (seg / sp ep bulge cir cen rad) (setq sp (car seg) ep (cadr seg) bulge (caddr seg) ) (if (zerop bulge) ;; Line -> direkter Mittelpunkt (mapcar (function (lambda (c1 c2) (+ c1 (/ (- c2 c1) 2.0)))) sp ep) ;; ARC -> Mittelpunkt auf Bogen berechnen (progn (setq cir (seg2cir seg) cen (car cir) rad (cadr cir) ) (polar cen (+ (angle sp ep) (if (minusp bulge) (/ pi 2.0) (/ pi -2.0) ) ) rad ) ) ) ) ;;;------------------------------------------------------------ ;;; Konvertiert ein gekrümmtes Polyliniensegment (pt1 pt2 bulge) ;;; in -> (Zentrum Radius) ;;; Gibt NIL bei gerader Linie zurück. ;;;------------------------------------------------------------ (defun seg2cir (seg / bulge p1 p2 cot x y rad dummy) (if (zerop (caddr seg)) nil (setq p1 (car seg) p2 (cadr seg) bulge (caddr seg) cot (* 0.5 (- (/ 1.0 bulge) bulge)) x (/ (- (+ (car p1) (car p2)) (* (- (cadr p2) (cadr p1)) cot)) 2.0) y (/ (+ (+ (cadr p1) (cadr p2)) (* (- (car p2) (car p1)) cot)) 2.0) rad (distance (list (car p1) (cadr p1)) (list x y)) dummy (list (list x y) rad) ) ) ) ;;;------------------------------------------------------------ ;;; Segmentliste bilden ((P1 P2 Bulge1) (P2 P3 Bulge2)....) ;;;------------------------------------------------------------ (defun dxf2seglist (dxflist / p1 tmpename tmpdxflist ptlist bulgelist) (setq p1 (cdr (assoc 10 dxflist))) ;; GC 10 + 42 extrahieren (if (= "LWPOLYLINE" (cdr (assoc 0 dxflist))) ;; LWPOLYLINE (foreach item dxflist (cond ((= 10 (car item)) (setq ptlist (cons (cdr item) ptlist))) ((= 42 (car item)) (setq bulgelist (cons (cdr item) bulgelist))) ) ) ;; POLYLINE (progn (setq tmpename (entnext (cdr (assoc -1 dxflist))) p1 (cdr (assoc 10 (entget tmpename))) ) (while (= "VERTEX" (cdr (assoc 0 (setq tmpdxflist (entget tmpename))))) (setq ptlist (cons (cdr (assoc 10 tmpdxflist)) ptlist) bulgelist (cons (cdr (assoc 42 tmpdxflist)) bulgelist) tmpename (entnext tmpename) ) ) ) ) (if (not (zerop (logand 1 (cdr (assoc 70 dxflist))))) ;; Pline geschlossen -> ersten Punkt zum Schluß nochmal anfügen (setq ptlist (cons p1 ptlist)) ) ;; Rückgabe (mapcar 'list (reverse ptlist) (cdr (reverse ptlist)) (reverse bulgelist)) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 24. Aug. 2008 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hallo Theo Is etwas schwierig für mich -
Code: (while (entnext (entlast)) (setq #letztes (entnext (entlast))) )
ist eigentlich gar nix besonderes. Wenn BricsCad das nicht mag, wird - wenn das letzte Objekt vor dem Versetzen zB. eine (Heavy-)Polyline war - diese mit der 2. Kontur verglichen, was zu einen falschen Ergebnis führt.Aber Dank Andi stellt sich das Problem ja nicht mehr ... Zum Verheiraten der beiden Progs: Nimm von mir:
Code: (setq #aws (f#sstolist (ssget "X" '((0 . "LWPOLYLINE,POLYLINE")(8 . "kontur_innen"))))) (foreach ename #aws (andisprog ename) ;neu )
und ändere Andi's erste Zeile:
Code: (defun c:test (/ ename midpt1st p1 p2 seglist offsetpt)
zu
Code: (defun andisprog (ename / midpt1st p1 p2 seglist offsetpt)
die 2.Zeile
Code: (setq ename (car (entsel "\nPline wählen:"))
weglassenKommst Du damit klar? ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 25. Aug. 2008 01:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Andy, hallo Ernst, jetzt läuft alles einwandfrei. In ACAD hatte es vorher schon funktioniert, nun läuft es auch in BricsCad einwandfrei. Das Gebrösel mit der Auswahl ist auch gemacht. Vielen Dank an Euch Beide Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C4DP4P57 Mitglied Technischer Zeichner
Beiträge: 153 Registriert: 06.05.2009 Win 10 Windows 10 Enterprise 64Bit Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz 32 GB RAM NVIDIA Quadro P1000 AutoCAD 2019.1.2 64Bit
|
erstellt am: 22. Okt. 2015 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hallo Andi, vielleicht könnte mir da jemand behilflich sein (Bin mit LISP nicht sooo Fit, aber ich übe noch ;-)) Für meine Zwecke wäre es hilfreich das das Quellobjekt in der LISP von andi2050 gelöscht wird?! Wie stelle ich das an? THX Jörg Zitat: Original erstellt von andi2050: Hab mal schnell was zusammenkopiert... Die gewählte Pline wird dabei immer um 2ZE nach innen versetzt.<BLOCKQUOTE><font size="2" face="Courier New">Code:<HR> (defun c:test (/ ename) (if (= "CW" (getdir-pline (setq ename (car (entsel "\nPline wählen:"))))) (vla-offset (vlax-ename->vla-object ename) 2.0) (vla-offset (vlax-ename->vla-object ename) -2.0) ) (princ) ) (defun getdir-pline (ename /) (if (minusp (seglist-area (obj2seglist (vlax-ename->vla-object ename)))) "CW" "CCW" ) ) (defun seglist-area (seglist /) (* 0.5 (apply '+ (mapcar '(lambda (seg) (+ (if (zerop (caddr seg)) 0.0 (* 2 (seg-area seg)) ) (* (- (caar seg) (caadr seg)) (+ (cadar seg) (cadadr seg))) ) ) seglist ) ) ) ) (defun seg2rad (seg /) (/ (* 0.5 (distance (car seg) (cadr seg))) (sin (* 0.5 (* 4 (atan (caddr seg))))) ) ) (defun seg-area (seg / alfa r) (setq alfa (* 4 (atan (caddr seg))) r (seg2rad seg) ) (* (* 0.5 (* r r)) (- alfa (sin alfa))) ) (defun obj2seglist (obj / endpara para seglist) (setq endpara (vlax-curve-getendparam obj) para (vlax-curve-getstartparam obj) ) (while (< para endpara) (setq seglist (cons (list (vlax-curve-getpointatparam obj para) (vlax-curve-getpointatparam obj (1+ para)) (vla-getbulge obj para) ) seglist ) para (1+ para) ) ) (reverse seglist) ) <HR></font></BLOCKQUOTE><font size="2" face="Arial">
------------------ Wer immer tut, was er schon kann, bleibt immer das, was er schon ist. Menschen mit einer neuen Idee gelten so lange als Spinner, bis sich die Sache durchgesetzt hat. Das schöne an AutoCAD ist ja, dass einem jede Möglichkeit bietet damit zu machen was man will und wie man es will. Was jeder unglücklicherweise auch tut ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 22. Okt. 2015 15:44 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Bei 'noch nicht sooo fit' sollte das Wissen um löschen eines Objektes unbedingt vorhanden sein, entdel oder vla-delete sind zwei Möglichkeiten, die erste wäre hier wohl am einfachsten zu ergänzen. Entdel ist in der Hilfe beschrieben und Beispiele im Netz sind in Unmengen vorhanden. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C4DP4P57 Mitglied Technischer Zeichner
Beiträge: 153 Registriert: 06.05.2009 Win 10 Windows 10 Enterprise 64Bit Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz 32 GB RAM NVIDIA Quadro P1000 AutoCAD 2019.1.2 64Bit
|
erstellt am: 26. Okt. 2015 10:36 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Ok, da muss ich passen. Mit nicht sooo Fit war auch vielmehr gemeint das sich meine Kenntnisse auf das schreiben einer Command Zeile beschränken. Nicht viel aber immerhin. Ich bin da eher das Skriptkid, dass sich Lisp´s zusammenkopiert oder einfach das nutzt was es im Netz zu finden gibt. P.S. Das Tool tut es erst mal auch so. Ich hab zwar keine Ahnung wo und wie ich entdel einbauen müsste. Probiere aber trotzdem mal es hin zu bekommen. Wenn ichs geschafft habe poste ich es hier ;-) Danke für den Ansporn Jörg
------------------ Wer immer tut, was er schon kann, bleibt immer das, was er schon ist. Menschen mit einer neuen Idee gelten so lange als Spinner, bis sich die Sache durchgesetzt hat. Das schöne an AutoCAD ist ja, dass einem jede Möglichkeit bietet damit zu machen was man will und wie man es will. Was jeder unglücklicherweise auch tut ;-) 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: 26. Okt. 2015 10:57 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Zitat: Original erstellt von C4DP4P57: Ich hab zwar keine Ahnung wo und wie ich entdel einbauen müsste. Probiere aber trotzdem mal es hin zu bekommen.
Ist nicht so schwer. Überlege mal, wann Du das Objekt nicht mehr brauchst und dann schau z. B. mal hier in die Hilfe zum Aufruf von entdel. Gruß Thomas
[Diese Nachricht wurde von spider_dd am 26. Okt. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C4DP4P57 Mitglied Technischer Zeichner
Beiträge: 153 Registriert: 06.05.2009 Win 10 Windows 10 Enterprise 64Bit Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz 32 GB RAM NVIDIA Quadro P1000 AutoCAD 2019.1.2 64Bit
|
erstellt am: 27. Okt. 2015 12:55 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Zitat: Original erstellt von spider_dd:
Ist nicht so schwer. Überlege mal, wann Du das Objekt nicht mehr brauchst und dann schau z. B. mal hier in die Hilfe zum Aufruf von entdel. Gruß Thomas [Diese Nachricht wurde von spider_dd am 26. Okt. 2015 editiert.]
Also einfügen würde ich es wohl am Ende der Lisp, also wenn das neue Objekt erstellt ist?! Ich habe jetzt mal ein wenig mit entdel rumprobiert, aber weiter wie (entdel (entlast)), was mir ja nur das letzte Objekt löscht, bin ich nicht gekommen. Ich verstehe nicht wie ich mit ssget das Quellobjekt wählen kann, wenn das überhaupt der richtige Weg wäre? Respekt an alle die Lisp verstehen! Ich finde es schwer, aber probiere mal weiter ;-) Gruß Jörg
------------------ Wer immer tut, was er schon kann, bleibt immer das, was er schon ist. Menschen mit einer neuen Idee gelten so lange als Spinner, bis sich die Sache durchgesetzt hat. Das schöne an AutoCAD ist ja, dass einem jede Möglichkeit bietet damit zu machen was man will und wie man es will. Was jeder unglücklicherweise auch tut ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 27. Okt. 2015 13:38 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Zug wackelt, Handydisplay klein, kein Acad zum testen, aber: Ist die zunächst gewählte Polylinie das Objekt um das es geht? Der Objektname wird in der Variable "ename" gespeichert, entdel verlangt so eine Angabe, daher sollte (entdel ename) zum Ziel führen, teste es mal. prinzipiell würde ich auch eine Stelle wählen nach der Erstellung der neuen Kontur. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD 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: 28. Okt. 2015 08:40 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hallo Jörg, probiere mal folgendes: Code:
(defun c:test (/ ename) (if (= "CW" (getdir-pline (setq ename (car (entsel "\nPline wählen:"))))) (vla-offset (vlax-ename->vla-object ename) 2.0) (vla-offset (vlax-ename->vla-object ename) -2.0) ) (entdel ename) (princ) )...
HTH Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C4DP4P57 Mitglied Technischer Zeichner
Beiträge: 153 Registriert: 06.05.2009 Win 10 Windows 10 Enterprise 64Bit Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz 32 GB RAM NVIDIA Quadro P1000 AutoCAD 2019.1.2 64Bit
|
erstellt am: 28. Okt. 2015 10:29 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Zitat: Original erstellt von spider_dd: Hallo Jörg,probiere mal folgendes: Code:
(defun c:test (/ ename) (if (= "CW" (getdir-pline (setq ename (car (entsel "\nPline wählen:"))))) (vla-offset (vlax-ename->vla-object ename) 2.0) (vla-offset (vlax-ename->vla-object ename) -2.0) ) [b](entdel ename) (princ) )...
HTH Gruß Thomas[/B]
Hallo Thomas, genau so funktioniert es Mega Hammer Fett!!! Genau das was ich brauche. Vielen vielen Dank, ihr seit Spitze Gruß Jörg
------------------ Wer immer tut, was er schon kann, bleibt immer das, was er schon ist. Menschen mit einer neuen Idee gelten so lange als Spinner, bis sich die Sache durchgesetzt hat. Das schöne an AutoCAD ist ja, dass einem jede Möglichkeit bietet damit zu machen was man will und wie man es will. Was jeder unglücklicherweise auch tut ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |