Đến nội dung


Hình ảnh
* * - - - 4 Bình chọn

[Hỏi] Hàm ssget trong Autolisp


  • Please log in to reply
149 replies to this topic

#21 NTD

NTD

    biết lệnh rotate

  • Members
  • PipPipPip
  • 135 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 05 June 2012 - 12:11 PM

Cảm ơn bác Ha & bác Bach
Lips của bác Hà rất hay nhưng chỉ có tác dụng cho màu 3 , Muốn có tác dụng cho 255 màu + màu 0 (ByBlock) +màu 256 (ByLayer) thì phải viết từng đó đoạn mã cho từng màu , tương ứng sẽ có từng đó lệnh tắt , Nhung ưu điểm LISP của bác hơn bác Bach là có thể nhập số mầu vào nếu có đủ 257 đoạn mã như trên tương ứng với từng mầu

Lisp của bác Bach mới thực sự là tổng quát , cho tất cả các màu , nhưng nhược điểm & cũng là ưu điểm đó là chọn đối tượng có sãn trong bản vẽ để xác định màu cần lọc mà ko nhập số mầu vào như bác Ha . Ưu điểm là cũng chẳng cần quan tâm màu đó số mấy . Nhưng nhiều lúc tư duy vẽ đã xác đinh rõ là ISO của Cty thì là tường màu 4 , tim tường màu 1 .... thì việc nhập số màu từ bàn phím lại nhanh hơn . Hơn nữa nếu đối tượng ta chọn lại nằm trong Block thì màu của bộ lọc lúc đó lại theo màu của Block chứ chưa chắc đã theo màu đối tượng mà ta muốn chọn
Bác Bach giúp em nốt 2 yêu cầu nàu đc ko ? LISP chọn theo màu SBC của bác mà em muốn có thêm chức năng nhập số màu từ bàn phím nữa , và tự động nhận biết đưa vào bộ lọc màu của đối tượng nằm trong Block nũa , được thêm 2 yêu cầu đó nữa thì quá hoàn hảo rồi bác ạ
Cảm ơn các bác rất nhiều
  • 0

#22 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 05 June 2012 - 12:35 PM

Cảm ơn bác Ha & bác Bach
Lips của bác Hà rất hay nhưng chỉ có tác dụng cho màu 3 , Muốn có tác dụng cho 255 màu + màu 0 (ByBlock) +màu 256 (ByLayer) thì phải viết từng đó đoạn mã cho từng màu , tương ứng sẽ có từng đó lệnh tắt.

Tôi tưởng bạn biết lisp nên viết cho bạn chỉ với màu 3 theo y/c của bạn để bạn tuỳ nghi sử dụng.
Chỉ cần thêm 1 dòng code thì bạn có thể chọn 257 màu, chứ không phải viết 257 đoạn code đâu.
Tôi sửa cho bạn trên link cũ rồi đó.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#23 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 05 June 2012 - 12:56 PM

@NTD : phân tích tốt, nhưng lại quá thụ động
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#24 NTD

NTD

    biết lệnh rotate

  • Members
  • PipPipPip
  • 135 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 05 June 2012 - 12:57 PM

Tôi tưởng bạn biết lisp nên viết cho bạn chỉ với màu 3 theo y/c của bạn để bạn tuỳ nghi sử dụng.
Chỉ cần thêm 1 dòng code thì bạn có thể chọn 257 màu, chứ không phải viết 257 đoạn code đâu.
Tôi sửa cho bạn trên link cũ rồi đó.

Ôi , bác viết nhanh thế , em vừa ăn trưa xong đã có hàng rồi , cảm ơn cả 2 bác , em dùng cả 2 Lisp luôn
Thưa bác là em đang tập tẹo viết LISP dựa theo những LIPS đã sưu tầm đc , ko hiểu hết bản chất nên em quan tâm tìm hiểu cái hàm ssget này để lọc đc các đối tượng cho 1 vài LISP định viết mà
  • 0

#25 NTD

NTD

    biết lệnh rotate

  • Members
  • PipPipPip
  • 135 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 05 June 2012 - 01:03 PM

@NTD : phân tích tốt, nhưng lại quá thụ động

ko phải em lười chờ đợi các bác viết cho đâu , mà thực sự có hiểu thấu đáo đâu mà viết , mong các bác chỉ bảo
  • 0

#26 NTD

NTD

    biết lệnh rotate

  • Members
  • PipPipPip
  • 135 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 05 June 2012 - 04:54 PM

Tham khảo : Lisp chọn các đối tượng cùng màu
hay : Lisp chọn các đối tượng theo màu hay linetype
link :
- Viết lisp theo yêu cầu [phần 2] # 6
- Viết lisp theo yêu cầu [phần 2] #8

Vì thớt bác cho em link bên kia Close mất rồi nên em mạn phép
Xin bác Bach viết tiếp LISP chọn đối tượng theo :
- Theo kiểu Hatch : lọc theo Hacth Style , VD: chọn tất cả hacth BêTông ko cần biết nằm trong Layer nào để hiệu chỉnh , nếu có thêm tùy chọn lọc theo Scale của cùng 1 kiểu hatch nữa thì tốt quá
- Theo Dim : lọc theo Dim Style , thêm lọc theo kiểu cùng 1 Dim nhưng Scale factor khác nhau , lọc các DIM có Scale factor = 1 , lọc các DIM có Scale factor # 1 , lọc các DIM có Scale factor = một số do user nhập vào hoặc chọn Dim mẫu trên bản vẽ
- Theo Style của Text & MText : Lọc theo Style , thêm lọc theo chiều cao của cùng 1 Style
- Theo Layer : dùng để hiện tất cả các Layer đc chọn lên dù nằm trong Block , với GRIP giúp dễ nhận biết các Layer đc chọn trong Bản vẽ hơn , bởi có thể Layer đó cùng màu nhiều Layer khác , tất nhiên khi đó biến hệ thống tổng thể GRIPOBJLIMIT trong Option mặc định là 100 nên đưa lên mức cao hơn ( cao nhất là 32767)
- Theo Bock : dùng để hiện các Block cùng tên trong bản vẽ hay trong vùng chọn với GRIP cho dễ quan sát , thêm lọc phát hiện các Block có Scale mà scale theo 3 trục xyz không giống nhau

Trên là 1 số công dụng LISP mà em mong muốn nhưng trình độ có hạn nên mong các bác Bach cùng các bác cao thủ lisper ra tay . Ý tưởng về công dụng trên có gì dở hơi xin các bác cứ phang luôn :D
Xin cảm ơn rất nhiều
  • 0

#27 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 05 June 2012 - 05:02 PM

...
Ý tưởng về công dụng trên có gì dở hơi xin các bác cứ phang luôn :D
...

Bạn mời phang thì phang: ý tưởng không dở hơi, nhưng tham lam quá nên hơi dở.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#28 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 05 June 2012 - 05:05 PM

@NTD :
1- Nếu đã định học lisp thì yêu cầu 1 cái thôi, rồi vào Dxf trong help để tìm cái mình cần. Chứ như thế này bạn chẳng học được gì đâu
2- Bạn làm thế nào mà hiện được Grip Control 1 đối tượng trong Block ? Bạn thử làm thủ công xem nào
3- Các điều kiện lọc không nói rõ là chọn từ đối tượng mẫu hay nhập vào, rồi bạn lại ngồi phân tích lại như bài #21 à ?
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#29 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 05 June 2012 - 08:04 PM

@NTD : Bạn đọc những dòng sau, hi vọng sẽ trả lời và áp dụng được với những câu hỏi của bạn

1- SSget có thể chọn các đối tượng ngay bằng bộ lọc.
Trước tiên bạn bật Help về hàm ssget lên để đọc, và sẽ gặp khái niệm Filter List

- Bộ lọc đó là gì ? Là list các sub-list bao gồm : (dxf-id . Giá_trị) hoặc (cons dxf-id giá-trị)
Dxf là mã thuộc tính của đối tượng. Mỗi 1 đặc tính của đối tượng đều được gán vào 1 mã. Ví dụ, kiểu đối tượng mã 0, layer đối tượng mã 8, màu đối tượng mã 62.... Để tìm được thông tin các mã này bạn phải vào Help của CAD để tìm đọc
Khi gán bộ lọc này vào hàm ssget, CAD sẽ chọn tất cả các đối tượng có tất cả các giá trị khớp với list bạn đưa.

+ Quay trở lại với yêu cầu đầu tiên : Chọn tất cả các Hatch có cùng kiểu Hatch, loại ANSI31, cùng tỉ lệ Scale 100

(defun c:1()(sssetfirst nil (ssget (list (cons 0 "HATCH")(cons 2 "ANSI31")(cons 41 100)))))
Ở đây mã 0 : kiểu đối tượng HATCH
Mã 2 : Pattern của Hatch : Đặt là kiểu "ANSI31" (string)
Mã 41 : Scale của Hatch : Đặt bằng 100 (Real)

* Áp dụng với chọn tất cả các Text,Mtext có kiểu chữ là "Standard"(7) :
(defun c:1()(sssetfirst nil (ssget (list (cons 0 "*TEXT")(cons 7 "Standard")))))
*

+ Ở trên bạn có hỏi muốn linh động 2 giá trị trên bằng cách đánh vào => Hãy thay thế các giá trị cố định đó bằng hàm lấy loại dữ liệu tương ứng
Với String : Hàm (getstring message)
Với Real : Hàm (getreal message)

=> Lisp 1 sẽ sửa thành :

(defun c:1a()(sssetfirst nil (ssget (list (cons 0 "HATCH")(cons 2 (getstring "\nLoai Hatch :"))(cons 41 (getreal "\nScale :"))))))

+ Tiếp nữa, bạn lại hỏi cách không muốn nhập bằng tay mà pick một đối tượng mẫu. Để làm được điều này bạn phải đọc về các hàm cdr, assoc, entget, car, entsel
Ở đây mình viết sẵn 1 hàm để lấy danh sách các mã DXF của đối tượng kick, bạn áp dụng trước đã, sau này bạn tìm hiểu sau :
(defun getDxfs(lstId en)(vl-remove-if-not '(lambda(x)(vl-position (car x) lstId)) (entget en)))
* Áp dụng vào pick chọn các HATCH có cùng loại Hatch(2), Scale(41), Layer(8) với đối tượng Hatch mẫu :
(defun c:1b()(sssetfirst nil (ssget (getDxfs '(0 2 41 8)(car(entsel "\nDoi tuong mau :"))))))

* Áp dụng pick chọn các Block cùng tên(2) với Block mẫu :
(defun c:1c()(sssetfirst nil (ssget (getDxfs '(0 2 )(car(entsel "\nDoi tuong mau :"))))))

*Áp dụng pick chọn các đối tượng cùng layer(8) với đối tượng mẫu :
(defun c:1d()(sssetfirst nil (ssget (getDxfs '(8)(car(entsel "\nDoi tuong mau :"))))))

Với các ví dụ trên hi vọng bạn đã có thể tự làm lisp chọn đối tượng cho đa số trường hợp yêu cầu ở trên

Sang phần 2 : Một số yêu cầu lọc đối tượng mà điều kiện của nó bạn không thể tìm thấy ngay trong các mã DXF. Ví dụ yêu cầu cuối cùng, tìm các Block có scale xyz khác nhau. Không có mã này, nên điều bạn phải làm là chọn tất cả các Block trong vùng chọn, rồi kiểm tra. Thằng nào thỏa điều kiện thì giữ lại, thằng nào không thỏa thì bỏ ra khỏi tập chọn (giống như lisp bác ĐVH viết cho bạn)
Vì bạn chưa nghiên cứu Lisp nên thôi mình không trình bày, viết code tổng quát cho bạn áp dụng luôn, dần dà bạn thắc mắc thì nói tiếp
Có thể dùng ssadd và ssdel, nhưng ở đây mình dùng Visual Lisp => bạn phải có dòng (vl-load-com) đầu lisp.
Ngoài ra cũng lạm dụng luôn cả ACET, các hàm của Express trong CAD

- Đầu tiên : hàm lọc theo điều kiện hàm giữ và bỏ + hàm lấy dxf của 1 ename + hàm kiểm tra dxf có bằng yêu cầu không

(defun getss (typ fc_lay fc_bo / )
(sssetfirst nil
(acet-list-to-ss
(vl-remove-if fc_bo
(vl-remove-if-not
fc_lay
(acet-ss-to-list(ssget (list (cons 0 typ))))
))
)
)
)
(defun cdxf(id en)(cdr (assoc id (entget en))))
(defun isEq(id vl en)(eq (cdxf id en) vl))
=> Yêu cầu của bạn có thể viết thành :

(defun c:6();Chon cac Block k cung ti le xyz
(getss "INSERT"
'=
'(lambda(x)(= (cdxf 41 x)(cdxf 42 x)(cdxf 43 x)))
)
)

Hay yêu cầu về các Dimension có cùng tỉ lệ ScaleFactor bằng 1có thể viết thành :

(defun c:2()
(getss "DIMENSION"
'(lambda(x)(= (vlax-get (vlax-ename->vla-object x) 'LinearScaleFactor) 1))
'not
)
)

- Câu hỏi cuối cùng : nếu không muốn chọn trong vùng chọn mà chọn tất cả đối tượng trên bản vẽ thì bạn thêm "x" vào sau chữ ssget ở tất cả các lisp
  • 4

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#30 NTD

NTD

    biết lệnh rotate

  • Members
  • PipPipPip
  • 135 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 06 June 2012 - 12:31 AM

@ Doan Van Ha : em mới tập tẹo nên cũng ko biết nhưng yêu cầu đó là hơi nhiều trong 1 đoạn mã & tốn công sức thời gian của người viết , cứ nghĩ đơn giản có Lisp chọn theo Color rồi vù 1 cái các bác đã thêm chọn theo LineType cũng trong 1 lệnh

@ ketxu : Bác kextu thật quá pro , đã giỏi lại nhiệt tình chỉ bảo , em cảm động quá . Thấy bài viết trả lời của bác quá là công phu , tuy hiện giờ bác nói 10 em chưa hiểu hết 1 nhưng hiệu quả là em thấy có hướng đi để ngâm cứu rồi . Mấy lisp của bác viết cho em chưa test nhưng sẽ dùng làm mẫu nghiên cứu dần . Nhiều cái chưa biết quá , chài chài ,... Vạn sự khởi đầu nan gian nan bắt đầu ... nản :D . Hay là .... em tán bác thêm vài câu nữa bác viết nốt cho em độ ... vài chục cái idea nữa , cho nó nhanh khỏi nghiên cứu nọ kia , với trình EL của em mà nghiền ngẫm mấy trang Help của CAD bác chỉ cho có mà DaVitSiMân . Nói thế thôi dù gì em cũng rất hứng thứ nghiên cứu LISP , mong sau này sẽ hoc hỏi thêm thậm chí chia sẻ với các bác nhiều nhiều

PS: bác admin đừng Close thớt này sớm quá nhé , để em có thời gian DaVitSiMân xong còn có chỗ hỏi han về bộ lọc trong LISP
Xin cảm ơn mọi người
  • 0

#31 NTD

NTD

    biết lệnh rotate

  • Members
  • PipPipPip
  • 135 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 06 June 2012 - 01:16 AM

Như em vừa nói ở trên em còn vài chục cái idea nữa chưa dám kể ra , nhưng có 1 idea em vừa lóe lên ko nói ra ko dc bởi nghe xong có bác sẽ bảo em mơ mộng quá , nhưng thực sự với khả năng của em thì 1 năm nữa ngâm cứu Lisp cũng chưa viết nổi nên đành viết ra yêu cầu ở đây :

Nội dung : Bản thân CAD cơ bản đã có lệnh Filter & QSELECT để lọc các đốii tượng trong bản vẽ rồi . Như vậy theo như bác ketxu nói " Dxf là mã thuộc tính của đối tượng. Mỗi 1 đặc tính của đối tượng đều được gán vào 1 mã " thì rõ ràng là 2 lệnh này phải lọc theo các mã Dxf rồi , chứ ko thì làm sao mà lọc đc ? Mong muốn của em là ... xuất đc đoạn mã lọc của 2 lệnh đó ra sau khi thực hiện lệnh Filter & QSELECT cơ bản ====> thành các Files , thành các đoạn văn bản để đưa vô Lisp mình sẽ làm . Như vậy sẽ đỡ.... tốn công viết bộ lọc trong lisp rất nhiều ===> bộ lọc khó đến mấy cũng viết đc , dài đến mấy nhiều bộ lọc đến mầy cũng nhanh hơn .

Idea trên có gì dở hơi quá mong các bác dù cười nhưng đừng ... mất hi vọng :D Nếu ko ai viết đc cũng ko sao đâu , chắc tại em mơ mộng cái phi thực tế quá thôi . Nhưng vẫn rất mong các bác cao thủ viết được cho em rút ngắn thời gian học về bộ lọc trong lisp :D

PS: mấy bác viết Lisp bằng trình soạn thảo gì mà chữ mầu xanh đỏ dễ quan sát các hàm thế , chắc ko phải như em viết bằng Notepad đấy chứ ?
  • 0

#32 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 06 June 2012 - 01:33 AM

Rất tiếc là yêu cầu của bạn quá khó, vì nó là lệnh built-in của CAD, không xuất ra dữ liệu cho ta can thiệp
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#33 NTD

NTD

    biết lệnh rotate

  • Members
  • PipPipPip
  • 135 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 06 June 2012 - 01:39 AM

Hic ! Đến bác cũng còn bảo quá khó thì ai có cách giả quyết đc đây . Lẽ nào em phải đi gặp anh DaVitSiMân thật à ???
  • 0

#34 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 06 June 2012 - 10:52 AM

Như em vừa nói ở trên em còn vài chục cái idea nữa chưa dám kể ra , nhưng có 1 idea em vừa lóe lên ko nói ra ko dc bởi nghe xong có bác sẽ bảo em mơ mộng quá , nhưng thực sự với khả năng của em thì 1 năm nữa ngâm cứu Lisp cũng chưa viết nổi nên đành viết ra yêu cầu ở đây :

Nội dung : Bản thân CAD cơ bản đã có lệnh Filter & QSELECT để lọc các đốii tượng trong bản vẽ rồi . Như vậy theo như bác ketxu nói " Dxf là mã thuộc tính của đối tượng. Mỗi 1 đặc tính của đối tượng đều được gán vào 1 mã " thì rõ ràng là 2 lệnh này phải lọc theo các mã Dxf rồi , chứ ko thì làm sao mà lọc đc ? Mong muốn của em là ... xuất đc đoạn mã lọc của 2 lệnh đó ra sau khi thực hiện lệnh Filter & QSELECT cơ bản ====> thành các Files , thành các đoạn văn bản để đưa vô Lisp mình sẽ làm . Như vậy sẽ đỡ.... tốn công viết bộ lọc trong lisp rất nhiều ===> bộ lọc khó đến mấy cũng viết đc , dài đến mấy nhiều bộ lọc đến mầy cũng nhanh hơn .

Idea trên có gì dở hơi quá mong các bác dù cười nhưng đừng ... mất hi vọng :D Nếu ko ai viết đc cũng ko sao đâu , chắc tại em mơ mộng cái phi thực tế quá thôi . Nhưng vẫn rất mong các bác cao thủ viết được cho em rút ngắn thời gian học về bộ lọc trong lisp :D

PS: mấy bác viết Lisp bằng trình soạn thảo gì mà chữ mầu xanh đỏ dễ quan sát các hàm thế , chắc ko phải như em viết bằng Notepad đấy chứ ? -> Visual Lisp Editor (trong AutoCAD đánh lệnh VLIDE)

dùng lệnh filter / Qselect -> pickfirst selection
defun (C : XXX (pickfirst)) -> (ssget "X" '()) -> file

cách thì đại khái là như vậy, bạn nghiên cứu dc thì nghiên cứu còn ko thì nhờ các bạn trên này giúp cho, mình ko biết lisp :D
Good luck!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#35 NTD

NTD

    biết lệnh rotate

  • Members
  • PipPipPip
  • 135 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 06 June 2012 - 01:26 PM

Visual Lisp Editor (trong AutoCAD đánh lệnh VLIDE)
Cảm ơn bác


defun (C : XXX (pickfirst)) -> (ssget "X" '()) -> file ..... bác cứ đùa , bác ketxu còn bó tay
  • 0

#36 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 06 June 2012 - 03:18 PM

defun (C : XXX (pickfirst)) -> (ssget "X" '()) -> file ..... bác cứ đùa , bác ketxu còn bó tay


CV rất nhiều người giỏi, bạn không nên nói thế. Cũng không nhất thiết dẫn chứng để khích tướng, vì nếu vấn đề hay và có ích, mọi người sẽ vọc

- Các option trong Qselect mình đã nói - là 1 lệnh không xuất dữ liệu, tuy nhiên nếu bạn bỏ 10 phút đọc phần 1 bài phân tích của mình thì việc dò dẫm xem qselect có xuất file coi như bỏ, vì nó thua xa vài dòng lisp của bạn (trong trường hợp dùng lisp nhé - thao tác bình thường lại rất cần qselect)
- Các lựa chọn trong filter, bạn tạo filter, lưu nó với 1 tên nào đó rồi copy dòng này vào commandline

(startapp "notepad.exe" (findfile "filter.nfl"))
Tại đây chú ý các dòng trong mục :ai_lisp|j của named filter list tương ứng, đó là list dxf bạn cần.

Đúc kết lại, hãy đọc bài bên trên, vì filter và qselect k thể power hơn được khi bạn cần kiểm tra những điều kiện giời ơi đất hỡi
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#37 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 06 June 2012 - 04:37 PM

Em nói cái này ko biết có lạc đề không? Mong các bác bỏ wa cho em chém vài phát :)
Vấn đề của NTD muốn lọc các mã DXF và có thể bạn này gặp khó khăn trong việc tìm hiểu những mã DXF của những đối tượng khác nhau???
Nếu vậy thì bạn có thể gõ vào dòng code (entget (car(entsel))) để kiểm tra xem đối tượng đó có những mã DXF gì? muốn lọc kiểu nào thì cứ thế mà phan ra.
  • 1
Hình đã gửi

#38 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 06 June 2012 - 04:49 PM

Em nói cái này ko biết có lạc đề không? Mong các bác bỏ wa cho em chém vài phát :)
Vấn đề của NTD muốn lọc các mã DXF và có thể bạn này gặp khó khăn trong việc tìm hiểu những mã DXF của những đối tượng khác nhau???
Nếu vậy thì bạn có thể gõ vào dòng code (entget (car(entsel))) để kiểm tra xem đối tượng đó có những mã DXF gì? muốn lọc kiểu nào thì cứ thế mà phan ra.

Đúng nhưng chưa đủ. Vì có thằng nó "ẩn", ví dụ khi màu là bylayer chẳng hạn thì ngứa con mắt bên phải, đỏ con mắt bên trái cũng không tìm ra mã 62.
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#39 NTD

NTD

    biết lệnh rotate

  • Members
  • PipPipPip
  • 135 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 06 June 2012 - 05:09 PM

@ ketxu : Sư phụ !!!!!! , em đã làm theo hướng dẫn của bác với thử 2 Filter, đây là kết quả , là nội dung của File filter.nfl nằm trong thư mục
C:\Users\duong\AppData\Roaming\Autodesk\AutoCAD 2012 - English\R18.2\enu\Support ( em đã tạo luôn 1 shotrcut trên taskbar để mở cho nhanh mà ko cần dán (startapp "notepad.exe" (findfile "filter.nfl")) vô dòng commandline nữa , nhanh hơn , hêhê )
Filter.nfl -- Do not edit this file.
:ai_lisp|123456
(0 . "*TEXT")
(-4 . "=")
(40 . 924.000000000000000)
:ai_str|123456
Object = Text
Text Height = 924.000000000000000
:ai_lisp|HatchTuongXay_1
(0 . "HATCH")
(8 . "Hatch-Tuong-Gach__KT_SJ_T_12_H_24B_T2+")
(6 . "BYLAYER")
(2 . "TUONGXAY")
(-4 . "=")
(62 . 256)
:ai_str|HatchTuongXay_1
Object = Hatch
Layer = Hatch-Tuong-Gach__KT_SJ_T_12_H_24B_T2+
Linetype = BYLAYER
Hatch Pattern Name = TUONGXAY
Color = Color

ít ra thì lúc này em cũng đã khá hơn hẳn đêm qua , đến đêm qua em chưa thuộc hết mấy mã DXF bác liệt kê cho , đã đọc Help về mã DXF đâu , giờ thì bất kể mã gì em cũng có thể biết & đặc biệt là có luôn khỏi gõ , copy dán vô , đỡ nhàm lẫn . Chỉ có cái mã (-4 . "=") là mã gì thế em ko hiểu , ko thấy giải thích ở phần bên dưới
Nhưng idea ban đầu của em là mong bác xuất tự động đc thành 1 đoạn mã hoàn chỉnh .... như mấy lệnh lọc mà bác dạy em đó . Phần còn lại là em thêm các mã lệnh hiệu chỉnh tùy ý do em tự viết vô . Tóm lại là phần lọc là khó nhất trong Lisp ( theo cảm nhận của riêng em thôi ) thì sẽ đc automatic tạo ra nhờ 1 cách nào đó "sư phụ" sắp nghĩ ra , còn lại phần dễ hơn thì đệ xin tự làm . Như thế gọi là người nhỏ làm việc nhỏ mà :D

@ lp_hai : (entget (car(entsel))) lệnh hay lắm bác , tuy ko uyên thâm như chiêu của bác ketxu nhưng lại có ưu điểm nhanh hơn cho việc tìm hiểu DXF
  • 0

#40 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 06 June 2012 - 05:20 PM

(-4 . "=")
(40 . 924.000000000000000)
...
(-4 . "=")
(62 . 256)
giờ thì bất kể mã gì em cũng có thể biết. Chỉ có cái mã (-4 . "=") là mã gì thế em ko hiểu,
Tóm lại là phần lọc là khó nhất trong Lisp ( theo cảm nhận của riêng em thôi )

Đỏ: mã (-4 . "=") kèm theo là (62 . 256) nghĩa là màu của nó bằng 256 (bylayer), mã (-4 . "=") (40 . 924) nghĩa là chiều cao text bằng 924. Mã "=" này chỉ dùng được khi xét đến con số (ví dụ bán kính...)
Xanh: không thể biết hết nỗi đâu, có hàng ngàn mã lận.
Nâu: Còn nhiều thứ khó hơn DXF nhiều lần.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.