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

TRUNGNGAMY

Thành viên
  • Số lượng nội dung

    410
  • Đã tham gia

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

  • Ngày trúng

    2

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


  1. Cám ơn các bạn đã chỉ dẫn. Tại vì cái code đó mình để trong trong trình với nhiều thứ khác, nếu lỡ găp trường hợp kg tính được nó báo lỗi rồi ngưng luôn thì CT bị gãy (ví dụ gặp Hatch not associative), do đó mình muốn kiểm tra nếu kg tính dc thi thôi xử lý kiểu khác.

     

    Đã kiểm tra code của bác Ha lúc nào cũng trả về nil còn của bác Tot77 thì lỗi khi gặp Hatch not associative


  2. Yêu cầu 2 mình thấy trên lisp đã bàn rồi, bạn qua đó mà tìm.

    Còn trên arx thường ít có mấy hàm làm sẵn như lisp, hoặc có mà mình kg biết hay cad kg công bố. Nếu lập danh sách mà dò thì lâu lắm (khi dữ liệu lớn). Mấy việc dài hơi này phải có ý tưởng rõ ràng, nên sử dụng một lớp của VC++ hỗ trợ hay cơ sở dữ liệu giúp cho việc tìm kiếm nhanh hơn


  3. Cám ơn bạn. Ý mình là trên bản vẽ có hàng ngàn hatch Lisp phải tìm ra để xử lý. Theo chỉ dẫn của bạn mình làm đc TH thông thường.

     

    Cũng có loại hatch không biết hình thành kiểu gí mà kg làm vậy được bạn ạ.http://www.cadviet.com/upfiles/4/37170_vd4_1.dwg

    Cái hatch đó còn kg tính đc diện tích, tách nó ra đc may ra, mình chưa làm đc TH này


  4. Định mở mục mới nhưng viết ở đây luôn cho tiện kg biết đc kg.

    Mình có một vài xử lý trên Hatch nhưng nó phức tạp quá khi Hatch dính chùm nhau.

    Nhờ các bạn viết giúp mình đoạn lisp kiểm tra và tách những hatch "dính chùm" thành những hatch độc lập như file sau:

    http://www.cadviet.com/upfiles/4/37170_vd4.dwg

    Cám ơn các bạn


  5. Mình kg biết những trả lời của mình có giúp gì cho bạn kg.

    Mình tiếp cận arx theo kiểu lisp và các hàm ads (kg biết bạn biết lisp chưa). Mỗi hàm của lisp gần như có hàm ads tương ứng.

    Ví dụ về chọn đối tượng lisp có ssget thì ads có ads_ssget , thêm đối tượng ssadd (tương ứng ads_ssadd), xóa có ssdel (ads_ssdel), kiểm tra đối tượng đã có trong tập hợp chọn chưa có ssmemb (ads_ssmemb) ... Như vậy, để chọn, thêm, xóa hay kiểm tra một đối tượng đều được thông qua ename của nó.

    Theo như một số bạn thì cách viết này dễ nhưng chậm. Do mình biết lisp đã lâu, lúc đó chỉ có autolisp hơi yếu chứ chưa có viúallisp mạnh như bây giờ nên mình muốn tận dụng một số nguồn lực do ngôn ngữ VC++ và Delphi hỗ trợ như mảng, danh sách và cơ sở dữ liệu ... để xử lý dữ liệu lớn nhưng mình kg phải là dân bài bản nên chỉ làm theo các file mẫu thôi.


  6. Đang mày mò tìm cách khắc phục các lỗi trên.

    - Về lỗi pl1 nằm trong pl2 hay ngược lại thì đang tạm chữa cháy bằng cách dùng kiểu chọn (ssget "cp" ..) và (ssget "wp" ..) để loại trừ trước khi đưa vào xử lý.

    - Còn lỗi 2 (file trên) thì thấy nếu 1 trong các pl đưa vào xử lý mà có ít nhất 2 đỉnh trùng hay chéo nhau tức thì sinh lỗi và CT dừng lại. Mình đang nghĩ cách kiểm tra và bỏ qua TH này. Nếu bác Tue_NV có cách nào xử lý triệt để hơn xin chỉ giúp.

    Cám ơn bác


  7. Mình cũng bị tương tự các bạn này. Mình cũng in qua mạng máy chủ cài win xp. Nếu mình chạy trên win xp thì từ cad 2002 đến 2013 đều preview và in bình thường, nhưng nếu chạy trên win 7 thì việc preview và in khó tăng lên theo phiên bản cad. Nghĩa là trên win7, cad 2002 tương đối bình thường, trên cad2007 cũng tạm ổn, 2010 có khó khăn hơn khi đc khi kg, trên cad 2014 thì chỉ in trên khổ litter thôi, chuyển khổ A3 hay khổ khác thì báo lỗi như của bạn trên, trên cad2015 thì kg in được.

    Mình chẳng hiểu tại sao. Bạn nào biết chỉ giúp. Cám ơn


  8. Chào Tue_NV.

    Mình lại có chút việc nhờ đến bác. Khi gặp trường hợp đường pl1 nằm gọn trong pl2 hay ngược lại thì nó báo lỗi như sau:

     

    Command: TGPL

     Chon PLINE 1 :
     Chon PLINE 2 :
    Select objects:
    Select objects:  ; error: AutoCAD.Application: Not applicable
     

    Phiền bác chỉnh bổ sung giúp mình và vẫn giữ cái biến trả về có 3 thành phần như cũ, thành phần nào kg có bác cho nó bằng nil giúp vì mình dùng nó cho một số việc khác .

     

    Có trường hợp này mình chạy nó báo lỗi,

     

    Chon PLINE 1 :
     Chon PLINE 2 :
    Select objects:
    Select objects:  ; error: AutoCAD.Application: Invalid input
     

    bác xem giúp: http://www.cadviet.com/upfiles/4/37170_vd3.dwg

    Cám ơn bác.

    • Vote giảm 1

  9. Cám ơn Tue_NV rất nhiều, kg biết nói gì hơn, bác đã làm cả chủ nhật để giúp mình. Có vẻ như bác biết đc mình sẽ muốn gì thêm nên đã làm luôn rồi. Có điều cái biến bác lưu là dạng gì mình chưa dùng nên chưa hiểu, nó kg phải dạng ename thông thường thì phải. Nếu muốn tính diện tích hay hatch một phần từ trong biến đó thì làm thế nào.

    Ý mình nói cái này:

     

    Command: !lst-r1
    (#<VLA-OBJECT IAcadRegion 09e3fd04> #<VLA-OBJECT IAcadRegion 09e3fca4> #<VLA-OBJECT IAcadRegion 09e3fe24> #<VLA-OBJECT IAcadRegion 09e3fdc4>)
     

    Mong bác chỉ giúp


  10. Mình muốn phân biệt 3 trường hợp riêng như trong hình của file gởi kèm. http://www.cadviet.com/upfiles/4/37170_vd2.dwg

    - Trường hợp hỏi thêm mình muốn có 1 hàm lưu 2 biến đầu vào (biến 1 lưu pl màu đỏ - có thể có lỗ thủng, biến 2 là các pl màu xanh bất kỳ) sau đó kiểm tra cho biết mỗi pl màu xanh sẽ nằm trong, ngoài hay giao với pl màu đỏ - kq trả về cũng lưu vào list).

    Mình hỏi thêm hơi nhiều, lúc nào bác thấy hứng thú làm giúp.

    Cám ơn bác


  11. Công nhận bác Tue_NV làm hay thiệt. Mình đại khái biết lệnh regon có thể tạo các pl từ một đống các line đồng qui. Nhưng làm cách nào mà bác biết đc cái pl mới tạo thành nằm ngoài hay trong cái pl chuẩn vậy. Giả sử mình muốn biết các pl mới tạo nằm ngoài pl chuẩn màu đỏ nhưng nằm trong pl màu xanh thì làm thế nào (kể cả TH có lỗ thủng). Nếu được bác tạo lưu riêng các pl đó vào biến khác giúp.

    Cám ơn bác nhiều.

     

    (P/s : Lisp kg chạy đc trên cad2010 bác ạ. Mình phải thử trên cad2015, hơi nặng

    - Bác cho mình hỏi thêm cái này tý: giả sử mình có 1 pl màu đỏ làm chuẩn và các pl màu xanh bất kỳ khác, làm sao xác định đc từng cái pl màu xanh đó nằm trong, ngoài hay giao với pl màu đỏ)


  12. Cám ơn Tue_NV.

    Xin lỗi các bạn, lúc đưa vđ mình quên cái này, trường hợp lỗ thủng tuy ít gặp nhưng vẫn có. Mình làm bên địa chính đôi lúc cũng có thửa đất bị thủng như thửa ruộng lớn mà có ao hay vườn nằm lọt thỏm ở giữa vậy.

    http://www.cadviet.com/upfiles/4/37170_vd1_1.dwg


  13.  

    Bác TrungNgaMy sử dụng Lisp này nhé:

    (defun c:tgpl(/ e1 e2 Region lst-p lst-tam lst-line)
      (if (setq e1 (car (entsel "\n Chon PLINE 1 :")))
        (if (setq e2 (car (entsel "\n Chon PLINE 2 :")))
          (progn
                (setq Region (vlax-invoke (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
                                                      'addregion (list (vlax-ename->vla-object e1) (vlax-ename->vla-object e2)))
                )
                (vla-Boolean (car region) 1 (cadr region))
                (setq lst-line (vlax-invoke (vlax-ename->vla-object (entlast)) 'explode))
                (if (/= (cdr(assoc 0 (entget (entlast)))) "LINE")
                                        (setq lst-line (mapcar '(lambda(x) (vlax-invoke x 'explode)) lst-line))
                )
                (setq lst-p nil lst-tam nil)
                (if (null (eq (type (car lst-line)) 'LIST)) (setq lst-line (list lst-line)))
                (foreach x lst-line
                  (foreach y x
                    (setq lst-tam (append lst-tam (list (vlax-get y 'startpoint)(vlax-get y 'endpoint))))
                    (vla-highlight y :vlax-true)
                  )
                  (setq lst-tam (Tue-list-removetrung lst-tam))
                  (setq lst-p (append lst-p (list lst-tam)) lst-tam nil)
                )
         )
         )
       )
      lst-p
    )
    (defun Tue-list-removetrung (lst / lst1)
      (foreach x lst
          (if (not (member x lst1)) (setq lst1 (append lst1 (list x))))
          (Progn
                  (foreach y lst1
                     (if (equal y x 1.0e-8)
                        (setq lst1 (vl-remove y lst1))
                     )
                   )
                            (setq lst1 (append lst1 (list x)) )
           )
        )
      lst1
    )
    

    Cám ơn Tue_NV.

    Đôi lúc mình cứ băn khoăn tại sao cũng biết Lisp mà cứ hay nhờ đến các bạn. Đến khi đọc Lisp các bạn viết rồi thì giải tỏa ngay đc băn khoăn của mình. Các bạn toàn dùng những hàm mới mình chưa từng biết và cũng khá khó hiểu khi đọc nó. Mình đã thử Lisp của bạn trên cả pl toàn line và khi có arc đều đúng. Khi nào rãnh, bạn cho mình hỏi lý:

    - cái danh sách tọa độ trả về đúng cho tất cả mọi trường hợp hay chỉ đúng khi pl toàn line

    - nếu dùng cái danh sách đó để tính diện tích (bằng công thức tọa độ) thì có đúng kg khi pl có arc ....

    - làm thế nào bạn có thể vẽ lại hình dáng của nó khi có cả arc.

    ** Trường hợp trong pl thứ 2 (pl thứ nhất vẫn làm chuẩn giới hạn) có 1 vài pl nhỏ (kiểu pl có lỗ thủng) thì có giải quyết đc kg bạn

     

    @quangnguyen50 : mình đã xem Lisp và tham khảo đường dẫn của bạn chỉ, có lẽ mình se nghiên cứu từ từ vì trên đó chỉ có hàm nên kg thửa ngay đc. Cám ơn bạn


  14. Cám ơn tien2005, mình đã xem lisp đó.

    Ý mình muốn tìm ra phân giao bên trong polyline chuẩn và tím ra nó bằng danh sách các point để khi cần có thể tính diện tích hay làm việc gì đó chứ kg cần vẽ nó ra hết. Mình cũng chưa hiểu hết lisp trên chưa thể sửa đổi gì đc theo ý mình.

    Mình muốn kq ra kiểu như (list (list 1) (list 2) ...) với list 1 .... là các danh sách các đa giac giao của pl bất kỳ bên trong pl chuẩn


  15. Vùa gởi xong mình thấy có đề tài tương tự ở đây (nhưng nó cũng chưa đến hồi kết):

    http://www.cadviet.com/forum/topic/28157-tinh-dien-tich-tao-nen-tu-nhung-vung-giao-nhau-giua-2-duong-polyline/

    Thật ra vd này mình đã có vài ý tưởng nhưng nó hơi phức tạp nên muốn xem các bạn có ý tưởng ngắn gọn hơn kg. Mình nghĩ để có thể làm được nên đi theo hướng như vậy:

    - Có hàm tính diện tích theo toạ độ (có lẽ đã có)

    - Lập danh sách toạ độ các line, điểm giao xem như bắt đầu 1 line khác;

    - lượt qua danh sach các line, Bỏ qua các line bên ngoài pl chuẩn.

    - Bắt đầu 1 line bên trong pl chuẩn tính điện tích, nếu line nào nằm trên pl bất kỳ thì xoá khỏi danh sách, xét cho đến hết sẽ hoàn thành bài toán.

    Có lẽ thế, nhưng mình viết lisp hơi tệ. Mong các bạn có kinh nghiệm viết bằng vl giúp đỡ.

    Nếu kg mình cũng sẽ từ từ viết bằng ngôn ngữ líp cũ của mình, có thể sẽ gặp nhiều khó khăn vì mình kg biết các hàm tiên tiến mới của vl


  16. Chào các bạn cadviet thân mến!

    Mình biết đề tài mình đưa ra yêu cầu không mới với các bạn, có lẽ nó đã được nêu cụ thể hoặc có liên quan ở đâu đó rối. Nếu có rồi xin các bạn chỉ giúp, nếu chưa có xin các bạn bỏ tý thời gian gúp mình vài gợi ý để có thể xong đc vd này. Trước hết xin cám ơn các bạn.

    + vd mình đưa ra thế này:

    - Có một polyline (trước hết xét dạng đơn giản toàn line) hơi phức tạp làm chuẩn (màu đỏ) và một polyline bất kỳ khác (màu xanh), làm thế nào tìm ra tất cả phần giao của pl bất kỳ trong pl làm chuẩn đó. Mục đích để mình tô màu và tính diện tích phần giao bên trong đó một cách tự động. Các bạn nhìn trên hình chính là phần giao ô vuông

    http://www.cadviet.com/upfiles/4/37170_vd1.dwg

     

     


  17. Các bạn thân mến.

    Trước giờ viết trên Arx mình không làm cách nào gỡ rối được. Mình nghĩ khi biên dịch xong mới vào cad chạy do đó đã tách khỏi trình biên dịch nên không gỡ rối được (ý mình nói không phải lỗi do cú pháp gây ra). Mỗi lần như vậy rất khó khăn để tìm ra vị trí gây lỗi.

    Vậy có cách này để trình biên dịch báo lỗi trên code như khi mình viết và biên dịch trực tiếp ra file exe không. Bạn nào biết chỉ giúp mình với.

    Cám ơn các bạn


  18. Cad 2015 rắc rối thật, tự nhiên thêm chữ s. Mình thấy trong Arx cũng bị như vậy. Chắc phải nhận ra phiên bản để líp tự động dùng command hay command-s chứ chẵn lẽ làm 2 cái líp khác nhau rất bất tiện. Bác nào biết biến hệ thống nào phân biệt đc phiên bản cad cập nhật luôn cho anh em đỡ khổ. Cám ơn

×