Đến nội dung


Hình ảnh
- - - - -

[Hỏi] Cần tìm lisp về thiết lập cho toàn bộ Dim


  • Please log in to reply
6 replies to this topic

#1 quochuyksxd

quochuyksxd

    biết lệnh fillet

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

Đã gửi 05 July 2014 - 08:00 AM

Cho e xin hỏi trong diễn đàn có lisp nào có thể xử lý công việc như sau không?:

-Trong bản vẽ có nhiều kiểu tỷ lệ (TL1-100; TL1-50; TL1-25...) nhưng vì một lý do cần thay đổi kiểu cách dim như là kiểu text, hình dáng, màu sắc, text offset, các thông số khác...của các tỷ lệ đã thiết lập. Nếu giờ thiết lập lại cho toàn bộ các kiểu dim đã có thì rất mất thời gian. Xin hỏi có lệnh gì hoặc lisp gì hoặc nhờ các cao thủ lisp viết có thể xử lý công việc như sau:

-Thiết lập lại các thay đổi cho 1 dim do mình chọn (VD: TL1-100) sau đó chọn các dim cần thiết lập giống như kiểu tỷ lệ này-->apply-->OK


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 05 July 2014 - 10:27 AM

Bạn thử lisp sau, chọn dimstyle nguồn qua 1 đối tượng của nó, sửa thông số, rồi chọn đối tượng thuộc dimstyle đích.

(defun c:ddi(/ a entg0 entg1 li tm name)
  (setq a (car (entsel "\nChon doi tuong thuoc dimstyle nguon:"))
entg0 (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget a)))))
  (command "-dimstyle" "R" (cdr (assoc 3 (entget a))))
  (command "ddim")
  (setq entg1 (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget a))))
li (vl-remove nil (mapcar '(lambda(x y)
(if (not (equal x y)) y nil)) entg0 entg1)))
  
  (prompt "\nChon doi tuong thuoc dimstyle dich can doi:")
  (mapcar '(lambda(x)
    (setq name (cdr (assoc 3 (entget x)))
  tm (tblobjname "DIMSTYLE" name))
    (foreach y li
      (entmod (if (assoc (car y) (entget tm))
      (subst y (assoc (car y) (entget tm)) (entget tm))
      (append (entget tm) (list y)))))
    (command "-dimstyle" "R" name)
    (command "-dimstyle" "A" (ssget "X" (list '(0 . "DIMENSION") (cons 3 name))) ""))
 (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "DIMENSION")))))))
  
  (princ)
)

  • 2

#3 quochuyksxd

quochuyksxd

    biết lệnh fillet

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

Đã gửi 05 July 2014 - 03:16 PM

Bạn thử lisp sau, chọn dimstyle nguồn qua 1 đối tượng của nó, sửa thông số, rồi chọn đối tượng thuộc dimstyle đích.

 

(defun c:ddi(/ a entg0 entg1 li tm name)
  (setq a (car (entsel "\nChon doi tuong thuoc dimstyle nguon:"))
entg0 (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget a)))))
  (command "-dimstyle" "R" (cdr (assoc 3 (entget a))))
  (command "ddim")
  (setq entg1 (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget a))))
li (vl-remove nil (mapcar '(lambda(x y)
(if (not (equal x y)) y nil)) entg0 entg1)))
  
  (prompt "\nChon doi tuong thuoc dimstyle dich can doi:")
  (mapcar '(lambda(x)
    (setq name (cdr (assoc 3 (entget x)))
  tm (tblobjname "DIMSTYLE" name))
    (foreach y li
      (entmod (if (assoc (car y) (entget tm))
      (subst y (assoc (car y) (entget tm)) (entget tm))
      (append (entget tm) (list y)))))
    (command "-dimstyle" "R" name)
    (command "-dimstyle" "A" (ssget "X" (list '(0 . "DIMENSION") (cons 3 name))) ""))
 (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "DIMENSION")))))))
  
  (princ)
)

Cảm ơn bạn đã chia sẻ. Lisp này cơ bản đã thực hiện đúng theo ý tưởng của mình như trên rồi. Tuy nhiên khi sử dụng mình thấy bất cập  là mỗi lần cần ánh xạ thì buộc phải thay đổi tối thiểu 1 thông số ở dim nguồn. Bạn có thể hiểu chỉnh sao cho có thể không cần phải thay đổi ở dim nguồn (hoặc chỉ thay đổi thông số 1 lần duy nhất) và chọn đến dim đích là OK. có thể chọn nhiều dim đích thì càng tốt. 


  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 05 July 2014 - 03:35 PM

Tôi không hiểu ý bạn lắm:
1. Lisp trên có thể chọn nhiều dim đích một lúc mà.
2. Bạn phải sửa thông số của dim nguồn thì lisp mới biết bạn muốn thay đổi thông số nào chứ vì mỗi dim có vài chục thông số khác nhau mà, nếu dim nguồn không đổi gì hết thì những cái dim đích kia cũng sẽ không đổi gì hết.  Hay bạn muốn toàn bộ thông số của cái này gán hết cho cái kia?
Còn nếu bạn muốn giống như lệnh MA của cad thì bạn phải thuộc lòng ý nghĩa và tên của từng thông số để gõ đúng tên nó.
  • 1

#5 quochuyksxd

quochuyksxd

    biết lệnh fillet

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

Đã gửi 05 July 2014 - 04:44 PM

Ý mình nếu như mình ánh xạ còn sót dim đích thì khi chọn lại lại phải thay đổi thông số dim nguồn, trong khi đó dim nguồn đã set rồi.


  • 0

#6 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 05 July 2014 - 05:04 PM

Nếu bạn thường xuyên thay đổi dim thì nên tạo một cái dim tạm thời nào đó, rồi sửa thoải mái trên cái dim đó, lấy đó làm dim nguồn. Chứ tôi nghĩ chẳng có cách nào khác.


  • 1

#7 quochuyksxd

quochuyksxd

    biết lệnh fillet

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

Đã gửi 05 July 2014 - 05:14 PM

Vâng. Dù sao cũng cảm ơn bạn rất nhiều. được như thế này cũng quá tốt rồi.  :)


  • 0