Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
26 replies to this topic

#1 engineer0405

engineer0405

    biết vẽ polygon

  • Members
  • PipPip
  • 78 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 11 April 2012 - 11:38 PM

Đú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 ạ
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 12 April 2012 - 12:08 AM

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 ^^
  • 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


#3 engineer0405

engineer0405

    biết vẽ polygon

  • Members
  • PipPip
  • 78 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 12 April 2012 - 03:34 PM

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 ạ
  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 12 April 2012 - 04:00 PM

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)
)
)

  • 3

#5 CE114-04

CE114-04

    biết vẽ line

  • Members
  • PipPip
  • 22 Bài viết
Điểm đánh giá: 6 (bình thường)

Đã gửi 12 April 2012 - 04:35 PM

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

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 12 April 2012 - 04:44 PM

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)
)

  • 3

#7 engineer0405

engineer0405

    biết vẽ polygon

  • Members
  • PipPip
  • 78 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 13 April 2012 - 01:55 AM

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 ạ
  • 0

#8 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 13 April 2012 - 08:11 AM

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.
  • 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.


#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 13 April 2012 - 08:44 AM

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
  • 3

#10 engineer0405

engineer0405

    biết vẽ polygon

  • Members
  • PipPip
  • 78 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 13 April 2012 - 04:11 PM

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
  • 0

#11 engineer0405

engineer0405

    biết vẽ polygon

  • Members
  • PipPip
  • 78 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 13 April 2012 - 04:28 PM

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
  • 0

#12 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 13 April 2012 - 05:21 PM

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)))

  • 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.


#13 engineer0405

engineer0405

    biết vẽ polygon

  • Members
  • PipPip
  • 78 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 13 April 2012 - 08:03 PM

cảm ơn các anh đã giúp.em có thêm rất nhiều kiến trức
chúc các anh thành công
  • 0

#14 dinhkienutc

dinhkienutc

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 13 April 2012 - 08:18 PM

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 ạ!
  • 0

#15 CE114-04

CE114-04

    biết vẽ line

  • Members
  • PipPip
  • 22 Bài viết
Điểm đánh giá: 6 (bình thường)

Đã gửi 14 April 2012 - 08:21 AM

Dim của bạn bị chạy thôi, bạn tham khảo lisp cut dim đã có trên diễn đàn:
http://www.cadviet.c...hp?showtopic=95

Cut dim xong chọn Ctrl+A, và dùng lệnh DDA để cố định đim

Thân
  • 2

#16 SoftvnBin

SoftvnBin

    biết vẽ ellipse

  • Advance Member
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 06 September 2012 - 09:26 AM

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é!
  • 0

#17 VoHoan

VoHoan

    biết lệnh move

  • Members
  • PipPipPip
  • 129 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 06 September 2012 - 10:11 AM

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à.
  • 0

#18 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 06 September 2012 - 10:21 AM

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

#19 SoftvnBin

SoftvnBin

    biết vẽ ellipse

  • Advance Member
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 06 September 2012 - 10:22 AM

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
  • 0

#20 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 September 2012 - 10:41 AM

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/...
  • 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.