Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
20 replies to this topic

#1 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 28 October 2010 - 02:13 PM

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

  • 0

#2 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 28 October 2010 - 02:55 PM

[quote name='NguyenNgocSon' post='114477' date='Oct 28 2010, 14:13']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)        
)

  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#3 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 28 October 2010 - 03:31 PM

ok. Cám ơn bác rất nhiều. Hi vọng bác có thể giúp em nhiều hơn vì em chủ yếu thạo VBA Cad , còn Lisp em ko rành lắm
Thân !
  • 0

#4 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 28 October 2010 - 06:54 PM

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 !
  • 0

#5 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 28 October 2010 - 10:05 PM

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

  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#6 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 29 October 2010 - 09:43 AM

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 !
  • 0

#7 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 29 October 2010 - 11:20 AM

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

  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 29 October 2010 - 11:43 AM

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

#9 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 29 October 2010 - 02:18 PM

Đã text với đường polyline nhưng ko ghi được ???
  • 0

#10 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 29 October 2010 - 03:08 PM

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.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 29 October 2010 - 03:19 PM

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
  • 1

#12 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 29 October 2010 - 03:47 PM

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
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#13 tvgtyb08

tvgtyb08

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 01 April 2011 - 10:35 PM

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.
  • 0

#14 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 01 April 2011 - 11:40 PM

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 :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#15 tvgtyb08

tvgtyb08

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 02 April 2011 - 07:20 PM

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

  • 0

#16 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 April 2011 - 09:35 PM

Đâ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ũ)
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#17 tvgtyb08

tvgtyb08

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 02 April 2011 - 10:24 PM

OK rồi, cảm ơn anh nhiều.
  • 0

#18 livegreen2006

livegreen2006

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 30 September 2011 - 09:09 PM

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 ...
  • 0

#19 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 30 September 2011 - 09:47 PM

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?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#20 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 01 October 2011 - 10:51 AM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.