Chuyển đến nội dung
Diễn đàn CADViet

Thaistreetz

Nhà quảng cáo
  • Số lượng nội dung

    905
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    30

Bài đăng được đăng bởi Thaistreetz


  1. Mình muốn đổi tên của lệnh objectscale để dung cho tiện nhưng mình không muốn chọn cách sửa file acad.pgp vì 1 vài nguyên nhân

    Chết dở ở chỗ là khi dùng hàm command gọi lệnh này, mình không làm cách nào để nó hiện hộp thoại lên như bình thường được. kể cả cách chạy thông qua 1 đoạn Scrip.

    Các bác xem có cách nào giúp mình không?


  2. Style mặc định và các style đuợc tích hợp sẵn trong Nplus+ không đuợc tối ưu cho Lisp. Function word chỉ hỗ trợ nhận diện các hàm LISP cơ bản, không nhận diện đuợc các hàm AutoLisp và VisualLisp như Vlide. Vì thế mình làm 1 style để tối ưu cho Lisp. các màu sắc của style này mình đặt tuơng tự như Style cho Vilde mà mình đã post lần truớc, đồng thời mình cũng đã add tất cả các hàm AutoLisp, VisualLisp, và ACET vào để chuơng trình có thể nhận diện đuợc (khi viết tên hàm bằng chữ thuờng thôi nhé, không chơi chữ IN HOA)

    Ngoài LISP ra thì Style này cũng đuợc tối ưu cho 3 loại code khác là XML, HTML và JavaScrip. Mình chỉ sử dụng 4 loại code này nên chỉ làm đến vậy. với các loại ngôn ngữ khác các bạn tự thiết lập và bổ sung cho phù hợp với nhu cầu

    Đây là LISP

    tsnplus1.jpg

    Còn đây là HTML

    tsnplus2.jpg

    Bác nào hay sử dụng cái này để viết code Lisp cho mình hỏi: có cách nào để có thể load code trực tiếp từ N++ sang cad không? mình thử thiết lập chạy code bằng cad thông qua F5 nhưng chương trình không khởi động cad được

    • Vote tăng 3

  3. Mình tiếp tục trở thành nạn nhân của 1 trường hợp cực kỳ oái oăm!

    Hay tại mình đã hiểu sai điều gì chăng. có bác nào bị truờng hợp thế này chưa?

    errorts.jpg

    Mình có 2 Vector VecT1 và VecT2. Giá trị của chúng đuợc định như trong hình

    vậy mà không hiểu sao góc hợp bởi 2 vector đó cứ lớn hơn 0 như vậy. với giá trị 0.95 quy ra độ nó gần 50độ chứ có ít đâu :(

    mặt khác, khi mình gõ (angle '(0.25788 0.952772)'(0.25788 0.952772)) vào command thì kết quả trả về 0


  4. Như vậy là ý tuởng của mình là có thể thực hiện đuợc phải không Tu? Cái mình cần chính là điều đó, để mình có thể định hướng được mình cần phải học cái gì để giải quyết công việc của mình. Còn nhờ người khác viết giúp đôi khi gặp nhiều bất tiện như không thể chủ động hoặc mình không thể truyền tải được hết ý tưởng của mình cho người ta hiểu, hoặc đến lúc cần fải chỉnh sửa, nâng cấp cũng khó.

    Đây là 1 hộp thoại và toàn bộ code điều khiển mình vừa hoàn thành xong. thằng này có tất cả 68key. kết quả trả về không cố định về định dạng mà tùy thuộc vào ứng xử của người dùng với chương trình. và tất nhiên là mình không thể nhờ ai đó viết hộ những chương trình fức tạp kiểu như này được fải không nào.


  5. Mình từng viết 1 cái hộp thoại có đến 64key có liên kết và tương tác với nhau. code điều khiển của nó mình mất hơn 1 tuần mới xong, giờ còn mấy cái nữa mà thấy nản quá.

    Ý tuởng của mình là như này:

    - Sử dụng 1 loại ngôn ngữ nào đó hỗ trợ hộp thoại đầy đủ hơn, linh hoạt hơn và có thể tạo ra ứng dụng trong môi trường cad để tạo ra 1 lệnh cho cad, (không nhất thiết fải có liên kết với lisp, chỉ cần tạo ra được ứng dụng cho Cad)

    - lệnh này thực hiện 2 nhiệm vụ: tạo ra hộp thoại cùng với các thao tác điều khiển cho nó. Gán kết quả cho 1 biến nào đó dưới dạng 1 list sau khi đóng hộp thoại. VD: biến ABC = '(integer real string list....) chẳng hạn. và ngay sau khi đóng hộp thoại thì lệnh này tiếp tục thực hiện thao tác gọi 1 lệnh cad khác viết bằng Lisp.

    - Lệnh được viết bằng Lisp đó sẽ lấy toàn bộ các thông số đầu vào từ giá trị của biến ABC được cung cấp ở trên để sử lý.

    Bằng cách này ta có thể có 1 chương trình hoàn thiện được kết hợp bởi 2 lệnh viết bằng 2 loại ngôn ngữ khác nhau.


  6. Nhìn cái hộp thoại mà thèm quá Ketxu ạ. Mình chán DCL lắm rồi.

    Bạn cho mình hỏi, hộp thoai hay ngôn ngữ mà bạn dùng để viết hộp thoại trên có liên kết đuợc với code của Lisp không? code điều khiển của nó có linh động và đỡ fức tạp như Lisp không? Mình vẫn dùng DCL cho các chuơng trinh của mình, viết code điều khiển thực sự rất mệt mỏi mà giao diện lại bị hạn chế quá nhiều khả năng tuơng tác với nguời dùng :(


  7. Dynamic Block, Tiếng việt thì mọi người hay gọi nó là Block động, còn block chứa text att thì gọi là block thuộc tính. nếu không thấy block tự update giá trị sau khi đã thay đổi thì bạn thử regen bản vẽ thử xem. yêu cầu của bạn chưa có ai làm vì nó không đuợc rõ ràng cho lắm. tốt hơn là bạn tải bản vẽ lên, trong đó ghi chú rõ ràng sao cho dễ hiểu nhất ý muốn của bạn. khi đó sẽ có nhiều nguời có thể giúp bạn


  8. uh, mình cũng thấy lạ. Chuơng trình của bạn giải quyết rất tốt, đồng thời có thể chạy độc lập với cad nên rõ ràng tiện dụng hơn nhưng vẫn thấy bác Hà và bác Tuệ viết lại bằng Lisp để rồi đánh vật với nó mà kết quả chẳng ra sao cả. Có lẽ tại tâm lý của những nguời có khả năng viết thuờng không thích dùng hàng của nguời khác.

    • Vote tăng 1

  9. @Bác Hà:

    Mục đích cuối cùng mà một số bác ở đây cần là như thế này:

    Nhập vào chuỗi tiếng việt. Ví dụ: Đang cày Danh tiếng cho thành dân chơi, Thấy bài hay xin hãy nhấn Thanks <= Chuỗi này có thể là Unicode hoặc TCVN3

    Chuơng trình xuất kết quả ra 1 edit_box như thế này: "\U+0111ang c\U+00E0y danh ti\U+1EBFng cho th\U+00E0nh d\U+00E2n ch\U+01A1i, th\U+1EA5y b\U+00E0i hay xin h\U+00E3y nh\U+1EA5n Thanks +"

    Mục đích để copy luôn đem dán vào 1 chỗ nào khác cần nó chứ không cần fải mò mẫm ra tận file text để tìm nó. Chương trình của bác cũng giống hệt chương trình của bác Tuệ post lần trước, không làm được điều đó.

    Lần trước tôi có gợi ý bác Tuệ như thế này:

    (princ "\\U+0111ang c\\U+00E0y danh ti\\U+1EBFng cho th\\U+00E0nh d\\U+00E2n ch\\U+01A1i, th\\U+1EA5y b\\U+00E0i hay xin h\\U+00E3y nh\\U+1EA5n Thanks +")

    nhưng bác ấy kêu không đuợc, tôi vừa test lại thấy bình thuờng. Nghĩa là trong chuỗi kết quả bác tìm các ký tự gạch chéo (\) rồi thêm vào truớc hoặc sau nó 1 ký tự gạch chéo (\) nữa rồi set_tile cho edit_box bằng chuỗi đó. bác thử lại xem.

    • Vote tăng 1

  10. Vậy là bác đã thử decomlile chương trình của nataca nhưng không thành công. Khuyên bác chân thành là đừng cố nữa. Đúng như Ketxu nói, và chỉ có 1 định dạng fas duy nhất cho dù bác có compile bằng cách nào đi nữa. Chủ yếu là thuật toán bác đưa vào để chống decompile thôi. Chuơng trình kia cũng vậy :lol:

    Tốt nhất là nên tự nghĩ ra phương pháp bảo mật cho riêng mình. giả như bác có học được cách của người khác để mã hóa cho phần mềm của bác thì cũng như không. bác sử dụng phương pháp của người ta thì người ta cũng có thể sử dụng chính phương pháp đó để bẻ phần mềm của bác.


  11. Chào các cao thủ trong diễn đàn

    Cho mình hỏi 1 tý là có chương trình nào mã hoá từ file *.lsp thành file *.fas hay không vậy?

    Đặc biệt là không xài câu lệnh 'vlisp-compile' để mã hoá

    Ai biết chỉ giùm với

    Cám ơn nhiều

    Đọc hoài không hiểu ý bác. Ý bác là có nhiều định dạng fas khác nhau chăng?

    và như thế sẽ có thể tạo ra 2 file fas có cấu trúc hoàn toàn khác nhau từ cùng 1 file nguồn là LSP?

     

    Còn cách tạo ra file fas thì trước đến giờ mình chỉ biết 2 cách: Make application cùng với VLX và Make project fas từ Project. và cả 2 cách đều fải sử dụng Vlide.

    Có 1 vài phần mềm (chắc bác cũng biết rồi) có thể chuyển đổi VLX thành fas. có thể coi là cách thứ 3 cũng được.


  12. Ah, bạn makeblock bằng các đối tuợng có màu bylayer. Mình chưa sử dụng vào truờng hợp này nên chưa fát hiện lỗi.

    Bạn sửa dòng này

    (if (nth 4 LL) (cons 62 (nth 4 LL)))'(100 . "AcDbText")

    bằng dòng này

    (if (nth 4 LL) (cons 62 (nth 4 LL))(cons 62 256))'(100 . "AcDbText")

    hoặc có thể copy lại code mình đã edit ở trên.

    về vấn đề invisible mình chưa làm được.

    • Vote tăng 1

  13. Dựa theo thuật toán của bác elleHCSC và code do bác DuongTrungHuy triển khai. Mình viết lại 1 hàm con cho bác nào có nhu cầu. Hàm này dùng để kiểm tra xem 1 điểm bất kỳ (kể cả điểm đó nằm xa về 2 phía đầu mút của Curve) có nằm bên trái 1 Curve hay không. Nếu thỏa mãn hàm trả về T, nếu điểm nằm bên fải hoặc nằm trên Curve hàm trả về nil. cảm ơn các bác elleHCSC và DuongTrungHuy đã giúp mình xây dựng hàm này.

    (defun Check-point-left-curve (ename point / ptx1 ptx2 x1 y1 Ldai Lent)
     (setq ptx1 (vlax-curve-getClosestPointTo ename point)
           Ldai (vlax-curve-getdistatpoint ename ptx1)
           Lent (vlax-curve-getdistatpoint ename (vlax-curve-getEndPoint ename)))
     (if (< Ldai Lent)
       (progn
         (setq ptx2 (vlax-curve-getPointAtDist ename (+ Ldai 0.1)) x1 (car ptx1) y1 (cadr ptx1))
         (if (> (* (- (car ptx2) x1) (- (cadr point) y1)) (* (- (cadr ptx2) y1) (- (car point) x1))) T Nil))
       (progn
         (setq ptx2 (vlax-curve-getPointAtDist ename (- Ldai 0.1)) x1 (car ptx2) y1 (cadr ptx2))
         (if (> (* (- (car ptx1) x1) (- (cadr point) y1)) (* (- (cadr ptx1) y1) (- (car point) x1))) T Nil))))

    • Vote tăng 1

  14. Sorry bác DuongTrungHuy. hôm nay mình để ý đến topic này mới biết bài bác gửi.

    Đoạn code của bác tuyệt quá. Cảm ơn bác.

    Còn đây là đoạn code của mình. nó chạy không ổn định, thỉnh thoảng nó cho kết quả sai. có thể do là do thuật toán.

    (defun c:test nil
    (setq EN1 (car(entsel "Chon Curve"))
         ptx1 (trans (getpoint "\nchon diem xet") 1 0)
         Ptx2 (vlax-curve-getClosestPointTo EN1 Ptx1)
         Vec (Vlax-curve-getfirstderiv EN1 (vlax-curve-getParamAtPoint EN1 Ptx2)))
    (if (equal (- (angle '(0 0) (cal "vec(Ptx2,Ptx1)")) (angle '(0 0) Vec)) 1.5708  0.01)
     (prompt "\nTrai") (prompt "\nPhai")) (princ))


  15. @Thaistreetz: mình dùng lisp của bác thì gặp 2 vấn đề:

    - đối tượng của mình để màu BY LAYER thì giá trị hàm (if (nth 4 LL) (cons 62 (nth 4 LL))) là nil dẫn đến lỗi "error: bad DXF group: nil", mình chỉ định mã màu luôn thì qua được bước này.

    - (dxf 330 (entmakex (list '(0 . "SEQEND") (cons 8 (if Layer Layer (getvar "Clayer"))))))) dòng này bị báo lỗi "error: no function definition: DXF", mong bác bổ sung hàm DXF này :) !

    Oh, tại mình không để ý cái hàm con.

    (defun DXF (code en)(cdr (assoc code (entget en))))

    Về vấn đề màu Bylayer, bạn có thể up bản vẽ lên để mình test lại không? code mình viết thế kia là đã loại bỏ trường hợp màu là bylayer rồi.

    • Vote tăng 1

  16. Kêu bác Tue_NV không được, nhưng kêu bác cũng không nốt, có gì tôi post sau.

    Vấn đề bác cần, tôi đã trả lời cho bác ở bài #30. fần quan trọng và khó nhất tôi đã chỉ ra cho bác cách làm. Bác là lập trình viên, hay ít nhất là người có kiến thức về lisp và có khả năng lập trình lisp, không lẽ tôi lại triển khai code luôn hộ bác. mặc khác, bác đâu fải tay không bắt giặc, bác có cái code convert TCVN-Unicode rồi thì việc triển khai code ngược lại đâu có gì khó khăn. có thể nói là gần như y hệt

    1.^^

    2.Mình nghĩ Alert theo font message box, còn Princ theo font của commandLine, chắc đôi khi bị khác ^^

    Font của message box khác font của DCL. điều này gây ra 1 số bất tiện. vậy thì sao không viết 1 cái hàm con sử dụng DCL làm thông báo thay cho Alert nhỉ. viết khá đơn giản, thiết kế tốt nhìn sẽ thẩm mỹ hơn và còn có thể thêm nhiều lựa chọn hơn Alert nữa.


  17. Ý em là 18 cái nháy \U ý ^^, bất kể nó đứng gần hay xa nhau..Nhưng có lúc lại còn ít hơn. Cái này chắc phải hỏi Autodesk. Bộ gõ TV bác giới thiệu e cũng thi thoảng dùng nè ^^ Giờ có khá nhiều chương trình type TV

    Có lẽ fải hỏi autodesk thật, vì mình... chưa bao giờ gặp fải lỗi này. Có những chuỗi mình sử dụng đến khoảng 30 ký tự \U (sau khi convert) cũng không gặp vấn đề bạn nêu. đây là 1 ví dụ

    zzzzzzz.jpg


  18. mình làm thế này thì sai ở đâu mà không đuợc thế bạn:

    (vl-remove-if '(lambda (x) (= (car x) A)) '((a 1) (a 20) (1 30)))

    thank!

    làm lambda bạn định nghĩa bên trên sẽ tìm tất cả những thằng nào có giá trị đầu tiên = a để cung cấp cho hàm vl-remove-if. 2 thằng đầu tiên thỏa mãn vì thế sẽ bị loại bỏ.kết quả còn lại 1 thằng duy nhất là (1 30)

    anh em đang đoán mò cái kết quả bạn muốn thu đuợc đấy. bạn muốn nó là ((a 20) (1 30)) hay ((a 21) (1 30)) đúng như bài 1 của bạn.


  19. @ketxu: code của bạn sẽ không "miss" bất kỳ ATTRIB nao nếu các đối tuợng gốc ATTDEF có điểm canh lề là left. nguợc lại nó sẽ "miss" tất cả ATTRIB nếu đối tuợng gốc ATTDEF có điểm canh lề khác left. mà sự khác nhau giữa canh lề kiểu left và những kiểu còn lại chắc bạn biết rồi.

    PS: "Miss" mình để trong dấu nháy kép vì thực ra nó không hề miss. zoom extents sẽ thấy liền. bạn chưa giải quyết đuợc vấn đề là do chưa chịu đọc kỹ code của mình.

    • Vote tăng 1
×