Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  pedit in LISP

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:  pedit in LISP (1213 mal gelesen)
AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 04. Aug. 2002 10:46    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 zusammen,

ich habe einen Querschnitt(_section) erzeugt, möchte diesen nun in eine Polylinie verwandeln, um dann in einem bestimmten Abstand (mit dem Befehl _measure) Punkte auf dieser Linie zu verteilen.

Leider weiß ich nicht, wie ich den Befehl pedit richtig in LISP verwende, ohne, dass ich zwischen Fragen wie diese:
"Option eingeben [Schließen/Verbinden/BReite/BEarbeiten/kurve
Angleichen/Kurvenlinie/kurve LÖschen/LInientyp/Zurück]:" gestellt bekomme.

(Defun c:Schnitt ()
  (setq p1 (list 0 700 -250))
  (setq p2 (list 250 -700 -250))
  (setq p3 (list 150 -670 -250))
  (command "_section" (car(entsel))"" "_3p" P1 P2 P3)
  (command "_explode" (entlast))
  (command "pedit" (entlast) ???????????????????????????????)

Es wäre schön, wenn ihr mir sagen könnten, wie ich diesen Befehl richtig anwenden muss.

Liebe Grüße
Andrea

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

scj
Mitglied
 


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

Beiträge: 554
Registriert: 09.08.2001

erstellt am: 04. Aug. 2002 12:24    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 AB 10 Unities + Antwort hilfreich

PEDIT für 3d ist - glaube ich - standardmäßig nicht möglich.
Es geht aber mit meinem PEDIT3D, das man sich von www.black-cad.de
frei runterladen kann.
Dabei entsteht aus allen möglichen Linienteilen (2d- und 3d-Linien,
2d- und 3d-Kreisbögen, 2- und 3d-Ellipsenbögen, 2d- und 3d-Splines) eine linear segmentierte 3d-Polylinie.
[Nicht ganz kostenfrei ist die Variante, wo automatisch alle Liniensegmente einer Zeichnung zu verschiedenen - auch getrennten -Polylinien automatisch "zusammengeflickt" werden (getestet bis zu 30.000).]
Bis bald
Jochen
 

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

AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 04. Aug. 2002 12:45    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 Jochen,
das Problem ist nur, dass ich diese Funktion in meinen Code einbauen muss.
Nachdem bei mir ein Querschnitt durch ein Objekt gemacht wurde, muss dieser Querschnitt als Polylinie umgewandelt werden, damit ich Punkte auf dieser Linie verteilen kann.

Wie kann ich das mit Hilfe Deines Programms machen.

Liebe Grüße
Andrea

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

StephanJP
Mitglied
CAD-Admin


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

Beiträge: 830
Registriert: 09.11.2000

erstellt am: 04. Aug. 2002 14:51    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 AB 10 Unities + Antwort hilfreich

Hallo Andrea,

das mit dem _pedit habe ich auch schon versucht (und nicht hingekriegt), aber wenn das eine geschlossene Polylinie war könntest Du vielleicht nach dem auflösen mit _gpoly eine neue Polylinie erstellen, die dann Deinen Anforderungen genügt?

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


gruß
stephan

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

AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 04. Aug. 2002 15: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

Hallo Stephan,

leider funktioniert dieser Befehl bei mit auch nicht, da der mit dem Befehl "_section" erstellte Querschnitt des 3DSOLID eine Region ist (wenn ich das richtig verstanden habe).
Durch den Befehl "_extrude" habe ich sie zerlegt. Das kann doch nicht sein, dass ich manuell, diese Teile zu einer Polylinie zusammensetzen kann, aber nicht durch LISP!?! Ich verzweifel hier noch.

Trotzdem vielen Dank
Andrea

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 04. Aug. 2002 16:52    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 AB 10 Unities + Antwort hilfreich

Hi Andrea,

eine "explodierte" Region zerfällt in LINEs, CIRCLEs, ARCs, ELLIPSEs und SPLINEs. Eine Polylinie darf aber nur Linien und Bögen enthalten - deswegen ist dieser Ansatz eigentlich von vornherein zum Scheitern verurteilt. Eine 3DPOLY darf sogar nur aus Linien bestehen. Da aber eine Region immer planar ist, ist der Ansatz '3DPOLY' Unsinn. 

Natürlich kann man auch von gegebenen Umständen ausgehen, z.B. dass die vorhandene Geometrie nur aus ungekrümmten Oberflächen besteht. Dann kann man folgendermassen vorgehen:

1 letztes Entity in Variable speichen (setq letztes_element(entlast))

2 Schnitt erzeugen (command"_section"...)

3 '_explode' aufrufen (command "_explode"...)

4 Auswahlsatz mit allen Elementen nach 'letztes-element' bilden

5 den Auswahlsatz durchsuchen, ob CIRCLEs, ELLIPSEs oder SPLINEs drin sind

6 Da man Polylinien nur in der XY-Ebene erzeugen kann, muss ein BKS erzeugt werden. Eine Region kann aber für (command "_ucs""_object"...) nicht verwendet werden, also benötigst du dafür deine Punkte p1, p2, p3

7 Wenn nur Linien und Bögen drin sind, PEDIT anwenden, anderenfalls geht's nicht

8 BKS zurücksetzen

Hier eine Funktion, die das in etwa macht (weicht in Details von dem beschriebenen Weg ab, und natürlich ist sie mit den genannten Einschränkungen zu geniessen!):

(defun region->polyline(region p1 p2 p3 / ents tmp)
  (command"_ucs""_3p"p1 p2 p3)
  ;duplizieren, damit eine Region als 'landmark' stehenbleibt
  (entmake(entget region))
  (command"_explode"(entlast))
  ;Liste (nicht SS) der Elemente erzeugen
  (setq tmp region)
  (while(setq tmp(entnext tmp))
    (setq ents(cons tmp ents))
  )
  ;testen, ob möglich
  (if
    (/=
      (length ents)
      (vl-remove-if-not
        (function
          (lambda(e / )
            (member
              (cdr(assoc 0(entget e)))
            '("ARC" "LINE")
            )
          )
        )
        ents
      )
    )
    ;LWPOLYLINE erzeugen
    (progn
      ;Erstes Element in Polyline umwandeln
      (command"_pedit"(car ents)"_yes""_join")
      ;Rest hinzufügen
      (mapcar'command(cdr ents))
      ;Defehl beenden
      (command"""")
      ;landmark in die Tonne
      (entdel region)
    )
  )
  ;BKS zurücksetzen
  (command"_ucs""_previous")
)

So etwa könnte dein Programm jetzt aussehen (ungetestet!):
(defun c:schnitt ( / p1 p2 p3)
  (setq p1 '(0 700 -250))
  (setq p2 '(250 -700 -250))
  (setq p3 '(150 -670 -250))
  (command "_section" (car(entsel))"" "_3p" p1 p2 p3)
  (region->polyline(entlast)p1 p2 p3)
  (if(=(cdr(assoc 0(entget(entlast))))"LWPOLYLINE")
    ... ; proceed
    (princ"\nWar wohl nix!")
  )
)

Gruss, Axel

------------------
http://www.autolisp.mapcar.net

http://www.autolisp-tutorial.mapcar.net

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

StephanJP
Mitglied
CAD-Admin


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

Beiträge: 830
Registriert: 09.11.2000

erstellt am: 04. Aug. 2002 22: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 AB 10 Unities + Antwort hilfreich

Hallo Andrea,

so ganz verstehe ich das nicht. Es ist natürlich so, das Du nur eine 2D-Polylinie mit _gpoly (UMGRENZUNG) erstellen kannst, aber
1. sollte das für Deine Aufgabe vollkommen genügen
2. @Axel ist eine Region durchaus als Objekt zur Ausrichtung des BKS geeignet
3.mußt Du vor dem Befehl Umgrenze natürlich das BKS auf diese Region ausrichten, dann
4. die Region zerlegen, einen Punkt in der Region bestimmen um mit
5. _gpoly eine Polylinie zu erstellen.

Aber vielleicht kommst Du mit Axels Lösung ja auch weiter!
Das mit den Splines und Ellipsen ist nämlich nicht von der Hand zu weisen.

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

 
gruß
stephan

[Diese Nachricht wurde von StephanJP am 04. August 2002 editiert.]

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 05. Aug. 2002 09:29    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 AB 10 Unities + Antwort hilfreich

Richtig, Stephan,

definiert doch ein BKS, da hab ich mal wieder gepfuscht (wg. GC 210)!

Also kann man die Funktion etwas vereinfachen (nur Region als Argument):

(defun region->polyline(region / ents tmp)
  (command"_ucs""_object"region)
  (entmake(entget region))
  (command"_explode"...
  ...

Und im Programm selbst den Aufruf auch ändern:

region->polyline(entlast))

Der Ansatz mit GPOLY wirft übrigens genau das selbe Problem auf: Da auch GPOLY keine Polylinie mit Splines und Ellipsen erzeugen kann, endet das ja dann mit der Meldung :

"Polylinien-Umgrenzug konnte nicht abgeleitet werden. Region erstellen?"

Wär ja ein echter Spass, wenn man dann die Region wiederhätte;-)))

Allen einen guten Start in die Woche, Axel

------------------
http://www.tutorial.autolisp.info

http://www.advanced.autolisp.info


http://www.activex.autolisp.info

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