• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Lisp, um mehrere Linien in Schnittpunkten zu brechen

  • Ersteller Ersteller Betoniera
  • Erstellt am Erstellt am

Betoniera

Guest
Hallo, alle.
Ich bin ein Streberturist.
zur Berechnung der Strukturen sowohl in c.a, als auch in Stahl das dreidimensionale Modell unifilare (ausgewählt durch Linien) in meinen Berechnungsprogrammen.
Ich brauche alle Linien, die an Kreuzungspunkten gebrochen werden.
Ich wollte den Pkbreak herunterladen. lsp Programm von der Website. dieses Programm funktioniert nur gut, wenn Sie 2 Zeilen mit nur einem Schnittpunkt brechen.
Wenn die Zeilen viele sind, funktioniert das Programm nicht und geht sogar falsch.
Ich versuchte immer wieder, die Hände darauf zu legen, ohne sie zu reparieren oder zu verstehen, warum es falsch ist.
in irgendeiner Weise die Frage ist:
Sie haben, freundlicherweise, ein Programm, das Linien in Kreuzungen bricht.
Wenn es für ein 3d-Chassis funktioniert, wäre es ideal, aber ich würde auch für ein Programm, das in 2d funktioniert, d.h. das bricht die Linien in den Schnittpunkten in der Ebene.
Ich fand ein ähnliches Programm in arx, aber jetzt benutze ich progecad, das nicht unterstützt arx-Dateien.
Daher ist die Anfrage für Datei lisp.
Vielen Dank im Voraus für alle Antworten.
Hallo, alle.
 
die Datei, die die Zeilen bricht, ist "spezzalinee .lsp" (nicht pkbreak.lsp, wie falsch ich bereits angegeben).
die Originaldatei unten anbringen
hier die Liste

(Defun c:sl)
(Setvar "cmdecho" 0)
(princ "\n wählt Zeilen, um zu brechen...")
(setq gr-selez(sget '(0 . "line")))))
(Sectq i 0)
(Repeat)
(Sectq eei(sname gr-selez i))
(setq pi1(cdr(assoc 10(entget eei))))))
(setq pi2(cdr(assoc 11(entget eei))))))
(setq k (+ i 1))
(Repeat) INSGESAMT
(setq eek(sname gr-selez k))
(setq pk1(cdr(assoc 10(entget eek))))))
(setq pk2(cdr(assoc 11(entget eek))))))
(falls (setq pint(inters pi1 pk1 pk2))
(Progn)
(Befehl "_break" (eval eei) pint "@")
(Befehl "_break" (eval eek) pint "@")
)
)
(setq k(1+k)
)
(seq i(1+) (i)
)
(princ "\n work perform!")
(princ)
)
(princ) <copyright: claudio="" granuzzo="" ing.=""> "
(princ "\n type sl, um das Programm zu starten. "
(princ)

diese Datei funktioniert gut für 2 Zeilen, aber es funktioniert nicht, wenn die Zeilen mehrfach sind. Ich versuchte es zu ändern, indem ich eine wiederholte Hinrichtung plante, aber es funktioniert nicht.
Hat jemand irgendwelche Ideen? .
Hallo, alle.</copyright:>
 

Anhänge

Ich habe die Liste nicht getestet, aber ich denke, es funktioniert nicht, weil, wenn Sie eine Zeile brechen, die resultierenden (oder die resultierenden, ich bin nicht sicher) ändern Sie den Entity-Namen, so dass die lisp nicht weiß, auf welcher (neuen) Objekt intervenieren.
Sie sollten zunächst den Namen (oder den Griff) der neuen erstellten Einheiten finden, bevor Sie die Schnittgröße schleifen.
 
Was Sie suchen ist ziemlich kompliziert.
Ich habe eine Lippe, die das tut, aber vl-Befehle verwendet, die ich denke, Progecad schafft es nicht.
um das gewünschte Ergebnis manuell zu erhalten, können Sie diese Methode verfolgen:
1) mit dem Bpoly-Befehl die Konturen der Rahmenplatten erstellen.
2) Erkunden von Rechtecken
3) mit Überkill Doppel beseitigen

Wenn Sie wollen, dass die Datei lisp kontaktieren Sie mich, dass zusätzlich, um sie an Sie senden, werde ich ein Minimum an Logik erklären, was es tut.

Bye
 
Ich habe die Liste nicht getestet, aber ich denke, es funktioniert nicht, weil, wenn Sie eine Zeile brechen, die resultierenden (oder die resultierenden, ich bin nicht sicher) ändern Sie den Entity-Namen, so dass die lisp nicht weiß, auf welcher (neuen) Objekt intervenieren.
Sie sollten zunächst den Namen (oder den Griff) der neuen erstellten Einheiten finden, bevor Sie die Schnittgröße schleifen.
hallo kristall
Danke für die Antwort.
Offensichtlich habe ich darüber nachgedacht und darüber nachgedacht, das Problem zu lösen, indem ich für jeden Zyklus eine neue Auswahl erstellt habe, so dass das Programm die Linien in einem zweiten Schnittpunkt brechen würde, dann in einem dritten und so weiter.
um dies zu tun, habe ich die p1 und p2 Punkte der Auswahl Rechteck
wie Sie unten für einen Zyklus von 10 mal sehen
die seltsame Sache ist, dass dieses Programm funktioniert auch durch die Auswahl mehrerer Zeilen, aber es bricht nur die erste.
von der zweiten geht es falsch.
Es scheint ein Fehler zu sein, als wäre ein Schließbügel verschwunden, aber ich bin mir nicht sicher.
Jedenfalls habe ich viele Versuche unternommen, ohne auf die Lösung zu kommen.
Natürlich erwarte ich nicht, dass Sie den schwierigen Fehler finden.
Ich frage nur, ob Sie ein ähnliches Programm haben, das angepasst werden kann.
Hi.

(princ "\nselect lines to break...")
(setq count 0)
(Tabelle 10)
(setq p1 (getpoint "\nimmetti primo punto di select "))
(setq p2 (getcorner p1 "\nimmetti zweiter Auswahlpunkt "))
(setq ss3(ssget "c" p1 p2 '(0. "line")))))

...... (hier die Anweisungen, die Linien zu brechen)

(setq zählt (+ 1 zählt)
;
 
Lückenabstand wenn Platz zu 0, brechen Linie und lassen keinen Platz... Anders als im Gif.
 

Anhänge

  • Bmcut.lsp
    Bmcut.lsp
    1,6 KB · Aufrufe: 12
  • Bmcut.gif
    Bmcut.gif
    135,3 KB · Aufrufe: 18
Hi x11start
die Datei funktioniert in progecad, auch wenn sie vl Anweisungen enthält.
das Problem, wie Sie im Gif sehen können, ist, dass es eine Linie der beiden bricht, die sich schneiden und das andere Ganze verlassen.
Ist es, dass Sie mit einer einfachen Anleitung auch den anderen schneiden können? .
Wie auch immer, danke.
Es ist ein gutes Programm zu arbeiten, um zum Ergebnis zu gelangen.
Tschüss.
 
Ich denke, das Problem ist, was Kristall aufgewachsen ist: Sobald die Linie gebrochen ist, ändert es seinen Namen, so dass die Lösungen, die zu meinem Verstand kommen sind:
- Halten Sie das Auswahlfenster gespeichert (z.B. nach links und rechts oben), um die Lösung automatisch wiederzuerlangen, was die neuen Linien der ersten Division umfasst
- jedes Mal, wenn Sie eine Zeile brechen, die eine (Ende) Erinnerung an die letzte geschaffene Einheit (diese Idee kann auch nicht funktionieren! )
- markieren Sie die ursprünglichen (Linien) Entitäten, setzen Sie uns einen Gruppencode 1000 - 1001, um ihm einen einzigartigen Namen zu geben, der auch nach dem Brechen bleibt... Idee noch mehr Science Fiction und das unsichere Ergebnis!

Ich erinnere mich, dass es bereits ein ähnliches Problem gab, als ich eine Diskussion über das Forum sah:Es ist eine Lispe, die dazu dient, eine "Salz" zu Polylinea zu machen, die einen anderen schneidet: siehe Anhänge
 

Anhänge

  • LineJump.gif
    LineJump.gif
    182,1 KB · Aufrufe: 18
  • LineJump.lsp
    LineJump.lsp
    2,6 KB · Aufrufe: 6
Ich fand mbruch von john f. ähden... aber auch für ihn ist es notwendig, 2 mal die Lippe zu werfen, um sowohl vertikale als auch horizontale Linien zu schneiden: siehe die Gif
 

Anhänge

  • MBreak.gif
    MBreak.gif
    354,6 KB · Aufrufe: 19
  • MBREAK.LSP
    MBREAK.LSP
    10,7 KB · Aufrufe: 21
Hi x11start
das Programm, das Sie veröffentlicht haben, funktioniert perfekt.
Natürlich müssen Sie es 2 mal werfen, um alle Linien zu brechen, aber es ist wenig Sache und es funktioniert.
Ich habe mir die Liste angesehen, aber es ist so komplex, dass ich Verständnis dafür gebe, was er tut.
es gibt Anweisungen in vl, aber es funktioniert auf progecad, dass, offensichtlich implementiert viele vl Funktionen.
Vielen Dank für Ihr Engagement, mir das Programm zu finden
und John F. ähden (Amerikaner?) danken, der es geschrieben hat.
Danke, dass Sie es finden und es jedem zur Verfügung stellen.
Ich entdeckte, dass es auch für 3d-Rahmen funktioniert. Gut.
hallo und Gratulationen für alle für Professionalität.
 
Zuletzt bearbeitet:

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben