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

vanlam6408

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

    48
  • Đã tham gia

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

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


  1. Em chào mọi người ạ!Em muốn chuyển layer của một đường tròn (ở layer1) đã chọn được trong 2 trường hợp:

    -Th1: chuyển sang layer 2 với các thông (màu sắc,đường nét,chiều rộng...) đều về by layer của layer 2

    -Th2: chuyển sang layer 2 với các thông (màu sắc,đường nét,chiều rộng...) đều về dạng hiện hành của layer 2 khi layer 2 đang ở hiện hành.

    thì trong cả hai trường hợp em có đặt dòng lệnh (vla-put-layer circle (getvar "clayer")) (giả sử circle là đối tượng đường tròn đã chọ được trước đó) nhưng chỉ chuyển được layer 1 sang layer 2 còn các thông số về màu sắc ,đường nét,chiều rộng ...thì không chuyển được.

    Mong Các anh chị có thể chỉ cho em trong mỗi trường hợp trên muốn chuyển được layer trong mỗi trường hợp thì dòng lệnh nên như thế nào  ạ.Cảm ơn các anh chị ạ!

    truong hop 1.png

    truong hop 2.png


  2. 19 phút trước, Biet ve CAD đã nói:

    Chà chà, đọc đến đây mới biết lý do bạn yêu cầu phân biệt HCN được tạo từ lệnh Rectang, và Pline

    1 = HCN tạo  = Rectang có 4 cạnh, 4 đỉnh, và close

    2 = HCN tạo = Pline - pick 4 điểm, với tùy chọn "C" là tương đương lệnh Rectang

    3 = HCN tạo = Pline - pick 5 điểm, không close

    4 = HCN tạo = Pline - pick 5 điểm, với tùy chọn "C" là có 5 điểm, 5 cạnh, trong đó 1 canh = 0

    Vậy bạn đang cần phân biệt 1,2 với 3 4 đúng ko ?

    hi,không phức tạp thế đâu bác ơi,mà như thế cũng chưa liệt kê được hết các trường hợp tạo ra một hình có dạng hình chữ nhật ,cũng như các hình mà em vẽ không nhất thiết có dạng hình chữ nhật ,nó có thể có 5,6...cạnh,có cung tròn....Nhưng mình không quan tâm đến cách vẽ nó bác ạ,chỉ làm sao xét thấy hình hiện tại là polyline có  điểm đầu và điểm cuối của  đường pline này mà nó trùng nhau thì tô màu vàng cho khỏi sót thôi ạ.

    Mà bác bảo nét cảm ơn là nút vote đấy hả bác?

     


  3. 2 phút trước, ngokiet đã nói:

    Đọc hiểu ý chủ thớt thôi cũng mệt.

    Mình có 2 lisp này viết cho vui.

    - Lisp 1. Loại bỏ dỉnh trùng nhau liên tiếp và tụ động close pline nếu điểm đầu cuối trùng nhau.

    
    (defun c:fixpl(/ fpl)
      (defun fpl(e1 / c s1 s2 s3 st pn)
        (setq e1 (entget e1)
    	  s1 (vl-remove-if '(lambda(x / sa) (Cond ((= (Setq sa (car x)) 10)
    						   (setq s2 (cons (reverse st) s2)
    						         st (list (cdr x))))
    						  ((member sa '(40 41 42 91)) (setq st (cons (cdr x) st)))))
    	       e1)
    	  c (cdr(assoc 70 s1))
    	  s2 (cdr (reverse (cons (reverse st) s2)))
    	  pn (car s2))
        (foreach x (cdr s2)
          (if (>= (distance (car pn) (car x)) 1e-6)
            (setq s3 (cons pn s3)))
          (setq pn x))
        (if (< (distance (car pn) (car(last s3))) 1e-6)
          (setq c 1)
          (setq s3 (cons pn s3)))
        (entmod (append (subst (cons 70 c) (assoc 70 s1) (subst (cons 90 (length s3)) (assoc 90 s1) s1))
    		      (apply 'append (mapcar '(lambda(x) (mapcar 'cons '(10 40 41 42 91) x)) (reverse s3))))))
      (mapcar 'fpl (acet-ss-to-list (ssget '((0 . "LWPOLYLINE")))))
      
      (princ))

    Lisp 2. Là chọn nhanh polyline theo cạnh hay open/close. Muốn đổi màu hay làm gì thì tùy.

    
    (defun c:sspl(/ a)
      (initget 0 "Open Close")
      (if (setq a (getint "Chon so dinh polyline [Open/Close]:")
    	    a (cond ((= a "Open") '(70 . 0))
    		    ((= a "Close") '(70 . 0))
    		    (a (cons 90 a))))
        (sssetfirst nil (ssget (list '(0 . "LWPOLYLINE") a)))))

    Ai thích thì có thể thêm chọn nhanh hình chữ nhật, polygon thì tùy.

    ngokiet cảm ơn bác nhiều ạ!


  4. 12 phút trước, Biet ve CAD đã nói:

    1. Do bạn lúc thì polyline, lúc thì là region ( mà bản vẽ chả thấy region đâu ^^) nên bác @duy782006 nói cũng đúng, trước sau phải nhất quản để lisp chạy đúng ý đồ, các bác viết lisp cũng ko phải đoán già đoán non

    2. Nếu lisp chạy ứng ý thì bạn chỉ cần nói cảm ơn thui, để biết là lisp đã chạy đúng ^^

    3. "nhập vào số cạnh là 4 thì không thấy có điều gì xảy ra bác ạ,nghĩa là tất cả đều giữ nguyên màu như cũ" do bản vẽ bạn ko có polyline 4 cạnh ( ko tính HCN )bạn thử vẽ hình chữ nhật và hình vuông rồi nhập là 4 xem

    4. tại sao lại phải là pline kín à bạn , hay là nếu ko phải pline kín thì tự động chuyển qua màu khác, màu đen chẳng hạn ^^

    em vẽ hình chữ nhật và hình bình hành bằng lệnh polyline rồi thử nhưng không thấy thay đổi gì bác ạ.

    cái đường pline này mặc dù có điểm đầu và điểm cuối trùng nhau nhưng nếu kích vào bảng properties sẽ thấy ở mục Misc ,chỗ Closed là No,trong lúc với pline kín được vẽ bằng rectang hay polygon ....thì nó lại là yes.Cái này anh cứ kích vào hình vẽ trong file cad em tải lên anh sẽ thấy rõ sự khác nhau giữa chúng ạ.Cái này là do người sửa hình họ dùng lệnh pline vẽ một vòng rồi đóng kín hình vẽ về điểm đầu ,họ bắt điểm về điểm đầu chứ không dùng "c"(để đóng đường) khi kết thúc đường pline.Nên em muốn dùng lisp M3 để đổi màu vàng những đường này ạ


  5. 3 phút trước, Doan Nguyen Van đã nói:

    Cuối cùng cũng rõ là 2 lệnh này, ^^, các bác vất vả rồi @duy782006 @Biet ve CAD

     

    2 phút trước, duy782006 đã nói:

    Mô phật region và polygon (chứ không có lệnh polygion).

    vâng,đúng thế ạ,tại thẻ properties đều hiện là đường polyline nên không phân biệt được,chỉ phan biệt được chúng qua hình ảnh ạ


  6. 12 phút trước, duy782006 đã nói:

    Vấn đề là file cad của bạn đưa ra không có đối tượng region nào cả.

     

    Tôi ví dụ quá trình tạo ra đối tượng region và dùng lệnh li để xem thuộc tính của nó.

    Command: l
    LINE Specify first point:
    Specify next point or [Undo]:
    Specify next point or [Undo]:
    Specify next point or [Close/Undo]:
    Specify next point or [Close/Undo]:
    Specify next point or [Close/Undo]: c

     

    Command: region

    Select objects: Specify opposite corner: 5 found

    Select objects:
    1 loop extracted.

    1 Region created.

    Command: li
    LIST

    Select objects: 1 found

    Select objects:
                      REGION    Layer: "thay-130"
                                Space: Model space
                       Handle = 48bd0
                                 Area: 2994375.1132
                            Perimeter: 6697.2703
       Bounding Box: Lower Bound X = -898133.8829, Y = -976848.3199, Z = 0.0000
                     Upper Bound X = -895846.3343, Y = -974981.8339, Z = 0.0000

    Bác ui,chắc bác bận nhiều việc quá nên quá tải nhầm file hoặc chưa xem kĩ chăng,chứ file em gửi có chữ lisp 2 em khoanh tròn trong đó chỉ có mỗi 2 loại hình là chữ nhật được vẽ bằng lệnh rectang và đa giác 5 cạnh,6 cạnh đều vẽ bằng lệnh polygion mà bác,ngoài ra còn có cả file ảnh có thể xem ngay mà không cần bật cad lên ạ


  7. 47 phút trước, Biet ve CAD đã nói:

    Chà chà, ^^, mình chạy trên file bạn vẫn ok mà

    với bản vẽ bạn, bạn cho tất cả sang 1 màu nào đó ( màu blue chẳng hạn ), rồi dùng lisp mình, khi hỏi chọn số cạnh thì nhập 6 chẳng hạn ^^, thì tất cả các polyline có 6 cạnh sẽ chuyển qua màu vàng

    Tương tự các cạnh khác

    nhớ là pline kín đấy nhé

    bác biet ve cad cảm ơn bác,em làm được rồi ạ.tuy nhiên em chưa hiểu lắm chỗ bác nói nếu nhập vào 4 thì các polyline chữ nhật đều giữ nguyên ,còn lại đều được chuyển,nhưng em thấy nếu nhập vào số cạnh là 4 thì không thấy có điều gì xảy ra bác ạ,nghĩa là tất cả đều giữ nguyên màu như cũ.

    Ngoài ra,nhân đây em muốn nhờ các bác viết giúp thêm em lệnh M3 có chức năng đổi màu vàng các polyline có điểm đầu và điểm cuối trùng nhau được không ạ?Vì với bản vẽ lúc em gửi đi em thường dùng lệnh region hoặc ractang để vẽ đa giác nhưng khi bản vẽ gửi về yêu cầu chỉnh sửa lại có cả các polyline không kín nhưng có điểm đầu và điểm cuối trùng nhau  trông như các polyline kín thật.Thì em muốn các bác giúp em cái lisp này nữa để em thủ sẵn,nếu mà gặp trường hợp này có thể dùng tiếp lisp M3 này để đổi màu chúng luôn.

    Em rất biết ơn các bác ,đặc biệt là bác và các bác Duong Nhat Duy, Doan Nguyen Van đã lưu ý vấn đề của em và trực tiếp nhiệt tình code giúp em ạ!

    Em cũng mới tham gia diễn đàn thì cũng chưa biết rõ về quy định của diễn đàn,bác cho em hỏi trên diễn đàn nếu muốn thể hiện cảm ơn các bác thì có thể nhấn vào nút Like hay chỗ nào ạ?

    lisp M3.png

    nho viet lisp - M3.dwg


  8. 5 giờ trước, duy782006 đã nói:

    -Tôi nghỉ đã giải thích rất rạch ròi về quan điểm polyline,region,rectang.

    -Bạn đẩy 1 vòng xong vẫn lẫn lộn như cũ. Tôi đành load file cad về dòm:

    +Khẳng định với bạn là các đối tượng của bạn điều là pline cả nghĩa là bạn ném cái chử region ra khỏi đầu đi và ra lại đề cho nó đúng.

    +Pline thì có thể lọc ra là nó có mấy cạnh. (cái này thì @Doan Nguyen Van đã viết rồi còn gì) Nếu muốn đa giác 4 cạnh phải là hình chữ nhật nghĩa là 2 cặp cạnh song song bằng nhau và có góc vuông thì yêu cầu thêm người ta sửa.

    Ui bác ui,bác xem xét lại coment của em,em không cố ý làm lộn xộn vấn đề đâu bác ui.Chả là em đọc coment của bác lần đầu em thấy bác có đề cập đến có thể phân biệt được các đối tượng này dựa vào sự khác nhau giữa chúng dựa vào thông tin trong dxf của chúng nên phần sau em mới suy nghĩ đến khả năng chọn các ra được các region ,polyline,hay rectang riêng ạ.Em thấy bác đưa ra các căn cứ sau để cho thấy khả năng ít nhất là sẽ lấy được ra các region:

    -căn cứ thứ nhất:

    "+Đối tượng sinh ra từ lệnh rectang chính là loại đối tượng lwpline.

    +Đối tượng sinh ra từ lệnh region chính là đối tượng region."

    -căn cứ thứ 2:

    "-Hai loại đối tượng này về bản chất là khác nhau:

    +lwpoline là đối tượng dạng tuyến.

    +Đối tượng region là đối tượng dạng mảng."

    -căn cứ thứ 3:

    "Đối tượng sinh ra từ lệnh rectang và đối tượng sinh ra từ lệnh region (không phân biệt lồi lõm, mấy cạnh mấy đỉnh). Thì dịch ra nghĩa là phân biệt lwpline và region. Mà mã dxf của 2 thèn này à khác nhau thì chọn được mà."

    =>từ 3 căn cứ này cho thấy chúng có sự khác nhau nhất định,như thế em mới hi vọng có thể vẫn có thể tách chúng ra,cũng như mã dxf mà bác nói có thể lưu giũ thông tin của region thì có thể nó cũng lưu giữ thông tin về số cạnh.Từ những điều này thì em mới có coment như đã trình bày với bác và mọi người về khả năng tách chúng ra.

    Em thì trí tuệ em cũng kém,đặc biệt là về viết lisp thì em lại càng không biết gì nên cố gắng làm sao diễn tả vấn đề thật rõ ràng để các bác có thể giúp em và không mất nhiều thời gian của các bác.Nói thật xấu hổ với bác và mọi người ,sau khi đọc coment lần sau của bác em nghĩ mình đã hiểu sai coment lần đầu của bác ở đâu đó nên em đã đọc lại thêm 3-4 lần coment của bác và của em nhưng vẫn chưa hiểu đang diễn đạt nhầm chỗ nào.Có lẽ em sẽ tìm hiểu nhiều hơn nữa về cad để hiểu đúng ý bác nói hơn cũng như xem xét lại cách  trình bày diễn đạt của mình để mọi người hiểu rõ ạ.Cảm ơn bác cũng đã lưu ý đến vấn đề của em ạ!


  9. 12 phút trước, Biet ve CAD đã nói:

    Bạn tải lisp này nhé, sửa trên gợi ý lisp của bạn @Doan Nguyen Van ở trên

    Lisp sẽ chuyển các polyline sang màu vàng theo đúng số cạnh được nhập vào ( polyline kín, cạnh nhập vào > 2)

    Nếu nhập cạnh là 4 thì tất cả các polyline chữ nhật giữ nguyên, còn lại đều được chuyển

    M2.lsp

    hi,dạ em cảm ơn bác biet ve cad nhiều  ạ!nhưng không hiểu sao nó vẫn chưa chuyên màu các polyline nào dù nhập số cạnh là bao nhiêu bác ạ.


  10. 1 giờ} trướ}c, duy782006 đã nói:

    -Đọc xong loạt bài này mình hơi bị mơ hồ có vài 1 thế này.

    +Đối tượng sinh ra từ lệnh rectang chính là loại đối tượng lwpline.

    +Đối tượng sinh ra từ lệnh region chính là đối tượng region.

    -Hai loại đối tượng này về bản chất là khác nhau:

    +lwpoline là đối tượng dạng tuyến.

    +Đối tượng region là đối tượng dạng mảng.

    -Để thấy sự khác nhau ta dùng lệnh subtract cho 2 region có phần chồng lên nhau để thấy hiệu quả, còn lwpline không dùng lệnh này được.

     

    *Quay về đề của chủ thới đang đòi phân biệt Đối tượng sinh ra từ lệnh rectang và đối tượng sinh ra từ lệnh region (không phân biệt lồi lõm, mấy cạnh mấy đỉnh). Thì dịch ra nghĩa là phân biệt lwpline và region. Mà mã dxf của 2 thèn này à khác nhau thì chọn được mà.

    *Tôi không tải file cad về xem nhưng nếu file cad không đúng tinh thần tôi nói trên thì đề bài và ví dụ sai.

    dạ hoàn toàn đúng như anh đã nói ạ.Nếu tìm ra nơi nào đó cad lưu giư thông tin về đối tượng là polyline,region,rectang thì sẽ phân biệt được các đối tượng này hay nói cách khác là sẽ tách riêng được chúng ra,tách chúng nó ra dựa vào mã dxf hay dựa vào đặc điểm riêng của từng loại đường mà khi cad tạo ra chúng đã lưu giữ thông tin về chúng lại(không phân biệt lồi lõm, mấy cạnh mấy đỉnh) ,mà khi tách được chúng ra thì hiển nhiên là có thể tô màu cho từng loại ạ.Ngoài ra,nếu mà mã dxf như anh nói có thể lưu giữ được thông tin về đường region thì không biết nó có lưu giữ luôn cả thông tin số cạnh của đường region này không?nếu mà nó cũng lưu giữ luôn thông tin này thì giữa các đường region là có thể phân biệt nhau nhờ thông tin khác nhau về số cạnh rồi phải không ạ?

     

     


  11. với lại em thấy bác Doan Nguyen Van có nói Polygon nói chung là đa giác không tính số cạnh nên sợ vấn đề dựa vào số cạnh của đường region để lọc nó ra khỏi các region khác chắc cũng chưa có cách gì đơn gian để làm được điều này,hoặc làm được thì cũng ngại mất thời gian nhiều của các bác.hi


  12. 40 phút trước, Biet ve CAD đã nói:

    Nếu bạn nêu rõ vấn đề là phân biệt rectang và polyline, hay rectang và region thì các bạn sửa lại chút xíu lisp là được, còn lệnh rectang hay pline đều tạo ra đối tượng là polyline, nên ko có cách nào phân biệt được bạn à

    dạ,cũng là do cách diễn đạt của em không được sáng sủa lắm nên khiến bác Doan Nguyen Van đưa về bài toán tổng quát về số cạnh,còn bác Duong Nhat Duy đang hiểu là em đang nói về các cách tạo nên hình đa giác khiến bài toán trở nên phức tạp trong lúc từ đầu bác ấy đã hiểu đúng mấu chốt là tách được đối tượng region và rectang.hihi.tuy thế,việc tách được ra các loại đối tượng  rectang và polyline, hay rectang và region như bác nói trong autolisp phải nhờ đến các bác hiểu sâu về nó mới làm được chứ em thì chỉ biết dùng lệnh filters mà không được thì em cũng chẳng biết làm thế nào.Mà nhờ mọi người mất nhiều thời gian quá em cũng thật ngại với các bác.hìhì


  13. 20 phút trước, Duong Nhat Duy đã nói:

    1. Về rectang hay polyline bạn bảo gì đó:

        AutoCAD nó không hiểu được hình chữ nhật nào được tạo thành từ lệnh REC và hình nào từ lệnh PL hay JO gì đâu, như lisp bác @Doan Nguyen Van viết là OK r đó bạn, nó đổi màu những hình chữ nhật (có thể xoay theo phương bất kỳ nó vẫn hiểu). Nhưng lưu ý phải là hình chữ nhật khép kín (CLOSED) và có 4 đỉnh (1 số hcn tự nhiên lòi thêm 1 2 điểm trên cạnh nào đó, nhìn vẫn là hcn nhưng lisp nó ko hiểu đâu, để mà hiểu đc thì phải viết khá lằng nhằng, nếu muốn bạn phải thương lượng vs tác giả)

    2. Bôi màu theo số cạnh mình nghĩ là có thể làm đc nhưng cũng lằng nhằng, vì mắt nhìn thì thấy 3 4 cạnh thôi nhưng tùy định dạng PLINE nhiều đỉnh, trùng nét, ... đa giác lõm lồi nên khá phức tạp, cái này bạn tiếp tục liên hệ tác giá nhé :))

    dạ vâng,em cảm ơn các bác ạ!em thì không biết viết lisp nên không biết rõ những việc nào lisp dễ viết với những yêu cầu nào lisp sẽ khó viết nên nhiều khi cũng đưa ra những mong muốn không khả quan như tổng thống Donald Trump đòi tiêm chất diệt khuẩn để diệt covid ạ.

    Thực ra,ban đầu em nghĩ đơn giản chỉ cần lisp phân biệt được các đường tạo ra từ region hay rectang là được vì chắc là nó phải có dấu hiệu nào đó đê phân biệt vì nó được vẽ từ 2 lệnh khác nhau,ngoài ra đương region nó có thể lưu giữ thông tin về số cạnh của nó nơi nào đó trong thông tin về đối tượng này,nếu cad quản lí thông tin về số cạnh thì sẽ tìm ra được các region có thông tin về số cạnh đó,mà đã phân biệt được thì sẽ tô màu được,nhưng không ngờ nó lại phức tạp thế.hihi

    nếu mà biết nó mất nhiều thời gian và phức tạp thế thì em chẳng dám lạm dụng thời gian của các bác nhiều thế đâu ạ.

    Một lần nữa em cảm ơn các bác nhiều ạ!


  14. 1 giờ} trướ}c, Doan Nguyen Van đã nói:

    Lệnh M2 theo bạn thế này đạt chưa:

    
    (defun c:m2 ()
      (mapcar '(lambda (x)
    	     (if (= (vla-get-Closed (vlax-ename->vla-object x)) :vlax-true)
    	       (if (and (= (length (setq l1 (lm:unique (acet-geom-vertex-list x)))) 4)
    			(equal (setq a1 (angle (car l1) (cadr l1))) (angle  (last l1) (caddr l1)) 0.001)
    			(equal (setq a2 (angle (cadr l1) (caddr l1))) (angle (car l1) (last l1)) 0.001)
    			(equal (rem (abs (- a1 a2)) 1.5707) 0.0 0.001)
    			)
    		 
    		 (vla-put-Color (vlax-ename->vla-object x) 2)
    		 (vla-put-Color (vlax-ename->vla-object x) 3)
    	       )
    	     )
    	   )
    	  (acet-ss-to-list (ssget '((0 . "*POLYLINE"))))
      )
    )
    (defun LM:Unique (l)
      (if l
        (cons (car l) (LM:Unique (vl-remove (car l) (cdr l))))
      )
    )

     

     

    28 phút trước, Duong Nhat Duy đã nói:

    Ý bạn là đa giác 4 cạnh sẽ đổi màu vàng hay là chỉ hình chữ nhật thì ms đổi màu vàng, còn lại (đa giác 4 cạnh ko phải hcn, đa giác khác, hay đoạn thẳng) thì màu xanh ?

    Dạ,xin lỗi các bác giờ em mới vào mạng để xem được hồi âm của các bác ạ!em rất bất ngờ vì nhận được sự quan tâm của các bác về vấn đề của em ,thành thật cảm ơn các bác về điều đó  ạ!

    Bác Doan Nguyen Van ạ,lisp của bác viết chạy tốt và tổng quát cho trường hợp đa giác 4 cạnh dù tạo bằng cách vẽ region hay rectang,nhưng em vẫn mong bác hay bác nào có thời gian có thể sửa cho em một tí cho nó phân biệt đúng hình nào vẽ ra bằng lệnh rectang thì mới đổi màu vàng như ý định ban đầu em đã trình bày với diễn đàn ạ,vì ý của em lúc đầu đúng như bác Duong Nhat Duy đã nói đó là chỉ có hình 4 cạnh được tạo từ lệnh rectang thì mới đổi màu vàng còn đa giác tạo thành từ region thì màu xanh,còn đa giác tạo thành từ phương pháp khác (như vẽ đường polyline hay vẽ đoạn thẳng rồi dùng lệnh join để nối...) thì không cần đổi màu.Với ngoài ra,nếu có thể các bác có thể lưu ý giúp em thêm một tí như em đã trình bày là nếu đã phân biệt được đa giác 4 cạnh được tạo thành là do lệnh region hay ractang thì có thể co thêm chức năng chỉ tô màu một đa giác chỉ có sô cạnh nhất định không ạ?

    chân thành cảm ơn các bác ạ!

    • Vote giảm 2

  15. 2 giờ trước, Duong Nhat Duy đã nói:

    Do gà nên mình chỉ viết được cái đầu tiên (ko biết dấu hiệu nhận biết hcn :)))), bạn dùng tạm nhé :)).

    Lệnh M1

    
    (defun C:m1 ()
      (foreach ent (acet-ss-to-list (ssget '((0 . "POLYLINE,LWPOLYLINE"))))
        (if (= (vla-get-Closed (vlax-ename->vla-object ent)) :vlax-true)
          (vla-put-Color (vlax-ename->vla-object ent) 2)
          (vla-put-Color (vlax-ename->vla-object ent) 3)
          )
        )
      (print)
      )

     

    M1.lsp

    Dạ,em cảm ơn bác đã hồi âm ạ.Lisp 1 bác viết đã chạy chuẩn rồi bác ạ.em cảm ơn bác nhiều ạ!

    Cái Lisp 2 em cũng xem trong bảng properties nhưng cũng không có dấu hiệu gì ở trong bảng này thể hiện sự khác nhau của ractang và region ạ,em cũng thử dùng filters để chọn ra region nhưng cũng không thấy được gì.Nếu các anh pro trên diễn đàn cũng không có cách gì phân biệt nó bằng lisp thì chắc chỉ còn cách thủ công chọn lựa chúng bằng mắt thôi bác ạ.

    hihi!một lần nửa cảm ơn bác nhiều ạ!


  16. Em chào các bác trên diễn đàn ạ,em muốn nhờ các bác xem xét viết giúp em 2 cái lisp có tác dụng đổi màu các đối tượng khi quét qua như sau ạ:

    Lips1:quét qua các đối tượng gồm polyline ( hoặc 2D polyline) thì nếu đối tượng nào kín thì sẽ chuyển sang màu vàng còn đối nào hở thì sẽ chuyển sang màu xanh.Về 2 polyline hở em thấy có dâu hiệu duy nhất mà em biết được là ở bảng propties ở phần misc có closed  là Yes cho polyline đóng và No cho polyline hở ạ

    Lips2:quét qua các đối tượng gồm polygon  và rectang thì nếu đối tượng nào là polygon thì sẽ chuyển sang màu vàng còn đối nào là rectang thì sẽ chuyển sang màu xanh.Nếu mà có thể cho thêm dòng nhắc chỉ đổi màu vàng những polygon có số cạnh là bao nhiều nữa thì càng tuyệt vời ạ.

    Em xin chân thành cảm ơn các anh chị trên diễn đàn ạ!

     

    nho viet lisp.dwg

    lisp2.png

    • Vote giảm 1

  17. 3 giờ trước, duy782006 đã nói:

    1. Không biết bạn bị lỗi gì vì tôi không cố ý và không đủ trình làm cho cad ko load các lisp khác ngoài nó và cũng chưa nghe ai bị như này

    2.Không được vì cũng không đủ trình. Cũng đang có dự định này nhưng là kế hoạch dài hơi sau khi làm công việc chính xong và thiệt rãnh. 

    3.Vào từng file lisp tìm kiếm tên lệnh bị trùng và sửa nó lại cho hết trùng.

    dạ vâng ạ!cảm ơn anh đã hồi đáp ạ.

    số 1,đúng là lạ quá anh ạ,load vào xong là cad mất khả năng load lisp tự động luôn.

    số 2,vì em không biết viết lisp nên không biết nó rất khó ạ.

    số 3,em không biết lisp nên nhìn số file của anh đã hoa mắt rùi anh ạ,sửa không khéo hỏng hết.

    số 4,cảm ơn anh rất nhiều ạ,chúc anh và các anh em trên diễn đàn nhiều sức khỏe ạ.hihi

     


  18. Vào lúc 11/8/2011 tại 00:45, ketxu đã nói:

    Bạn dùng tạm.

    - Lệnh : brd

    -Chức năng : Break các đường *Line (bị cắt) tại các giao điểm với các đường *Line (cắt) chỉ định.

    - Lisp làm việc với Line, Pline, SPline... (nói chung là các đối tượng mà lệnh Break xử lý)

    Mình viết vội nên không có phần bắt lỗi, chỉ có Undo, bạn nhớ cẩn trọng khi chọn đối tượng :)

     

    
    (defun c:brd (/ EL lst_ss_bicat lst_ss_cat lst ST:Ent-Length ST:Ss->ListEnt ST:Ent-IntersObj ST:Ent-BrkLPSLine)
    
    ;;;;;;;; Local Functions
    (defun ST:Ent-Length(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
    (defun ST:Ss->ListEnt (ss / n e l)
     (setq n (sslength ss))
     (while (setq e (ssname ss (setq n (1- n))))
       (setq l (cons e l))
     )  
    )
    (defun ST:Ent-IntersObj (e1 e2  / ob1 ob2 g L i kq) ;objExtend : doi tuong keo dai
    (vl-load-com)
    (setq
       ob1 (vlax-ename->vla-object e1)
       ob2 (vlax-ename->vla-object e2))	
    (setq g (vlax-variant-value (vla-IntersectWith ob1 ob2 acExtendNone)))
    (if (/= (vlax-safearray-get-u-bound g 1) -1) (setq L (vlax-safearray->list g)))
    (setq i 0)
    (repeat (/ (length L) 3)
       (setq kq (append (list (list (nth i L) (nth (+ i 1) L) (nth (+ i 2) L))) kq))
       (setq i (+ i 3))
    )
    kq
    )
    (defun ST:Ent-BrkLPSLine (obj LineDo / lstInters);ename
    (if (setq lstInters (ST:Ent-IntersObj obj LineDo))
    (progn
    (foreach x lstInters
    (command "_break" obj x "@")
    )
    )
    )
    )
    
    (grtext -1 "Free Break and Del *Line @Ketxu Cadviet.com")
    (command "undo"  "begin")
    (setq EL (entlast))
    (prompt "\nCh\U+1ECDn c\U+00E1c Line, Pline, SLine.. b\U+1ECB c\U+1EAFt :")
    (setq lst_ss_bicat (ST:Ss->ListEnt (ssget)))
    (prompt "\nCh\U+1ECDn c\U+00E1c Line, Pline, SLine...c\U+1EAFt :")
    (setq lst_ss_cat (ST:Ss->ListEnt (ssget)))
    (foreach Linedo lst_ss_cat
    (foreach obj lst_ss_bicat 
    	(ST:Ent-BrkLPSLine obj Linedo)
    )
    
    (while (setq EL (entnext EL)) (setq lst_ss_bicat (cons EL lst_ss_bicat)))
    (setq EL (entlast))
    )
    (command "erase" (nth (vl-position (apply 'min (setq lst (mapcar 'ST:Ent-Length lst_ss_bicat))) lst) lst_ss_bicat) "")
    (command "undo" "end")
    )
     

     

     

    P/S : lần sau, nếu bạn post bài yêu cầu thì cố gắng thể hiện rõ ràng nhất yêu cầu của mình, tốt nhất nên có hình minh họa, để vừa nhanh có hàng mà ai cũng vui, chứ để số bài viết tăng nhanh mà vấn đề thì không được giải quyết thì mệt cái đầu lắm. Hy vọng đây cũng là lần cuối cùng Ket ngỏ lời cùng bạn về việc này :wub:

    Chúc bạn thành công!

    Các bác cho em hỏi tí về lisp này,em thấy trong khi các lisp khác đều hoạt động bình thường thì lisp này load vào cũng thông báo load thành công nhưng khi đánh lệnh thì cad không hiểu lệnh,hay có lưu ý gì về một biến nào đó  của autocad cần phải đặt lại cho các hàm dùng trong lisp này ạ?em cảm ơn các bác nhiều ạ!


  19. Vào lúc 23/7/2019 tại 16:17, duy782006 đã nói:

    Giải nén ra 1 thư mục. load hết lên. Ưng thì gỏ lệnh TMNM để có menu.

    Không Cập nhật được.

    lispduy782006.rar

    cảm ơn bác Duy về bộ lisp ạ,nhưng có một số vấn đề vẫn khó khăn quá nhờ bác Duy có thể sửa giúp em một tí được không ạ?

    -Thứ nhất là khi load bộ lisp của bác bằng chức năng laod lisp tự động ở mục contens thì kể từ thời điểm đó sẽ không thể load tự động thêm một lisp nào khác nữa,kể cả load lại lisp của bác cũng không được,cad vẫn thông báo là load thành công nhưng khi nhập lệnh thì không nhận lệnh,muốn load đươc bình thường thì lại phải cài lại cad.Bác có thể xem xét làm sao sau khi load lisp của bác thì vẫn load được các lisp khác nữa không ạ?em nghĩ chắc bác để chức năng không cho load lisp khác để bảo vệ khỏi xung đột lisp hay bị chèn lệnh nhưng không load được lisp khác thì khó khăn quá bác ạ,mà cứ muốn cài thêm lisp nào lại phải cài lại cad từ đầu vất vả quá bác ạ.

    -Thứ 2 là ở chức năng của lệnh CM,CMT bác có thể cho thêm chức năng hỏi convert cả trong block nửa được không ạ?

    -Thứ 3 là nếu có một số lệnh của lisp em chưa dùng đến nhưng tên lệnh của những lệnh này lại trùng với lệnh hiên tại của em thì có làm sao để gỡ bớt những lệnh này mà không ảnh hưởng đến chức năng của những lệnh khác trong bộ lisp không hả bác?

    Em mong sớm nhận được phản hồi từ bác ạ!cảm ơn bác và mọi người trên diễn đàn nhiều ạ!


  20. Bác Thaistreetz ơi,bác có có phiên bản mới của lisp sx không cho em xin với ạ!em thấy lisp này của bác có ý tưởng rất hay,chỉ tiếc là khi lisp chạy không ổn định ,lúc chạy đúng lúc không chạy đúng bác ạ,ví dụ với lệnh copy cùng một nhóm đối tượng khi thì nó chọn đủ các đối tượng mới sinh ra,lúc lại chọn thiếu,các lệnh khác cũng như thế.Mong sớm nhận được hồi âm của bác ạ.Em cảm ơn bác trước ạ!

×