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.
Jin Yong

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

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

Chiron    91

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.

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
Chiron    91

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.

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
duy782006    1.377

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

  • 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
ketxu    2.653

Ý 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 ^^

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
Chiron    91

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.

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
Chiron    91

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?

102896_capture_3.png

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.

102896_capture_4.png

Khi double click vào text thì nó trở về vị trí đúng của 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
Chiron    91

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.

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
Chiron    91

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.

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

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.

Ấy là do bạn viết chuỗi có "\n" ấy mà

Bỏ "\n" là xong

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

  • 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
Chiron    91

Cảm ơn Tue_NV. Code đã hết lỗi, nhưng mình vẫn thắc mắc tại sao với font truetype lại không xảy ra tình trạng này 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
Tue_NV    3.841

Cảm ơn Tue_NV. Code đã hết lỗi, nhưng mình vẫn thắc mắc tại sao với font truetype lại không xảy ra tình trạng này nhỉ?

Với "\nABC" thì với font shx thì xem như chữ "ABC" được viết xuống dòng. Ứng với điểm chèn pt trong hàm entmake

Khi ed vào sửa thì text tự update về vị trí điểm chèn pt. Đó là lý do mà bạn thấy nó nhảy

Còn với True Font thì "\n" xem như là khoảng trắng nên không xảy ra việc gì

 

Mình chỉ nêu ra lý do thôi. Còn hỏi tại sao lại bị như vậy chắc hỏi Autodesk...

  • 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
Doan Van Ha    2.680

Khi sử dụng hàm Grread, giá trị trả về khi tick vào 1 nút trên toolbar có thể khác nhau, tùy thuộc hệ điều hành.

Ví dụ: khi dùng hàm (grread nil) và tick vào nút osnap "Endpoint" thì kết quả trả về:

Với WinXP: (11 1209)

Với Win7: (11 1210)

Với Win8: chưa cài nên chưa thử.

Hỏi: có ai biết quy luật trả về của các số 1209, 1210... theo Win tương ứng không? Thanks!

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

Khi sử dụng hàm Grread, giá trị trả về khi tick vào 1 nút trên toolbar có thể khác nhau, tùy thuộc hệ điều hành.

Ví dụ: khi dùng hàm (grread nil) và tick vào nút osnap "Endpoint" thì kết quả trả về:

Với WinXP: (11 1209)

Với Win7: (11 1210)

Với Win8: chưa cài nên chưa thử.

Hỏi: có ai biết quy luật trả về của các số 1209, 1210... theo Win tương ứng không? Thanks!

Của Tue_NV thì trả về : (11 1240) (với WinXP)

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

Chào mọi người mình có 1 yêu cầu nhờ mọi người giúp đỡ

Mình viết lisp vẽ các pline được rồi bây giờ mình muốn sử dụng pline đó để offset thành nhiều pline mới. mình sử dụng lệnh offset nhưng không được nhờ mọi người giúp đỡ .

lệnh minh viết thế này

(commmand "offset" 2.5 "" "last" "")

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

Chào mọi người mình có 1 yêu cầu nhờ mọi người giúp đỡ

Mình viết lisp vẽ các pline được rồi bây giờ mình muốn sử dụng pline đó để offset thành nhiều pline mới. mình sử dụng lệnh offset nhưng không được nhờ mọi người giúp đỡ .

lệnh minh viết thế này

(commmand "offset" 2.5 "" "last" "")

(vla-offset (vlax-ename->vla-object (entlast)) 2.5)

  • 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
ketxu    2.653

@bác H : theo Ket thì khác nhau tùy thuộc index của Toolbar Item bác click, và vì thế đương nhiên ở mỗi máy khả năng khác nhau là rất cao ^^

@HN : sai đối số trong lệnh Offset rồi bạn ơi

  • 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
Doan Van Ha    2.680

@bác H : theo Ket thì khác nhau tùy thuộc index của Toolbar Item bác click, và vì thế đương nhiên ở mỗi máy khả năng khác nhau là rất cao ^^

Thế này là toi rồi! Đang dùng grread với osnap và pan, mà nó khác nhau tùy máy là nguy to. Có cách nào tìm ra quy luật theo máy, hoặc có hướng nào khắc phục không mọi người ơ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
ThuyLinh313    146

Chưa bao giờ thử với menu nên mình không rõ, còn với các phím của keyboard thì mình có thể chắc chắn kết quả trả về của grread cũng không ổn định. nó thay đổi tùy theo loại keyboard (phần cứng) chứ không phụ thuộc phần mềm (hệ điều hành). Kinh nghiệm của mình là cố gắng tránh các phím đặc biệt (tab, backspace, các phím shift+... Chỉ sử dụng các phím ký tự thông thường, các phím này trả về kết quả ổn định hơ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
Doan Van Ha    2.680

Chưa bao giờ thử với menu nên mình không rõ, còn với các phím của keyboard thì mình có thể chắc chắn kết quả trả về của grread cũng không ổn định. nó thay đổi tùy theo loại keyboard (phần cứng) chứ không phụ thuộc phần mềm (hệ điều hành). Kinh nghiệm của mình là cố gắng tránh các phím đặc biệt (tab, backspace, các phím shift+... Chỉ sử dụng các phím ký tự thông thường, các phím này trả về kết quả ổn định hơn)

Cám ơn bạn đã quan tâm. Hóa ra bạn cũng đã từng "đụng" thứ này.

Có lẽ nó vừa phụ thuộc hệ điều hành vừa phụ thuộc thiết bị nhập, mình không hiểu lắm, nhưng đây là câu trích trong sách của TS. Nguyễn Hữu Lộc để mọi người tham khảo: "Vì các hệ điều hành nhận giá trị nhập từ các thiết bị nhập theo các cách khác nhau, nên hàm Grread có thể trả về các kết quả không như mong muốn".

Ngặt là chương trình của mình bắt buộc phải dùng Grread + bắt buộc phải Osnap được + bắt buộc phải Zoom được.

Liệu có cách gì để lấy được các giá trị trả về của hàm Grread ứng với mỗi nút trên toolbar mà không dùng Grread không 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
ThuyLinh313    146

Có phải bạn định viết để: khi con trỏ đang ở trạng thái chờ pick điểm, người dùng có thể kick chuột vào toolbar để thay đổi chế độ bắt điểm?

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

Có phải bạn định viết để: khi con trỏ đang ở trạng thái chờ pick điểm, người dùng có thể kick chuột vào toolbar để thay đổi chế độ bắt điểm?

Đúng vậy! Mình giải thích rõ ý đồ của mình để bạn hoặc ai biết được thì giúp:

Chương trình của mình dẫn đến việc vẽ đồ thị của 1 hàm bậc 2. Đồ thị này đi qua 2 điểm: 1 điểm đã pick trước và 1 điểm là tọa độ trả về của hàm grread khi mouse di chuyển trên màn hình. Khi mouse di chuyển thì đồ thị này thay đổi liên tục. Bây giờ, làm sao đang grread mà pick osnap trên toolbar để bắt điểm thứ 2 theo osnap được?

Với lại, mình còn cần thêm: khi đang grread mà tick vào các biểu tượng zoom trên toolbar thì vẫn zoom đượ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

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


×