Đến nội dung


Hình ảnh
- - - - -

[Nhờ chỉnh sửa] Lisp ghi cao độ


  • Please log in to reply
32 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 07 August 2011 - 12:42 AM

Em viết lisp cd (tham khảo code có sẵn và chỉnh sửa):

; Thiet lap cac thong so
(defun c:cd()
(if (not h) (setq h 1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
(if h1 (setq h h1))
(if tx1 (setq tx (/ 1 tx1)))
(if ty1 (setq ty (/ 1 ty1)))
; Ket thuc thiet lap
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0)); Lay toa do diem tim
;; Chon text
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq sst1 (entget ed)) ;;hien thi record doi tuong
(setq sst (cdr (assoc 1 sst1))) ;;Lay noi dung text:ma DXF=1
(setq sta1 (atof sst))
;; ket thuc chon
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
(While (/= pt nil)
(command "osmode" 0)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq x1 (car pt) y1 (cadr pt)); Lay toa do diem chen
(setq y (- sta1 (- y1 y0)))
(setq x (- x1 x0))
;(setvar "DIMZIN" 0)
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
((< y 0) (setq y (rtos (* y ty) 2 2)))
((= y 0) (setq y "%%p0.00")))
(progn
(if (AND (>= ang 0) (< ang (/ pi 2)))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (/ pi 2)) (< ang pi))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
);progn
(command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
"text" "m" pt6 h 0 y
"text" "m" pt7 h 0 x)
;(setvar "DIMZIN" DZ)
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
);progn
);while
;;;;;;;;;;;
(princ)
);end
Sau khi em thực hiện lệnh bị lỗi :
Command: cd
Cao text < 1.00 >:
Ty le theo phuong X <1/1.00>: 1/
Ty le theo phuong Y <1/0.10>: 1/
Diem tim TN tu nhien
Chon cao do tim: ; error: bad argument type: lentityp ((-1 . <Entity name:
7eff2c40>) (0 . "TEXT") (330 . <Entity name: 7ed16cf8>) (5 . "9CB8") (100 .
"AcDbEntity") (67 . 0) (410 . "Model") (8 . "ENTTDTUNHIEN") (62 . 0) (100 .
"AcDbText") (10 164.527 -129.537 0.0) (40 . 2.0) (1 . "6.37") (50 . 1.5708) (41
. 1.0) (51 . 0.0) (7 . "ChuSo") (71 . 0) (72 . 2) (11 163.527 -124.099 0.0)
(210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 2))

[color="#FF0000"][b]Lisp cd có tác dụng ghi cao độ của 1 điểm chưa biết dựa vào điểm gốc đã biết cao độ
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 August 2011 - 06:45 AM

Em viết lisp cd (tham khảo code có sẵn và chỉnh sửa):

;; Viet ham moi by Son Pro
;;;;;;
; Thiet lap cac thong so
(defun c:cd()
(if (not h) (setq h 1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
(if h1 (setq h h1))
(if tx1 (setq tx (/ 1 tx1)))
(if ty1 (setq ty (/ 1 ty1)))
; Ket thuc thiet lap
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0)); Lay toa do diem tim
;; Chon text
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq sst1 (entget ed)) ;;hien thi record doi tuong
(setq sst (cdr (assoc 1 sst1))) ;;Lay noi dung text:ma DXF=1
(setq sta1 (atof sst))
;; ket thuc chon
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
(While (/= pt nil)
(command "osmode" 0)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq x1 (car pt) y1 (cadr pt)); Lay toa do diem chen
(setq y (- sta1 (- y1 y0)))
(setq x (- x1 x0))
;(setvar "DIMZIN" 0)
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
((< y 0) (setq y (rtos (* y ty) 2 2)))
((= y 0) (setq y "%%p0.00")))
(progn
(if (AND (>= ang 0) (< ang (/ pi 2)))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (/ pi 2)) (< ang pi))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
);progn
(command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
"text" "m" pt6 h 0 y
"text" "m" pt7 h 0 x)
;(setvar "DIMZIN" DZ)
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
);progn
);while
;;;;;;;;;;;
(princ)
);end
Sau khi em thực hiện lệnh bị lỗi :
Command: cd
Cao text < 1.00 >:
Ty le theo phuong X <1/1.00>: 1/
Ty le theo phuong Y <1/0.10>: 1/
Diem tim TN tu nhien
Chon cao do tim: ; error: bad argument type: lentityp ((-1 . <Entity name:
7eff2c40>) (0 . "TEXT") (330 . <Entity name: 7ed16cf8>) (5 . "9CB8") (100 .
"AcDbEntity") (67 . 0) (410 . "Model") (8 . "ENTTDTUNHIEN") (62 . 0) (100 .
"AcDbText") (10 164.527 -129.537 0.0) (40 . 2.0) (1 . "6.37") (50 . 1.5708) (41
. 1.0) (51 . 0.0) (7 . "ChuSo") (71 . 0) (72 . 2) (11 163.527 -124.099 0.0)
(210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 2))

Lisp cd có tác dụng ghi cao độ của 1 điểm chưa biết dựa vào điểm gốc đã biết cao độ.
Mong các bác xem giúp.Hi vọng em có thể hoàn thành nó !
Cám ơn sự quan tâm !

Bạn code bị dư nên lỗi, sửa như thế này thì hết lỗi đó, và còn lỗi nào kế tiếp (nếu có) thì bạn tự sửa cho mau lên tay.
Sửa 2 dòng dưới đây
(setq sst1 (entget ed)) ;;hien thi record doi tuong
(setq sst (cdr (assoc 1 sst1))) ;;Lay noi dung text:ma DXF=1

Thành 1 dòng duy nhất
(setq sst (cdr (assoc 1 ed))) ;;Lay noi dung text:ma DXF=1
Thân thương!
  • 1

* 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.


#3 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 07 August 2011 - 08:03 AM

;; Chon text
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq sst1 (entget ed)) ;;hien thi record doi tuong

Bạn bị entget 2 lần, lần đầu thì ok vì đối số là ename của đối tượng (car (entsel)) => ed đã là record của đối tượng rồi, lần thứ 2 lấy entget của record chắc chắn báo lỗi rồi
=>
Bạn Bỏ 1 trong 2 thằng entget đi thôi :)
  • 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


#4 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 07 August 2011 - 09:43 AM

Lisp này chinh xác là của mình viết mà. sao lại có ";; Viet ham moi by Son Pro"
  • 1

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


#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 August 2011 - 10:03 AM

Lisp này chinh xác là của mình viết mà. sao lại có ";; Viet ham moi by Son Pro"

Nguyenngocson có nói trong nhập đề "Em viết lisp cd (tham khảo code có sẵn và chỉnh sửa)" nhưng trong file lại ghi "Viet ham moi by Son Pro" nên chưa được Pro lắm. Tuy nhiên, có thể du di được. Nhân sáng nay đọc 2 bài liên quan tới bản quyền, xin góp ý với CADViet:
CADViet đã có 2 dòng đầu mỗi khi tải lsp từ CADViet về, rất hay, nhưng nếu thêm 1 dòng "Copyright by XYZ" nữa thì càng hay hơn, bởi tránh bớt sự cầm nhầm. (Trước đây tôi tải lsp về, quên ghi tên tác giả nên mỗi khi share lại cho mọi người hoặc bổ sung rồi share thì cứ áy náy chỗ này mãi).
Thân thương!
  • 1

* 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.


#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 07 August 2011 - 10:10 AM

Lisp này chinh xác là của mình viết mà. sao lại có ";; Viet ham moi by Son Pro"

:D thế bạn ấy mới bẩu là "tham khảo có chỉnh sửa" còn gì, mặc dù đoạn chỉnh sửa không biết là bao nhiêu % ^^ (diễn đàn ít emotion cười quá, hok lăn lộn hoặc đập tay xuống đất được ^^). Thôi thì cũng là điều tất cả mọi người nên suy nghĩ. Ở các diễn đàn Tây (trừ Tàu) như thế này dễ bị tẩy chay lắm ^^.
E vẫn còn nhớ câu chuyện dùng hàm Listbox show của LeeMac, mới xóa đi cái ngày tháng viết hàm + ghi chú các đối số (vẫn để nguyên tên tác giả) mà còn bị cháo hành giềng tỏi, xin lỗi đến khổ, mà TA thì dốt chứ có phải giỏi như người ta đâu, nói mãi không diễn tả được câu "Em không cố ý" :lol:
  • 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


#7 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 07 August 2011 - 10:31 AM

Lisp này chinh xác là của mình viết mà. sao lại có ";; Viet ham moi by Son Pro"

Rất xin lỗi 'Thaistreetz' về việc này. Vì em nói là tham khảo lisp và chỉnh sửa nhưng cái file lisp em lấy sửa không thấy có thông tin gì chắc người trước đó đã xóa hết thông tin về tác giả? :D. Thú thực là em mới code lisp và tối qua code khá muộn nên không để ý lắm, đôi khi Viet ham moi by Son Pro với 1 người mới code cho có hứng thú. Quả thật lisp hay thật, và cái lisp gốc rất hay vì cv nên mình sửa cho đơn giản và phù hợp với công việc!
Nhân tiện nếu mình muốn thêm hàm con để thiết lập các thông số nhập vào như h, tx, ty để chương trình giảm thiểu số lần nhập thì sử lý thế nào nhỉ ?
Rất cám ơn mọi người.
Thân !
  • 1

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 August 2011 - 11:06 AM

Rất xin lỗi 'Thaistreetz' về việc này. Vì em nói là tham khảo lisp và chỉnh sửa nhưng cái file lisp em lấy sửa không thấy có thông tin gì chắc người trước đó đã xóa hết thông tin về tác giả? :D. Thú thực là em mới code lisp và tối qua code khá muộn nên không để ý lắm, đôi khi Viet ham moi by Son Pro với 1 người mới code cho có hứng thú. Quả thật lisp hay thật, và cái lisp gốc rất hay vì cv nên mình sửa cho đơn giản và phù hợp với công việc!
Nhân tiện nếu mình muốn thêm hàm con để thiết lập các thông số nhập vào như h, tx, ty để chương trình giảm thiểu số lần nhập thì sử lý thế nào nhỉ ?
Rất cám ơn mọi người.
Thân !

Gợi ý nhé, bạn tự làm cho mau lên tay:
1). Tạo hàm con chứa 3 thằng cần nhập h, tx, ty.
2). Thêm một dòng nhập hỏi bạn có muốn thay đổi các thông số hay không, dòng này có 2 tuỳ chọn Y và N.
3). Nếu Y thì chạy tiếp hàm con, nếu N thì bỏ qua khỏi nhập lại.
Hy vọng bạn làm được.
Thân thương!
  • 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.


#9 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 07 August 2011 - 11:39 AM

Gợi ý nhé, bạn tự làm cho mau lên tay:
1). Tạo hàm con chứa 3 thằng cần nhập h, tx, ty.
2). Thêm một dòng nhập hỏi bạn có muốn thay đổi các thông số hay không, dòng này có 2 tuỳ chọn Y và N.
3). Nếu Y thì chạy tiếp hàm con, nếu N thì bỏ qua khỏi nhập lại.
Hy vọng bạn làm được.
Thân thương!

Mình đã sửa hàm con:
  ; Thiet lap cac thong so
(defun tso (h tx ty)
(if (not h) (setq h 1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
(if h1 (setq h h1))
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
)
; Ket thuc khoi tao
(defun c:cdtn()
(tso h tx ty); Goi ham
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0)); Lay toa do diem tim
;; Chon text
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq sst (cdr (assoc 1 ed))) ;;Lay noi dung text:ma DXF=1
(setq sta1 (atof sst))
;; ket thuc chon
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
(While (/= pt nil)
(command "osmode" 0)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq x1 (car pt) y1 (cadr pt)); Lay toa do diem chen
(setq dty (- y1 y0))
(setq dtx (- x1 x0))
(setq y (+ sta1 (* dty ty)))
(setq x (* dtx tx))
;(setvar "DIMZIN" 0)
(cond ((> x 0) (setq x (strcat "" (rtos x 2 2))))
((< x 0) (setq x (rtos (abs x) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos y 2 2))))
((< y 0) (setq y (rtos y 2 2)))
((= y 0) (setq y "%%p0.00")))
(progn
(if (AND (>= ang 0) (< ang (/ pi 2)))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (/ pi 2)) (< ang pi))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
);progn
(command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
"text" "m" pt6 h 0 y
"text" "m" pt7 h 0 x)
;(setvar "DIMZIN" DZ)
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
);progn
);while
;;;;;;;;;;;
(princ)
);end
Nhưng khi chạy lisp báo lỗi ??? Cao text < 1.00 >:
Ty le theo phuong Y <1/1.00>: 1/10
Diem tim TN tu nhien
Chon cao do tim: osmode
Enter new value for OSMODE <15359>: 15359
Command:
Diem chen: osmode
Enter new value for OSMODE <15359>: 0
Command:
Phia chen: <Ortho off> ; error: bad argument type: numberp: nil

Hình như là khi khai báo tx trong hàm con.Khi load nó vào trong lisp không nhận ?
Mong bạn check giùm !
  • 0

#10 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 07 August 2011 - 11:50 AM

Bạn chú ý về biến cục bộ và biến toàn cục :) Dòng (/ h tx ty) sẽ xóa (set nil) h, tx, ty của bạn sau khi thực hiện hàm con. Thành ra hàm con của bạn sẽ không còn ý nghĩa gì nữa
  • 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


#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 August 2011 - 12:21 PM

Mình đã sửa hàm con:

  ; Thiet lap cac thong so
(defun tso (h tx ty)
(if (not h) (setq h 1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
(if h1 (setq h h1))
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
)
; Ket thuc khoi tao
(defun c:cdtn()
(tso h tx ty); Goi ham
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0)); Lay toa do diem tim
;; Chon text
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq sst (cdr (assoc 1 ed))) ;;Lay noi dung text:ma DXF=1
(setq sta1 (atof sst))
;; ket thuc chon
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
(While (/= pt nil)
(command "osmode" 0)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq x1 (car pt) y1 (cadr pt)); Lay toa do diem chen
(setq dty (- y1 y0))
(setq dtx (- x1 x0))
(setq y (+ sta1 (* dty ty)))
(setq x (* dtx tx))
;(setvar "DIMZIN" 0)
(cond ((> x 0) (setq x (strcat "" (rtos x 2 2))))
((< x 0) (setq x (rtos (abs x) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos y 2 2))))
((< y 0) (setq y (rtos y 2 2)))
((= y 0) (setq y "%%p0.00")))
(progn
(if (AND (>= ang 0) (< ang (/ pi 2)))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (/ pi 2)) (< ang pi))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
);progn
(command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
"text" "m" pt6 h 0 y
"text" "m" pt7 h 0 x)
;(setvar "DIMZIN" DZ)
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
);progn
);while
;;;;;;;;;;;
(princ)
);end
Nhưng khi chạy lisp báo lỗi ??? Cao text < 1.00 >:
Ty le theo phuong Y <1/1.00>: 1/10
Diem tim TN tu nhien
Chon cao do tim: osmode
Enter new value for OSMODE <15359>: 15359
Command:
Diem chen: osmode
Enter new value for OSMODE <15359>: 0
Command:
Phia chen: <Ortho off> ; error: bad argument type: numberp: nil

Hình như là khi khai báo tx trong hàm con.Khi load nó vào trong lisp không nhận ?
Mong bạn check giùm !

1). Bạn dùng hàm con chỉ 1 lần thì viết nó làm chi cho nó mệt, vì trong lsp không thấy sử dụng lại nó nếu muốn.
2). Có vài sai sót nữa.
Bạn thử dùng cái này xem sao (xin lỗi Bác Thaistreet)

(defun tso ()
(if (not h) (setq h 1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
(if h1 (setq h h1))
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
)
; Ket thuc khoi tao
(defun c:cdtn()
(tso); Goi ham
;(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(osnap (setq pt0 (getpoint "Diem tim TN tu nhien")) "end") (print)
(setq x0 (car pt0) y0 (cadr pt0)); Lay toa do diem tim
;; Chon text
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq sst (cdr (assoc 1 ed))) ;;Lay noi dung text:ma DXF=1
(setq sta1 (atof sst))
;; ket thuc chon
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
(While (/= pt nil)
(command "osmode" 0)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq x1 (car pt) y1 (cadr pt)); Lay toa do diem chen
(setq dty (- y1 y0))
(setq dtx (- x1 x0))
(setq y (+ sta1 (* dty ty)))
(setq x (* dtx tx))
;(setvar "DIMZIN" 0)
(cond ((> x 0) (setq x (strcat "" (rtos x 2 2))))
((< x 0) (setq x (rtos (abs x) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos y 2 2))))
((< y 0) (setq y (rtos y 2 2)))
((= y 0) (setq y "%%p0.00")))
(progn
(if (AND (>= ang 0) (< ang (/ pi 2)))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (/ pi 2)) (< ang pi))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
);progn
(command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
"text" "m" pt6 h 0 y
"text" "m" pt7 h 0 x)
;(setvar "DIMZIN" DZ)
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
);progn
);while
;;;;;;;;;;;
(princ)
);end

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


#12 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 07 August 2011 - 12:40 PM

@Bác ĐVH :e cũng có vài góp ý :
- Trong hàm con (tso) nên khử các biến tx1,ty1,h1. Hàm chính cũng thế ạ ^^
- Vì Hàm con là setting nên nên cho phép người dùng gọi lại nó trong mỗi bước input , kiểu như
(initget "S")(setq ed (car (entsel "\nChon cao do tim hoac nhan S de vao Setting: ")))(if (ed = "S") => (tso))
  • 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


#13 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 07 August 2011 - 01:21 PM

- Trong hàm con (tso) nên khử các biến tx1,ty1,h1. Hàm chính cũng thế ạ ^^
- Vì Hàm con là setting nên nên cho phép người dùng gọi lại nó trong mỗi bước input , kiểu như
(initget "S")(setq ed (car (entsel "\nChon cao do tim hoac nhan S de vao Setting: ")))(if (ed = "S") => (tso))

Mình code thử :
  ; Thiet lap cac thong so
(defun tso ()
(if (not h) (setq h 0.4))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
(if h1 (setq h h1))
(if tx1 (setq tx (/ 1 tx1)))
(if ty1 (setq ty (/ 1 ty1)))
)
; Ket thuc khoi tao
(defun c:cdtn()
;;;;
(prompt "\n Thiet lap thong so ban dau:")
(initget 1 "YES NO")
(setq caidat (getkword (strcat "YES/NO/<" caidat "> :")))
(cond ((= caidat "Y") (tso))
((= caidat "N"))
)
Đoạn này để lựa chọn như sau:Nếu chọn Y sẽ mặc định thông số ban đầu. Nếu N sẽ thiết lập lại. Không hiểu sao code lại lỗi. Em check mà không được?
Các bạn góp ý giùm. Thân !
  • 0

#14 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 August 2011 - 02:00 PM

@Bác ĐVH :e cũng có vài góp ý :
- Trong hàm con (tso) nên khử các biến tx1,ty1,h1. Hàm chính cũng thế ạ ^^
- Vì Hàm con là setting nên nên cho phép người dùng gọi lại nó trong mỗi bước input , kiểu như
(initget "S")(setq ed (car (entsel "\nChon cao do tim hoac nhan S de vao Setting: ")))(if (ed = "S") => (tso))

1). Tôi chỉ giải đáp thằng (tso) cho bạn NNS. Chứ khử biến thì còn hằng hà sa số biến phải khử nữa.
2). Cái này tôi đã hướng dẫn NNS, sau đó mới hỏi lại để NNS tự làm. Có lẽ NNS mới làm đến đó thì bị lỗi nên hỏi cái đã.
Nói thêm: thôi để NNS tự mày mò thêm thì hay hơn. Vả lại, cứ đem ra sửa hoài chắc đụng đến cả Bác Thaistreetz.
Tôi dừng ở đây.
Thânthương!
  • 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.


#15 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 07 August 2011 - 03:13 PM

Cũng đâu đến mức là động chạm đến ai? Vì mình mới học nên hay hỏi vậy thôi.
Mình muốn biết cách tạo hàm con để sau này sử dụng cho các lisp khác nữa, không đơn thuần chỉ là cho riêng lisp này.
Nhưng nếu gọi hàm (tso ) thì sau mỗi lần thực hiện lệnh nó luôn bắt thiết lập lại? Có cách nào mình thiết lập hàm tso trước, sau đó mới thực hiện lệnh, nếu N không nhập lại, Y thì có. Mình đã search trên diễn đàn nhưng chưa được ?
Thân !
  • 0

#16 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 August 2011 - 04:13 PM

Cũng đâu đến mức là động chạm đến ai? Vì mình mới học nên hay hỏi vậy thôi.
Mình muốn biết cách tạo hàm con để sau này sử dụng cho các lisp khác nữa, không đơn thuần chỉ là cho riêng lisp này.
Nhưng nếu gọi hàm (tso ) thì sau mỗi lần thực hiện lệnh nó luôn bắt thiết lập lại? Có cách nào mình thiết lập hàm tso trước, sau đó mới thực hiện lệnh, nếu N không nhập lại, Y thì có. Mình đã search trên diễn đàn nhưng chưa được ?
Thân !

Thôi thì, code cho Bạn vậy. Do code hơi vội (đang hơi bận), nếu có lỗi tớ sẽ sửa lại.
PS: sửa đổi lại chút xíu luc 5h36'. Bạn xem ưng bụng không?

(defun tso ()
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))))
(defun c:cdtn()
(if (not h) (setq h 1))
(if (not tx) (setq tx 1))
(if (not ty) (setq ty 1))
(initget "Y N")
(setq caidat (getkword "Ban co muon dat lai cac gia tri h-tx-ty khong? Y<N>: "))
(cond ((= caidat "Y") (tso))
((or (= caidat nil) (= caidat "N")) T))
(if h1 (setq h h1))
(if tx1 (setq tx (/ 1 tx1)))
(if ty1 (setq ty (/ 1 ty1)))
(osnap (setq pt0 (getpoint "Diem tim TN tu nhien")) "end") (print)
(setq x0 (car pt0) y0 (cadr pt0)); Lay toa do diem tim
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq sst (cdr (assoc 1 ed))) ;;Lay noi dung text:ma DXF=1
(setq sta1 (atof sst))
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
(While (/= pt nil)
(command "osmode" 0)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq x1 (car pt) y1 (cadr pt)); Lay toa do diem chen
(setq dty (- y1 y0))
(setq dtx (- x1 x0))
(setq y (+ sta1 (* dty ty)))
(setq x (* dtx tx))
;(setvar "DIMZIN" 0)
(cond ((> x 0) (setq x (strcat "" (rtos x 2 2))))
((< x 0) (setq x (rtos (abs x) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos y 2 2))))
((< y 0) (setq y (rtos y 2 2)))
((= y 0) (setq y "%%p0.00")))
(progn
(if (AND (>= ang 0) (< ang (/ pi 2)))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (/ pi 2)) (< ang pi))
(setq pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
(setq pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
);progn
(command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
"text" "m" pt6 h 0 y
"text" "m" pt7 h 0 x)
;(setvar "DIMZIN" DZ)
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
);progn
);while
;;;;;;;;;;;
(princ)
);end

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

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 07 August 2011 - 04:14 PM

:D thế bạn ấy mới bẩu là "tham khảo có chỉnh sửa" còn gì, mặc dù đoạn chỉnh sửa không biết là bao nhiêu % ^^ (diễn đàn ít emotion cười quá, hok lăn lộn hoặc đập tay xuống đất được ^^). Thôi thì cũng là điều tất cả mọi người nên suy nghĩ. Ở các diễn đàn Tây (trừ Tàu) như thế này dễ bị tẩy chay lắm ^^.
E vẫn còn nhớ câu chuyện dùng hàm Listbox show của LeeMac, mới xóa đi cái ngày tháng viết hàm + ghi chú các đối số (vẫn để nguyên tên tác giả) mà còn bị cháo hành giềng tỏi, xin lỗi đến khổ, mà TA thì dốt chứ có phải giỏi như người ta đâu, nói mãi không diễn tả được câu "Em không cố ý" :lol:

Hình đã gửiGà vãi Hình đã gửi
Hình đã gửi
  • -1

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


#18 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 07 August 2011 - 04:33 PM

Mình code thử :
(setq caidat (getkword (strcat "YES/NO/<" caidat "> :")))
Đoạn này để lựa chọn như sau:Nếu chọn Y sẽ mặc định thông số ban đầu. Nếu N sẽ thiết lập lại. Không hiểu sao code lại lỗi. Em check mà không được?
Các bạn góp ý giùm. Thân !

Đoạn màu đỏ sẽ khiến lisp crash, vì bạn nhớ khi mới chạy đến dòng đó, caidat vẫn chưa nhận giá trị nào, (caidat = nil), mà hàm Strcat thì không chơi với Nil
Để khắc phục bạn có thể phải thiết lập giá trị ban đầu cho nó bằng dòng này :

(or caidat (setq caidat "N"))
(setq caidat (getkword (strcat "YES/NO/<" caidat "> :")))


Hoặc bỏ chữ caidat màu đỏ đi.


Hình đã gửiGà vãi Hình đã gửi
Hình đã gửi

Không chơi ém từ ngoài vào chứ :angry2:
Hình đã gửi
  • 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


#19 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 August 2011 - 05:44 PM

Cũng đâu đến mức là động chạm đến ai? Vì mình mới học nên hay hỏi vậy thôi.
Mình muốn biết cách tạo hàm con để sau này sử dụng cho các lisp khác nữa, không đơn thuần chỉ là cho riêng lisp này.
Nhưng nếu gọi hàm (tso ) thì sau mỗi lần thực hiện lệnh nó luôn bắt thiết lập lại? Có cách nào mình thiết lập hàm tso trước, sau đó mới thực hiện lệnh, nếu N không nhập lại, Y thì có. Mình đã search trên diễn đàn nhưng chưa được ?
Thân !

Đã hiệu chỉnh cho Bạn ở #16, Bạn xem có ưng cái bụng chưa nhé!
Thân thương!
  • 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 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 07 August 2011 - 10:20 PM

Đã hiệu chỉnh cho Bạn ở #16, Bạn xem có ưng cái bụng chưa nhé!
Thân thương!

Cám ơn mọi người rất nhiều.Đã giúp đỡ em code khi cần :).
Nhân tiện cho em hỏi ?
Khai báo biến toàn cục cho lisp như nào? Với ví dụ trên của em: Nếu trước khi thực hiện lisp cdtn, em muốn có muốn một lisp ts để cài đặt các thông số ban đầu khi chạy lisp.Và các biến này sẽ tự nhận vào lisp cdtn?
Thân !
  • 0