| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Linien in Zylinder umwandeln (2030 / mal gelesen)
|
versuchstier Mitglied architekt
Beiträge: 5 Registriert: 20.05.2017 AutoCAD 2011
|
erstellt am: 20. Mai. 2017 17:03 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein 3D-Netz aus Linien erstellt. Jede der Linie soll nun in einen Zylinder (r=3) umgewandelt werden. Da keine der 430 linien mehr rechtwinklig liegt: wie kann ich am besten vorgehen? ------------------ hb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scj Mitglied
Beiträge: 554 Registriert: 09.08.2001
|
erstellt am: 20. Mai. 2017 17:32 <-- editieren / zitieren --> Unities abgeben: Nur für versuchstier
|
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6050 Registriert: 16.09.2004 Windows 10 64bit, ACAD Rel. 14 - ACAD 2023
|
erstellt am: 20. Mai. 2017 17:40 <-- editieren / zitieren --> Unities abgeben: Nur für versuchstier
Zitat: Original erstellt von versuchstier: wie kann ich am besten vorgehen
Linie(n) in Zylinder "umwandeln" geht prinzipiell gar nicht. Aber man kann dort, wo sich die Linien befinden neue Zylinder hinzeichnen. Das folgende LISP (quick und sehr dirty) sollte diese Aufgabe prinzipiell lösen. Für eventuelle Verbesserungen müßte man die Aufgabenstellung weiter präzisieren (sollen die Linien händisch ausgewählt werden oder wodurch zeichnen sich die betreffenden Linien aus (z. B. nur die auf einen bestimmten Layer o.ä.), sollen die Linien anschließend gelöscht werden oder nicht, ...?) (defun c:Line2Zyl (/ i as) (setq as (ssget "X" '((0 . "LINE")))) ;;; weiter spezifizieren (setq i 0) (repeat (sslength as) (command "_cylinder" (cdr (assoc 10 (entget(ssname as i)))) 3 "a" (cdr (assoc 11 (entget(ssname as i)))) ) (setq i (1+ i)) ) (princ) ) Jürgen
------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) [Diese Nachricht wurde von jupa am 20. Mai. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
versuchstier Mitglied architekt
Beiträge: 5 Registriert: 20.05.2017 AutoCAD 2011
|
erstellt am: 20. Mai. 2017 20:18 <-- editieren / zitieren --> Unities abgeben:
oh. ich kenne mich mit LISP so garnicht aus. Wenn ich den Code in die Befehlszeile eingebe, rödelt er zwar, macht aber letztendlich nix. Es gibt in der Datei nur diese Linien, alle auf einem Layer. Die Linien können bleiben, müssen aber nicht. Wie kann ich das anpassen? Vielen Dank schon einmal. ------------------ hb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6050 Registriert: 16.09.2004 Windows 10 64bit, ACAD Rel. 14 - ACAD 2023
|
erstellt am: 20. Mai. 2017 21:37 <-- editieren / zitieren --> Unities abgeben: Nur für versuchstier
Zitat: Original erstellt von versuchstier: Wenn ich den Code in die Befehlszeile eingebe,
Nee, so nicht. Den Code in eine Textdatei kopieren und dieser Datei einen beliebigen Namen mit der Dateiendung .lsp geben. Diese irgendwo abspeichern. Dann in ACAD den Befehl appload starten, zur Datei durchhangeln und diese Datei laden. Jetzt in der Befehlszeile den Befehl Line2zyl eingeben und fertig. Die Linien bei Bedarf anschließend löschen. Und gelegtlich mal im der FAQ suchen, wo der Umgang mit LISP-Dateien beschreiben wird Jürgen
------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
versuchstier Mitglied architekt
Beiträge: 5 Registriert: 20.05.2017 AutoCAD 2011
|
erstellt am: 20. Mai. 2017 23:20 <-- editieren / zitieren --> Unities abgeben:
|
versuchstier Mitglied architekt
Beiträge: 5 Registriert: 20.05.2017 AutoCAD 2011
|
erstellt am: 20. Mai. 2017 23:53 <-- editieren / zitieren --> Unities abgeben:
arghhh. klappt in einer neu erstellten datei wunderbar. nur bei meinem netz sagt computer: Endpunkt der Achse angeben: Wert darf nicht null sein. Endpunkt der Achse angeben: _cylinder Punkt oder Optionstitel wird benötigt. ; Fehler: Funktion abgebrochen schon alles probiert weiss nicht weiter... ------------------ hb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6050 Registriert: 16.09.2004 Windows 10 64bit, ACAD Rel. 14 - ACAD 2023
|
erstellt am: 21. Mai. 2017 07:46 <-- editieren / zitieren --> Unities abgeben: Nur für versuchstier
Zitat: Original erstellt von versuchstier: nur bei meinem netz sagt computer:
Handelt es sich bei Deinem "Netz" denn wirklich um Linien? Lade mal die Datei (meinetwegen auch etwas abgespeckt) hier hoch. [EDIT]: Andere Idee: Schalte vorsichtshalber - falls akiv - den fortlaufenden Objektfang aus (F3). [noch ein EDIT]: Vorheriger Tip ist eigentlich Quatsch, dürfte nichts bringen. Möglicherweise hast Du Linien mit Nullänge? Ohne Beispieldatei bleibt es ein wildes Herumrätseln ... Jürgen
------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) [Diese Nachricht wurde von jupa am 21. Mai. 2017 editiert.] [Diese Nachricht wurde von jupa am 21. Mai. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6050 Registriert: 16.09.2004 Windows 10 64bit, ACAD Rel. 14 - ACAD 2023
|
erstellt am: 21. Mai. 2017 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für versuchstier
Zitat: Original erstellt von jupa: Möglicherweise hast Du Linien mit Nullänge?
Die letzte Vermutung erscheint mir am naheliegendsten, weil damit bekomme ich genau die von Dir gepostete Fehlermeldung. Einfacher Test: Mit Befehl sauswahl alle Linien mit Länge = 0 selektieren. Falls welche gefunden werden -> löschen (die wären ohnehin sinnlos). Dann sollte es klappen. [EDIT: Bild ergänzt] Jürgen ------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) [Diese Nachricht wurde von jupa am 21. Mai. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 21. Mai. 2017 15:55 <-- editieren / zitieren --> Unities abgeben: Nur für versuchstier
Der Tip war kein Quatsch. Adesk liefert Standardeinstellung Osnapcoord 2 aus, dies sollte in dem Fall auf 1 stehen, alternativ OFang ausschalten, aber osnapcoord=1 in ein Lisp oder Makro packen wäre weniger Aufwand. Zumindest empfinde ich das Merken und zurückstellen dieser Variable als vernachlässigbar, also genau richtig für Quick&Dirty. Damit ist der Objektfang aussen vor. Wenn man den Objektfang nutzen wollte, was ja nicht automatisch falsch ist, dann muss man sich auch um den dargestellten Bildschirmausschnitt inkl. des Zoom Faktors kümmern. Je nach Zoom und Ausschnitt werden sonst auch Punkte in 100 Einheiten Entfernung gefangen. Darüber hinaus ist die Prüfung der Linienlänge vor Verwendung des Zylinderbefehls aber in allen Fällen nötig. Im besten Fall mit Ausgabeinformation an den Benutzer. (Auswahlsatz erstellen und am Programmende mit sssetfirst markieren + Alert-Info an den Benutzer, welche (ignorierten) Objekte es sind) ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
versuchstier Mitglied architekt
Beiträge: 5 Registriert: 20.05.2017 AutoCAD 2011
|
erstellt am: 21. Mai. 2017 17:34 <-- editieren / zitieren --> Unities abgeben:
super. jetzt hat es alles geklappt. drei fehler behoben: - es gab 0-linien - es gab poly-linien - es klappt nur richtig in der aufsichtsansicht (sonst sind alle zylinder nur leicht verdreht) tausen dank! ------------------ hb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |