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

[Yêu cầu]Xin lisp chọn dim

Các bài được khuyến nghị

Đúng là em đã làm dụng lisp quá nhiều rồi

nhưng giờ gấp quá nên cũng nhờ các anh viết giúp em lisp này với ạ

Lisp với các lệnh thế này ạ:

-Chọn vùng chọn

-chọn dim muốn giữ lại

Tức là chỉ giữ lại các dim style mà mình muốn giữ lại (còn các dim khác ẩn đi)

như là bên layer có layoff,layon đấy ạ

công việc này dùng Fi cũng ok nhưng tốn nhiều thời gian hơn

mong các anh giúp ạ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nếu viết bằng Express thì chắc cũng chỉ 3,4 dòng. Viết thì dễ nhưng cũng k hiểu bạn dùng làm j vậy , bật mí được hok bạn, hay tiện thể yêu cầu thôi ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nếu viết bằng Express thì chắc cũng chỉ 3,4 dòng. Viết thì dễ nhưng cũng k hiểu bạn dùng làm j vậy , bật mí được hok bạn, hay tiện thể yêu cầu thôi ^^

em cảm ơn anh đã quan tâm ạ

anh giúp em với

thì để thuận tiện cho quá trình vẽ thôi ạ

với lại em cũng chuẩn bị mò mẫm autolisp nên nghiên cứu các lisp đơn giản trước ạ

giúp em với ạ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

em cảm ơn anh đã quan tâm ạ

anh giúp em với

thì để thuận tiện cho quá trình vẽ thôi ạ

với lại em cũng chuẩn bị mò mẫm autolisp nên nghiên cứu các lisp đơn giản trước ạ

giúp em với ạ

Cái này dùng acet viết rất nhanh

Vài dòng là xong thôi


(defun c:andim(/ ssd)
 (if (setq ssd (ssget '((0 . "DIMENSION"))))
   (acet-ss-visible (acet-ss-remove ssd (ssget "X" '((0 . "DIMENSION")))  ) 1)
 )
)

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Muốn hiện dim lại thì làm thế nào anh Tue???

Thì thêm 1 lệnh nữa :rolleyes:


(defun c:Hdim(/ ssd)
   (acet-ss-visible (ssget "X" '((0 . "DIMENSION") (60 . 1))) 0)
)

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cái này dùng acet viết rất nhanh

Vài dòng là xong thôi


(defun c:andim(/ ssd)
 (if (setq ssd (ssget '((0 . "DIMENSION"))))
   (acet-ss-visible (acet-ss-remove ssd (ssget "X" '((0 . "DIMENSION")))  ) 1)
 )
)

em cảm ơn anh nhiều ạ

anh cho em hỏi tý nữa ạ

cũng yêu cầu như trên mà áp dụng với text,Mtext thì lisp thế nào ạ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

em cảm ơn anh nhiều ạ

anh cho em hỏi tý nữa ạ

cũng yêu cầu như trên mà áp dụng với text,Mtext thì lisp thế nào ạ

Ẩn text và mtext thì tương tự dimension. Bạn thay "DIMENSION" bằng "TEXT,MTEXT" trong 2 lisp trên là được.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

em cảm ơn anh nhiều ạ

anh cho em hỏi tý nữa ạ

cũng yêu cầu như trên mà áp dụng với text,Mtext thì lisp thế nào ạ

Hay là các bạn có thể sử dụng lisp này. Viết lại 1 tý :

(defun c:an (/ ssd dtuong)
(initget "")
(setq dtuong (getstring "\n Nhap ten doi tuong can An : / Enter de Pick chon doi tuong mau : "))
(if (= dtuong "") (setq dtuong (acet-dxf 0 (entget(car(entsel "\n Pick chon doi tuong mau :"))))))
 (if (setq ssd (ssget (list (cons 0 dtuong))))
   (acet-ss-visible (acet-ss-remove ssd (ssget "X" (list (cons 0 dtuong))  )) 1)
 )
)
;;;;;;;;
(defun c:Hien(/)
   (acet-ss-visible (ssget "X" '((60 . 1))) 0)
)

Cách chạy :

 

Command: an -> Gõ lệnh AN

Nhap ten doi tuong can An : / Enter de Pick chon doi tuong mau : LINE -> Nhập tên đối tượng cần ẩn.

Ví dụ LINE thì gõ LINE

TEXT và MTEXT có thể gõ *TEXT hoặc gõ TEXT,MTEXT

POLYLINE có thể gõ *POLYLINE

Block : gõ INSERT

DIMENSION thì gõ DIMENSION

HATCH thì gõ HATCH

.....

- Nếu bạn không nhớ tên thì có thể enter để chọn 1 đối tượng mẫu

- Chọn đối tượng cần giữ lại. Các đối tượng cùng "kiểu" với đối tượng không được chọn sẽ bị ẩn

 

Select objects: -> Chọn đối tượng cần giữ lại

 

Hiện lại thì gõ lệnh hien

 

....

 

Chúc vui

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cái này dùng acet viết rất nhanh

Vài dòng là xong thôi


(defun c:andim(/ ssd)
 (if (setq ssd (ssget '((0 . "DIMENSION"))))
   (acet-ss-visible (acet-ss-remove ssd (ssget "X" '((0 . "DIMENSION")))  ) 1)
 )
)

em chào anh Tuệ ạ

Với lisp này nếu đổi lại yêu cầu tý thì sao ạ

Túc là không phải ẩn đi tất cả các dim còn lại mà mình giữ lại các dim style

Ví dụ khi mình chọn vào 1 dim thì các dim style cùng với nó được giữ lại

ví dụ em có 4 dim style

Dim 1-20

Dim 1-100

Dim 1-200

Dim 1-500

Khi mình chọn vào 1 dim bất kỳ (dim này là dim 1-20) thì các dim 1-20 giữ lại còn dim khác ẩn đi ạ

em cảm ơn anh

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hay là các bạn có thể sử dụng lisp này. Viết lại 1 tý :

(defun c:an (/ ssd dtuong)
(initget "")
(setq dtuong (getstring "\n Nhap ten doi tuong can An : / Enter de Pick chon doi tuong mau : "))
(if (= dtuong "") (setq dtuong (acet-dxf 0 (entget(car(entsel "\n Pick chon doi tuong mau :"))))))
 (if (setq ssd (ssget (list (cons 0 dtuong))))
   (acet-ss-visible (acet-ss-remove ssd (ssget "X" (list (cons 0 dtuong))  )) 1)
 )
)
;;;;;;;;
(defun c:Hien(/)
   (acet-ss-visible (ssget "X" '((60 . 1))) 0)
)

Cách chạy :

 

Command: an -> Gõ lệnh AN

Nhap ten doi tuong can An : / Enter de Pick chon doi tuong mau : LINE -> Nhập tên đối tượng cần ẩn.

Ví dụ LINE thì gõ LINE

TEXT và MTEXT có thể gõ *TEXT hoặc gõ TEXT,MTEXT

POLYLINE có thể gõ *POLYLINE

Block : gõ INSERT

DIMENSION thì gõ DIMENSION

HATCH thì gõ HATCH

.....

- Nếu bạn không nhớ tên thì có thể enter để chọn 1 đối tượng mẫu

- Chọn đối tượng cần giữ lại. Các đối tượng cùng "kiểu" với đối tượng không được chọn sẽ bị ẩn

 

Select objects: -> Chọn đối tượng cần giữ lại

 

Hiện lại thì gõ lệnh hien

 

....

 

Chúc vui

lisp này trả về lỗi nil

không hiểu sao vậy anh

em cảm ơn anh

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

em chào anh Tuệ ạ

Với lisp này nếu đổi lại yêu cầu tý thì sao ạ

Túc là không phải ẩn đi tất cả các dim còn lại mà mình giữ lại các dim style

Ví dụ khi mình chọn vào 1 dim thì các dim style cùng với nó được giữ lại

ví dụ em có 4 dim style

Dim 1-20

Dim 1-100

Dim 1-200

Dim 1-500

Khi mình chọn vào 1 dim bất kỳ (dim này là dim 1-20) thì các dim 1-20 giữ lại còn dim khác ẩn đi ạ

em cảm ơn anh

Hình như cái này:

(defun c:andim(/ ssd)
(setq dimsty (cdr (assoc 3 (entget (car (entsel "\nChon kieu Dim mau can giu lai: "))))))
(princ "\nChon cac Dim...")
 (if (setq ssd (ssget '((0 . "DIMENSION"))))
(acet-ss-visible (ssget "X" (list '(0 . "DIMENSION") '(-4 . "<NOT") (cons 3 dimsty) '(-4 . "NOT>"))) 1)))

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

các anh cho em hỏi chút, khi em vẽ dim thì em thấy không đẹp ở chỗ: không thẳng hàng và đường gióng kéo dài vào tận đối tượng (nếu chỉnh ở trong d thì e thấy chỉ hợp lý với hình vẽ đó nhưng đối với hình khác lại ko được!) em biết được là cái này có lisp hiệu chình mà em ko biết làm :( mong các anh giúp đỡ, anh nào có rùi thì cho em xin được ko ạ! em cảm ơn nhiều ạ!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hình như cái này:

(defun c:andim(/ ssd)
(setq dimsty (cdr (assoc 3 (entget (car (entsel "\nChon kieu Dim mau can giu lai: "))))))
(princ "\nChon cac Dim...")
 (if (setq ssd (ssget '((0 . "DIMENSION"))))
(acet-ss-visible (ssget "X" (list '(0 . "DIMENSION") '(-4 . "<NOT") (cons 3 dimsty) '(-4 . "NOT>"))) 1)))

 

Từ lisp trên em mới nghĩ đến mình hay phải chỉnh sửa các bản vẽ do người người khác chuyển đến (tính chất công việc hơi kỳ dị) nên rất hay phải sử lý với text và Dim, nay có một nhu cầu muốn nhờ các bro bớt chút thời gian vàng ngọc (hi hi) giúp em cái lisp với nhu cầu lựa chọn Text và Dim như sau:

I.1: Trường hợp 1 :

1. Nhập tên lệnh: A5

2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 1

3. Kiểu chọn Dim (1. Nhập giá trị dim hoặc 2. Cận Dim): 1

4. Giá trị dim cần chọn: 1200

5. Select vùng lựa chọn: (Kéo chọn)

Lisp sẽ chọn tất cả các Dim có giá trị 1200 thuộc vùng chọn (mục 5)

I.1: Trường hợp 2:

1. Nhập tên lệnh: A5

2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 1

3. Kiểu chọn Dim (1. Nhập giá trị dim hoặc 2. Cận Dim): 2

4. Chọn cận Dim trên hoặc dưới (1. Cận trên hoặc 2. Cận dưới): 1

5. Nhập giá trị Cận trên: 1200

6. Select vùng lựa chọn: (Kéo chọn)

Lisp sẽ chọn tất cả các Dim có giá trị lớn hơn 1200 thuộc vùng chọn (mục 6)

I.1: Trường hợp 3:

1. Nhập tên lệnh: A5

2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 1

3. Kiểu chọn Dim (1. Nhập giá trị dim hoặc 2. Cận Dim): 2

4. Chọn cận Dim trên hoặc dưới (1. Cận trên hoặc 2. Cận dưới): 2

5. Nhập giá trị Cận dưới: 1200

6. Select vùng lựa chọn: (Kéo chọn)

Lisp sẽ chọn tất cả các Dim có giá trị hơn hơn 1200 thuộc vùng chọn (mục 6)

I.1: Trường hợp 4:

1. Nhập tên lệnh: A5

2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 2

3. Kiểu chọn Text (1. Nhập chuổi text 2. Pick chọn Text mẫu): 1

4. Select vùng lựa chọn: (Kéo chọn)

Lisp sẽ chọn tất cả các chuỗi Text giống chuỗi Text đã nhập thuộc vùng chọn (mục 4)

I.1: Trường hợp 5:

1. Nhập tên lệnh: A5

2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 2

3. Kiểu chọn Text (1. Nhập chuổi text 2. Pick chọn Text mẫu): 2

4. Select vùng lựa chọn: (Kéo chọn)

Lisp sẽ chọn tất cả các chuỗi Text giống chuỗi Text mẫu thuộc vùng chọn (mục 4)

 

Ghi chú: - Cận Dim trên là Dim lớn hơn (ví dụ: cận Dim trên 1500 là các giá trị Dim >1500)

- Cận Dim dưới là Dim nhỏ hơn (ví dụ: cận Dim dưới 1500 là các giá trị Dim <1500)

- Tất cả các giá trị Dim có thể là Dim chế (Dim fake)

Cảm ơn các Bro trước nhé!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình nghĩ bạn hơi lãm dũng lisp quá đấy, vì nếu có lp như yêu cầu của bạn khi thực hiện lệnh đế nhớ được các lựa chọn cũng đã đau đầu rồi chứ chưa nói là bị nhầm lẫn. Trừ th3 ra thì có thế dùng lệnh Fi của cad là được mà.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hi hi, khi chưa biết lisp thì chưa biết điều kỳ diệu, biết rồi không dứt ra được, bạn mĩnh biết mà. Vấn đề nhớ lệnh thì nhanh và dễ hơn mà, nhớ mỗi lệnh A5 thôi, tiếp theo là lệnh gì thì khi chạy lisp đã có hướng dẫn lựa chọn nhập lệnh luôn mà, như cái trên chỉ cần nhớ lệnh A5 sau đó cứ lệnh là số 1 hoặc 2 thôi (mà 1 hay 2 thì lisp cũng cho biết tương ứng với bước đó thì 1 có tác dụng gì, 2 có tác dụng gì mà) hi hi

 

 

Câu hỏi chưa rõ ở text mẫu là textstyle, layer, color, ....

Text mẫu lấy tất cả textstyle, layer, color, string .... bạn ạ, Text nhập chỉ xét mình String thôi, mình thiếu sót thật, Cảm ơn bạn đã nhắc nhở nha

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Góp ý:

1). Thật khó tin khi bạn chọn tập text mà có textstyle, layer, color, string .... giống text mẫu. Hóa ra các text này giống nhau về tất cả thông số à (vì bạn có dấu "...")?

2). Gộp tất cả mọi thứ vào 1 lệnh thì có nên chăng? Kiểu ví dụ thế này thì có nên làm không?

Chọn cách vẽ: Line/Arc/Pline/Text/Hatch/...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Góp ý:

1). Thật khó tin khi bạn chọn tập text mà có textstyle, layer, color, string .... giống text mẫu. Hóa ra các text này giống nhau về tất cả thông số à (vì bạn có dấu "...")?

2). Gộp tất cả mọi thứ vào 1 lệnh thì có nên chăng? Kiểu ví dụ thế này thì có nên làm không?

Chọn cách vẽ: Line/Arc/Pline/Text/Hatch/...

Cảm ơn bạn đã chỉ bảo, mình xin giải trình như sau (do đặc thù công việc):

1. Các text này giống nhau về tất cả thông số

2. Trí nhớ mình không được tốt nên mình muốn vẽ, chỉnh sửa kiểu cầm tay chi việc bạn ạ (chỉ nhớ mỗi lệnh A5 thì dẽ với mình hơn là nhớ 1 loạt lệnh)

Vẫn mong các bro chi bảo thêm ạ!

P/S: Minh muốn áp dụng cho nhiều vấn đề khác (sau khi được các bro giúp đỡ, mình sẽ chế biến cho ra thêm lisp khác để sử lý các vấn đề khác, hi hi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1). Viết lisp này thì không quá khó, nhưng cảm thấy nó sao sao ấy.

2). Giống nhau tất tần tất => nhóm text này trùng nhau ư?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1). Viết lisp này thì không quá khó, nhưng cảm thấy nó sao sao ấy.

2). Giống nhau tất tần tất => nhóm text này trùng nhau ư?

Nhóm text này là bản copy từ 1 text ban đầu ra bạn ạ, nó loằng ngoằng chỗ ấy ấy, hi hi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

A nên sử dụng menu / toolbar cho những trường hợp phân nhánh như thế này.

Về lisp này thì k khó, nên thử mày mò trước (nếu aT định học lisp).

Ở đây chỉ có 2 vấn đề cần chú tâm là lọc dxf của text, lọc dxf 1, 42 của dim (nhớ trường hợp measurement của DIm được thay bằng dấu <>)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

A nên sử dụng menu / toolbar cho những trường hợp phân nhánh như thế này.

Về lisp này thì k khó, nên thử mày mò trước (nếu aT định học lisp).

Ở đây chỉ có 2 vấn đề cần chú tâm là lọc dxf của text, lọc dxf 1, 42 của dim (nhớ trường hợp measurement của DIm được thay bằng dấu <>)

Oke, để toa thử sức xem sao hén, he he, trình độ mới chỉ copy paste lần mò thôi, (đổi tên lệnh là mình giỏi nhất trong vấn đề lập trình lisp), hi hi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×