Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
ketxu

[Thảo luận] Viết lại các hàm Express

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

Cái logand này thì bác nào học IT chắc rành lắm, nó là phép logic AND theo từng bit của số nguyên đó :

 

http://www.gnu.org/s...Operations.html

 

=> nôm na theo đúng nghĩa AND, tức là trả về bit_code xuất hiện trong tất cả các số nguyên, và tất nhiên trả về số nhỏ hơn mọi số trong dãy

( 1 số được quy về tổng các bit-code cơ sở)

 

 

Em thì hay lợi dụng nó để kiểm tra trạng thái theo cách :

(logand số_bit_nguyên_tố số_bit_lấy_về) : nếu trả về số nhỏ => trong số_bit_lấy_về có bitcode số nhỏ.

Trả về 0 hoặc 1 số khác số nhỏ : trong không chứa.

Ví dụ ta biết 13 gồm các bit (1 4 8) : => (logand 1 13) = 1, (logand 4 13) = 4, (logand 8 13) = 8,

(logand 14 13) = 12 [do 14 = 2 + 4 + 8] => and = (4 8) = 12

 

Trường hợp của bác Bình : bitcode 4 trong mã dxf 70 của layer tương ứng với layer bị khóa. Lisp check (logand 4 (mã dxf 70)). Nếu khác 4 => chứng tỏ mã dxf 70 k chứa trạng thái bit 4 => k bị Lock

 

E dốt tin học nên diễn đạt hơi mù mờ theo ý hiểu vậy th, hy vọng có ích

 

P/s : sao bác k đưa bản vẽ để bạn lp_hai test ?

  • 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

P/s : sao bác k đưa bản vẽ để bạn lp_hai test ?

Ko cần test, đúng như bác Bình nói thì cái hàm (cv-ss-visible) của em ko làm mấy thằng phức tạp như Hatch hay MText núp được. Em cũng thử kiểm tra các mã DXF của các thằng này sau khi ẩn đi bằng hàm acet-ss-visible. Thì thấy nó chỉ có cái mã 60 là thay đổi. Ko biết dc?! Chắc trước mắt là dự án treo.... chờ người chỉ điểm thôi. hic :)

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

Cái logand này thì bác nào học IT chắc rành lắm, nó là phép logic AND theo từng bit của số nguyên đó :

 

http://www.gnu.org/s...Operations.html

 

=> nôm na theo đúng nghĩa AND, tức là trả về bit_code xuất hiện trong tất cả các số nguyên, và tất nhiên trả về số nhỏ hơn mọi số trong dãy

( 1 số được quy về tổng các bit-code cơ sở)

 

 

Em thì hay lợi dụng nó để kiểm tra trạng thái theo cách :

(logand số_bit_nguyên_tố số_bit_lấy_về) : nếu trả về số nhỏ => trong số_bit_lấy_về có bitcode số nhỏ.

Trả về 0 hoặc 1 số khác số nhỏ : trong không chứa.

Ví dụ ta biết 13 gồm các bit (1 4 8) : => (logand 1 13) = 1, (logand 4 13) = 4, (logand 8 13) = 8,

(logand 14 13) = 12 [do 14 = 2 + 4 + 8] => and = (4 8) = 12

 

Trường hợp của bác Bình : bitcode 4 trong mã dxf 70 của layer tương ứng với layer bị khóa. Lisp check (logand 4 (mã dxf 70)). Nếu khác 4 => chứng tỏ mã dxf 70 k chứa trạng thái bit 4 => k bị Lock

 

E dốt tin học nên diễn đạt hơi mù mờ theo ý hiểu vậy th, hy vọng có ích

 

P/s : sao bác k đưa bản vẽ để bạn lp_hai test ?

Hề hề hề,

Thanks bác Ketxu về địa chỉ tham khảo. Đọc nó thấy toét cả mắt mà vẫn chửa thấy sáng thêm. Phần giải thích của bác có làm nó lập lòe thêm tí chút nhưng vẫn chưa đủ sáng để cái thằng thong manh về IT như mình hiểu được.

Thôi thì để mình mần mò thêm với cái địa chỉ bác cho xem may ra có được tí Virohto nào không hỉ????

Chúc các bác luôn mạnh khỏe và sáng mắt sáng lòng....

Hề hề hề,...

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

Ko cần test, đúng như bác Bình nói thì cái hàm (cv-ss-visible) của em ko làm mấy thằng phức tạp như Hatch hay MText núp được. Em cũng thử kiểm tra các mã DXF của các thằng này sau khi ẩn đi bằng hàm acet-ss-visible. Thì thấy nó chỉ có cái mã 60 là thay đổi. Ko biết dc?! Chắc trước mắt là dự án treo.... chờ người chỉ điểm thôi. hic :)

 

- Bạn nghĩ có phải entupd các đối tượng phức k?

- Bạn cons mã 60 vào trước list entget data của đối tượng thì liệu nó còn là 1 list entity data hợp lệ ? Bạn thử append ra sau xem sao ?

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

Em cũng bon chen xin góp một hàm: SS-visible, ẩn hiện đối tượng

ss là tập chọn, vis là 0 (hiện dt) hoặc 1 là ẩn dt

(defun CV:ss-visible(ss vis / e n l)
 (setq n (sslength ss))
 (while (setq e (ssname ss (setq n (1- n))))
(setq l (entget e)
  l(vl-remove (assoc 60 l) l)
  l(vl-list* (cons 60 vis) l)
  )
(entmod l)
)
 )

Bạn xem lại kết quả của dòng : (vl-list* (cons 60 vis) l) ?

Nên dùng hàm append

 

 

 

...

Tham khảo một vài hàm ẩn hiện đã có trên diễn đàn thì thấy nó viết hơi loằng ngoằng, có thêm cả bước kiểm tra mã dxf 70 nữa bác ạ.

.....

 

Cái mà dxf 70 mà họ dùng là có ý nghĩa chi, và tại sao họ lại phải dùng nó?????

Mong bác thử lưu ý xem sao.

Hề hề hề,..

Hình như bác nhầm lẫn với việc lọc đối tuợng (dxf 70) khi tham khảo các Lisp khác ?

 

Nhờ các bác test dùm hàm SS-visible này :

(defun CV:ss-visible(ss vis / dxf_60 e edata n)
 (setq n (sslength ss))
 (while (setq e (ssname ss (setq n (1- n))))
(setq edata (entget e))
(setq dxf_60 (assoc 60 edata))
(if vis
 	(if (and dxf_60 (= 1 (cdr dxf_60)))
(entmod (subst (cons 60 0) dxf_60 edata)))
 	(if dxf_60
(if (= 0 (cdr dxf_60))
  (entmod (subst (cons 60 1) dxf_60 edata)) )
(entmod (append edata (list (cons 60 1)))) )  ))
 (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

Bác Bình nói về lisp hide/show object với mã kiểm tra đối tượng có thuộc layer bị khóa k a gia_bach ạ ^^

 

(defun CV:ss-visible (ss vis / n e)
 (setq n (sslength ss))
 (while (setq e (ssname ss (setq n (1- n))))
(if (/= 4 (logand 4 (cdr (assoc 70 (entget(tblobjname "layer" (cdr (assoc 8 (entget e)))))))))
 (vla-put-visible (vlax-ename->vla-object e ) vis)
)
 )
)

  • 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

hàm của bác Ket la chuẩn rồi! hay cho cái hàm vla-put-visible, nhanh gọn mà hiệu quả

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
Bạn xem lại kết quả của dòng : (vl-list* (cons 60 vis) l) ? Nên dùng hàm append Hình như bác nhầm lẫn với việc lọc đối tuợng (dxf 70) khi tham khảo các Lisp khác ? Nhờ các bác test dùm hàm SS-visible này :
 (defun CV:ss-visible(ss vis / dxf_60 e edata n) (setq n (sslength ss)) (while (setq e (ssname ss (setq n (1- n)))) (setq edata (entget e)) (setq dxf_60 (assoc 60 edata)) (if vis (if (and dxf_60 (= 1 (cdr dxf_60))) (entmod (subst (cons 60 0) dxf_60 edata))) (if dxf_60 (if (= 0 (cdr dxf_60)) (entmod (subst (cons 60 1) dxf_60 edata)) ) (entmod (append edata (list (cons 60 1)))) ) )) (princ)) 

 

Hề hề hề,

Không hiểu sao khi test cái hàm của bác Giabach lại thấy nó hổng chạy. Mình mày mò sửa lại như sau thì thấy nó chạy được, tuy nhiên với các đối tượng thuộc layer bị khóa thì chưa được kiểm tra loại trừ như hàm của bác Ketxu.


(defun CV:ss-visible (ss vis / dxf_60 e edata n)
 (setq n (sslength ss))
 (while (setq e (ssname ss (setq n (1- n))))
(setq edata (entget e))
(setq dxf_60 (assoc 60 edata))
(if vis
  ;;;;;(if (and dxf_60 (= 0 (cdr dxf_60)))
;;;;;;;;; (entmod (subst (cons 60 1) dxf_60 edata)))
 (if dxf_60
                       ;;;;(if (= 0 (cdr dxf_60))
                           (entmod (subst (cons 60 vis) dxf_60 edata))
                       ;;;; )
                      (entmod (append edata (list (cons 60 vis))))
                    )  
                 )
  )
 (princ)
)

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

Thêm 2 hàm mọi người hay dùng của acet :

- ACET-sysvar-set (list vars + value) : có tác dụng thay đổi sysvar của hệ thống đồng thời lưu lại các giá trị sysvar ngay trước thời điểm thiết đặt này để restore lần sau :

VD : (acet-sysvar-set (list "osmode" 1 "cmdecho" 1))

Trả về ((("OSMODE" 0) ("CMDECHO" 0)))

Tiếp tục (acet-sysvar-set (list "osmode" 4 "cmdecho" 1))

=> trả về ((("OSMODE" 0) ("CMDECHO" 0)) (("OSMODE" 1) ("CMDECHO" 1)))

- ACET-sysvar-restore : hàm không đối số, reset lại các biến sysvar tại thời điểm đầu tiên sử dụng acet-sysvar-set trong hàm

Mọi người chú ý 2 chỗ in đậm, là 2 chỗ thiếu mềm dẻo của cặp đôi hàm này

- Ta chỉ muốn ghi nhớ list các biến + giá trị tại 1 thời điểm nhưng chưa muốn thay đổi ngay lúc đó , hoặc chỉ đơn giản là lấy list giá trị ?

- Ta chỉ muốn quay lại 1 thời điểm nào đó xác định sau một bước thay đổi sysvar ?

- Đồng thời ta cũng chưa xác định được list value hàm lưu ở đâu

 

=> 2 hàm ket mới viết sáng nay để xử lý 2 vấn đề trên, chưa test kỹ ná ^^

(defun CV:Sysvar-Set  (lstVar lstVal id)
;@Ketxu 22-11-11
(or id (setq id 0))
(vl-bb-set '# (append (vl-bb-ref '#) (list  (list id (mapcar 'cons lstVar (mapcar 'getvar lstVar))))))
(if lstVal (mapcar 'setvar lstvar lstVal))
)

 

(defun CV:Sysvar-Restore(id /  df)
;@Ketxu 22-11-11
(defun df (id / tmp)
(if (and id (setq tmp (assoc id (vl-bb-ref '#))))
 (mapcar '(lambda(x)(setvar (car x)(cdr x))) (cadr tmp))
))
(if id (df id)(and (mapcar 'df (mapcar 'car  (reverse (vl-bb-ref '#)))) (vl-bb-set '# nil)))
)

 

Sử dụng :

- CV:Sysvar-Set (list các variable) (list giá trị) ID

Thiết đặt các sysvar theo giá trị tương ứng, lưu tại thời điểm ID

+ List các variable : '("cmdecho" "osmode" "clayer"...) - Không thể nil

+ List giá trị : '(1 2 "0")... - Có thể nil. Nếu = nil : hàm chỉ ghi nhớ, không set giá trị mới

+ ID : flag thể hiện thời điểm cần lưu lại biến (0,1,2.....) - Có thể nil

Ví dụ :

(CV:Sysvar-Set '("hpscale" "hpang" "hpname" "clayer" "cmdecho") '(1 0 "ANSI31" "MATCAT" 0) 0)

(CV:Sysvar-Set '("hpscale" "hpang" "hpname" "clayer" "cmdecho") nil 1)

 

- CV:Sysvar-Restore (ID)

Reset lại sysvar tại thời điểm ID

- ID : bất kỳ, có thể nil.Nếu nil hàm sẽ reset tại thời điểm đầu tiên dùng đến hàm trong toàn bộ phiên làm việc, đồng thời clear toàn bộ list giá trị lưu

VD :

(CV:Sysvar-Restore 0)

(CV:Sysvar-Restore nil)

 

- Vài điểm chú ý :

+ Cách thức đặt đối số do mọi người quy định và thay đổi theo ý thích (có thể là list dạng '(var1 . val1)(var2 . val2)... hoặc dạng '(var1 val1 var2 val2...) , ketxu thích dùng kiểu kia cho dễ mapcar ^^

+ Hàm không tạo ra bất kỳ biến nào, nhưng sử dụng một "blackboard namespace", cái này có cái lợi và có cái hại. Vì vậy mọi người cũng có thể sử dụng nơi lưu trữ khác cho mình (biến toàn cục, file, ini, reg...)

+ Ket không xử lý trường hợp ghi lại trùng ID, vì như vậy hơi vô duyên, nhưng nếu muốn có thể thêm vào 1 đoạn subst ^^

  • 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

 

- Vài điểm chú ý :

+ Cách thức đặt đối số do mọi người quy định và thay đổi theo ý thích (có thể là list dạng '(var1 . val1)(var2 . val2)... hoặc dạng '(var1 val1 var2 val2...) , ketxu thích dùng kiểu kia cho dễ mapcar ^^

+ Hàm không tạo ra bất kỳ biến nào, nhưng sử dụng một "blackboard namespace", cái này có cái lợi và có cái hại. Vì vậy mọi người cũng có thể sử dụng nơi lưu trữ khác cho mình (biến toàn cục, file, ini, reg...)

+ Ket không xử lý trường hợp ghi lại trùng ID, vì như vậy hơi vô duyên, nhưng nếu muốn có thể thêm vào 1 đoạn subst ^^

Hề hề hề,

Bác ketxu nên lưu ý cập nhật thêm các hàm CV:..... đã được thẩm định vô danh sách nghen.

Xin bổ sung một thằng ngớ ngẩn nữa. Hàm CV:geom-midpoint:


(defun CV:geom-midpoint (p1 p2 )
(setq mp (mapcar '(lambda (x y) (/ (+ x y) 2)) p1 p2))
mp
)

 

 

P/s : Bác Bình test thử với '(0 0 0) '(1 1 1) chưa ạ ^^ (lỗi chia số nguyên 1 / 2)

Theo em thì :

(defun CV:Geom-Midpoint (p1 p2 )(mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2))

Chỉnh sửa theo ketxu
Check
  • 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

Em đang lọ mọ tìm cách view cái bảng như Excel lên bài post đầu , r tick dấu vô như bác hochoaivandot góp ý, nhưng không được. Mà ngồi link lại lâu hơn hẳn, do dạo này cơ chế làm việc của 4room nó hiện đại nhưng mà cứ khó khó . Như phần pót link thì k thấy chỗ add title cho link nữa ^^

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

 

P/s : Bác Bình test thử với '(0 0 0) '(1 1 1) chưa ạ ^^ (lỗi chia số nguyên 1 / 2)

Theo em thì :

(defun CV:Geom-Midpoint (p1 p2 )(mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2))

Hề hề hề,

May quá bác Ketxu lại giúp mình chữa thêm được một lỗi ngớ ngẩn nữa. Đúng là cái thằng / này nó có cái đặc tính quái dị đó mà lâu lâu lại quên béng đi mất.

Thôi thì đền cho bác một thằng sắp ngớ ngẩn nữa vậy. Hàm CV:layer-locked

Hàm này kiểm tra xem layer lay có bị khóa hay không, nếu bị khóa thì trả về tên layer theo như thằng acet nó bảo thế. Mình bổ sung thêm hai tí nhau nữa là thông báo ra màn hình cho người dùng nhòm thấy và chuyển layer bị khóa này về hiện hành để người dùng biết mà xử trảm nó. Còn nếu không bị khóa thì nó hàm sẽ trả về nil y như thằng acet. các bác cứ xem nếu thấy chưa ưng tí nhau nào thì trảm tí nhau đó đi là Ok hỉ.


(defun CV:layer-locked (lay)
(if (= 4 (logand 4 (cdr (assoc 70 (entget(tblobjname "layer" lay))))))
  ;;;;; (progn
      ;;;;; (setvar "clayer" lay)
      ;;;;; (alert (strcat "\n Layer " lay " dang bi khoa"))
       lay
  ;;;;; )
  ;;;; (progn
  	(setq lay nil)      
  ;;;;; )
)

)

À mà nói thêm một tí là cái thằng hàm kiểm tra layer có bị khóa hay không là mình nhót của bác Ketxu đấy. Ở ngay cái hàm CV:ss-visible ấy mà.

Hề hề hề.

  • 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

Em đang lọ mọ tìm cách view cái bảng như Excel lên bài post đầu , r tick dấu vô như bác hochoaivandot góp ý, nhưng không được. Mà ngồi link lại lâu hơn hẳn, do dạo này cơ chế làm việc của 4room nó hiện đại nhưng mà cứ khó khó . Như phần pót link thì k thấy chỗ add title cho link nữa ^^

Hề hề hề,

Bác mà còn thấy khó thì biết nhờ cậy ai đây.???

Thôi thì "Khó cũng mần" vậy.

Hề hề hề....

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

Hề hề hề,

Bác ketxu nên lưu ý cập nhật thêm các hàm CV:..... đã được thẩm định vô danh sách nghen.

Xin bổ sung một thằng ngớ ngẩn nữa. Hàm CV:geom-midpoint:

(defun CV:geom-midpoint (p1 p2 )
(setq mp (mapcar '(lambda (x y) (/ (+ x y) 2)) p1 p2))
mp
)

P/s : Bác Bình test thử với '(0 0 0) '(1 1 1) chưa ạ ^^ (lỗi chia số nguyên 1 / 2)

Theo em thì :

(defun CV:Geom-Midpoint (p1 p2 )(mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2))

Sẵn, các bác làm cho trường hợp tổng quát hơn 1 tí nữa luôn đi: tìm điểm trên curve cách điểm đầu 1 đoạn có chiều dài là a và cách điểm cuối 1 đoạn có chiều dài là b (có 1 lệnh CAL tương tự như thế)

VD: (defun CV:geom-scapoint p1 p2 k), trong đó k=a/l.

Thân thương!

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

Mình bổ sung thêm hai tí nhau nữa là thông báo ra màn hình cho người dùng nhòm thấy và chuyển layer bị khóa này về hiện hành để người dùng biết mà xử trảm nó. Còn nếu không bị khóa thì nó hàm sẽ trả về nil y như thằng acet. các bác cứ xem nếu thấy chưa ưng tí nhau nào thì trảm tí nhau đó đi là Ok hỉ.

Cái dở của bác chính là chỗ này bác ạ. bởi nếu đưa hàm này vào 1 chương trình, khi gặp layer bị khóa quá trình chạy sẽ bị gián đoạn. người dùng bắt buộc phải nhấn ok để chương trình chạy tiếp. Nhỡ mà nó chạy trong vòng lặp gặp vài layer bị khóa như vậy là mệt rồi. VD: bác sử dụng hàm này để viết 1 lệnh đếm số layer bị khóa của bản vẽ. chương trình đếm được bao nhiêu layer bị khóa là bấy nhiêu lần ta phải nhấn OK.

Theo quan điểm của em, bất kì hàm kiểm tra điều kiện nào, chỉ cần trả về T hoặc nil. còn ứng xử sau đó thế nào tùy thuộc vào mục đích ta dùng nó bác ạ.

 

@DVH: Bác diễn đạt sai rồi. trong cái hàm của bác thì P1 và P2 liên quan gì đến thằng Curve mà bác nhắc đến.

Mình hiểu ý bác là viết 1 hàm lấy tọa độ 1 điểm nằm trên đường thẳng nối 2 điểm sao cho khoảng cách từ điểm đó đến 2 điểm kia có tỷ lệ a/b

  • 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

Cái dở của bác chính là chỗ này bác ạ. bởi nếu đưa hàm này vào 1 chương trình, khi gặp layer bị khóa quá trình chạy sẽ bị gián đoạn. người dùng bắt buộc phải nhấn ok để chương trình chạy tiếp. Nhỡ mà nó chạy trong vòng lặp gặp vài layer bị khóa như vậy là mệt rồi. VD: bác sử dụng hàm này để viết 1 lệnh đếm số layer bị khóa của bản vẽ.

Theo quan điểm của em, bất kì hàm kiểm tra điều kiện nào, chỉ cần trả về T hoặc nil. còn ứng xử sau đó thế nào tùy thuộc vào mục đích ta dùng nó bác ạ.

Hề hề hề,

Vậy thì ta trảm luôn thôi chứ còn lăn tăn chi nữa.

Hề hề hề,

Mình trảm luôn vào bài post trước cho đỡ tốn đất hè.

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

@DVH: Bác diễn đạt sai rồi. trong cái hàm của bác thì P1 và P2 liên quan gì đến thằng Curve mà bác nhắc đến.

Mình hiểu ý bác là viết 1 hàm lấy tọa độ 1 điểm nằm trên đường thẳng nối 2 điểm sao cho khoảng cách từ điểm đó đến 2 điểm kia có tỷ lệ a/b

Srr vì chữ curve, ý tôi là như vậy đó, vì CAL cũng có lệnh này, cho nó tổng quát luôn 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
Hàm CV:layer-locked Hàm này kiểm tra xem layer lay có bị khóa hay không, nếu bị khóa thì trả về tên layer theo như thằng acet nó bảo thế.

Em dang thử ứng dụng cái hàm của bác để kiểm tra các layer trong bản vẽ đây! Theo em nghĩ thì muốn kiểm tra phải có list tên các layer trong BV. Em ngu muội ko biết cách lấy, mong các bác chỉ giùm àh! :)

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

Em dang thử ứng dụng cái hàm của bác để kiểm tra các layer trong bản vẽ đây! Theo em nghĩ thì muốn kiểm tra phải có list tên các layer trong BV. Em ngu muội ko biết cách lấy, mong các bác chỉ giùm àh! :)

 

Em dang thử ứng dụng cái hàm của bác để kiểm tra các layer trong bản vẽ đây! Theo em nghĩ thì muốn kiểm tra phải có list tên các layer trong BV. Em ngu muội ko biết cách lấy, mong các bác chỉ giùm àh! :)

Hề hề hề,

bạn có thể dùng vòng lặp với hàm (tblnext "layer") để tạo ra cái danh sách tên của các layer có trong bản vẽ bạn ạ.

  • 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

Srr vì chữ curve, ý tôi là như vậy đó, vì CAL cũng có lệnh này, cho nó tổng quát luôn mà.

Hề hề hề,

Ý bác DoanVanHa có phải thế này không nhỉ???

(defun CV:Geom-divpoint (p1 p2 k)
(mapcar '(lambda (x y) (+ (* (- 1 k) x) (* k y))) p1 p2)
)

Ở đây lưu ý rằng k>0 khi điểm chia nằm về cùng phía của p2 khi so với p1

Chỉnh sửa theo phamthanhbinh
Sửa lisp
  • 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

Hề hề hề,

Ý bác DoanVanHa có phải thế này không nhỉ???

(defun CV:Geom-divpoint (p1 p2 k)
(mapcar '(lambda (x y) (+ (* (- 1 k) x) (* k y))) p1 p2)
)

Ở đây lưu ý rằng k>0 khi điểm chia nằm về cùng phía của p2 khi so với p1

 

(defun CV:Geom-divpoint (p1 p2 k)
(polar p1 (angle p1 p2) (* (distance p1 p2) k))
)

Hình như viết như trên thì tốc độ nhanh hơn code của bác phamthanhbinh (Em check bằng cái hàm sosanh thấy vậy)

  • Vote tăng 3

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

 

(defun CV:Geom-divpoint (p1 p2 k)
(polar p1 (angle p1 p2) (* (distance p1 p2) k))
)

Hình như viết như trên thì tốc độ nhanh hơn code của bác phamthanhbinh (Em check bằng cái hàm sosanh thấy vậy)

 

Bàn thêm 1 chút về tốc độ nhân bạn "Hochoaihetdot" đưa ra một cách mới: tôi đã gặp một số hàm viết mà dùng mấy hàm như reverse, mapcar, lambda, apply thường chạy chậm so với cách viết khác không dùng chúng. Tôi không hiểu tại sao nhưng đã gặp như thế nên đưa lên để các bác ngâm cứu, nhất là khi chúng ta đang nhận 1 nhiệm vụ cực kỳ nặng nề: viết các hàm cơ bản.

Thân thương!

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

Em đang hỏi về hàm chia đoạn thẳng theo hệ số k ấy ạ, để e lên list ^^

 

Tôi chưa test, nhưng nghe HHVD nói, và theo nhận định chủ quan của tôi thì đoán là hàm của HHVD nhanh 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

Em xin phép trình bày lại câu hỏi cho rõ, và xóa 2 câu trước cho đỡ loãng : Hàm mà bác đề cập, bác PTB và HHVD viết, nó tương đương với hàm nào của ACET, để e biết đặng còn lên list cho top chủ đề của topic

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

Em xin phép trình bày lại câu hỏi cho rõ, và xóa 2 câu trước cho đỡ loãng : Hàm mà bác đề cập, bác PTB và HHVD viết, nó tương đương với hàm nào của ACET, để e biết đặng còn lên list cho top chủ đề của topic

 

Thống nhất xoá tất cả những bài trung gian để bớt loãng (kể cả bài này). Bác PTB viết thay (acet-geom-midpoint), sau đó tôi đề nghị tổng quát là thay mid bằng 1 điểm xác định bởi k (nên mới có cái từ div), nên nếu nói thay hàm nào của acet thì chịu. Ket thấy nó cần đưa vào list thì đưa, còn vì lý do hàm này không thay hàm nào của acet cả nên không đưa vào cũng đượ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
Đăng nhập để thực hiện theo  

×