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


lukasz215a

Recommended Posts

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?

Link to comment
Share on other sites

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łą.

Link to comment
Share on other sites

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)
)

.

Link to comment
Share on other sites

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))
)
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...