-
Số lượng nội dung
905 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
29
Bài đăng được đăng bởi Thaistreetz
-
-
Chính xác là hàm này. chỉ có điều nó vẽ luôn cả vào current document :D
Vậy thì thêm cái này để kiểm tra điều kiện. (= (vla-get-active dwg) :vlax-false)
Nói chung là chỉ cần lấy ra đúng document mình muốn. sau đó có thể thao tác với nó bình thường từ active document. tất nhiên có thể có những công việc chỉ áp dụng với active document, đành rút kinh nghiệm từ từ thôi.
-
Ket mở 2 bản vẽ new, run lệnh ở bản vẽ này mà bản vẽ kia add thêm 1 line là OK, run lần nữa add thêm 1 line nữa (ko tạo ra drawing mới)
Thế này fải không?
(vlax-for dwg (vla-get-documents (vlax-get-acad-object))
(vlax-invoke-method (vla-get-modelspace dwg) 'addline (vlax-3d-point '(0 0 0)) (vlax-3d-point '(1 1 0))))
-
cái này Ket tạo drawing mới, tuy doc chưa hiện ra nhưng nó đã active trong bộ nhớ rồi. Còn theo ý tưởng của vlr-set-notification thì nó hoạt động được với các inactive document and (database) luôn
Detailing hiểu rất sâu về bản chất, đồng thời bạn cũng rất tinh ý. Nhận xét trên của bạn thực sự có giá trị với mình.
Mới đầu khi sử dụng (vlr-set-notification reactor 'all_documents) thì mình cứ ngỡ hàm này sẽ "copy" rector từ document hiện hành sang toàn bộ các bản vẽ đang mở còn lại. Chính vì thế để gỡ reactor ra khỏi các bản vẽ đó mình lại dùng (vlr-set-notification reactor 'active-document-only) rồi từ bản vẽ hiện hành mới gỡ nốt phần còn lại (vlr-remove reactor)
Từ nhận xét trên của bạn, mình dò ngược lại thì phát hiện ra sai lầm này. các bản vẽ inactive document không hề tồn tại reactor sau khi chạy (vlr-set-notification reactor 'all_documents) từ bản vẽ active document. hàm trên điều khiển các sự kiện của các bản vẽ inactive document từ chính bản vẽ active document luôn. Thật không ngờ! và như vậy hàm (vlr-set-notification reactor 'active-document-only) là thừa. đồng thời cũng cần cải tạo lại code thêm 1 chút nữa để tận dụng được sức mạnh của hàm này
-
Thao tác với bản vẽ không hiện hành qua collection drawing thì chưa chắc dc đâu Ket ơi, Ket có thấy khi chạy nó hay chớp các cửa sổ liên tục ko? Do AutoCAD ko cho chạy Multithread nên muốn thao tác trên bản vẽ nào thì phải active nó lên mới send data vô được.
Mình không rõ Detailing đang nói về ngôn ngữ khác hay về lisp. nhưng nếu đang nói về lisp thì nhận định này sai rồi. từ bản vẽ hiện hành ta có thể can thiệp vào các bản vẽ khác đang mở mà hoàn toàn ko cần active nó. Trong code mình gửi cho bạn mình cũng thực hiện việc này thông qua đoạn code:
(vlax-for dwg (vla-get-documents (vlax-get-acad-object)) (vla-setvariable dwg "users1" ""))
Mặt khác, khi xem xét cấu trúc của 1 vla-object thì mình nhận thấy rằng bản thân nó đã quy định cho đối tượng thuộc document (file bản vẽ) nào. bạn có thể lấy ra document đang lưu giữ 1 đối tượng bằng hàm (vla-get-document vla-object). Việc chỉnh sửa 1 đối tượng thuộc bản vẽ không hiện hành thực hiện hoàn toàn bình thường y hệt như bạn thao tác trên bản vẽ hiện hành.
Có nhiều ý kiến cho rằng cad chỉ làm việc với active document. nhưng mình nghĩ là không fải như vậy. Bởi đối tượng vla gốc là chính chương trình cad đang mở cơ mà (vlax-get-acad-object)
Lisp thì là vậy. vba chắc chắn cũng tương tự. .Net thì mình chưa biết
-
@Ketxu: làm gì mà dùng hết cả dung lượng inbox thế? minh không gửi được
@Detailing: nếu đọc code của mình, bạn sẽ thấy nó hoàn toàn triển khai đúng theo những gì ketxu nói ở trang 1 đấy ^^
-
1
-
-
hehe, bác Thaistreetz cứ share thoải mái đi
Khồng. để mình tranh thủ kiếm like cái đã chứ. chả mấy khi có cái cần câu like ngon thế này :lol:
Với lại, ứng dụng này thực sự cũng đáng để bán mà.
-
4
-
-
@bác Gia_Bách: Ta hoàn toàn có thể can thiệp vào 1 bản vẽ không fải hiện hành nếu lấy được vla-object document của nó. Em chưa thử nhưng em chắc chắn 1 điều là có thể thay đổi được 1 đối tượng thuộc 1 bản vẽ không hiện hành. thậm chí có thể thay đổi được đối tượng của cả bản vẽ chưa mở khi biết handle của đối tượng. Nataca từng viết 1 ứng dụng có thể làm được việc này. hiện tại em cũng đang sử dụng ứng dụng đó của Nataca
-
1
-
-
0.99 Ôbama/1 bản, Mại zô mại zô. Nhanh chân trước khi mình... free :D
Mình vừa viết xong ứng dụng này bằng lisp. có vài đặc điểm như sau:
- Các bản vẽ tham chiếu tự động thay đổi tức thời ngay khi bản vẽ hiện hành thay đổi tọa độ các góc màn hình, tức là khi bạn zoom hoặc pan
- làm việc với số bản vẽ không giới hạn.
- Bạn vẫn làm việc với bản vẽ hiện hành (zoom, pan, vẽ vời...) bình thường. khi nào cần so sánh thì gõ lệnh, lúc đó bạn zoom hay pan (bằng chuột giữa) thì các bản vẽ khác mới zoom và pan theo.
- Chạy với mọi phiên bản cad 2000+ và với mọi hệ điều hành hỗ trợ các bản cad này
- Mình chưa viết để có thể chạy với các vport như của Detailing, khi nào rảnh update tiếp, việc này khá đơn giản so với yêu cầu ban đầu.
Mình ngại capture màn hình nên chỉ nói qua qua được vậy. nói chung là y hệt video trên cái trang ketxu gửi link nhưng nuột hơn
Vì bác Detailng đang bán phần mềm này nên mình không puplic lên đây kẻo công sức bác ấy đổ sông đổ biển. Nhưng bạn có thể nhận được ứng dụng này free nếu bạn có 1 trong các điều kiện sau:
- Bạn đã có tối thiểu 150 bài viết trên cadviet + tối thiểu 20 thank (hay like hay danh tiếng gì gì đó)
- Bạn có tối thiêu 50 thank
- Bạn là thành viên thường xuyên của box autolisp và đã post ít nhất 1 lisp hoặc 1 ứng dụng của bạn viết cho mọi người.
- Khi nào các bác phamngoctukts và Detailing free ứng dụng trên, hoặc có 1 ứng dụng tương tự được post free.
Và điều kiện cuối cùng là bắt buộc: like cho mình 1fát vào bài này lấy danh tiếng, mất gì đâu :P
PM vào inbox của mình mình sẽ gửi cho bạn, tránh làm loãng topic này
với 2 điều kiện đầu mình chỉ chia sẻ file đã mã hóa, còn các bác ở điều kiện thứ 3 mình chia sẻ code luôn nếu có nhu cầu tham khảo. điều kiện thứ 4 sảy ra thì mình public code vào topic này luôn.
-
9
-
-
cái này hay nhỉ. mình thấy có hứng thú với cái này. hôm nào rảnh ngọ ngoạy thử phát xem có viết được nó bằng lisp không :D
-
1
-
-
Các bác cho mình hỏi chút vì mình cũng đang viết 1 chương trình thống kê thép: Mình thấy hầu hết các phần mềm TKT các bác viết đều xuất ra bảng thống kê dựa theo 1 form y hệt như bảng thống kê của phần mềm trên, việc thống kê bị bó buộc vào 1 danh sách mẫu các hình dạng thanh thép.
Vậy trong xây dựng các bác không bao giờ phải gia công thép theo hình dạng khác các hình dạng được nêu trong danh sách này à? kiểu bảng thống kê như chương trình trên có phải là chuẩn bắt buộc không? mình không làm chuyên ngành này nên không rõ nhưng mình nghĩ là chắc chắn trong quá trình thiết kế sẽ gặp phải những chi tiết đặc biệt, phải uốn thép cho thích hợp chứ.
Nếu có các trường hợp đặc biệt như vậy thì các bác giải quyết thế nào? cứ bổ xung dần vào thư viện sao? một số chương trình mình dùng thử thì họ viết còn tệ hơn. đóng hoàn toàn và không cho phép người dùng bổ xung thêm dạng thanh.
Ngoài ra còn 1 thắc mắc nữa. hầu hết chương trình thông kê thép mình tìm thây trên mạng đều chỉ dùng cho thống kê thép tròn, vậy với các loại thép hình L, C, H, I, T, thép bản, thép ống, thép ray... thì có chương trình nào để tính toán thống kê cho các loại thép này không? tham vọng của mình là viết 1 phần mềm TKT mà người dùng có thể thống kê cho bất kỳ hình dạng nào họ muốn và có thể dùng cả cho mọi loại thép nêu trên
-
Bác DVH, Ketxu và bác Nataca hiểu 9xác ý mình.
số là mình có 1 số ứng dụng sử dụng reactor, khổ một nỗi thằng reactor nó đòi hỏi phải có hàm callback để gọi đến cho 1 sự kiện.
Như đã biết, với object reactor thì các sự kiện được gán trực tiếp vào đối tượng trên bản vẽ. và khi gửi bản vẽ đi mình nhận được 1 số lời than phiền của đồng nghiệp rằng bản vẽ của mình hay bị báo lỗi lạ. sở dĩ có những lỗi này là do ở máy của người ta không có các hàm callback.
Ngoài ra thì nếu làm được việc này thì mình có thể viết được 1 ứng dụng bảo mật bản vẽ được nhúng luôn trong cơ sở dữ liệu bản vẽ, vấn đề này cũng khiến anh em tư vấn đau đầu từ khá lâu rồi.
Bác Nataca: bác cũng xem lại mấy ứng dụng sử dụng reactor trong lisp bác viết cho anh em cty mình đê, cũng rất hay bị báo lỗi kiểu vậy đấy, nó gây tâm lý rứt là khó chịu :lol:
-
ketxu bựa thế! mình chưa kịp edit bài viết đã phê rồi :lol:
-
Vấn đề này mình vướng mắc cũng khá lâu rồi nhưng chưa có cách nào giải quyết được, hôm nay đành post lên đây mong các bác cùng thảo luận giải quyết vấn đề này giúp mình.
Nó ngắn gọn thế này thôi: Mình muốn lưu vào dữ liệu của 1 bản vẽ 1 đoạn code lisp, và khi đem bản vẽ đó mở ở bất kì máy nào, với bất kỳ đời cad nào có thể mở bản vẽ đó từ 2004 trở lên (thấp hơn nữa thì càng tốt) thì đoạn code lưu trong bản vẽ đó tự động được tải.
nôm na thì nó giống i xì như cách thức mà con virus Acad.lsp đã làm, nhưng mình không muốn bất kì file nào được tạo ra cùng bản vẽ. tất nhiên là không phải mình định viết 1 em virus phá anh em đâu nhé ^^
Mình tin chắc các bác cũng nhận thấy được rằng nếu thực hiện được công việc này thì ứng dụng của nó là rất lớn. Hiện tại thì mình mới chỉ giải quyết được 1/2 công việc, đó là lưu đoạn code đó vào Xrecord hoặc vào 1 trong các biến hệ thống Users# dưới dạng 1 chuỗi.
1/2 vấn đề khó khăn còn lại là mình không làm sao để cad có thể tự động đọc và tải đoạn code đó vào bản vẽ khi mở bản vẽ.
Trên đây là hướng đi của mình và đang gặp ngõ cụt. Nếu các bác có cách nào thông cái ngõ này ra hoặc có đường khác để đi xin hãy mách nước cho mình. Mình mong muốn có thể giải quyết vấn đề này thuần lisp vì mình chỉ biết mỗi lisp và mình áp dụng cái này cho 1 vài chương trình mình viết bằng lisp, nhưng nếu không thể thì bằng các ngôn ngữ khác cũng được. Cảm ơn các bác trước :D
-
ồ đúng rồi bác Tue_NV ạ. Vậy mà em cứ ngỡ nó sắp xếp theo thứ tự đối tượng được sinh ra trong bản vẽ. Cảm ơn bác nhiều :D
-
Code trên chỉ có một vđ nhỏ như mình và bác Thai đã nêu ở PP chia ô. Nếu tập chọn kg có đối tượng thì vòng lặp kg thoát. Mình cũng muốn chỉnh lại đoạn này cho nó an toàn hơn.
Hình như bác có nhầm lẫn gì đó ở đây. trong code đó em có hàm kiểm tra điều kiện tập chọn có đối tượng ngay từ đầu rồi mà
(defun select-c (p1 p2 n filter / ss)
(if (setq ss (ssget "c" p1 p2 filter))
(thân hàm)
))
rõ ràng nếu ss = nil thì hàm kết thúc luôn chứ không có nhảy vào thân hàm để lặp tiếp.
Chủ đề mới này của bác em nghĩ nên tách ra 1 topic riêng được rồi bác ạ. Bác có thể để 1 liên kết đến topic này trong trường hợp có gì đó liên quan. như thế tiện theo dõi hơn.
lệnh boundary đúng là khiến nhiều người phải bức xúc thật. Đây sẽ là vấn đề nhiều người quan tâm, tiêu đề của topic hiện tại không có gì liên quan đến chủ đề này nữa rồi.
em cũng nhiều lần bức xúc quá mà đi mò xem có cách nào thay thế nó không nhưng giờ vẫn chào thua. Hi vọng các bác chung tay làm được. em lót dép hóng, chờ kết quả :D
-
1
-
-
Cụ thể thế nào hả ketxu? Mình đang cần chính cái đó. phương pháp bác Tue_NV mách khiến mình hơi vất vả 1 chút vì phải đi tìm điểm chung của từng cặp đối tượng để chọn theo method (ssget "c" p p). kết quả cũng không đầy đủ trong trường hợp 2 đối tượng không giao nhau, sẽ không biết thực sự anh nào nằm trên, chị nào nằm dưới.
-
Tình hình là mình rất kết quyển sách này nhưng không làm cách nào mua được. Có bác nào trên diễn đàn có thể mua giúp mình quyển này được không? Xin cám ơn và hậu tạ.
Sao không hỏi anh hả cưng? anh kiếm link cho :lol:
-
thứ tự draw order mà bác bình. bác đang hiểu nhầm sang thứ tự đối tượng được tạo ra trong bản vẽ. thứ tự này được điều khiển bởi lệnh draworder. đối tượng "nằm trên" sẽ được chọn khi ta pick select tại 1 điểm có thể tìm thấy nhiều hơn 1 đối tượng.
"Nằm trên" bác cũng đừng hiểu là nó có tọa độ z lớn hơn. mà nó là thứ tự ưu tiên được hiển thị trên màn hình cad. ví dụ bác có 2 đường thẳng trùng nhau, 1 đỏ 1 xanh. nếu trên màn hình nó hiển thị màu xanh thì có nghĩa đường màu xanh "nằm trên" đường màu đỏ. muốn đổi chỗ việc ưu tiên hiển thị này, bác gõ lệnh dr.
Câu trả lời của bác Tue_NV là chính xác rồi bác ạ.
-
2
-
-
Có 1 tập chọn đối tượng ssget. trong đó các đối tượng đè lên nhau, làm thế nào để biết thứ tự draw order của chúng? hoặc chỉ cần chỉ ra đối tượng ở trên cùng cũng được.
-
2/- Giả sử có lst (("1" ( 1 2 0)) ("2" ( 2 3 0)) ....). có nghĩa ta có một list khá lớn mà mỗi phần tử có hai phần tử con. Để tìm một phần tử nào đó theo phần tử con thứ nhất ta hay dùng hàm assoc. VD (assoc "2" lst) -> ("2" (2 3 0)). Bây giờ muốn tìm theo đối số là phần tử thứ hai thì làm thế nào?
Thêm phương pháp đệ quy cho bác NgaMy text thử. em viết 2 hàm luôn cho bác lựa chọn tùy theo nhu cầu
1/ Hàm tổng quát, áp dụng với vị trí kiểm tra tìm kiếm bất kì.
Tham số: i là vị trí cần kiểm tra (phần tử đầu tiên bắt đầu là 0), find: giá trị cần tìm kiếm, lst: danh sách cần tìm
(defun assoc-nth (i find lst / lst1 ) (if (equal (nth i (car lst)) find) (car lst) (if (setq lst1 (cdr lst)) (assoc-nth i find lst1))))
TEST: (assoc-nth 1 2 '((1 4 4) (1 1 1) (3 2 3) (1 3 2))) -> (3 2 3)
2/ Hàm chỉ dùng cho vị trí kiểm tra là phần tử thứ 2
(defun assoc-2 (find lst / lst1 ) (if (equal (cadar lst) find) (car lst) (if (setq lst1 (cdr lst)) (assoc-2 find lst1))))
TEST: (assoc-2 2 '((1 4 4) (1 1 1) (3 2 3) (1 3 2))) -> (3 2 3)
Tất nhiên là hàm 2 sẽ nhanh hơn hàm 1 vì các hàm cdr và car chạy nhanh hơn hàm nth nhưng không tổng quát.
-
1
-
-
Bác sửa luôn phần khai báo biến và tham số của hàm trên cho em nhé. (p1 p2 n filter) thành (p1 p2 n filter / ss)
Em quên chưa định nghĩa biến ss là biến cục bộ.
-
1
-
-
1/ Em chưa biết bác tổ chức dữ liệu danh sách kiểu gì, dùng nó sau đó như thế nào nên cũng khó trả lời câu hỏi này. Với visual lisp ta có 2 kiểu tổ chức dữ liệu khác dạng mảng là VARIANTS và SAFEARRAYS có thể dùng thay thế list. Em không chắc tốc độ việc truy cập dữ liệu của nó có nhanh hơn LIST hay không nhưng cấu trúc của nó quy định rất chặt chẽ và tương đối phức tạp để tạo.
2/ Đệ quy không nhanh hơn các phương pháp lặp khác đâu bác ạ. thậm chí có thể chậm hơn. với phương pháp này, máy tính sẽ phải cấp phát bộ nhớ để lưu kết quả trả về của mỗi lần lặp cho đến khi vòng lặp tìm được điều kiện thoát mới giải phóng bộ nhớ hoàn toàn.
1 ví dụ đơn giản để bác có thể tiếp cận và hiểu đệ quy, quay lui là như thế nào, đây là hàm tính n! (defun n! (n) (if (= n 1) 1 (* n (n! (1- n)))))
Về yêu cầu của bác thì em nghĩ có thể giải quyết đơn giản nhất như sau: (assoc gia_tri_tim_kiem (mapcar 'reverse list_tim_kiem ))
-
1
-
-
hay quá bác Gia Bach ạ. hồi trước em nghiên cứu code express, thấy 1 số hàm select đối tượng của nó khá hay ko hiểu viết kiểu gì được, hóa ra là còn 1 số method của ssget không có trong help như thế này.
@bác TRUNGNGAMY
1. Nếu là lỗi này: error: exceeded maximum number of selection sets
Thông báo này có vẻ đã rất cụ thể rồi, em đoán là số lượng tập chọn đối tượng vượt quá giới hạn cho phép của lisp. Lisp luôn có những giới hạn nhất định cho mỗi kiểu dữ liệu, tại vì chúng ta hiếm khi có nhu cầu chạm tới những giới hạn đó nên không để ý thôi.
2. Nếu là lỗi này: internal stack limit reached (simulated)"\n*** INTERNAL ERROR: VL namespace mismatch\n" " type Y to reset: "
Là lỗi hay gặp khi dùng thuật toán đệ quy và quay lui, do quá trình lặp không tìm thấy điều kiện để thoát. Cũng hơi lạ là 1 số trường hợp không tìm thấy điều kiện thoát lại không có thông báo này để dừng chương trình, cứ thế lặp cho đến khi treo máy. Có lẽ đây là 1 trong số trường hợp đã được cảnh báo nên chương trình nhận diện được và tạm dừng quá trình lặp. em chỉ đoán vậy thôi chứ không chắc lắm.
- Nguyên nhân không thể thoát và không chia được với N nhỏ là do sai số của hàm ssget khi chọn đối tượng mà em đã cảnh báo bác:
Bác chú ý 1 điều quan trọng khi dùng hàm ssget với lựa chọn "c" hoặc "w": đó là việc bản vẽ được zoom to hay nhỏ ảnh hưởng rất lớn đến kết quả chọn đối tượng của hàm ssget.- Bản vẽ được zoom lớn, độ chính xác của hàm ssget tăng lên nhưng nếu đối tượng vượt khỏi biên hiển thị của màn hình quá xa hàm ssget sẽ không chọn được đối tương đó.
- ngược lại, nếu tập hợp đối tượng bị zoom nhỏ. mật độ đối tượng trên 1 đơn vị diện tích màn hình quá lớn sẽ khiến hàm ssget chạy chậm, độ chính xác giảm và chọn được số đối tượng vược mức thực tế rất nhiều.
1 ví dụ cụ thể để thấy ngay điều này. em thử luôn với bản vẽ bác post ở trang 1.
(defun select-c1 (p1 p2 n filter / ss) (ts:zoom p1 p2) (if (setq ss (ssget "c" p1 p2 filter)) (if (< (sslength ss) (abs (setq n (* -1 n)))) (list (list p1 p2)) (if (< n 0) (append (select-c1 p1 (list (* 0.5 (+ (car p2) (car p1))) (cadr p2) 0.0) n filter) (select-c1 p2 (list (* 0.5 (+ (car p2) (car p1))) (cadr p1) 0.0) n filter)) (append (select-c1 p1 (list (car p2) (* 0.5 (+ (cadr p2) (cadr p1))) 0.0) n filter) (select-c1 p2 (list (car p1) (* 0.5 (+ (cadr p2) (cadr p1))) 0.0) n filter)))))) (setq *acad-object* (vlax-get-acad-object)) (defun TS:zoom (pt1 pt2) (vlax-invoke *acad-object* 'zoomwindow pt1 pt2)) (defun c:t1 nil (command "zoom" "e") (mapcar '(lambda (x) (command "rectang" (car x) (cadr x))) (select-c1 (getvar "extmin") (getvar "extmax") (getint "max object =") '((0 . "LINE")))) (princ)) ;----------------------------- (defun select-c (p1 p2 n filter / ss) (if (setq ss (ssget "c" p1 p2 filter)) (if (< (sslength ss) (abs (setq n (* -1 n)))) (list (list p1 p2)) (if (< n 0) (append (select-c p1 (list (* 0.5 (+ (car p2) (car p1))) (cadr p2)) n filter) (select-c p2 (list (* 0.5 (+ (car p2) (car p1))) (cadr p1)) n filter)) (append (select-c p1 (list (car p2) (* 0.5 (+ (cadr p2) (cadr p1)))) n filter) (select-c p2 (list (car p1) (* 0.5 (+ (cadr p2) (cadr p1)))) n filter)))))) (defun c:t2 nil (command "zoom" "e") (mapcar '(lambda (x) (command "rectang" (car x) (cadr x))) (select-c (getvar "extmin") (getvar "extmax") (getint "max object =") '((0 . "LINE")))) (princ))
Với cùng phương pháp chia. Trong lệnh t1 em nhét thêm điều kiện zoom bản vẽ đến từng ô rồi mới chọn. việc làm này loại bỏ sai số của lệnh ssget khiến nó có thể chạy được với N nhỏ đến 5. Còn lệnh t2 là nguyên bản thì chỉ có thể chạy được với N>= 20, với lệnh t2, kích thước màn hình của bác cũng ảnh hưởng đến N min. màn hình càng lớn thì có thể chạy được với N càng nhỏ. màn hình của em 21", chạy được với N min = 20.
Cũng với bản vẽ đó, sử dụng lệnh t1 với N<5 chương trình vẫn chạy nhưng rơi vào trường hợp kích thước ô chọn bị chia nhỏ quá giới hạn đơn vị của cad, hình như là 1E-13 thì phải. Nhỏ hơn giới hạn này cad không tính toán được và coi là 1 điểm.
-
1
-
-
Bác Gia Bach cho em hỏi chút. (ssget "_A") có khác gì (ssget "_X") không? em chạy thử nhưng không nhận thấy điều gì khác biệt giữa 2 sel-method này.
[Đã xong] lisp-Làm thế nào để tìm số đối tượng sinh ra bởi lệnh Boundary
trong AutoLisp
Đã đăng · Trả lời báo cáo
topic nay là để trao đổi thuật toán viết lisp. các bạn không cần dùng các lisp trong topic này làm gì cả. cách sử dụng lisp đã có 1 topic hướng dẫn ngay đầu box này.