Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
NguyenNgocSon

Nhờ sửa LISP ghi độ dốc đường thẳng

Các bài được khuyến nghị

Mình có lisp này đã chỉnh sửa nhưng chưa theo ý muốn.

Lisp có chức năng ghi độ dốc đưởng thẳng: " Lisp đã ghi được độ dốc bằng cách chọn điểm đầu, điểm cuối, điểm ghi " nhưng chưa làm được như sau :

1. Chưa có thông số nhập vào chiều cao text.

2. Chưa ghi được chữ nằm trên (song song, cách đường thẳng 1 đoạn x) đường thẳng.

Mong bác nào giúp em khắc phục vấn đề trên để lisp hoàn thiện.

Em mò mãi chưa ra vì mới học lisp

Thân !

Cám ơn sự giúp đỡ.

(defun c:TLT ()

  (setq p (getpoint "\nChon diem dau: " ))
  (setq p1 (getpoint "\nChon diem cuoi: " p))
  (cond ((null tphan) (setq tphan 2)))
  (setq dau1 (car p))
  (setq cuoi1 (cadr p))
  (setq dau2 (car p1))
  (setq cuoi2 (cadr p1))
  (setq lx (abs (- dau1 dau2)))
  (setq ly (abs (- cuoi1 cuoi2)))
  (setq i (/ lx ly))

  (command "layer" "S" "0" "")
  (setq pt1 (getpoint "\nChon diem ghi do doc: " ))
	  (setq dau1 (+ 5 (car pt1)))
	  (setq cuoi1 (cadr pt1))
  (setq pt1 (list dau1 cuoi1))
	  (setq goc (/ (* (atan i) -180) pi ))


	  (setq chuoi (strcat "1/" (rtos i 2 tphan)))
	  (command "text" "J" "M" pt1 2 goc chuoi )

)
 ;het gtl

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamngoctukts    708
Mình có lisp này đã chỉnh sửa nhưng chưa theo ý muốn.

Lisp có chức năng ghi độ dốc đưởng thẳng: " Lisp đã ghi được độ dốc bằng cách chọn điểm đầu, điểm cuối, điểm ghi " nhưng chưa làm được như sau :

1. Chưa có thông số nhập vào chiều cao text.

2. Chưa ghi được chữ nằm trên (song song, cách đường thẳng 1 đoạn x) đường thẳng.

Mong bác nào giúp em khắc phục vấn đề trên để lisp hoàn thiện.

Em mò mãi chưa ra vì mới học lisp

Thân !

Cám ơn sự giúp đỡ.

;; free lisp from cadviet.com
(defun c:TLT ()
  (setq os (getvar "osmode"))
   (setq p (getpoint "\nChon diem dau: " ))
   (setq p1 (getpoint "\nChon diem cuoi: " p))
   (cond ((null tphan) (setq tphan 2)))
   (setq dau1 (car p))
   (setq cuoi1 (cadr p))
   (setq dau2 (car p1))
   (setq cuoi2 (cadr p1))
   (setq lx (abs (- dau1 dau2)))
   (setq ly (abs (- cuoi1 cuoi2)))
   (setq i (/ lx ly))
  (setq caochu (getreal "\nnhap cao chu: "))
  (setvar "osmode" 0)
   (command "layer" "S" "0" "")
   (setq pt1 (polar p (angle p p1) (/ (distance p p1) 2)))
          (setq dau1 (+ 5 (car pt1)))
          (setq cuoi1 (cadr pt1))
          (setq goc (/ (* (angle p p1) 180) pi))
  (setq pt2 (polar pt1 (+ (angle p p1) (/ pi 2)) caochu))
          (setq chuoi (strcat "1/" (rtos i 2 tphan)))
          (command "text" "J" "M" pt2 caochu goc chuoi )
(setvar "osmode" os)         
)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Anh phamngoctukts có thể giúp em thêm biến chọn font, layer cho text ; và thêm lựa chọn select cho tất cả các đối tượng đường thẳng cần ghi độ dốc trong bản vẽ được ko ?

Thân !

Cám ơn bác !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamngoctukts    708
Anh phamngoctukts có thể giúp em thêm biến chọn font, layer cho text ; và thêm lựa chọn select cho tất cả các đối tượng đường thẳng cần ghi độ dốc trong bản vẽ được ko ?

Thân !

Cám ơn bác !

Về phần font và layer của chữ thì nó theo hiện hành cái này bạn chỉ cần chỉnh trước khi dùng lệnh là được.

Theo mình nghĩ thì không nên select nhiều đối tượng để tính vì gặp khó khăn trong lúc bạn lọc các đối tượng khi bản vẽ có nhiều đối tượng

Bạn dùng thử cái này xem có được không.

;; free lisp from cadviet.com
(defun c:TLT ()
  (setq os (getvar "osmode"))
  (setq caochu (getreal "\nnhap cao chu: "))
  (setvar "osmode" 0)
(while (setq name (car (entsel "\nChon line can tinh do doc")))
  (setq ent (entget name))
  (setq p (cdr (assoc 10 ent))
       p1 (cdr (assoc 11 ent)))
(if (> (car p) (car p1))
(progn
  (setq p (cdr (assoc 11 ent))
       p1 (cdr (assoc 10 ent)))
)
)
   (cond ((null tphan) (setq tphan 2)))
   (setq dau1 (car p))
   (setq cuoi1 (cadr p))
   (setq dau2 (car p1))
   (setq cuoi2 (cadr p1))
   (setq lx (abs (- dau1 dau2)))
   (setq ly (abs (- cuoi1 cuoi2)))
   (setq i (/ lx ly))
  (setq pt1 (polar p (angle p p1) (/ (distance p p1) 2)))
          (setq dau1 (+ 5 (car pt1)))
          (setq cuoi1 (cadr pt1))
          (setq goc (/ (* (angle p p1) 180) pi))
  (setq pt2 (polar pt1 (+ (angle p p1) (/ pi 2)) caochu))
          (setq chuoi (strcat "1/" (rtos i 2 tphan)))
          (command "text" "J" "M" pt2 caochu goc chuoi )
)
(setvar "osmode" os)         
)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Về phần font và layer của chữ thì nó theo hiện hành cái này bạn chỉ cần chỉnh trước khi dùng lệnh là được.

Theo mình nghĩ thì không nên select nhiều đối tượng để tính vì gặp khó khăn trong lúc bạn lọc các đối tượng khi bản vẽ có nhiều đối tượng

Bạn dùng thử cái này xem có được không.

Em đã thử và gặp phải: Nếu đường ghi là đoạn thẳng thì oki, nếu là đường thẳng không ghi được ! Không biết mình có thể sửa ở biến nào vậy anh ? Nếu mở rộng ra cho trường hợp ghi cho đường polyliner thì hay quá .

Cám ơn bác !

Thân !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamngoctukts    708
Em đã thử và gặp phải: Nếu đường ghi là đoạn thẳng thì oki, nếu là đường thẳng không ghi được ! Không biết mình có thể sửa ở biến nào vậy anh ? Nếu mở rộng ra cho trường hợp ghi cho đường polyliner thì hay quá .

Cám ơn bác !

Thân !

Bạn thử cái này xem sao nhé.

;; free lisp from cadviet.com

;; free lisp from cadviet.com
(defun c:TLT ()
  (setq os (getvar "osmode"))
  (setq caochu (getreal "\nnhap cao chu: "))
  (setvar "osmode" 0)
(while (setq name (car (entsel "\nChon line can tinh do doc")))
  (setq ent (entget name))
(if (= (cdr (assoc 0 ent)) "LINE")
(progn
  (setq p (cdr (assoc 10 ent))
       p1 (cdr (assoc 11 ent)))
(if (> (car p) (car p1))
(progn
  (setq p (cdr (assoc 11 ent))
       p1 (cdr (assoc 10 ent)))
)
)
)
)
(if (= (cdr (assoc 0 ent)) "LWPOLYLINE")
(progn
  (setq listp (acet-geom-vertex-list name))
  (setq p (car listp)
       p1 (cadr listp))
(if (> (car p) (car p1))
(progn
  (setq p (cadr listp)
       p1 (car listp))
)
)
)
)
   (cond ((null tphan) (setq tphan 2)))
   (setq dau1 (car p))
   (setq cuoi1 (cadr p))
   (setq dau2 (car p1))
   (setq cuoi2 (cadr p1))
   (setq lx (abs (- dau1 dau2)))
   (setq ly (abs (- cuoi1 cuoi2)))
   (setq i (/ lx ly))
  (setq pt1 (polar p (angle p p1) (/ (distance p p1) 2)))
          (setq dau1 (+ 5 (car pt1)))
          (setq cuoi1 (cadr pt1))
          (setq goc (/ (* (angle p p1) 180) pi))
  (setq pt2 (polar pt1 (+ (angle p p1) (/ pi 2)) caochu))
          (setq chuoi (strcat "1/" (rtos i 2 tphan)))
          (command "text" "J" "M" pt2 caochu goc chuoi )
)
(setvar "osmode" os)         
)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841
Bạn thử cái này xem sao nhé.

;; free lisp from cadviet.com

;; free lisp from cadviet.com
(defun c:TLT ()
  (setq os (getvar "osmode"))
  (setq caochu (getreal "\nnhap cao chu: "))
  (setvar "osmode" 0)
(while (setq name (car (entsel "\nChon line can tinh do doc")))
  (setq ent (entget name))
(if (= (cdr (assoc 0 ent)) "LINE")
(progn
  (setq p (cdr (assoc 10 ent))
       p1 (cdr (assoc 11 ent)))
(if (> (car p) (car p1))
(progn
  (setq p (cdr (assoc 11 ent))
       p1 (cdr (assoc 10 ent)))
)
)
)
)
(if (= (cdr (assoc 0 ent)) "LWPOLYLINE")
(progn
  (setq listp (acet-geom-vertex-list name))
  (setq p (car listp)
       p1 (cadr listp))
(if (> (car p) (car p1))
(progn
  (setq p (cadr listp)
       p1 (car listp))
)
)
)
)
   (cond ((null tphan) (setq tphan 2)))
   (setq dau1 (car p))
   (setq cuoi1 (cadr p))
   (setq dau2 (car p1))
   (setq cuoi2 (cadr p1))
   (setq lx (abs (- dau1 dau2)))
   (setq ly (abs (- cuoi1 cuoi2)))
   (setq i (/ lx ly))
  (setq pt1 (polar p (angle p p1) (/ (distance p p1) 2)))
          (setq dau1 (+ 5 (car pt1)))
          (setq cuoi1 (cadr pt1))
          (setq goc (/ (* (angle p p1) 180) pi))
  (setq pt2 (polar pt1 (+ (angle p p1) (/ pi 2)) caochu))
          (setq chuoi (strcat "1/" (rtos i 2 tphan)))
          (command "text" "J" "M" pt2 caochu goc chuoi )
)
(setvar "osmode" os)         
)

Tue_NV có cái này muốn nhắc bạn :

Tên biến không để trùng với tên hàm :

 

(setq listp (acet-geom-vertex-list name))

(setq p (car listp)

p1 (cadr listp))

(if (> (car p) (car p1))

(progn

(setq p (cadr listp)

p1 (car listp))

)

)

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamngoctukts    708
Tue_NV có cái này muốn nhắc bạn :

Tên biến không để trùng với tên hàm :

 

(setq listp (acet-geom-vertex-list name))

(setq p (car listp)

p1 (cadr listp))

(if (> (car p) (car p1))

(progn

(setq p (cadr listp)

p1 (car listp))

)

)

Thank Bác! quả thật em không để ý vì chẳng mấy khi em dùng hàm listp. Hình như cái này kiểm tra xem biến có phải là list đúng không bác.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841
Thank Bác! quả thật em không để ý vì chẳng mấy khi em dùng hàm listp. Hình như cái này kiểm tra xem biến có phải là list đúng không bác.

Hàm Listp đúng như bạn nói

 

(listp item)

Arguments

 

item

Any atom, list, or expression.

 

Return Values

 

T if item is a list; otherwise nil. Because nil is both an atom and a list, the listp function returns T when passed nil.

 

 

Ta có thể nhận biết được hàm đó do trong Code có màu xanh lá, bạn xemhộp codebox ngay tại ở bài viết trên của bạn sẽ thấy

Nếu bạn sử dụng Visual Lisp Editor => chắc sẽ không có chuyện nhầm lẫn như thế này

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamngoctukts    708
Hàm Listp đúng như bạn nói

 

(listp item)

Arguments

 

item

Any atom, list, or expression.

 

Return Values

 

T if item is a list; otherwise nil. Because nil is both an atom and a list, the listp function returns T when passed nil.

Ta có thể nhận biết được hàm đó do trong Code có màu xanh lá, bạn xemhộp codebox ngay tại ở bài viết trên của bạn sẽ thấy

Nếu bạn sử dụng Visual Lisp Editor => chắc sẽ không có chuyện nhầm lẫn như thế này

Hê hê bây giờ em mới thấy sự khác biệt giưa nodepat và visual lisp editor. Thank Bác

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tvgtyb08    10

Bạn thử cái này xem sao nhé.

;; free lisp from cadviet.com

;; free lisp from cadviet.com
(defun c:TLT ()
  (setq os (getvar "osmode"))
  (setq caochu (getreal "\nnhap cao chu: "))
  (setvar "osmode" 0)
(while (setq name (car (entsel "\nChon line can tinh do doc")))
  (setq ent (entget name))
(if (= (cdr (assoc 0 ent)) "LINE")
(progn
  (setq p (cdr (assoc 10 ent))
       p1 (cdr (assoc 11 ent)))
(if (> (car p) (car p1))
(progn
  (setq p (cdr (assoc 11 ent))
       p1 (cdr (assoc 10 ent)))
)
)
)
)
(if (= (cdr (assoc 0 ent)) "LWPOLYLINE")
(progn
  (setq listp (acet-geom-vertex-list name))
  (setq p (car listp)
       p1 (cadr listp))
(if (> (car p) (car p1))
(progn
  (setq p (cadr listp)
       p1 (car listp))
)
)
)
)
  (cond ((null tphan) (setq tphan 2)))
  (setq dau1 (car p))
  (setq cuoi1 (cadr p))
  (setq dau2 (car p1))
  (setq cuoi2 (cadr p1))
  (setq lx (abs (- dau1 dau2)))
  (setq ly (abs (- cuoi1 cuoi2)))
  (setq i (/ lx ly))
  (setq pt1 (polar p (angle p p1) (/ (distance p p1) 2)))
         (setq dau1 (+ 5 (car pt1)))
         (setq cuoi1 (cadr pt1))
         (setq goc (/ (* (angle p p1) 180) pi))
  (setq pt2 (polar pt1 (+ (angle p p1) (/ pi 2)) caochu))
         (setq chuoi (strcat "1/" (rtos i 2 tphan)))
         (command "text" "J" "M" pt2 caochu goc chuoi )
)
(setvar "osmode" os)         
)

 

Anh ơi có thể sửa hàm này giúp em Kết quả độ dốc tính ra % được không?

Em sửa mà nó bị lỗi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ketxu    2.653

Bạn định nghĩa % độ dốc như thế nào ? Và bạn đã sửa ntn rồi mà chưa được ?? Bạn cứ mạnh dạn post lên, có gì mọi người cùng chỉnh giúp bạn :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tvgtyb08    10

Bạn định nghĩa % độ dốc như thế nào ? Và bạn đã sửa ntn rồi mà chưa được ?? Bạn cứ mạnh dạn post lên, có gì mọi người cùng chỉnh giúp bạn :)

Đây là Lisp của anh Sơn em sửa lại (setq chuoi (100/strcat (rtos i 2 tphan)"%")):

(defun c:TLT ()
  (setq os (getvar "osmode"))
   (setq p (getpoint "\nChon diem dau: " ))
   (setq p1 (getpoint "\nChon diem cuoi: " p))
   (cond ((null tphan) (setq tphan 2)))
   (setq dau1 (car p))
   (setq cuoi1 (cadr p))
   (setq dau2 (car p1))
   (setq cuoi2 (cadr p1))
   (setq lx (abs (- dau1 dau2)))
   (setq ly (abs (- cuoi1 cuoi2)))
   (setq i (/ lx ly))
  (setq caochu (getreal "\nnhap cao chu: "))
  (setvar "osmode" 0)
   (command "layer" "S" "0" "")
   (setq pt1 (polar p (angle p p1) (/ (distance p p1) 2)))
          (setq dau1 (+ 5 (car pt1)))
          (setq cuoi1 (cadr pt1))
          (setq goc (/ (* (angle p p1) 180) pi))
  (setq pt2 (polar pt1 (+ (angle p p1) (/ pi 2)) caochu))
          (setq chuoi (100/strcat  (rtos i 2 tphan)"%"))
          (command "text" "J" "M" pt2 caochu goc chuoi )
(setvar "osmode" os)         
)

 

Còn đây là file lisp gốc của anh ấy:

(defun c:TLT ()
  (setq os (getvar "osmode"))
   (setq p (getpoint "\nChon diem dau: " ))
   (setq p1 (getpoint "\nChon diem cuoi: " p))
   (cond ((null tphan) (setq tphan 2)))
   (setq dau1 (car p))
   (setq cuoi1 (cadr p))
   (setq dau2 (car p1))
   (setq cuoi2 (cadr p1))
   (setq lx (abs (- dau1 dau2)))
   (setq ly (abs (- cuoi1 cuoi2)))
   (setq i (/ lx ly))
  (setq caochu (getreal "\nnhap cao chu: "))
  (setvar "osmode" 0)
   (command "layer" "S" "0" "")
   (setq pt1 (polar p (angle p p1) (/ (distance p p1) 2)))
          (setq dau1 (+ 5 (car pt1)))
          (setq cuoi1 (cadr pt1))
          (setq goc (/ (* (angle p p1) 180) pi))
  (setq pt2 (polar pt1 (+ (angle p p1) (/ pi 2)) caochu))
          (setq chuoi "1/"(strcat  (rtos i 2 tphan)))
          (command "text" "J" "M" pt2 caochu goc chuoi )
(setvar "osmode" os)         
)

Anh sửa giúp em và chèn giúp em đoạn Code để sau khi thực hiện lệnh nó tự động bật Osnaps trở lại

Đây là đoạn Code bật Osnap:

 

(defun c:bd ()
 (setvar "osmode" 2743)

 (princ)
 )

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.680

Đây là Lisp của anh Sơn em sửa lại (setq chuoi (100/strcat (rtos i 2 tphan)"%")):

(defun c:TLT ()
  (setq os (getvar "osmode"))
   (setq p (getpoint "\nChon diem dau: " ))
   (setq p1 (getpoint "\nChon diem cuoi: " p))
   (cond ((null tphan) (setq tphan 2)))
   (setq dau1 (car p))
   (setq cuoi1 (cadr p))
   (setq dau2 (car p1))
   (setq cuoi2 (cadr p1))
   (setq lx (abs (- dau1 dau2)))
   (setq ly (abs (- cuoi1 cuoi2)))
   (setq i (/ lx ly))
  (setq caochu (getreal "\nnhap cao chu: "))
  (setvar "osmode" 0)
   (command "layer" "S" "0" "")
   (setq pt1 (polar p (angle p p1) (/ (distance p p1) 2)))
          (setq dau1 (+ 5 (car pt1)))
          (setq cuoi1 (cadr pt1))
          (setq goc (/ (* (angle p p1) 180) pi))
  (setq pt2 (polar pt1 (+ (angle p p1) (/ pi 2)) caochu))
          (setq chuoi (100/strcat  (rtos i 2 tphan)"%"))
          (command "text" "J" "M" pt2 caochu goc chuoi )
(setvar "osmode" os)         
)

 

Còn đây là file lisp gốc của anh ấy:

(defun c:TLT ()
  (setq os (getvar "osmode"))
   (setq p (getpoint "\nChon diem dau: " ))
   (setq p1 (getpoint "\nChon diem cuoi: " p))
   (cond ((null tphan) (setq tphan 2)))
   (setq dau1 (car p))
   (setq cuoi1 (cadr p))
   (setq dau2 (car p1))
   (setq cuoi2 (cadr p1))
   (setq lx (abs (- dau1 dau2)))
   (setq ly (abs (- cuoi1 cuoi2)))
   (setq i (/ lx ly))
  (setq caochu (getreal "\nnhap cao chu: "))
  (setvar "osmode" 0)
   (command "layer" "S" "0" "")
   (setq pt1 (polar p (angle p p1) (/ (distance p p1) 2)))
          (setq dau1 (+ 5 (car pt1)))
          (setq cuoi1 (cadr pt1))
          (setq goc (/ (* (angle p p1) 180) pi))
  (setq pt2 (polar pt1 (+ (angle p p1) (/ pi 2)) caochu))
          (setq chuoi "1/"(strcat  (rtos i 2 tphan)))
          (command "text" "J" "M" pt2 caochu goc chuoi )
(setvar "osmode" os)         
)

Anh sửa giúp em và chèn giúp em đoạn Code để sau khi thực hiện lệnh nó tự động bật Osnaps trở lại

Đây là đoạn Code bật Osnap:

 

(defun c:bd ()
 (setvar "osmode" 2743)

 (princ)
 )

Cả 2 lisp trên đều sai cú pháp, có thể sửa lại như sau:

1. Sửa dòng (setq chuoi...

thành (setq chuoi (strcat (rtos (* i 100) 2 2) "%" ))

2. Chế độ osnap của 2 file đã đặt đúng (tức là sau khi thực hiện lệnh xong nó trả về giá trị cũ)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

mình thử lisp này rồi nhưng sao độ dốc chỉ ra dạng phân số .

Chẳng hạn độ dốc mình muốn đo là 9% thì khi dùng lisp sẽ xuất hiện độ dốc là 1/11,11 ...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.680

mình thử lisp này rồi nhưng sao độ dốc chỉ ra dạng phân số .

Chẳng hạn độ dốc mình muốn đo là 9% thì khi dùng lisp sẽ xuất hiện độ dốc là 1/11,11 ...

Bạn đã sửa như tôi nói ở trên chưa?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123

Mình có lisp này đã chỉnh sửa nhưng chưa theo ý muốn.

Lisp có chức năng ghi độ dốc đưởng thẳng: " Lisp đã ghi được độ dốc bằng cách chọn điểm đầu, điểm cuối, điểm ghi " nhưng chưa làm được như sau :

1. Chưa có thông số nhập vào chiều cao text.

2. Chưa ghi được chữ nằm trên (song song, cách đường thẳng 1 đoạn x) đường thẳng.

Mong bác nào giúp em khắc phục vấn đề trên để lisp hoàn thiện.

Em mò mãi chưa ra vì mới học lisp

Thân !

Cám ơn sự giúp đỡ.

(defun c:TLT ()

  (setq p (getpoint "\nChon diem dau: " ))
  (setq p1 (getpoint "\nChon diem cuoi: " p))
  (cond ((null tphan) (setq tphan 2)))
  (setq dau1 (car p))
  (setq cuoi1 (cadr p))
  (setq dau2 (car p1))
  (setq cuoi2 (cadr p1))
  (setq lx (abs (- dau1 dau2)))
  (setq ly (abs (- cuoi1 cuoi2)))
  (setq i (/ lx ly))

  (command "layer" "S" "0" "")
  (setq pt1 (getpoint "\nChon diem ghi do doc: " ))
  	(setq dau1 (+ 5 (car pt1)))
  	(setq cuoi1 (cadr pt1))
 	(setq pt1 (list dau1 cuoi1))
  	(setq goc (/ (* (atan i) -180) pi ))


  	(setq chuoi (strcat "1/" (rtos i 2 tphan)))
  	(command "text" "J" "M" pt1 2 goc chuoi )

)
 ;het gtl

Hề hề hề,

Lisp chưa làm được điều bạn muốn vì bạn không chỉ cho nó làm thế nào.

1/- trong lisp của bạn chiều cao chữ bắt buộc phải là 2 chứ bạn không thể tự nhập do dòng code : (command "text" "J" "M" pt1 2 goc chuoi )

2/- cái góc của text và vị trí đặt text cũng tương tự là do dòng code này quyết định.

Để có thể làm cho nó chạy theo ý bạn muốn bạn sẽ phải thay đổi dòng code này thành:

(command "text" "J" "M" pt1 h goc chuoi ) trong đó điểm pt1 bạn cần xác định lại tương ứng với vị trí bạn muốn . Hãy lưu ý rằng cái khoảng cách từ pt1 tới đường thẳng sẽ phụ thuộc vào góc tạo bởi đường thẳng đó với trục x được xác định bởi hàm angle.

Chiều cao h bạn phải xác định bằng cách cho người dùng tự nhập, có thể sử dụng hàm getreal hay getdist......

góc text goc phải được xác định theo hai điểm đầu và cuối mà bạn đã nhập ở trên bằng hàm angle và sau đó bạn phải chuyển từ số đo theo radian sang số đo theo độ.

 

Hy vọng rằng bạn sẽ tự chỉnh được cái lisp theo ý bạn qua những góp ý trên. Nều gặp trở ngại gì, hãy post lên nhé....

Chúc bạn thành công.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
redsea_tq    13

Cái này dùng vba sử lý rất đơn giản tại sao bạn NguyenNgocSon không dùng nhỉ, theo như bạn nói là thạo VBA mà. Mình chuyển sang dùng vb cũng lâu rồi và không muốn dùng lisp nữa vì lisp rắc rối quá(xin lỗi chủ thớt vì đã spam nhé)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×