Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

Viết lisp theo yêu cầu [phần 2]


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#2881 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 17 December 2010 - 04:41 PM

Đó là 1 lỗi khó hiểu của Lisp.
Bác thử cái này nhé :

Bác Tue_NV ơi,
Tham khảo về cái hàm (prefix..... ) này ở đâu vậy bác ??? Mình tìm trong help developer của CAD hổng thấy nó bác ạ.Và như vậy chắc có cả hàm suffix nữa phải không bác???
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2882 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 17 December 2010 - 04:47 PM

Bác Tue_NV ơi,
Tham khảo về cái hàm (prefix..... ) này ở đâu vậy bác ??? Mình tìm trong help developer của CAD hổng thấy nó bác ạ.Và như vậy chắc có cả hàm suffix nữa phải không bác???

Bác tham khảo bài viết số 2922. Em có viết rõ ràng lắm mà

Về lý thuyết thì khi thêm đoạn mã của bạn vào thì sẽ thêm số o đằng trước những số nhỏ hơn 10 ,nhưng thực tế mình cho vào chạy kết quả vẫn như cũ ,nghĩa là số o không được hiện thị.

Bác NGO có thể cho biết công việc của bác đang làm không?
Bác đang làm chương trình gì mà chạy nó không được
Tue_NV thử chạy đoạn code ở trên nó ra đúng như bác yêu cầu cơ mà????
Bác có thể upload những cái mà bác đang làm và nói rõ hơn được không?
  • 0

#2883 NguyenNdait

NguyenNdait

    biết vẽ line

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

Đã gửi 17 December 2010 - 05:01 PM

Không sao bạn ạ ,chương trình của bạn chưa giúp cho mình thì giúp cho nhiều bạn khác .
Cảm ơn bạn đã quan tâm .
bạn xem có hàm gì để giá trị không có nghĩa 0 hiện lên sau đoạn mã đó Ví dụ :125 02 03 or 00 00 01 chứ không phải như bây giờ là 125 2 3 và 0 0 1

Bạn thử đoạn này xem :
(setq a ( nth 0 LL1))
(setq b (atof a))
(setq c (fix b))
(setq d (rtos c 2 0 ))
;;; nha^.p phan phut
(setq e (- b (fix B)))
(setq e1 (* e 100))
(setq e2 (fix (+ e1 0.0001)))
(if (< e2 10) (setq e3 (strcat "0" (rtos e2 2 0))) (setq e3 (rtos e2 2 0)))
;;; nha^.p phan giay
(setq g (- e1 (fix e1)))
(setq g1 (* g 100))
(setq g2 (fix g1))
(if (< g2 10) (setq g3 (strcat "0" (rtos g2 2 0))) (setq g3 (rtos g2 2 0)))

  • 0

Mầm non phường ba - Đây ta mầm cụ
Lãnh tụ non sông - Ngộ không.


#2884 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 17 December 2010 - 05:17 PM

Bác tham khảo bài viết số 2922. Em có viết rõ ràng lắm mà
Bác NGO có thể cho biết công việc của bác đang làm không?
Bác đang làm chương trình gì mà chạy nó không được
Tue_NV thử chạy đoạn code ở trên nó ra đúng như bác yêu cầu cơ mà????
Bác có thể upload những cái mà bác đang làm và nói rõ hơn được không?

Hề hề hề,
Sorry bác Tue_NV nhé,
Mắt mũi kèm nhèm cứ tưởng cái thằng (prefix0 ... ) là (prefix 0 ....) nên gán ngay cho nó là hàm của lisp để chúi mũi vào mò....
Ai dè nó là cái thằng cu của bác đẻ ra. Tí nữa thì uýnh nhầm. Khổ quá. Mong bác tha lỗi nhé. Vậy là yên tâm chẳng hề có thằng Suffix nào cả mà đi tìm bác hỉ. Thôi thì ráng đợii đến khi bác nào có hứng cho thằng prefix0 này nó có em thì ngắm vậy.
Hề hề hề,....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2885 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 17 December 2010 - 08:45 PM

Bạn thử đoạn này xem :

(setq a ( nth 0 LL1))
(setq b (atof a))
(setq c (fix b))
(setq d (rtos c 2 0 ))
;;; nha^.p phan phut
(setq e (- b (fix B)))
(setq e1 (* e 100))
(setq e2 (fix (+ e1 0.0001)))
(if (< e2 10) (setq e3 (strcat "0" (rtos e2 2 0))) (setq e3 (rtos e2 2 0)))
;;; nha^.p phan giay
(setq g (- e1 (fix e1)))
(setq g1 (* g 100))
(setq g2 (fix g1))
(if (< g2 10) (setq g3 (strcat "0" (rtos g2 2 0))) (setq g3 (rtos g2 2 0)))

Cảm ơn bạn ,phần ghép số 0 đã thực hiện rất tôt nhưng ban cần kiểm tra lại việc lấy dữ liêu góc:
Khi chạy sẽ có hiện tượng sau
Góc 207.2200 sẽ thành 207 22 99
348.5800 = 348 58 99
Rất cảm ơn bạn đoạn sau đã chạy tốt
  • 0

#2886 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 17 December 2010 - 08:57 PM

Bác tham khảo bài viết số 2922. Em có viết rõ ràng lắm mà
Bác NGO có thể cho biết công việc của bác đang làm không?
Bác đang làm chương trình gì mà chạy nó không được
Tue_NV thử chạy đoạn code ở trên nó ra đúng như bác yêu cầu cơ mà????
Bác có thể upload những cái mà bác đang làm và nói rõ hơn được không?

Mình đang viết các chương trình chuyển đổi các định dạng góc,khoảng cách ....ở các định dạng khác nhau do người dùng yêu cầu về 1 format đã quy định.
Hàm fixR của bạn rất hay ,đã giải quyết được thắc mắc của mình đưa ra kết quả đúng,vì mình không nghĩ rằng hàm fix lại có lỗi như thế (rất nhiều bạn không kiểm soát đã bị mắc lỗi này và phải sửa lại bằng thủ công) .
Phần ghép o cho các chữ số <10 của bạn ,có lẽ không sai nhưng không hiểu sao lại không cho ra kết quả mới (kết quả vẫn như cũ chưa thêm hàm prefix0 (s) .Mình ghép đoạn của ban NguyenNdait (if (< g2 10) (setq g3 (strcat "0" (rtos g2 2 0))) (setq g3 (rtos g2 2 0))) thì lại chạy ra kết quả tốt.
Nghĩa là của bạn 70% NguyenNdait 25 % thì đã được như ý mình.
Cảm ơn tất cả các bạn .
( Bạn Tue_NV có thể giải thích giúp mình do lý do tại sao không)
  • 0

#2887 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 December 2010 - 06:40 AM

Cảm ơn bạn ,phần ghép số 0 đã thực hiện rất tôt nhưng ban cần kiểm tra lại việc lấy dữ liêu góc:
Khi chạy sẽ có hiện tượng sau
Góc 207.2200 sẽ thành 207 22 99
348.5800 = 348 58 99
Rất cảm ơn bạn đoạn sau đã chạy tốt

Chào bác NDBNGO
Bác thay dòng
(setq g2 (fix g1))
thành dòng
(setq g2 (fix (+ g1 0.0001)))
trong code của bác NguyenNdaiT là được. Hoặc sử dụng hàm FixR mà Tue_NV đã viết
Đây có lẽ là lỗi làm tròn của hàm Fix
Về hàm prefix0 thì Tue_NV đã chạy thử không thấy lỗi gì cả.
Và đã viết lại hàm con prefix0 (thay hàm itoa bằng rtos), bác chạy thử đoạn code này thử nhé :

(defun c:fso()
(setq b (getreal "\n Nhap so :"))
(setq c (fixR B ))
(setq d (prefix0 C))

(setq e (- b (fixR B )))
(setq e1 (* e 100))
(setq e2 (fixR e1))
(setq e3 (prefix0 e2))
(setq g (- e1 (fixR e1)))
(setq g1 (* g 100))
(setq g2 (fixR g1))
(setq g3 (prefix0 g2))
(alert (strcat d " "e3 " " g3))
)
;;;;;
(defun fixR (s) (fix(atof(rtos s))))
(defun prefix0 (s)
(if (< (float s) 10.0)
(strcat "0" (rtos s 2 0))
(rtos s 2 0)
)
)

CHúc bác thành công
  • 1

#2888 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 18 December 2010 - 07:50 AM

Chào bác NDBNGO
Bác thay dòng
(setq g2 (fix g1))
thành dòng
(setq g2 (fix (+ g1 0.0001)))
trong code của bác NguyenNdaiT là được. Hoặc sử dụng hàm FixR mà Tue_NV đã viết
Đây có lẽ là lỗi làm tròn của hàm Fix
Về hàm prefix0 thì Tue_NV đã chạy thử không thấy lỗi gì cả.
Và đã viết lại hàm con prefix0 (thay hàm itoa bằng rtos), bác chạy thử đoạn code này thử nhé :


(defun c:fso()
(setq b (getreal "\n Nhap so :"))
(setq c (fixR B ))
(setq d (prefix0 C))

(setq e (- b (fixR B )))
(setq e1 (* e 100))
(setq e2 (fixR e1))
(setq e3 (prefix0 e2))
(setq g (- e1 (fixR e1)))
(setq g1 (* g 100))
(setq g2 (fixR g1))
(setq g3 (prefix0 g2))
(alert (strcat d " "e3 " " g3))
)
;;;;;
(defun fixR (s) (fix(atof(rtos s))))
(defun prefix0 (s)
(if (< (float s) 10.0)
(strcat "0" (rtos s 2 0))
(rtos s 2 0)
)
)

CHúc bác thành công

Cảm ơn sự giúp đỡ nhiệt tình của bạn ,mã cảu bạn đã chạy rất tốt.
Nhờ bạn đã giúp nhiêu hơn về tư duy viêt mã lisp.
Xin cảm ơn ban lần nữa.
  • 1

#2889 ngocnam.cad

ngocnam.cad

    biết vẽ ellipse

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

Đã gửi 18 December 2010 - 08:58 PM

xin chào các bạn. chúc mọi người sẽ có một giáng sinh vui vẻ bên người thương và gia đình.. mình có một thỉnh cầu nhỏ mong mọi người giúp đỡ với. Mình làm bên thiết kế nên thuờng xuyên phải chạy đường bằng Nova ,có những đoạn đường dài nên không thể nhập tên cọc bằng sslt được( máy cùi mà :undecided: ) mà dùng stc chắc mình chết mất. mong mọi người viết hộ lisp đổi tên cọc, hoặc có lisp copy nào có thể áp dụng thì cho minh xin... Chân thành cảm ơn tất cả.
  • 0

#2890 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 December 2010 - 09:22 AM

xin chào các bạn. chúc mọi người sẽ có một giáng sinh vui vẻ bên người thương và gia đình.. mình có một thỉnh cầu nhỏ mong mọi người giúp đỡ với. Mình làm bên thiết kế nên thuờng xuyên phải chạy đường bằng Nova ,có những đoạn đường dài nên không thể nhập tên cọc bằng sslt được( máy cùi mà :cheers: ) mà dùng stc chắc mình chết mất. mong mọi người viết hộ lisp đổi tên cọc, hoặc có lisp copy nào có thể áp dụng thì cho minh xin... Chân thành cảm ơn tất cả.

Chào bạn Nam.cad
Bạn viết dùng stc : phải chăng Stc là sửa Thủ Công ???
Còn bằng sslt -> Chịu, không hiểu được :undecided:
Bạn nên trình bày, minh họa rõ hơn điều mình nói bằng file .dwg thì may ra có thể giúp được.
Bạn cần tránh, không nên viết những yêu cầu bằng những từ viết tắt nhé. Vì để mọi người dễ hiểu hơn, và có thiện cảm với bài viết của bạn hơn.
Bạn nên trình bày rõ ràng hơn, vì nếu viết như bài viết trên thì chắc có lẽ các bác mà đã từng sử dụng NOVA mới hiểu được bạn muốn gì?? Và cũng có lẽ là không hiểu được ???? :leluoi:
  • 1

#2891 uce46

uce46

    biết zoom

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

Đã gửi 19 December 2010 - 09:42 AM

xin chào các bạn. chúc mọi người sẽ có một giáng sinh vui vẻ bên người thương và gia đình.. mình có một thỉnh cầu nhỏ mong mọi người giúp đỡ với. Mình làm bên thiết kế nên thuờng xuyên phải chạy đường bằng Nova ,có những đoạn đường dài nên không thể nhập tên cọc bằng sslt được( máy cùi mà :undecided: ) mà dùng stc chắc mình chết mất. mong mọi người viết hộ lisp đổi tên cọc, hoặc có lisp copy nào có thể áp dụng thì cho minh xin... Chân thành cảm ơn tất cả.

Vào sslt xuất tuyến ra file ntd, vào excel chỉnh sửa tên cọc, xong paste lại đúng chỗ sslt.
  • 0

#2892 hugo007

hugo007

    biết lệnh erase

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

Đã gửi 19 December 2010 - 05:10 PM

Khi ta tạo lệnh tắt bằng lisp của lệnh hatch:
(defun c:h() (command "hatch")).
Giờ muốn khi nhấn h thì mặc định mẫu hatch sẽ là ANSI31 và scale là 10 thì phải viết thêm gì.Mong các bác giúp đỡ.
  • 0

#2893 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 19 December 2010 - 08:02 PM

Khi ta tạo lệnh tắt bằng lisp của lệnh hatch:
(defun c:h() (command "hatch")).
Giờ muốn khi nhấn h thì mặc định mẫu hatch sẽ là ANSI31 và scale là 10 thì phải viết thêm gì.Mong các bác giúp đỡ.

Bạn sửa thế này nhé này nhé
(defun c:h() 
(command "-hatch" "p" "ANSI31" "10" "" pause)
)

  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#2894 thichhoabinh

thichhoabinh

    biết vẽ circle

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

Đã gửi 19 December 2010 - 10:12 PM

Em nhờ các bác viết giùm e 1 đoạn lisp :
- Khóa các layer đã chọn,hoặc tất cả.
- Mở khóa các layer đã chọn,hoặc tất cả
- Khóa tất cả,trừ các layer đã chọn
Những cái này e tìm thấy ở đâu đó r mà tìm lại không được :undecided:
  • 0

#2895 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 19 December 2010 - 11:26 PM

Chào bạn Nam.cad
Bạn viết dùng stc : phải chăng Stc là sửa Thủ Công ???
Còn bằng sslt -> Chịu, không hiểu được :undecided:
Bạn nên trình bày, minh họa rõ hơn điều mình nói bằng file .dwg thì may ra có thể giúp được.
Bạn cần tránh, không nên viết những yêu cầu bằng những từ viết tắt nhé. Vì để mọi người dễ hiểu hơn, và có thiện cảm với bài viết của bạn hơn.
Bạn nên trình bày rõ ràng hơn, vì nếu viết như bài viết trên thì chắc có lẽ các bác mà đã từng sử dụng NOVA mới hiểu được bạn muốn gì?? Và cũng có lẽ là không hiểu được ???? :leluoi:

Đây là các lệnh của phần mềm thiết kế đuờng Nova bác ạ.
SSLT: sửa số liệu tuyến
STC: sửa tên cọc.
@Nam.cad: tuyến của bạn quá dài, vậy thì trên đó chắc không chỉ có các cọc lý trình bình thuờng mà còn có các cọc đặc biệt như các cọc trong đuờng cong, cọc H, cọc đánh dấu vị trí cống và các công trình đặc biệt trên tuyến. Đổi hàng loạt kiểu gì? Bảo sếp bạn đầu tư máy xịn đê
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#2896 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 December 2010 - 11:36 PM

Em nhờ các bác viết giùm e 1 đoạn lisp :
- Khóa các layer đã chọn,hoặc tất cả.
- Mở khóa các layer đã chọn,hoặc tất cả
- Khóa tất cả,trừ các layer đã chọn
Những cái này e tìm thấy ở đâu đó r mà tìm lại không được :undecided:


Bạn thử cái này xem sao.Lisp thao tác thông qua các đối tượng được chọn
Mình đang đặt lệnh tắt như bên dưới,bạn có thể thay đổi cho tiện sử dụng
- lock : khoá layer(s)
- ulock : mở khoá layer(s)
- rlock : khoá tất cả,trừ layer(s) đc chọn
(defun c:lock () ;khoa layers(lkllk "lock" "l" "Chon doi tuong hoac an Enter de khoa tat ca" " Da duoc khoa"))(defun c:ulock () ;mo khoa layers(lkllk "unlock" "l" "Chon doi tuong hoac an Enter de mo khoa tat ca" " Da duoc mo khoa"))(defun c:rlock () ;Khoa tat ca,tru cai duoc chon(lkllk "unlock" "rl" "Chon doi tuong hoac an Enter de mo khoa tat ca" " Da duoc giu lai"))(defun lkllk ( lenh opt msg1 msg2 / NewLayers Layer1 Set1)(princ msg1)  		(setq Set1 (ssget))	(if (= Set1 nil)(command "-layer" lenh "*" "")		(progn			(setq i 0)			(repeat (sslength Set1)				(setq Layer1 (list (cdr(	assoc 8 (entget(ssname Set1 i))))))				(if NewLayers       				(setq NewLayers (append NewLayers Layer1))       				(setq NewLayers Layer1)				)				(setq i (+ i 1))			)			(princ NewLayers)			(if (= opt "l")(command  "layer") 						(command  "layer"  "lock" "*")			)			(mapcar  '(lambda (x) (command lenh x)) NewLayers)			(command "")						(princ (sslength Set1))			(princ msg2)))			;			(setq lenh nil 				msg1 nil 				msg2 nil)				(princ))

  • 1

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


#2897 ngocnam.cad

ngocnam.cad

    biết vẽ ellipse

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

Đã gửi 20 December 2010 - 08:51 AM

vâng , em xin cám ơn các bác. Bác Tue hiểu chưa hết ý em rùi.hì. em đã nói trên là dùng Nova rùi mà, mà anh nào dùng nova chẳng biết sslt. Vậy các bác cao thủ có cao kiến gì hay giúp em trong việc sửa tên cọc với được không ạ? Các bác bảo em là xuất sang ntd rùi sang excel nhưng toàn bị đơ máy thôi bác ạ... em xin cám ơn tất cả.
  • 0

#2898 ngocnam.cad

ngocnam.cad

    biết vẽ ellipse

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

Đã gửi 20 December 2010 - 08:54 AM

:undecided: bác Thaiztress giúp em được không ạ???
  • 0

#2899 ngocnam.cad

ngocnam.cad

    biết vẽ ellipse

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

Đã gửi 20 December 2010 - 09:06 AM

Vào sslt xuất tuyến ra file ntd, vào excel chỉnh sửa tên cọc, xong paste lại đúng chỗ sslt.

cám ơn bác , nhưng máy em mỗi lần sửa trên excel thì với tuyến dài 5-10km thì bị đơ bác à, có cách nào khắc phục không bác?cám ơn bác đã hồi âm
  • 0

#2900 NguyenNdait

NguyenNdait

    biết vẽ line

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

Đã gửi 20 December 2010 - 01:48 PM

Mình load lisp theo hướng dẫn của bạn, nhưng không chạy được.
Không hiểu sao ...?
Mong được Bạn giúp đở.
Cám ơn

Xin lỗi bạn. Vì ctrình của mình trích ra từ 1 ctrình lớn hơn nên còn thiếu đoạn này.
Bạn cho nó vào chung với file lvtcu nha
;Chon cac doi tuong hien huu tren man hinh
(defun ssget_scr ( / cen hight p1 p2 p3 p4)
(if (null (tblsearch "layer" "khongin")) (command "layer" "N" "khongin" ""))
(setq cen (getvar "viewctr")
hight (getvar "viewsize"))
(setq p1 (polar (polar cen 0.0 (* hight 0.75)) (* Pi 0.5) (* hight 0.5)))
(setq p2 (polar p1 pi (* hight 1.5))
p3 (polar p2 (* pi 1.5) hight)
p4 (polar p3 0.0 (* hight 1.5)))
(ssget "C" p4 p2))

  • 0

Mầm non phường ba - Đây ta mầm cụ
Lãnh tụ non sông - Ngộ không.