Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Block auf Line verteilen 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:  Block auf Line verteilen LISP (1347 mal gelesen)
nebuCADnezzar
Mitglied



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

Beiträge: 262
Registriert: 17.10.2007

AutoCAD 2021
Mechanical 2021
Inventor 2021
64 bit Win 10
AMD Ryzen Pro 3700U

erstellt am: 18. Mrz. 2016 10:21    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

Moinmoin

So dem schönen Freitag zuliebe dacht ich ich köönt mir das Leben mal wieder etwas vereinfachen. Die Aufgabe tönt eigentlich ganz leicht, ich muss nen Block auf ner Linie verteilen und nein messen geht nicht da der Abstand immer 300 ist und der End- und Anfangsabstand zwischen 100-150 sein muss (was heisst dass der vorletzte Block allenfalls n Spezialabstand hat wenns nicht aufgeht...)

Mein gewünschtes Vorgehen wäre:
Linie anklicken -> Zack alles da 

Ich hab hier auch was ähnliches gefunden:
http://ww3.cad.de/foren/ubb/Forum54/HTML/007402.shtml
aber war noch nicht die Lösung

Dass hier macht schon sau gut was ich will, nur hab ich zwei Jahre nicht mehr gelispelt ich brauch hier n Anschupser wo ich die Berechnungen einfügen muss (die oben genannten Berechnungen wären ja nicht kompliziert) Ich seh grade nichtmal wo dass Programm die gemessene Linielänge halbiert?

Code:
(defun c:Mins (/ name ss i e p1 p2)
  (if
    (and (or (/= (setq name (getstring t "\n Specify Block name :")) "")
            (/= name nil)
        )
        (if (not (tblsearch "BLOCK" name))
          (progn
            (alert " name of Block is not found !!")
            nil
          )
          t
        )
        (progn (prompt "\n Select lines ...")
                (setq ss (ssget '((0 . "LINE"))))
        )
    )
    (repeat (setq i (sslength ss))
      (setq e (entget (ssname ss (setq i (1- i)))))
      (entmakex
        (list '(0 . "INSERT")
              (cons 10
                    (mapcar (function (lambda (q p) (/ (+ q p) 2.)))
                            (setq p1 (cdr (assoc 10 e)))
                            (setq p2 (cdr (assoc 11 e)))
                    )
              )
              (cons 2 name)
              (cons 50
      (if (or (eq (angle p1 p2) pi)
              (eq (angle p1 p2) (* pi 1.5))
          )
        pi
        (angle p1 p2)
      )
)
              '(41 . 1.0)
              '(42 . 1.0)
              '(43 . 1.0)
        )
      )
    )
    (princ)
  )
  (princ)
)

Aber vieleicht gibs ja schon n anderes LISP was Blöcke auf Linien verteilt und ich habs nur nicht gefunden...?!

Gruss vom Bodensee

------------------
"Wissenschaft ist entweder Physik oder Briefmarkensammeln"

Ernest Rutherford 1871-1937

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 18. Mrz. 2016 10:28    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 nebuCADnezzar 10 Unities + Antwort hilfreich

Ich denke zwar das du hiermit(der Code oben) nicht so glücklich wirst, aber ich antworte dennoch mal:

Code:
(repeat (setq i (sslength ss)) ; <- Es erfolgt EIN Durchlauf pro gewählter Linie (da nur ein Objekt auf der Linie platziert werden muß in dem Beispielcode)
      (setq e (entget (ssname ss (setq i (1- i)))))
      (entmakex
        (list '(0 . "INSERT")
              (cons 10
                    (mapcar (function (lambda (q p) (/ (+ q p) 2.))); <- Hier wird der Mittelpunkt zwischen Start(10) und Endpunkt(11) der Linie ermittelt.
                            (setq p1 (cdr (assoc 10 e)))
                            (setq p2 (cdr (assoc 11 e)))

Hilft nicht wirklich, oder?

Geht es wirklich nur um Linien? Nicht um ein oder mehrteilige Polylinien?

STATIONIERUNG wäre ein guter Begriff wenn es auch um Polylininen geht.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

nebuCADnezzar
Mitglied



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

Beiträge: 262
Registriert: 17.10.2007

AutoCAD 2021
Mechanical 2021
Inventor 2021
64 bit Win 10
AMD Ryzen Pro 3700U

erstellt am: 18. Mrz. 2016 11:05    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 cadfmm

...naja war der einzige code den ich gefunden hab

Aber ja dass mit der Stationierung ist ne gute Idee! Hab auch schon code gefunden und auf den ersten Blick sieht der aus als versteh ich was der tut und dann krieg ichs auch hin den "schreib stationierungs dahin" zu ersetzen mit "insert n block dahin"...

Ich pröbel mal! Vielen Dank für den Anstupser soweit 

------------------
"Wissenschaft ist entweder Physik oder Briefmarkensammeln"

Ernest Rutherford 1871-1937

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

spider_dd
Mitglied



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

Beiträge: 1111
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 18. Mrz. 2016 13:58    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 nebuCADnezzar 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von nebuCADnezzar:

...naja war der einzige code den ich gefunden hab


Hallo nebuCADnezzar,

nicht irgendwelchen Code suchen, der "so ungefähr" das macht was Du willst   
Selber machen, so das genau das rauskommt, was Du willst, alos erstmal überlegen, wie man das machen könnte, der Code ist dann nicht das schwierigste.
In Deinem Fall würde ich folgende Überlegungen anstellen. Ist es wirklich nur und immer eine Linie, auf der Du Blöcke verteilen willst? Kann es auch mal eine Polylinie sein? 2D/3D? Wenn 3D, Abstand der Blöcke dann "in Projektion" oder entlang der 3D-Linie?

Das weiter gehört zwar eher ins LISP-Brett, aber wenn wir schon mal hier sind:

Weitere Schritte (machen sich gut mit den vlax-curve-get... Funktionen, dazu Element mit (setq deinvlalobj (vlax-ename->vla-object dein_aktueller_elementname)) zu einem vla-Objekt machen):
1) Gesamtlänge des Objektes ermitteln (vlax-curve-getDistAtParam deinvlaobj (vlax-curve-getEndParam deinvlaobj))
2) Anzahl ganzer Abschnitte mit Deinem Abstand ermitteln
3) "Restlänge" ermitteln und halbieren
4) Punkte für Blockpositione ermitteln, 1. Abstand = 1/2 Restabstand, alle weiteren jeweils + Dein Abstand, Punkt ermitteln mit (vlax-getPointAtDist deinvlaobj deinaktuellerAbstand)

HTH
Gruß
Thomas

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 21. Mrz. 2016 16: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 Nur für nebuCADnezzar 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von nebuCADnezzar:
Moinmoin

So dem schönen Freitag zuliebe dacht ich ich köönt mir das Leben mal wieder etwas vereinfachen. Die Aufgabe tönt eigentlich ganz leicht, ich muss nen Block auf ner Linie verteilen und nein messen geht nicht da der Abstand immer 300 ist und der End- und Anfangsabstand zwischen 100-150 sein muss (was heisst dass der vorletzte Block allenfalls n Spezialabstand hat wenns nicht aufgeht...)


Hast Du Dir denn schon mal den GEOMCAL Kalkulator in AutoCAD angesehen? Der erledigt Dein Problem ohne Programmierung, und für noch mehr Komfort kannst Du die Befehle auch in eine kleine Lisp-Routine einbauen.

Dieser Kalkulator ist eine der nützlichsten Sachen in AutoCAD. Und dennoch kennt den kaum jemand.

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