| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Koordinateneingabe bei (command "_offset")... (697 mal gelesen)
|
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2041 Registriert: 08.04.2002 AIS2009, PDSU 2012-2015, Plant 3D 2011-2015, NavisWorks 2010-2015, Win7 64bit SP1, Intel Core i7 870, 16 GB RAM, Quadro 2000D
|
erstellt am: 12. Dez. 2003 10:33 <-- editieren / zitieren --> Unities abgeben:
hallo forum - wieder mal ne lainefrage aber was solls. ich möchte über lisp mehrere linien in beide richtungen um einen bestimmten abstand versetzten. also nach oben und unten. mein code dazu: (defun c:layer2pipe2D () (setq pickmode (getvar "pickstyle")) (setvar "pickstyle" 0) (command "-layer" "_m" "Rohrmitte" "_c" "5" farbenew "" "") (command "_ucs" "_world") (while (not (setq obj (entsel "\nObjekt mit dem Rohr-Layer wählen: ")))) (setq lrohr (cdr (assoc 8 (entget (car obj))))) (setq DN (getreal "\nRohrdurchmesser: ")) (setq en (entnext)) (while en (setq en_0entity (cdr (assoc 0 (entget en)))) (setq en_8entity (cdr (assoc 8 (entget en)))) (if (= en_8entity lrohr) (progn (if (= en_0entity "LINE") (progn (command "_ucs" "_obj" en) (setq farbenew (cdr (assoc 62 (tblsearch "layer" en_8entity)))) (command "-layer" "_m" (strcat en_8entity "-z") "_c" farbenew "" "") (command "_offset" (/ DN 2.0) en "0,1" "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") (command "_offset" (/ DN 2.0) en "0,-1" "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") (command "_chprop" en "" "_la" "Rohrmitte" "") ) ) ;end if (if (= en_0entity "ARC") (progn (command "_ucs" "_obj" en) (setq farbenew (cdr (assoc 62 (tblsearch "layer" en_8entity)))) (command "-layer" "_m" (strcat en_8entity "-z") "_c" farbenew "" "") (setq en_rad (cdr (assoc 40 (entget en)))) (command "_ucs" "_m" (list en_rad 0.0 0.0)) (command "_offset" (/ DN 2.0) en "0,1" "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") (command "_offset" (/ DN 2.0) en "0,-1" "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") (command "_chprop" en "" "_la" "Rohrmitte" "") ) );end if );end progn ) ;end if (setq en (entnext en)) ) ;end while (setvar "pickstyle" pickmode) (princ) ) ;end defun
die versetzen objekte werden auf einen neuen layer mit der erweiterung "-z" gelegt - die ursprünglichen linien auf "rohrmitte". soweit-sogut. das problem liegt in diesen zeilen:
(command "_offset" (/ DN 2.0) en "0,1" "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") (command "_offset" (/ DN 2.0) en "0,-1" "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") denn die eingabe von "0,1" und "0,-1" für die richtung des versatzes wird beides mal als "0,1" interpertiert. warum? keine ahnung wenn ich die befehlsfolge jedoch in der befehlszeile engebe funktioniert es auch. jedoch in einer command-zeile verpackt kommt der mist dabei raus und ich habe alle linien/bögen doppelt aber halt nur auf einer seite. "worldview" hat keine auswirkung darauf - ebenso mit "trans" bin ich auf keinen grünen zweig gekommen. kann mir jemand einen tipp geben? ------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 12. Dez. 2003 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für Schachinger
das liegt nicht daran dass er 0,-1 nicht akzeptiert aber du gibst die punkte absolut ein, und die absoluten 0,1 und 0,-1 werden halt beide auf einer seite der linie liegen du musst vom startpunkt der lineie nach links unf rechts rechnen (setq dn 50) (setq en (car (entsel))) (setq ed (entget en)) (setq p1 (cdr (assoc 10 ed))) (setq p2 (cdr (assoc 11 ed))) (setq wi (angle p1 p2)) (command "_offset" (/ DN 2.0) en (polar p1 (+ wi (/ pi 2.)) dn) "") (command "_offset" (/ DN 2.0) en (polar p1 (- wi (/ pi 2.)) dn) "")
------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2041 Registriert: 08.04.2002
|
erstellt am: 12. Dez. 2003 11:11 <-- editieren / zitieren --> Unities abgeben:
hallo fuchsi! erstmal danke für dein posting - mit end/startpunkt und winkel funktioniert es - DANKE was ich jedoch noch immer nicht verstehe ist warum es mit meiner variante nicht funktioniert. denn ich lege zufür im lisp mit (command "_ucs" "_obj" en) das BKS auf die Linie - das heist X-Achse verläuft in Richtung der Linien-Achse. Usprung liegt am Anfangspunkt. dann müssten mit den Abständen "0,1" und "0,-1" ja auch die linien richtig versetzt werden? außerdem wirds bei den bögen dann kompliziert *G* kann es sein das das gesetze BKS ignoriert wird und trotzdem von WKS-Ursprung aus der abstand genommen wird? ------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 12. Dez. 2003 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für Schachinger
hab mal folgendes probiert (command "_UCS" "_OBJ" (car (entsel))) (command "._LINE" "0,0" "1,1" "") legen vom bks auf ein bel. gewähltest objekt und zeichnen einer linie und funktioniert so wie es soll, die linie wird wirklich im benutzerkoordinatensystem gez. vielleicht liegt es daran das 0,1 und 0,-1 zu kleine abstände deiner linie sind, und ein eventuell eingeschalteter objektfang dann deine linie fängt, und damit auf die gleiche (eher zufälllige) seite versetzt. schalt mal alle ofang´s ab und probier deine version nochmal ich persönlich vermeide eigentlich immer das BKS zu ändern, da rechne ich lieber im Welt-BKS herum.
------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 12. Dez. 2003 12:13 <-- editieren / zitieren --> Unities abgeben: Nur für Schachinger
|
Andi L Mitglied
Beiträge: 8 Registriert: 27.11.2003 ACAD 2002
|
erstellt am: 12. Dez. 2003 20:37 <-- editieren / zitieren --> Unities abgeben: Nur für Schachinger
Hi In dem Beitrag http://ww3.cad.de/foren/ubb/Forum145/HTML/000097.shtml habe ich mal ein ähnliches Programm gepostet. vielleich t hilft Dir das weiter. Soviel ich noch weiß werden zwei Punkte links und rechts der Linie (PLINE oder LINE) berechnet. ... mir fällt gerade ein, es geht auch mit Vlax-Curve-GetFirstDeriv. Damit erhältst Du die Erste Ableitung (Steigung) JEDES Curve-Objekts (Line, Arc, Circle, Pline....) an einem bestimmten Punktes. Bei dem Beispiel der Startpunkt der Curve. ;;; Testfunktion ;;; Versetzt gewähltes Objekt 1ZE nach links und rechts (defun c:test (/ ename pts) (setq ename (car (entsel))) (setq pts (get_points ename)) (setvar "OSMODE" 0) (command "_OFFSET" 1.0 ename (car pts) ename (cadr pts) "") ) ;;; Ermittelt aus ENAME zwei Punkte links und rechts der Curve im ;;; Abstand 0.001 ;;; (P1 P2) (defun get_points (ename / vlax_ename stp ang pi/2) (vl-load-com) (setq pi/2 (/ pi 2.0) vlax_ename (vlax-ename->vla-object ename) stp (vlax-curve-getstartpoint vlax_ename) ang (angle '(0.0 0.0 0.0) (vlax-curve-getfirstderiv vlax_ename (vlax-curve-getstartparam vlax_ename) ) ) ) (list (polar stp (- ang pi/2) 0.001) (polar stp (+ ang pi/2) 0.001) ) ) Grüße Andi [Diese Nachricht wurde von Andi L am 12. Dez. 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2041 Registriert: 08.04.2002
|
erstellt am: 16. Dez. 2003 14:12 <-- editieren / zitieren --> Unities abgeben:
also einen herzlichen dank für eure hilfe! am objektfang is es bei meinem code leider auch nicht gelegen- keine ahnung was da los war - aber egal hauptsache es funktioniert jetzt ich rechne jetzt auch nur vom WKS aus - dann hauts hin. hintergrund ist das ich das selbe schon mal für den 3D-Bereich gemacht habe (Linien und Bögen mit Rohr überziehen) und dort bin ich nicht drumrum gekommen mit dem OKS zu arbeiten - hat aber auch gefuntzt dann. darum hab ich hier auch so angesetzt mit der lösung. der funktionierende code sieht jetzt so aus : (defun c:layer2pipe2D () (setq pickmode (getvar "pickstyle")) (setq omode (getvar "osmode")) (setvar "pickstyle" 0) (setvar "osmode" 0) (command "-layer" "_m" "Rohrmitte" "_c" "5" farbenew "" "") (command "_ucs" "_world") (while (not (setq obj (entsel "\nObjekt mit dem Rohr-Layer wählen: ")))) (setq lrohr (cdr (assoc 8 (entget (car obj))))) (setq DN (getreal "\nRohrdurchmesser: ")) (setq en (entnext)) (while en (setq en_0entity (cdr (assoc 0 (entget en)))) (setq en_8entity (cdr (assoc 8 (entget en)))) (if (= en_8entity lrohr) (progn (if (= en_0entity "LINE") (progn (setq farbenew (cdr (assoc 62 (tblsearch "layer" en_8entity)))) (command "-layer" "_m" (strcat en_8entity "-z") "_c" farbenew "" "") (setq ed (entget en)) (setq p1 (cdr (assoc 10 ed))) (setq p2 (cdr (assoc 11 ed))) (setq wi (angle p1 p2)) (command "_offset" (/ DN 2.0) en (polar p1 (+ wi (/ PI 2.)) DN) "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") (command "_offset" (/ DN 2.0) en (polar p1 (- wi (/ PI 2.)) DN) "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") (command "_chprop" en "" "_la" "Rohrmitte" "") ) ) ;end if (if (= en_0entity "ARC") (progn (setq farbenew (cdr (assoc 62 (tblsearch "layer" en_8entity)))) (command "-layer" "_m" (strcat en_8entity "-z") "_c" farbenew "" "") (setq ed (entget en)) (setq mp (cdr (assoc 10 ed))) (setq radius (cdr (assoc 40 ed))) (setq startwi (cdr (assoc 50 ed))) (command "_offset" (/ DN 2.0) en (polar mp startwi (+ radius DN)) "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") (command "_offset" (/ DN 2.0) en (polar mp startwi (- radius DN)) "") (command "_chprop" (entlast) "" "_la" (strcat en_8entity "-z") "") (command "_chprop" en "" "_la" "Rohrmitte" "") ) );end if );end progn ) ;end if (setq en (entnext en)) ) ;end while (setvar "pickstyle" pickmode) (setvar "osmode" omode) (princ) ) ;end defun nochmals danke
------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |