-
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
-
-
(defun c:df ( / dcl_code dcl_id file_dcl temp) (if (not *canopy*) (setq *canopy* (list "1" "0" "0" "0" "0" "0"))) (setq dcl_code (list (strcat "canopy : dialog { label = \"&Lisp ve canopy\";" " : boxed_radio_row { label = \"Select drawing type\"; key = \"dt\";" " : radio_button { label = \"&Side elevation\"; key = \"se\";}" " : radio_button { label = \"&Front elevation\"; key = \"fe\";}" " : radio_button { label = \"&plan\"; key = \"pl\";}}" " : column {" " : edit_box { label = \"Roof slope (%)\"; edit_width = 6; key = \"slope\";}" " : edit_box { label = \"Canopy length\"; edit_width = 6; key = \"length\";}" " : edit_box { label = \"Canopy width\"; edit_width = 6; key = \"width\";}}" " ok_cancel;}"))) (setq temp (vl-filename-mktemp "canopy.dcl") file_dcl (open temp "W")) (foreach l dcl_code (write-line l file_dcl)) (close file_dcl) (setq dcl_id (load_dialog temp)) (vl-file-delete temp) (new_dialog "canopy" dcl_id) (mapcar 'set_tile (list "se" "fe" "pl" "slope" "length" "width") canopy) (cond ((= (car *canopy*) "1") (mapcar 'mode_tile '("slope" "length" "width") '(0 1 0))) ((= (cadr *canopy*) "1") (mapcar 'mode_tile '("slope" "length" "width") '(0 0 1))) ((= (caddr *canopy*) "1") (mapcar 'mode_tile '("slope" "length" "width") '(1 0 0)))) (action_tile "se" "(mapcar 'mode_tile '(\"slope\" \"length\" \"width\") '(0 1 0))") (action_tile "fe" "(mapcar 'mode_tile '(\"slope\" \"length\" \"width\") '(0 0 1))") (action_tile "pl" "(mapcar 'mode_tile '(\"slope\" \"length\" \"width\") '(1 0 0))") (action_tile "accept" "(setq *canopy* (mapcar 'get_tile '(\"se\" \"fe\" \"pl\" \"slope\" \"length\" \"width\"))) (done_dialog)") (start_dialog) (unload_dialog dcl_id) (cond ((= (car *canopy*) "1") (alert "Viet code ve mat cat vao day")) ((= (cadr *canopy*) "1") (alert "Viet code ve mat dung vao day")) ((= (caddr *canopy*) "1") (alert "Viet code ve mat bang vao day"))) (princ))
Đây bạn. Viết hết luôn cho rồi nhé. Nhúng luôn DCL vào lisp luôn. mình toàn viết thế. test các hàm điều khiển DCL tiện hơn.
-
1
-
-
- Vấn đề thứ nhất: value = "0" mà bạn khai báo đối với radio_button chả có tác dụng gì. Nói chung cũng không hiểu ý đồ của bạn muốn ở đây là gì. Còn với cách sắp xếp thế kia thì nhóm 3 radio_button sẽ tự động hoạt động bình thường mà không cần bất kì sự điều khiển nào. Tức là khi bạn chọn bất kì 1 trong 3 cái thì 2 cái còn lại tự động tắt.
- Vấn đề thứ 2: Bạn phải viết hàm điều khiển nhúng vào trong action của từng ratio_button. Dùng hàm (mode_tile "key" "giá trị 0 hoặc 1") để thiết lập trạng thái bật tắt edit_box.
ví dụ của bạn: khi chọn side elevation thì hàm nhúng trong action của key = "se" sẽ thực hiện đủ các bước sau: (mode_tile "slope" "1") (mode_tile "length" "0") (mode_tile "width" "1")
- Vấn đề thứ 3: Tương ứng với lựa chọn nào thì vẽ theo lựa chọn đó: Cái này thuần túy là về lisp rồi. Khi đóng hộp thoại bạn phải lấy ra 1 list gồm các giá trị của các ratio trên. Action của key = "accept" phải dùng hàm get_tile để lập list này:
(
(ratio1 (box1 box3))
(ratio2 (box1 box2))
(ratio3 (box2 box3))
)
trong mọi trường hợp thì chỉ 1 trong 3 ratio trên có giá trị là 1. Như vậy dùng if mà xử lý nó cho các bước tiếp theo.
key = "accept" hình như là key mặc định khi bạn dùng ok_cancel thì phải. mình chưa từng dùng cái này nên không rõ. cơ bản là vì dùng nó thì khó thiết kế cái hộp thoại cho đẹp.
-
Vậy chắc máy của bác yếu rồi. tôi test trên con laptop HP 8570p, cad 2017 chạy cả 2 lệnh trên đều mượt. không nháy
-
1
-
-
vòng lặp với điều kiện (grread T 4 0) thì nó chạy theo thời gian thực luôn, bước lặp khi đó tính đơn vị hình như là 1/10000s. (theo biến hệ thống Date thì phải, không nhớ chắc lắm). Vậy mà bác dùng command để test thì nó chớp giật là đúng rồi. Cái mũi tên xuất hiện là thời gian để cad nó xử lệnh command. Giống như lúc cad bị treo, thay vì con trỏ của cad thì cad nó trả lại trạng thái trỏ chuột về cho hệ điều hành, tức là cái mũi tên.
-
1
-
-
Kịp thời}}, Doan Van Ha cho biết:Nó là cái danh sách thông báo cho bác là bản vẽ tại phiên làm việc đã được tải vào những gì thôi. Bao gồm:
- Tất cả các plug-in được đặt trong các thư mục support, thư mục chỉ định tự động load.
- Các file chỉ định tự động load bởi người dùng tại Startup Suite
- Các file được load thủ công bằng chính lệnh Appload.
Nó mờ thế kia thì cũng là thông điệp cho người dùng là load vào thì chả có cách nào unload được. Cái này hiển nhiên bác biết rồi chứ nhỉ. Vì 1 file lisp hay sản phẩm từ lisp thì không unload được. Chỉ có Arx thì mới có thể unload. Cách duy nhất là đóng bản vẽ và mở lại
Trở lại vấn đề của bác, không load mà nó tự nhảy vào thì chắc là 1 trong số các file bác load có dòng code tự động load 1 file nào đó ở địa chỉ trên.Có 1 đối số của hàm grread chỉ định trạng thái của con trỏ là đối số thứ 3.
có tất cả 4 giá trị (hoặc 5, không nhớ nữa) từ 0 đến 3 (hoặc 4) tương ứng với các trạng thái: Không con trỏ, trạng thái bình thường (chữ thập và ô vuông), con trỏ ở trạng thái pick điểm (chữ thập), và trạng thái select đối tượng (ô vuông).
Cái diễn đàn này bị dở hơi, viết 1 bài rồi không được viết tiếp nữa ạ? Hay là chính sách dở hơi? Sếp nào thông não em phát ạ.
-
1
-
-
Mình thì lại dị ứng với việc phải zoom xong trả lại screen vì đã vài lần gặp hiện tượng màn hình nháy nháy trong quá trình xử lý.
Ý tưởng của bác DVH là khá hay. Nhưng nếu áp dụng thì mình sẽ chỉ áp dụng d1 và d2 trong chính cái màn hình screen tại thời điểm lấy tọa độ điểm tra. Vừa đỡ nháy màn hình do zoom, lại vừa cho tốc độ nhanh hơn vì đối tượng chọn được ít hơn nhiều lần. tất nhiên có rủi ro về việc d1 và d2 khi đó không cắt tam giác nào do zoom quá lớn các cạnh tam giác vượt ra khỏi screen. Nhưng cái này dựa trên việc đánh giá thói quen người dùng, chẳng ai zoom vào tận trong cái tam giác khi pick cả.
Có lẽ đây là bài toán tra cao độ tại 1 điểm bất kỳ trên lưới tam giác bằng 1 cú pick chuột.
Còn nếu là 1 yêu cầu tra theo thời gian thực (tức là rê con trỏ tới đâu nó báo luôn cao độ tới đó) thì thế nào? Khi đó rõ ràng giải pháp phân mảnh, phân tầng vẫn cho hiệu quả tốt hơn. Nếu có chậm thì cũng chỉ chậm 1 lần duy nhất là lần đầu chạy lệnh-
2
-
-
9 giờ trước, Doan Van Ha cho biết:Hỏi về thuật toán:
Trên dwg tôi có rất nhiều (hàng trăm ngàn) tam giác 3D dạng Polyline 3D closed, không cắt nhau.
Bất cứ 1 point nào trên dwg hoặc là không thuộc tam giác nào, hoặc là chỉ thuộc duy nhất 1 tam giác. Nếu point nằm trên 1 cạnh/đỉnh thì thuộc nhiều tam giác.
Nếu pịck 1 point bất kỳ, làm sao chọn được 1 tam giác bao quanh point đó?
Thuật toán phải quan tâm tốc độ xử lý nhé!
1. Bác phân mảnh ngay từ quá trình tạo lưới, Với mỗi mảnh là list gồm:
- 1 list lưu số lượng xác định số tam giác sao cho tốc độ xử lý là tối ưu nhất. 10.000 - 20.000 tam giác là ok với cấu hình máy tính của năm 2008.
- 1 list là tập hợp điểm bao chọn cái mảnh đó (là tập hơp các đỉnh của tam giác tại biên) dùng để kiểm tra điểm có thuộc mảnh hay không.
2. Gán cái list các mảnh đó vào 1 biến toàn cục tại phiên làm việc để truy cập tức thì. Khi nào đóng bản vẽ thì lưu nó vào xrecod, đến lúc mở bản vẽ, gõ lệnh thực thi, nếu chưa có biến đó thì gọi từ xrecod và lại gán vào 1 biến toàn cục để dùng.
3. Khi tra điểm, thực hiện 2 việc:
- Kiểm tra điểm đó nằm trong mảnh nào.
- Dò điểm đó thuộc tam giác nào trong mảnh thỏa mãn.
Cái này tôi đã từng làm và chạy trên con laptop cùi của tôi 6 năm trước với tốc độ gần như là realtime, với tập hợp 10.000 điểm đến 200.000 điểm tốc độ gần như là tương đương nhau. Nhanh hay chậm giờ tùy thuộc vào cách bác viết hàm tra 1 điểm có nằm trong 1 miền đa giác.
-
1
-
-
Kịp thời}}, conghoa cho biết:Thường thì thư việc hatch mới người dùng thường để 1 folder riêng rồi cài đặt trong Option để dùng được bộ hatch đó. Nên chúng ta cũng không nhất thiết phải cầu kỳ can thiệp vào file gốc của Cad làm gì. Do đó theo em thì nên dùng cách này:
- Với hatch có sẵn mà ko có file pat, thì chỉ cần lisp xuất hatch đó ra file pat, rồi copy vào thư mục các mẫu hatch thường dùng của mình, khởi động lại cad là dùng vô tư :)
Cái này tùy thuộc vào nhu cầu của mỗi người mà chủ động điều chỉnh cho phù hợp thôi. Mình thì xây dựng toàn bộ ứng dụng lisp của mình theo project và build thành 1 file fas duy nhất. trong đó có mọi lệnh, ứng dụng, tiện ích, thư viện layer, thư viện block, thư viện dimstyte, textstyle, khung bản vẽ... mà mình cần. đồng thời bao gồm cả 1 lệnh setup để tạo môi trường làm việc quen thuộc và 1 lệnh hoàn trả môi trường làm việc như trước khi setup. Lưu nó lên mây hoặc vào điện thoại, tiện khi làm việc ở máy tính khác, và cũng đỡ mất thời gian mỗi khi cài lại autocad. Ý tưởng của mình được vẽ ra theo hướng này :D
-
Em chưa viết hàm con trích xuất các thông tin này bác ạ. Khi nghiên cứu code dxf của đối tượng hatch em thấy kết quả trả về có cái thì phức tạp dài lê thê, có cái thì rất ngắn và không phụ thuộc vào hình dạng của đối tượng hatch. Khi đó em lờ mờ đoán cái đoạn dài hay ngắn đó có thể chính là mô tả cấu tạo của pattern. sau đó em mởi file thư viện của hatch và một số file custom hatch thì thấy các file này có nội dung như trong dxf mô tả. Từ đó em mới có khẳng định như trên.
Tuy nhiên lúc đó chưa nghĩ đến có thể ứng dụng vào việc gì nên chỉ hiểu rồi để đó thôi. Giờ mới nảy sinh ra ý tưởng khi mà vấp phải bản vẽ lạ -
Hề hề, ý tưởng nào của mềnh mà lai hông hay :D
Cũng từ nguyên lý cơ bản để viết lisp này, các bác có thể phát triển một lệnh cài đặt thư viện mẫu hatch thường dùng của mình rồi nhúng luôn trong lisp. Mỗi lần cài đặt lại Autocad chỉ cần gõ 1 lệnh là nó khởi tạo cho các bác thư viện mà không cần copy thủ công nữa. -
Chào các bác, lâu lắm mới đụng đến CAD, mình có một nhu cầu như thế này chắc cũng nhiều người cần nên post ý tưởng xem có bác nào hứng thú thì triển nhé.
Chiều nay mình nhận được bản vẽ thiết kế kiến trúc của đối tác tư vấn, mấy ông này chơi toàn mẫu hatch lạ không có sẵn trong thư viện custom hatch nên chỉ hiển thị chứ không chỉnh sửa được.
Mình nhớ trước đây khi nghiên cứu để viết mấy hàm con entmake object thì cấu trúc code dxf của đối tượng hatch có các thông tin sau:
1. Tên pattern (mẫu hatch) của đối tượng hatch.
2. Giá trị mô tả toàn bộ tập hợp vector cấu tạo ra mẫu pattern của đối tượng hatch.
Như chúng ta đã biết (có thể một số bác không biết), thư viện pattern của hatch được đặt trong 1 file đặt trong thư mục support của cad (tên gì mình cũng quên rồi, post bài này bằng máy tính ở nhà không có Cad các bác thông cảm) . Nó lưu giữ 2 thông tin mình nêu trên và được tải vào cad khi khởi động.
Như vậy với 1 mẫu hatch lạ từ một bản vẽ lạ, ta có thể thu được thông tin của pattern mà mẫu hatch đó sử dụng để cập nhật vào thư viện của mình. Việc cập nhật này cho phép chúng ta làm được 2 việc:
1 là có thể thực hiện thao tác Edit bất cứ đối tượng hatch nào. kể cả là mẫu hatch lạ.
2 là có thêm đồ để chơi cho bằng anh bằng em.
Ý tưởng thì như vậy. Triển khai thì chỉ đơn giản là nhúng thêm 1 đoạn code vào lệnh Hatchedit như sau: đọc mã DXF của đối tượng hatch -> kiểm tra xem tên pattern đã có trong thư viện chưa -> Nếu chưa thì đọc code cấu tạo vector của nó -> ghi thông tin thu được vào file thư viện -> load lại file thư viện -> tiếp tục thực hiện lệnh hatch edit như bình thường.
Mình chỉ nêu ý tưởng và hóng thôi chứ giờ không viết nổi. Thank các bác đã đọc đến đây :D
-
2
-
-
Giải pháp dành cho ai không muốn phải kèm cặp thêm file của bác ĐVH.
- Viết sẵn 1 hạm dịch unicode sang hexcode và đặt trong thư viện hàm con vì còn dùng nó vào rất nhiều việc khác.
- Khi viết code DCL thì nên lựa chọn giải pháp nhúng code DCL vào lisp luôn.
- Đặt hàm dịch vào trước chuỗi code DCL.
Hàm dịch thì mình nhớ trước đây mình đã từng chia sẻ trong diễn đàn rồi.
-
Nếu là mình thì mình "mod" lại lệnh copy cho nhanh. Đằng nào thì cũng phải load lisp
-
Không dùng đuợc cho cad 2007 àh bạn
Mình nghĩ là dùng được vì code mình viết không sử dụng bất kỳ biến hệ thống nào của các bản cad cao hơn. Tuy nhiên Autodesk không cho phép ứng dụng đưa lên store hỗ trợ các bản cad từ 2012 trở xuống.
Bạn cài đặt xong tìm kiếm file Similar Selection (free) v1.0.fas trong ô C. tải nó vào cad là dùng bình thường.
Giờ vẫn còn dùng cad 2007 à (!?) @.@
-
Nhu cầu này thì lên chợ cho nhanh. không thiếu ứng dụng dịch, sử dụng trực tiếp API của Microsoft và GG luôn nên muốn dịch ngôn ngữ nào cũng ok. Dịch và sửa trực tiếp vào text luôn nếu muốn, miễn là text style sử dụng unicode là được.
-
Hàng khủng :D
-
Hỏi ngu chút: block anon là block gì vậy ạ? có phải là loại có tên loằng ngoằng kiểu thế này: (2 . "A$C7DF70B66")
-
Winkey+tab trong trường hợp này cũng không dùng được. Winkey+1~9 thì lại càng rối hơn. Mình dùng Win10. Đành phải chấp nhận chung sống với nó vậy
-
Mình ghi rõ trong phần help rồi nhỉ. Click chuột phải trước khi chọn đối tượng mẫu để gọi hộp thoại thiết lập bộ lọc
-
1
-
-
Còn nếu Cad của em mở 2 bản vẽ. Thì em nhấn Ctrl + Tab để chuyển giữa các bản vẽ với nhau trong cùng 1 chương trình.
Đây chính là vấn đề gây khó chịu. Theo mặc định của Win thì khi Alt+tab ngay phát đầu tiên nó sẽ tự động chuyển sang cửa sổ của phần mềm trước đó, Việc chuyển đổi qua lại giữa 2 ứng dụng diễn ra dễ dàng, nhanh chóng và nhất quán. Cách chuyển đổi như thế này đã hình thành vào thói quen của người dùng window rồi.
Nhưng khi mở từ 2 bản vẽ trở lên thì Autocad chiếm dụng luôn lần bấm đầu tiên cho việc hiển thị danh sách các bản vẽ đang mở. Muốn nhảy sang ứng dụng khác trước đó lại phải bấm thêm tab 1 lần nữa.
Việc này sẽ gây khó chịu khi bạn phải làm việc qua lại giữa 2 cửa sổ liên tục như mình. Khắc phục bằng cách tắt tất cả bản vẽ khác đi không phải là giải pháp tốt trong 1 số trường hợp. Cũng lạ là các diễn đàn của nước ngoài chưa thấy ai kêu ca gì :huh:
-
Có bác nào ức chế khi sử dụng cụm phím này trong các bản autocad từ 2013 trở lên không ạ?. Mình hay phải copy thông tin từ bản vẽ ra word hoặc excel. Nếu mà mở 2 bản vẽ trở lên thì khi Alt+tab để chuyển sang Word hoặc Excel cứ phải nhấn 2 lần. Vấn đề là từ các chương trình khác khi muốn Switch sang cad thì chỉ cần 1 lần Alt+tab. quay ngược lại thì phải nhấn 2 lần. Nó khiến cho việc chuyển đổi qua lại giữa 2 phần mềm khó khăn hơn bình thường.
Hỏi: Có cách nào để khắc phục được không?
-
Mình có 1 ứng dụng đang free cho anh em trên AppStore làm đúng cái việc trên. anh em có thể tải về sài theo link dưới.
https://apps.autodesk.com/ACD/en/Detail/Index?id=1455487038690013482&appLang=en&os=Win32_64
Đây là lisp mà anh em đồng nghiệp đánh giá là đáng giá nhất trong tất cả các lisp mình đã viết. giúp giảm rất nhiều thời gian làm việc với Cad.
Ps: Không cần like bài này. Anh em tải về đừng quên vote 5* cho app để mềnh lấy tiếng nhớ. :D
-
5
-
-
Cháu cảm ơn bác!
Cháu sẽ tìm hiểu bây giờ ạ!
VLide của Cad làm việc này còn đơn giản và chuyên nghiệp hơn nữa.
Bạn tạo 1 project chứa tất cả các file lisp của bạn, tạo thêm 1 file là thư viện hàm con. gom hết các hàm con hay dùng vào đó. Dùng chức năng search để tìm và xóa các hàm con ở các lisp riêng lẻ sau khi đã đưa 1 hàm mẫu vào thư viện hàm con.
Project còn có tác dụng build toàn bộ file lisp của bạn thành 1 file mã hóa duy nhất chỉ với 1 cái click chuột. Sau khi build, nó xuất cho bạn danh sách toàn bộ hàm con (không khai báo hàm cục bộ) và toàn bộ tên lệnh mà project đó có. Ngoài ra còn 1 số thông báo lỗi khác nếu có.
Tiện toppic này nhiều cao thủ ghé qua nên cho mình hỏi. Trong Cad có lệnh nào quản lý việc hiển thị các đối tượng theo layer không nhỉ?
Đại loại là vầy: Mình có 1 bản vẽ rất nhiều layer nhưng có thể phân ra làm các nhóm: Nhóm layer Khảo sát, nhóm layer Thiết kế của từng hạng mục công trình.
Mình đang cần 1 lệnh để quản lý việc bật tắt các nhóm layer này. Mục đích để xem cho dễ. Ví dụ: khi muốn xem bản vẽ khảo sát, chỉ các layer khảo sát bật, còn lại tắt hết,
khi muốn xem bản vẽ điện nước, chỉ các layer nhóm thiết kế điện nước bật.... viêc thiết lập thế nào là do người dùng add vào danh sách quản lý.
-
1
-
-
Chào mọi người, có thể cho em hỏi chút ý tưởng về thuật toán bảo vệ file LISP không, chẳng hạn muốn khoá file LISP để cho file đó chỉ có thể dùng cho 1 máy, trong thời gian 30ngày kề từ ngày đăng ký Lisp lần đầu, hết 30 ngày căn cứ vào mốc thời gian lúc đó tự sinh PASS đăng ký phù hợp (nếu người dùng nhập đúng sẽ cho sử dụng tiếp), khi đó người viết lissp sẽ có Lisp khác tự tạo Key phù hơpj với thời điểm đó và gửi cho Người dùng
Về cơ bản là như vậy, em muốn hỏi mọi người có ý tưởng nào có thể giúp em không. Hiện em đã làm được 1 số việc sau:
Hàm con:
1. Hàm lấy tên máy (tên USER máy tính), định dùng làm nhận diện máy, nhưng chưa ổn lắm không biết có cách khác không
(defun layTenUser(/ str) (setq str (substr (vla-get-supportpath(vla-get-files(vla-get-preferences(vlax-get-acad-object)))) 1 40) str (substr str (+ 7 (vl-string-search "Users\\" str)) 25) str (substr str 1 (vl-string-search "\\appdata" str))) str)
2. Hàm lấy ngày tháng hiện tại(defun NowDate (/ DD MO RR YY) ; lay ngay hom nay (setq rr (rtos (getvar 'cdate) 2 8)) (setq YY (substr rr 1 4) MO (substr rr 5 2) DD (substr rr 7 2)) (list DD MO YY))
3. Hàm lấy ngày kết thúc dựa theo hai thống số: ngày bắt đầu (dạng list) và số ngày cho phép (dạng interger);; Ví dụ dùng (ngKT_tuNg (nowdate) 30) (defun ngKT_tuNg (DStart delta) (setq coTh 0 coYY 0) (setq ngKT (+ delta (read(car DStart)))) (if (> ngKT 30) (setq coTh 1 ngKT (rem ngKT 30))) (setq thKT (+ coTh (read (cadr DStart)))) (if (> thKT 12) (setq coYY 1 thKT (rem thKT 12))) (setq YYKT (+ coYY (read(last DStart)))) (mapcar '(lambda(x) (rtos x 2 0)) (list ngKT thKT YYKT)) (list (apply '+ (mapcar '(lambda(x y ) (* x y)) '( 1 12 365) (list ngKT thKT YYKT))) (strcat (car (setq r1 (mapcar '(lambda(x) (if (< x 10) (strcat "0" (rtos x 2 0)) (rtos x 2 0))) (list ngKT thKT YYKT)))) "." (cadr r1) "." (last r1))) )
mong các bác giúp thêm1. Hàm nhận diện máy.
2. Thuật toán đăng ký lần đầu (1 lần duy nhất)
3. Thuật toán tự sinh Key đăng ký phù hợp với : tên máy, thời điểm đăng ký, thêm một số thônt tín khác thì càng tốt (ví dụ Gmail đăng ký, key có giá trị đăng ký trong 3 ngày,... chẳng hạn
Mình có chút ý kiến chia sẻ với bạn về vấn đề này.
1. Hiện nay việc cấp quyền sử dụng phần mềm hay ứng dụng dần chuyển sang xu hướng quản lý theo tài khoản đăng ký. Cái này đảm bảo quyền lợi cho người dùng khi nâng cấp máy, thay máy hoặc sở hữu nhiều máy cho công việc (máy nhà, máy cơ quan...). Từ Cad 2014 trở lên Autodesk đã hỗ trợ cung cấp ID người dùng thông qua tài khoản A360. Bạn tham khảo các biến hệ thống ONLINEUSERID, ONLINENAME. ID người dùng được cung cấp bởi ONLINEUSERID được đảm bảo là duy nhất cho mỗi User. Tất nhiên nếu bạn bán hàng cho đối tượng người dùng sử dụng cad từ 2013 trở xuống thì cách này không được hỗ trợ.
2 Về cách xác định thời gian dùng thử mình nghĩ chỉ cần dùng biến hệ thống Date là đủ. Khi khởi chạy ứng dụng lần đầu, lấy giá trị của biến Date, mã hóa lại, lưu registry. Các lần chạy ứng dụng sau, lại lấy giá trị biến Date trừ đi giá trị đã lưu registry là ra số ngày sử dụng. Việc mã hóa như thế nào và lưu registry ra sao để khó mò ra thì mình không bàn nhé. Nó phụ thuộc vào khả năng của bạn.
Gợi ý thêm cho bạn về việc mã hóa để tránh decode. Toàn bộ thuật toán mã hóa nên nhúng trong 1 hàm không tên. các công cụ decode file fas hoặc vlx hiện nay như mình biết thì đang bó tay trong việc truy cập nội dung hàm không tên.
3. Thuật toán tự sinh keys đăng ký mình nghĩ cũng không nên bàn, mỗi người có 1 cách làm và chẳng ai giống ai. Nó phụ thuộc vào kiến thức về lĩnh vực mã hóa của mỗi người.
Mình có một số ứng dụng bán trên Autodesk AppStore cũng sử dụng phương pháp trên. Hiệu quả.
-
1
-
SỬA GIÚP MÌNH LISP DÙNG HỘP THOẠI DIALOG?
trong AutoLisp
Đã đăng · Trả lời báo cáo
- *canopy* : Mình có thói quen sử dụng biến toàn cục với dấu hiệu 2 dấu sao 1 trước 1 sau tên biến. Ví dụ *abc*. Nó chỉ là quy ước cá nhân thôi. Vì là biến nên bác muốn sửa thế nào tùy bác.
- (foreach l dcl_code (write-line l file_dcl)): Đoạn code này đứng 1 mình thì hơi khó hiểu. Nôm na thì như thế này
Bác có 1 đoạn chuỗi gồm nhiều dòng string chính là code của DCL nhúng trong code lisp phía trên.
Vì hộp thoại DCL chỉ có thể được gọi khi cad đã được load file code DCL, file này tất nhiên phải có đuôi mở rộng là *.dcl
Do vậy chúng ta tạo ra 1 file tạm có tên là "canopy.dcl" và ghi vào đó toàn bộ code của hộp thoại chúng ta cần. Đoạn code bạn trích dẫn trên là hàm lặp ghi từng dòng code DCL vào file "canopy.dcl" đó. Sao khi ghi xong thì load file DCL rồi xóa nó đi.
- Enter để tự động nhảy từ edit box này sang edit box khác thì thôi tốt nhất là bác từ bỏ đi. Chả làm được đâu, Chắc chắn! Tab thì hình như được. có 1 thông số có tên là tabstop trong code DCL thì phải, mình không nhớ lắm đâu.
- (get_tile "slope") trả về kết quả là 1 string.