Jak narysować prostopadłą linie od dowolegno punktu na łuku


Rekomendowane odpowiedzi

Opublikowano

Witam

 

Przykład do pytania

 

Mamy taki uład polilinii

prosta łuk i prosta

pierwsza prosta powiedzmy ze ma 95,35m

za pomocą punkt zmierz robimy punkty na polilini co 100m

i 100m wypada na łuku

chcemy ładnie opisać na linni prostopadłej do łuku w punkcie 100 coś w stylu "0+100,00"

i tu pytanie jak narysować prostopadłą do łuku w danym punkcie łuku (oczywiście będzie to prostopadła do stycznej)

 

Można narysować dowolny okrąg o środku w punkcie 100 i pozniej go przyciąć do łuku i narysować coś w stylu dwusiecznej kąta ale może jest jakiś szybszy sposób?

Opublikowano

Witam,

 

rozumiem, że musimy zacząć od punktu leżącego na łuku?

Gdybyśmy zaczynali od drugiego punktu, to możemy użyć uchwytów.

 

Zawsze radziłem sobie w taki sposób jak na filmie.

Nie jest może najszybszy, ale dla moich zastosowań wystarczał.

 

Opublikowano

Nie tam żebym upierał się aby odwodzić was od komplikowania sobie pracy, ale... może warto wykorzystać opcję _block do podziału?

 

:D racja, szacun za pomysł.

A tutaj krótki film, jak ułożyć bloki na krzywej.

 

 

 

W węzłach może się przydać maja pierwotna metoda, choć na połączeniach linii (i łukach bez styczności) będzie trudno o prostopadłą.

Opublikowano

To jeszcze jedno pytanie

dość luźlo związane z powyższym:

 

Jak zmierzyć długość po łuku pomiędzy dwoma punktami na tym łuku?

Zawsze można użyć LISP-a:

Poniższy kod pozwoli zmierzyć długość elementu dowolnej krzywej pomiędzy dwoma punktami na niej wskazanymi:

;;;
(vl-load-com)
;;;
(defun C:CDIST (/ sa sb vo)
  (if
    (setq sa (nentselp "\nWskaz pierwszy punkt na krzywej: "))
    (if
      (setq sb (nentselp "\nWskaz drugi punkt na krzywej: "))
      (if
        (and (eq (car sa)(car sb)))
        (progn
          (setq vo (vlax-ename->vla-object (car sa)))
          (abs 
            (-
              (vlax-curve-getDistAtPoint vo
                (vlax-curve-getClosestPointTo vo (cadr sa) t)
              )
              (vlax-curve-getDistAtPoint vo
                (vlax-curve-getClosestPointTo vo (cadr sb) t)
              )
            )
          )
        )
        (princ "\nWskazano rózne obiekty. ")
      )
      (princ "\nNic nie wskazano. ")
    )
    (princ "\nNic nie wskazano. ")
  )
  (princ)
)

.

Opublikowano

edit

wczytalem lisp

ale jak wskazuje dwa punkty na krzywej to

albo komunikat ze wybrano rozne obiekty albo po wybraniu drugiego punktu nic sie nie pojawia

Sprawdź teraz:

;;;
(vl-load-com)
;;;
(defun C:CDIST (/ sa sb vo re)
  (if
    (setq sa (nentselp "\nWskaz pierwszy punkt na krzywej: "))
    (if
      (setq sb (nentselp "\nWskaz drugi punkt na krzywej: "))
      (if
        (and (eq (car sa)(car sb)))
        (progn
          (setq vo (vlax-ename->vla-object (car sa)))
          (setq re
            (abs 
              (-
                (vlax-curve-getDistAtPoint vo
                  (vlax-curve-getClosestPointTo vo (cadr sa) t)
                )
                (vlax-curve-getDistAtPoint vo
                  (vlax-curve-getClosestPointTo vo (cadr sb) t)
                )
              )
            )
          )
        )
        (princ "\nWskazano rózne obiekty. ")
      )
      (princ "\nNic nie wskazano. ")
    )
    (princ "\nNic nie wskazano. ")
  )
  (if re re (princ))
)

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie