24.01.2022 18:43    

akcan
NK1 de bir sorun yok ancak tekrar eden kod yerine NK2 de fonksiyon kullanmayı denedim kodlar acemiliğimi belli etti.
Kod:

; error: bad function: #<VLA-OBJECT IAcadArc 0000023db6a1c268>

hatası veriyor

Kod:

(defun C:NK1()
  (setq vlo1 (vlax-ename->vla-object (car (entsel "\nUzunluğu alınacak çizgi1: "))))
(setq uz1 (vlax-curve-getDistAtParam vlo1 (vlax-curve-getEndParam vlo1)))

    (setq vlo2 (vlax-ename->vla-object (car (entsel "\nUzunluğu alınacak çizgi2: "))))
(setq uz2 (vlax-curve-getDistAtParam vlo2 (vlax-curve-getEndParam vlo2)))

)

(defun C:NK2()
  (setq vlo1 (vlax-ename->vla-object (car (entsel "\nUzunluğu alınacak çizgi1: "))))
(setq uz1 (uzunluk(vlo1)))
 
  (setq vlo2 (vlax-ename->vla-object (car (entsel "\nUzunluğu alınacak çizgi2: "))))
  (setq uz2 (uzunluk(vlo2)))
)

(defun uzunluk (vlo_nesne)
(vlax-curve-getDistAtParam vlo_nesne (vlax-curve-getEndParam vlo_nesne))
  )

25.01.2022 09:01    

ProhibiT
Fonksiyona gönderilen paramtere parantez içinde olmamalı ve fonksiyona adından sonra terminatör (boşluk karakteri) olmalı
(setq uz1 (uzunluk(vlo1))) ve (setq uz2 (uzunluk(vlo2))) yerine
(setq uz1 (uzunluk vlo1)) ve (setq uz2 (uzunluk vlo2)) yazarsanız sıkıntı kalmaz.

25.01.2022 13:03    

akcan
verdiğiniz bilgiler için teşekkür ederim @Prohibit
amacım aşağıdaki kodları yazmaktı.
belki başka birinin işine de yarayabilir.
hata kontrolleri ve seçili nesne kontrolü yapılmadı. o kadar detaya girmedim.
Kod:

;Seçili nesne uzunluğunu alır
;Sonraki seçili nesneye uzunluk mesafesinde nokta ekler
;Nesne olarak; LINE, POLYLINE, ARC, CIRCLE, ELLIPSE, SPLINE seçilebilir
;
;Mesut Akcan
;akcansoft.blogspot.com
;29/1/2022
;
(vl-load-com)
(defun C:NK (/ uz1 uz2 ent tn p1 p2 nkt vlo1 vlo2)
  (setq vlo1 (vlax-ename->vla-object (car (entsel "\nUzunluğu alınacak nesne: ")))
  uz1 (uzunluk vlo1) ;seçili 1. nesne uzunluğu 

  ent (entsel "\nNokta konulacak nesne: ")
  tn (cadr ent) ;tıklama noktası
 
  vlo2 (vlax-ename->vla-object (car ent))
uz2 (uzunluk vlo2) ;seçili 2. nesne uzunluğu 
 
  p1 (vlax-curve-getStartPoint vlo2) ;2. nesne başlangıç noktası
  p2 (vlax-curve-getendPoint vlo2)   ;2. nesne bitiş noktası
)

  ;tıklama noktası başlangıç noktasına yakınsa
(if (< (distance tn p1)(distance tn p2))
(setq nkt (vlax-curve-getPointAtDist vlo2 uz1)) ; başlangıç noktasından ölç
  (setq nkt (vlax-curve-getPointAtDist vlo2 (- uz2 uz1))) ; bitiş noktasından ölç
  )
;nokta konumuna nokta ekle
    (entmake (list (cons 0 "POINT")(cons 10 nkt)))
  (princ)
)
;nesne uzunluğunu verir
(defun uzunluk (nesne)
(vlax-curve-getDistAtParam nesne (vlax-curve-getEndParam nesne))
)

akcan (29.01.2022 13:15 GMT)

> 1 <
Copyright © 2004-2022 SQL: 0.952 saniye - Sorgu: 50 - Ortalama: 0.01904 saniye