Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Koordinateneingabe bei (command "_offset")...

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:  Koordinateneingabe bei (command "_offset")... (694 mal gelesen)
Schachinger
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2040
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 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

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


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 12. Dez. 2003 10: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 Schachinger 10 Unities + Antwort hilfreich

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



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

Beiträge: 2040
Registriert: 08.04.2002

erstellt am: 12. Dez. 2003 11:11    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

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


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 12. Dez. 2003 12:12    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 Schachinger 10 Unities + Antwort hilfreich

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


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 12. Dez. 2003 12:13    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 Schachinger 10 Unities + Antwort hilfreich

bögen sind ja noch leichter, da du den mittelpunkt radius und startwinkel hast.

(polar MP startwinkel (+ radius 50))
(polar MP startwinkel (- radius 50))

------------------

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

Andi L
Mitglied


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

Beiträge: 8
Registriert: 27.11.2003

ACAD 2002

erstellt am: 12. Dez. 2003 20:37    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 Schachinger 10 Unities + Antwort hilfreich

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



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

Beiträge: 2040
Registriert: 08.04.2002

erstellt am: 16. Dez. 2003 14:12    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

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

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