07.02.2021 19:35    

akcan
acemi olarak öğrendiğim bilgileri uygularken bir şeyler karaladım. karaladığım şeyleri silmedim. 6 farklı versiyon var.
benim gibi acemi olanlara faydası olur umarım.
kodlardaki amaç: çizim alanında 2 nokta tıklanacak. tıklanan noktaların tam ortasına ama biraz üzerine (5 birim) 2 nokta arası uzunluğu yazdırmak. yazı noktaların oluşturduğu eğim açısına uyumlu olacak. ve üstte olacak. dik ise solda olacak (teknik resim ölçülendirme kuralı gibi)
Kod:

; 2 nokta arası uzunluğu eğim açısında yaz
(defun c:UZ1()
(setq n1 (getpoint "\n1.nokta:"))
(setq n2 (getpoint n1 "\n2.nokta:"))
(setq aci (angtos(angle n1 n2)))
(setq uzunluk (distance n1 n2))
(command "text" n1 "40" aci uzunluk "")
(princ)
)

; 2 nokta arası uzunluğu eğim açısında yaz
(defun c:UZ2()
(setq n1 (getpoint "\n1.nokta:"))
(setq n2 (getpoint n1 "\n2.nokta:"))
;(setq aci (angtos(angle n1 n2)))
(setq aci (/ (* (angle n1 n2) 180) pi))
(setq uzunluk (distance n1 n2))
;(command "line" n1 n2 "")
(command "text" n1 "40" aci uzunluk "")
(princ)
)

; 2 nokta arası uzunluğu eğim açısında yaz
(defun c:UZ3()
(setq n1 (getpoint "\n1.nokta:")
  n2 (getpoint n1 "\n2.nokta:")
  aci (angle n1 n2)
  uzunluk (distance n1 n2)
  n1_x (car n1) n1_y (cadr n1)
  n2_x (car n2) n2_y (cadr n2)
  n3_x (+(/ (- n2_x n1_x) 2.0) n1_x 5)
  n3_y (+(/ (- n2_y n1_y) 2.0) n1_y 5)
  n3   (list n3_x n3_y)
)
(entmake (list
(cons 0 "TEXT")
(cons 1 (rtos uzunluk)) ;yazı
(cons 10 n3) ; ekleme noktası1
(cons 11 n3) ; ekleme noktası2
(cons 40 40) ; yazı yüksekliği
(cons 50 aci) ; eğim açısı
(cons 72 1) ; yaslama1
(cons 73 1) ; yaslama2
)
)
)

; 2 nokta arası uzunluğu eğim açısında yaz
(defun c:UZ4()
(setq n1 (getpoint "\n1_nokta:")
  n2 (getpoint n1 "\n2_nokta:")
  uzunluk (distance n1 n2)
  n1_x (car n1) n1_y (cadr n1)
  n2_x (car n2) n2_y (cadr n2)
  n3_x (+(/(- n2_x n1_x) 2.0) n1_x 5)
  n3_y (+(/(- n2_y n1_y) 2.0) n1_y 5)
  n3   (list n3_x n3_y)
)
; yazının üste gelmesi için
(if (<= n1_x n2_x)
  (setq aci (angle n1 n2))
  (setq aci (angle n2 n1))
)
(entmake (list
(cons 0 "TEXT")
(cons 1 (rtos uzunluk)) ;yazı
(cons 10 n3) ; ekleme noktası1
(cons 11 n3) ; ekleme noktası2
(cons 40 40) ; yazı yüksekliği
(cons 50 aci) ; eğim açısı
(cons 72 1) ; yaslama1
(cons 73 1) ; yaslama2
)
)
)

; 2 nokta arası uzunluğu eğim açısında yaz
(defun c:UZ5()
(setq n1 (getpoint "\n1_nokta:")
  n2 (getpoint n1 "\n2_nokta:")
  uzunluk (distance n1 n2)
  n1_x (car n1) n1_y (cadr n1)
  n2_x (car n2) n2_y (cadr n2)
  n3_x (+(/(- n2_x n1_x) 2.0) n1_x 5)
  n3_y (+(/(- n2_y n1_y) 2.0) n1_y 5)
  n3   (list n3_x n3_y)
)
; yazının üste gelmesi için
(if (< n1_x n2_x)
  (setq aci (angle n1 n2))
  (progn
(if (and(= n1_x n2_x)(< n1_y n2_y))
  (setq aci (angle n1 n2))
  (setq aci (angle n2 n1))
);if
  );progn
);if
(entmake (list
(cons 0 "TEXT")
(cons 1 (rtos uzunluk)) ;yazı
(cons 10 n3) ; ekleme noktası1
(cons 11 n3) ; ekleme noktası2
(cons 40 40) ; yazı yüksekliği
(cons 50 aci) ; eğim açısı
(cons 72 1) ; yaslama1
(cons 73 1) ; yaslama2
)
)
)

; 2 nokta arası uzunluğu nokta eğim açısında yaz
(defun c:UZ6()
(setq n1 (getpoint "\n1_nokta:")
  n2 (getpoint n1 "\n2_nokta:")
  uzunluk (distance n1 n2)
  n1_x (car n1) n1_y (cadr n1)
  n2_x (car n2) n2_y (cadr n2)
  n3_x (+(/(- n2_x n1_x) 2.0) n1_x 5)
  n3_y (+(/(- n2_y n1_y) 2.0) n1_y 5)
  n3   (list n3_x n3_y)
)
; yazının üste gelmesi için
(if (or(< n1_x n2_x)(and(= n1_x n2_x)(< n1_y n2_y)))
  (setq aci (angle n1 n2))
  (setq aci (angle n2 n1))
)
(entmake (list
(cons 0 "TEXT")
(cons 1 (rtos uzunluk)) ;yazı
(cons 10 n3) ; ekleme noktası1
(cons 11 n3) ; ekleme noktası2
(cons 40 40) ; yazı yüksekliği
(cons 50 aci) ; eğim açısı
(cons 72 1) ; yaslama1
(cons 73 1) ; yaslama2
)
)
)
; Mesut Akcan
; http://akcansoft.blogspot.com

Travaci (08.02.2021 13:13 GMT)

08.02.2021 13:18    

Travaci
Gideceğiniz noktaya polar ile daha zahmetsiz ulaşabilirsiniz.

Kod:

(defun c:mdp (/ n1 n2)
  (if (setq n1 (getpoint "\nSpecify first point: "))
    (if (setq n2 (getpoint n1 "\nSpecify second point: "))
      (entmake (list (cons 0 "POINT")
        (cons 10 (polar n1 (angle n1 n2) (/ (distance n1 n2) 2)))))
    )
  ) (princ)
)

08.02.2021 18:45    

akcan
@Travaci 'nın verdiği kodlardan da faydalanarak 7. versiyonu yazdım.
yazıların çizgi üstüne gelmesi için kullandığım algoritmayı değiştirdim.
daha az değişken kullanıldı daha kısa bir kod oldu.
kodlar eleştiriye açıktır :)
Kod:

; 2 nokta arası uzunluğu
; noktaların ortasına
; noktaların oluşturduğu eğim açısında yaz
; yazı üste gelecek
; Mesut Akcan
(defun c:UZ7 (/ ACI N1 N2 N3 UZUNLUK)
  (if (setq n1 (getpoint "\n1.nokta: "))
(if (setq n2 (getpoint n1 "\n2.nokta: "))
  (progn
(setq uzunluk (distance n1 n2)
  aci   (angle n1 n2)
  n3   (polar n1 aci (/ uzunluk 2))
)
; yazının üste gelmesi için
(if (and(> aci (/ pi 2))(<= aci (* pi 1.5)))
  (setq aci (angle n2 n1))
)
(entmake (list
   (cons 0 "TEXT")
   (cons 1 (rtos uzunluk)) ;yazı
   (cons 10 n3) ; ekleme noktası1
   (cons 11 n3) ; ekleme noktası2
   (cons 40 40) ; yazı yüksekliği=40
   (cons 50 aci) ; eğim açısı
   (cons 72 1) ; yatay yaslama 1=center=orta
   (cons 73 1) ; dikey yaslama 1=bottom=alt
)
)
  )
)
  )
  (princ)
)

> 1 <
Copyright © 2004-2022 SQL: 1.186 saniye - Sorgu: 49 - Ortalama: 0.0242 saniye