Odmierzanie na polilinii


Recommended Posts

Dzień dobry,

Najprostsze wydaje się _measure (alias ME) i ustawienie długości segmentu na 36.5

Funkcja wstawi punkty co zadaną odległość. Wprawdzie dostaniemy kilka niepotrzebnych punktów,

ale wiadomo, że punkt wstawienia "czegoś" będzie pierwszym punktem na polilinii.

Zastanowię się jeszcze nad innymi rozwiązaniami.

Pozdrawiam.

Link to comment
Share on other sites

Godzinę temu, Adam Klaczek napisał:

Dzień dobry,

Sposób "nie_najmądrzejszy", ale prosty i działa:

Nie do końca, bo działa tylko w przypadku, gdy ucinamy coś na samych końcach. W przypadku, gdy mamy kilka łuków i prostych i utniemy coś na środku długiego odcinka to później jak wydłużamy to wydłużamy tlyko konkretną prostą albo łuk. Program nie odtworzy nam pierwotnej trasy.

Link to comment
Share on other sites

1 minutę temu, dmatusz3 napisał:

A gdyby zrobić kopie pierwotnej polilinii w tej samej lokalizacji, skrócić, wstawić punkt i usunąć skróconą polilinię?

Można także zrobić kopie w inne miejsce i wykorzystać punkt końcowy polilinii, którego położenia nie zmieniamy.

Ta opcja jest najlepsza i w ten sposób do tej pory działałem. Myślałem jednak, że są jakieś wygodniejsze funkcje, ale jak widać niestety ich nie ma.

Link to comment
Share on other sites

5 minut temu, kojacek napisał:

Z tego co rozumiem, LISP mierzy odległość X pomiędzy punktem A i B. W moim przypadku znam lokalizację punktu A i odległość X. Pytanie tylko, jak wyznaczyć na polilinii gdzie jest ten punkt B położony.

Mam nadzieję, że nie niamieszałem za bardzo 🙈

Link to comment
Share on other sites

Godzinę temu, jacnightingale napisał:

Z tego co rozumiem, LISP mierzy odległość X pomiędzy punktem A i B. W moim przypadku znam lokalizację punktu A i odległość X. Pytanie tylko, jak wyznaczyć na polilinii gdzie jest ten punkt B położony.

Mam nadzieję, że nie niamieszałem za bardzo 🙈

No to ja trochę namieszałem. Ale to co chcesz też się da zrobić LISP-em. W wolnej chwili wrzucę w jaki sposób.

Link to comment
Share on other sites

Do wyznaczania punktu na krzywej w zadanej odległości od innego punktu na niej się znajdującego przedstawiam funkcję LISP-a:

; ================================================================== ;
; Zwraca punkt (lub nil) znajdujacy sie na krzywej <Curve> w         ;
; odleglosci <Dist> od punktu <FromPt>                               ;
; Dodatnia wartosc <Dist> wyznacza punkt w kierunku zgodnym z        ;
; przebiegiem krzywej, ujemna w kierunku przeciwnym                  ;
; ------------------------------------------------------------------ ;
(defun jk:CAL_GetPointAtDist (Curve FromPt Dist / %)
  (if
    (setq % (vlax-curve-getDistAtpoint Curve FromPt))
    (vlax-curve-getPointAtDist Curve (+ Dist %))
  )
)
; ------------------------------------------------------------------ ;

Wymaga ona trzech argumentów: 1) obiektu 3) punktu na nim i 3) odległości. Zwraca punkt lub nil.

Poniżej funkcja ilustrująca testowe działanie - po wskazaniu splajnu, punktu na nim (zielone kółko), rysuje 5 (czerwonych okręgów) w odległości 10 20 30 40 i 50 od niego. Kod:

(defun C:TEST-A ( / e p)
  (if
    (and
      (setq e (car (entsel "\nKrzywa:")))
      (setq p (getpoint "\nOd punktu:"))
    )
    (foreach % '(10 20 30 40 50)
      (cd:ACX_AddCircle
        (cd:ACX_ASpace)
        (jk:CAL_GetPointAtDist e p %)
        1 T
      )
    )
  )
)

Funkcja testująca wymaga CADPL-Pack'a (https://kojacek.wordpress.com/2015/11/04/cadpl-pack/) a aziałanie wygląda tak:

getcurveatpoint.gif.36e070fe558ec14bc34b57f54714107f.gif

Link to comment
Share on other sites

3 minuty temu, kojacek napisał:

Do wyznaczania punktu na krzywej w zadanej odległości od innego punktu na niej się znajdującego przedstawiam funkcję LISP-a:

Kompletnie się na tym nie znam, więc czy mógłbym prosić o gotowego LISP-a do pobrania? Chyba, że wystarczy wrzucić ten tekst do notatnika i zapisać pod odpowiednią nazwą?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...