Đến nội dung


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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2851 replies to this topic

#1441 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 16 January 2013 - 04:35 PM

Các dòng (command ".text"...) của bạn có thể bị lỗi nếu height của text khác 0. Có 2 trường hợp để dùng (command ".text"...):
- Khi height = 0: của bạn đúng.
- Khi height /= 0: của bạn sai. Và phải sửa là:
(command ".text" pt 0 "ABC")
  • 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.


#1442 Chiron

Chiron

    biết dimradius

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

Đã gửi 16 January 2013 - 04:54 PM

Cảm ơn Bác DVH. Bác có thể giải thích rõ hơn không? Chiron test lại:

.text
Current text style: "Standard" Text height: 500.000 Annotative: No
Specify start point of text or [Justify/Style]:
Specify height <500.000>:
Specify rotation angle of text <0.00>: 0
Enter text: ABC
Lần theo từng dòng command thì: nhập ".text" > Chọn điểm chèn > Nhập chiều cao text > Nhập góc quay > Nhập nội dung. Hình như dòng command của Bác bị thiếu 1 thông số?
  • 0

#1443 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 16 January 2013 - 05:12 PM

Bạn chú ý điều này: có 2 cách đặt textstyle: height=0 và height khác 0. Bạn thử đặt bằng 2 cách, sau đó thử gọi lệnh text ứng với từng cách thì sẽ thấy ngay thôi.
  • 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.


#1444 Chiron

Chiron

    biết dimradius

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

Đã gửi 17 January 2013 - 08:34 AM

Đã thử lại và đã hiểu ý bác DVH nhưng trong file CAD Chiron upload không có qui định chiều cao text mà? Khi chương trình chạy nó chèn text bị trùng nhau và theo justify là Top Left chứ không phải Left (với CAD cũ) hoặc Start (với CAD mới). Lạ là khi double click vào text đó thì text nhảy lên trên (??)
P/S: Hình như lỗi chỉ xảy ra khi dùng font shx? Vì khi đổi text style sang font TrueType thì chạy rất tốt.
  • 0

#1445 Chiron

Chiron

    biết dimradius

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

Đã gửi 17 January 2013 - 01:29 PM

Đành phải dùng entmake vậy.
p/s: Đã tìm thấy hàm entmake của bác Thaistreetz
  • 0

#1446 Chiron

Chiron

    biết dimradius

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

Đã gửi 18 January 2013 - 12:37 AM

Các bác cho hỏi có cách nào để lấy text width của text style hiện tại không? Khi dùng entmake thì text chèn vào không quan tâm đến text width.
  • 0

#1447 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 January 2013 - 06:30 AM

Các bác cho hỏi có cách nào để lấy text width của text style hiện tại không? Khi dùng entmake thì text chèn vào không quan tâm đến text width.

Bạn sử dụng hàm tblsearch
  • 1

#1448 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 18 January 2013 - 08:40 AM

Lấy Width_Factor của TextStyle hiện hành :
(cdr (assoc 41 (tblsearch "Style" (getvar "textstyle"))))
  • 1

#1449 Chiron

Chiron

    biết dimradius

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

Đã gửi 18 January 2013 - 09:27 AM

Cảm ơn các Bác. Code đã chạy ngon lành :)

(defun make_text (txtpt txtval)
(entmake (list '(0 . "TEXT")
(cons 10 txtpt)
(cons 40 (getvar "TEXTSIZE"))
(cons 41 (cdr (assoc 41 (tblsearch "Style" (getvar "textstyle")))))
(cons 1 txtval)
'(50 . 0.0)
(cons 7 (getvar "TEXTSTYLE"))
'(71 . 0)
'(72 . 0)
'(73 . 0)
(cons 11 txtpt)
)
)
)

  • 1

#1450 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 January 2013 - 09:41 AM

Mình tưởng 7 và 41 lấy theo current chứ nhỉ ^^ (un-tested)
Mà ai lại (cons 41 (cdr (assoc 41 ....) thế kia Chiron ơi, giống bác H nói là tụt ra rùi lại mặc vô đó ^^
  • 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


#1451 Chiron

Chiron

    biết dimradius

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

Đã gửi 18 January 2013 - 09:56 AM

Mình tưởng 7 và 41 lấy theo current chứ nhỉ ^^ (un-tested)
Mà ai lại (cons 41 (cdr (assoc 41 ....) thế kia Chiron ơi, giống bác H nói là tụt ra rùi lại mặc vô đó ^^

hahaha... Đang tập viết lisp từ từ, nên cứ thấy chạy là copy quăng vào thôi. Cám ơn ketxu đã chỉ. Để sửa lại chút xíu.
Không hiểu sao đoạn code trên test riêng thì chạy rất tốt, nhưng khi áp vào chương trình chính thì text lại bị hiện giống top left & thêm 1 khoảng trắng ở đầu. Double click vào text đó thì trở về justify Left như mong muốn.
  • 0

#1452 Chiron

Chiron

    biết dimradius

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

Đã gửi 18 January 2013 - 10:24 AM

Thằng 41 thì bỏ cons & cdr được nhưng còn thằng 7 thì không được ketxu ơi.
(tblsearch "Style" (getvar "textstyle")) sẽ trả về (2 . "SIMPLEX") trong khi header của text lại là 7.
  • 0

#1453 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 18 January 2013 - 10:41 AM

Thằng 41 thì bỏ cons & cdr được nhưng còn thằng 7 thì không được ketxu ơi.
(tblsearch "Style" (getvar "textstyle")) sẽ trả về (2 . "SIMPLEX") trong khi header của text lại là 7.


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Tao moi text
;;;Cu phap su dung (duy:t_text diemchen docao gocquay canhle noidung textstyle layer color)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:t_text (d c g cl nd k la co / d c g cl nd k la co)
(cond
((= cl "trai") (setq kcl 0))
((= cl "phai") (setq kcl 2))
((= cl "giua") (setq kcl 1))
)
(cond ((= g "") (setq g 0) ))
(cond ((= cl "") (setq kcl 0) ))
(setq g (duy:s_do>radian g))
(cond ((= k "") (setq k (getvar "TEXTSTYLE")) ))
(cond ((= la "") (setq la (getvar "Clayer")) ))
(cond ((= co "") (setq co 256) ))
(entmake (list (cons 0 "TEXT")(cons 10 d)(cons 11 d)(cons 40 c)(cons 50 g)(cons 72 kcl)(cons 1 nd)(cons 7 k)(cons 8 la)(cons 62 co)))
(princ)
)

  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1454 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 January 2013 - 11:21 AM

Ý mình nói là k cần cho vào ý. Những giá trị nào thuộc current format nếu không nhắc tới thì mặc định lấy giá trị hiện hành. Bạn test thử xem, mình không ngồi máy ^^
  • 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


#1455 Chiron

Chiron

    biết dimradius

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

Đã gửi 18 January 2013 - 01:17 PM

Những giá trị nào thuộc current format nếu không nhắc tới thì mặc định lấy giá trị hiện hành.

Mình cũng nghĩ vậy. Oái oăm 1 cái là nó lại dùng text style Standard, cũng có lúc nó lấy cái hiện hành. Thế nên mới "ép" nó. Cái text width cũng vậy.
  • 0

#1456 Chiron

Chiron

    biết dimradius

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

Đã gửi 18 January 2013 - 02:03 PM

Cám ơn bác Duy đã cho cái hàm.
Các bác có thể giải thích dùm Chiron cái vụ này không?
Hình đã gửi
Point màu đỏ là điểm chèn. 3 dòng text bên trái là khi dùng hàm entmake trong chương trình; 3 dòng bên trái là khi test riêng hàm entmake.
Hình đã gửi
Khi double click vào text thì nó trở về vị trí đúng của nó.
  • 0

#1457 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 18 January 2013 - 02:22 PM

Khám toàn thân đi. Khám cái tay ko ra bệnh được!
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1458 Chiron

Chiron

    biết dimradius

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

Đã gửi 18 January 2013 - 03:32 PM

Nó đây bác:

(defun make_text (txt_pt txt_val)
(entmake (list '(0 . "TEXT")
(cons 8 (getvar "CLAYER"))
(cons 10 txt_pt)
(cons 40 (getvar "TEXTSIZE"))
(cons 1 txt_val)
'(50 . 0.0)
(assoc 41 (tblsearch "Style" (getvar "textstyle")))
'(51 . 0.0)
(cons 7 (getvar "TEXTSTYLE"))
'(71 . 0)
'(72 . 0)
(cons 11 txt_pt)
'(73 . 0)
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:test (/ *error* oldcmd tot_len TL Depth1 Len Hcc inspt txtdis)
(defun *error* (msg) (setvar "CMDECHO" oldcmd) (princ))
(setq oldcmd (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setvar "LUNITS" 2)
(setvar "LUPREC" 4)
(setq TL 0.0
Depth1 1.07
Dia 150.0
tot_len 10.0
Hcc (/ (+ 1 (fix tot_len)) 80)
IL1 (- TL Depth1)
IL2 (- IL1 Hcc)
Depth2 (+ Depth1 Hcc)
inspt (getpoint "\nChon diem chen text: ")
txtdis (* 1.5 (getvar "TEXTSIZE"))
)
(make_text inspt (strcat "\nTL " (rtos TL 2 2)))
(make_text (list (car inspt) (- (cadr inspt) txtdis)) (strcat "\nIL " (rtos IL2 2 2)))
(make_text (list (car inspt) (- (cadr inspt) (* txtdis 2.0))) (strcat "\n" (rtos Depth2 2 2) " (D)"))

(setvar "CMDECHO" oldcmd)
(princ)
)
Mình cắt bỏ các bước trung gian đi để dễ bắt bệnh, chỉ gửi cái khung xương lên. Mong các bác xem giúp.
  • 0

#1459 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 18 January 2013 - 04:09 PM

Mình chạy thử lệnh test thì điểm chèn text vẫn đúng là góc dưới bên trái.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1460 Chiron

Chiron

    biết dimradius

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

Đã gửi 18 January 2013 - 04:26 PM

Mình chạy thử lệnh test thì điểm chèn text vẫn đúng là góc dưới bên trái.

Xin lỗi bác. Quên nói với bác là nó bị lỗi trong file test.dwg đã post #1440. Bác download ở đây. File này không phải do mình tạo ra nên không biết bị gì.
p/s: Bi lỗi với font shx.
  • 0