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

[Yêu cầu] Lisp điều chỉnh vị trí text ghi kích thước trên đường dim

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

Chào các bác pro. Em gặp vấn đề này mong các bác giúp đỡ.

Trong khi vẽ cad, do nhiều lý do nên có khi em phải thay đổi vị trí text ghi kích thước trên đường dim (mặc định là ghi kích thước vào giữa đường dim), làm như vậy với số lượng dim lớn thì rất mất thời gian. Mong các bác viết hộ em cái lisp để điểu chỉnh 1 lần duy nhất cho tất cả các dim (các dim này đã gióng thẳng hàng theo phương đứng), em xin cảm ơn các bác trước.

Chúc cả nhà một ngày vui.

Các bác xem chi tiết ở hình vẽ sau nhé http://www.mediafire.com/?dis7edjxaz2p2d5

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

Điều là điều ra răng ? Hình ảnh / file của bạn đâu ? Trước khi chỉnh nó ntn, sau đấy nó ntn ??

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

110388_minh_hoa_2.png

 

 

Mình đã cập nhật hình vẽ cụ thể, mong các bác ra tay giúp đỡ nhé.

Chúc diễn đàn ngày càng phát triển.

Của bạn đây. Bạn thử xem nhé :

(defun c:ctd(/ ss ename i dxf11 dxf13 vt)
 (if (setq ss (ssget '((0 . "DIMENSION"))))
   (progn
     (setq i -1 vt (getreal "\n Text cua dim cach mep trai 1 doan :"))
     (while (setq ename (ssname ss (setq i (1+ i))))
(command "dimtedit" ename "L")
(setq dxf11 (cdr(assoc 11 (entget ename)))
		 dxf13 (cdr(assoc 13 (entget ename)))  )
(command "dimtedit" ename (list (+ (car dxf13) vt) (cadr dxf11) 0.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

Theo em trường hợp này không nên lạm dụng lisp. Làm thủ công tiện dụng hơn nhiều, có hai cách làm:

 

hffff1111.jpg

 

1- Nếu sửa ít làm theo hình ảnh > Sửa 1 kích thước rồi dùng lệnh Ma quét sửa tất cả các kích thước trong cùng một kiểu dim

 

dsdhsg2223.jpg

 

2-Nếu sửa nhiều: lựa chọn theo trên ảnh, sẽ sửa được đồng loạt như hình em đã vẽ ở trên!

  • 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ủa bạn đây. Bạn thử xem nhé :

(defun c:ctd(/ ss ename i dxf11 dxf13 vt)
 (if (setq ss (ssget '((0 . "DIMENSION"))))
   (progn
     (setq i -1 vt (getreal "\n Text cua dim cach mep trai 1 doan :"))
     (while (setq ename (ssname ss (setq i (1+ i))))
(command "dimtedit" ename "L")
(setq dxf11 (cdr(assoc 11 (entget ename)))
     dxf13 (cdr(assoc 13 (entget ename)))  )
(command "dimtedit" ename (list (+ (car dxf13) vt) (cadr dxf11) 0.0) )
     )
   )
 )
)

Em thấy đoạn lisp này cũng tiện lợi. Nhưng bác có thể sửa thành click chuột vào một điểm mới nằm trên đường dim đó thì text sẽ chuyển tương ứng về vị trí mới đó thì tiện hơn ạ.

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 thấy đoạn lisp này cũng tiện lợi. Nhưng bác có thể sửa thành click chuột vào một điểm mới nằm trên đường dim đó thì text sẽ chuyển tương ứng về vị trí mới đó thì tiện hơn ạ.

Nếu trong tập chọn có : Dim theo phương X, Dim theo phương Y hoặc Dim theo phương bất kì thì làm răng bạn? Code trên cũng tính đến trường hợp này nữa

Đơn giản hơn, các bạn có thể sử dụng cách mà bạn haanh đã trình bày ở bài viết trên

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ảm ơn bác Tue_NV và bác Ketxu nhiều nha, mấy hôm ngồi chờ các bác hồi âm em phải sửa từng cái một bằng tay oải lắm, giờ thì ngon lành rồi.

Chúc cả nhà vui ^^

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

Chào bác Tue-NV và các anh em trên diễn đàn.

Lâu lắm em không có dịp vào diễn đàn vì đi công trường suốt, mới về phòng và tiếp tục công việc vẽ vời. Em gặp một tình huống tương tự như trường hợp này mà lisp này em thấy dùng chưa được như ý lắm (hoặc ít ra là trong trường hợp cụ thể của em). Xin nhờ các bác sửa giúp thêm để thực hiện được công việc như em miêu tả trong file đính kèm. Em đính kèm 2 file, một file là file miêu tả lisp yêu cầu, một file là file thực tế em đang phải làm, các bác xem và giúp em với ạ.

Thanks các bác nhiều!

File mô tả lisp

http://www.cadviet.com/upfiles/3/110072_lsh_1.dwg

File thực tế em đang làm

http://www.cadviet.com/upfiles/3/110072_01general_view_of_pier_type_2a.dwg

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

 

Chào bác Tue-NV và các anh em trên diễn đàn.

Lâu lắm em không có dịp vào diễn đàn vì đi công trường suốt, mới về phòng và tiếp tục công việc vẽ vời. Em gặp một tình huống tương tự như trường hợp này mà lisp này em thấy dùng chưa được như ý lắm (hoặc ít ra là trong trường hợp cụ thể của em). Xin nhờ các bác sửa giúp thêm để thực hiện được công việc như em miêu tả trong file đính kèm. Em đính kèm 2 file, một file là file miêu tả lisp yêu cầu, một file là file thực tế em đang phải làm, các bác xem và giúp em với ạ.

Thanks các bác nhiều!

File mô tả lisp

http://www.cadviet.com/upfiles/3/110072_lsh_1.dwg

File thực tế em đang làm

http://www.cadviet.com/upfiles/3/110072_01general_view_of_pier_type_2a.dwg

 

Bạn thử code này :

 

(defun c:ctd(/ ss ename i dxf11 dxf13 vt)
  (setq p1 (getpoint "\n Diem thu 1 :") p2 (getpoint p1 "\n Diem thu 2 :"))
  (setq ang (angle p1 p2))
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq i -1); vt (getreal "\n Text cua dim cach mep trai 1 doan :"))
      (while (setq ename (ssname ss (setq i (1+ i))))
(command "dimtedit" ename "L")
(setq dxf11 (cdr(assoc 11 (entget ename)))
   dxf13 (cdr(assoc 13 (entget ename))) 
      pres (inters p1 p2 dxf11 (polar dxf11 (+ ang (/ pi 2.0)) 100.0) t)
)
(command "dimtedit" ename pres )
      )
    )
  )
)
 
Cách sử dụng:

Bạn quickan... thử code này : Bạn chọn DIMENSION -> Chọn điêm thứ 1 và điểm thứ 2 của đoạn thẳng 

 

 
(defun c:ctd(/ ss ename i dxf11 dxf13 ang pres)
  (setq p1 (getpoint "\n Diem thu 1 :") p2 (getpoint p1 "\n Diem thu 2 :"))
  (setq ang (angle p1 p2))
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq i -1)
      (while (setq ename (ssname ss (setq i (1+ i))))
(command "dimtedit" ename "L")
(setq dxf11 (cdr(assoc 11 (entget ename)))
   dxf13 (cdr(assoc 13 (entget ename))) 
      pres (inters p1 p2 dxf11 (polar dxf11 (+ ang (/ pi 2.0)) 100.0) t)
)
(command "dimtedit" ename pres )
      )
    )
  )
)
  • 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

Bác Tue_NV ơi! LISP của bác thật hay khi sử dụng cho hàng loạt DIM, với một DIM thì dùng lệnh STRETCH?! TEXT vẫn còn nằm trong (hoặc nằm trên) đường dim!

Tuy nhiên, với mục đích tách loạt Dim choáng chỗ, nếu em muốn Bác sửa thế này có được không?!

 

Input: 1. Chọn vùng Dim cần thao tác

          2. Nhập vào số bậc hiệu chỉnh <1;2;3>

          3. Hướng thực hiện <T;P>: Nếu T, DIM đầu tiên bên TRÁI làm chuẩn không thay đổi, bắt đầu thay đổi từ DIM thứ 2 trở đi, từ TRÁI sang PHẢI, và ngược lại cho lựa chọn P.

 

Mô tả:

118347_song_nhi_2.jpg118347_song_nhi_1_1.jpg

 

Và đây là kích thước tường minh, tương quan chiều cao TEXT và các bước nhảy:

118347_88888.jpg

 

Nếu thực hiện được trên phương xiên nữa thì thật là tuyệt vời!

Cám ơn các Bác đã quan tâm đến vấn đề của em, thành thật xin lỗi nếu sự chỉnh sửa (bài viết) này gây ra trở ngại!!!

  • 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

Chào bác Tue_NV.

Sau khi down đoạn lisp trên về dùng em thấy thế này ạ.

Lisp chạy đúng cho trường hợp các dimension có cùng một "điểm xuất phát" (em không biết dùng từ gì cho chuẩn) khi đó các textdim sẽ đường căn bằng khoảng cách đến đầu bên trái bằng nhau. như vậy chúng sẽ thẳng hàng. Nhưng trường hợp các điểm căn ở đầu bên trái không thẳng hàng thì hình như chưa đúng ạ.

Em post lại file  bản vẽ yêu cầu, mô tả rõ ràng hơn, bác và các bác khác xem giúp em với nhé.

Trường hợp dim theo phương thẳng đứng cũng tương tự ạ

http://www.cadviet.com/upfiles/3/110072_lsh_2.dwg

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

Bạn sửa dòng này :
(setq dxf11 (cdr(assoc 11 (entget ename)))
dxf13 (cdr(assoc 13 (entget ename)))
pres (inters p1 p2 dxf11 (polar dxf11 (+ ang (/ pi 2.0)) 100.0) t)
)
thành dòng :
(setq dxf11 (cdr(assoc 11 (entget ename)))
dxf13 (cdr(assoc 13 (entget ename)))
pres (inters p1 p2 dxf11 (polar dxf11 (+ ang (/ pi 2.0)) 100.0) nil)
)
  • Vote tăng 2

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

Sẵn dịp cho phép em được refresh lại yêu cầu hôm trước của em tý, tại em thấy yêu cầu của mình cũng liên quan đến tên Topic này, nên "nhét" vô trong này mà không mở Topic mới! Hix, có lẽ vì vậy mà không nhận được sự quan tâm của các Bác?!
 

Với mục đích tách loạt Dim choáng chỗ, các bác có thể vui lòng giúp em như thế này được không ạ!
 
Input: 1. Chọn vùng Dim cần thao tác
           2. Nhập vào số bậc hiệu chỉnh <1;2;3>
           3. Hướng thực hiện <T;P>: Nếu T, DIM đầu tiên bên TRÁI làm chuẩn không thay đổi, bắt đầu thay đổi từ DIM thứ 2 trở đi, từ TRÁI sang PHẢI, và ngược lại cho lựa chọn P.
 
Mô tả:
118347_song_nhi_2.jpg118347_song_nhi_1_1.jpg

Và đây là kích thước tường minh, tương quan chiều cao TEXT và các bước nhảy:
118347_88888.jpg

Nếu thực hiện được trên phương xiên nữa thì thật là tuyệt vời!
Cám ơn các Bác đã quan tâm đến vấn đề của em, thành thật xin lỗi nếu sự chỉnh sửa (bài viết) này gây ra trở ngạ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

mạn phép ké topic này cũng để hỏi về di chuyển text trên đường dim.

lúc trước xài cad 2008, mỗi lần kích chuột phải vào đường dim là xuất hiện lựa chọn "dimension position" để lựa chọn: move text, move text with leader,....

bây giờ xài cad 2013, cũng thao tác vậy mà kiếm không ra cái lựa chọn "move text with leader"  :angry2:

các bác giúp mình chỗ này với, xem giùm nó nằm ở chỗ nào ? hay là cad 2013 bỏ lựa chọn này rồi

autocad201310giaothongc.jpg

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

bác nao giup e voi!!! em moi tap ve cad??? bình thường em chọn đoạn thẳng mình về thì nó sáng lên hk biết cái đắc thế nào mà giờ lick vào đoạn thẳng ko thấy phản ứng gì  giúp em cài đặc lại với 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

bác nao giup e voi!!! em moi tap ve cad??? bình thường em chọn đoạn thẳng mình về thì nó sáng lên hk biết cái đắc thế nào mà giờ lick vào đoạn thẳng ko thấy phản ứng gì  giúp em cài đặc lại với em cảm ơn nhiều??

Hề hề hề,

Cài "đặc" thì mình chịu chết , hổng biết cách làm. Nhưng mà cài "lỏng" thì có biết chút chút. Bác nào cần xài "lỏng" thì cứ a lô 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

Thansk anh Ket nhiều ạ. Em dùng được đoạn code thứ nhất.

bác cho em xin đoạn code này của bác @Ketxu để tham khảo đuợc không !

Hơi tò mò mà không tìm thấy code này.

Thanks các bác !

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

Bác Tue_NV ơi! LISP của bác thật hay khi sử dụng cho hàng loạt DIM, với một DIM thì dùng lệnh STRETCH?! TEXT vẫn còn nằm trong (hoặc nằm trên) đường dim!

Tuy nhiên, với mục đích tách loạt Dim choáng chỗ, nếu em muốn Bác sửa thế này có được không?!

 

Input: 1. Chọn vùng Dim cần thao tác

          2. Nhập vào số bậc hiệu chỉnh <1;2;3>

          3. Hướng thực hiện <T;P>: Nếu T, DIM đầu tiên bên TRÁI làm chuẩn không thay đổi, bắt đầu thay đổi từ DIM thứ 2 trở đi, từ TRÁI sang PHẢI, và ngược lại cho lựa chọn P.

 

Mô tả:

118347_song_nhi_2.jpg118347_song_nhi_1_1.jpg

 

Và đây là kích thước tường minh, tương quan chiều cao TEXT và các bước nhảy:

118347_88888.jpg

 

Nếu thực hiện được trên phương xiên nữa thì thật là tuyệt vời!

Cám ơn các Bác đã quan tâm đến vấn đề của em, thành thật xin lỗi nếu sự chỉnh sửa (bài viết) này gây ra trở ngại!!!

 

Vấn đề move text Dim này cũng khá hay, mong mọi người giúp đỡ lisp này nhé.

 

Yêu cầu lisp bên trên cũng khá lằng nhằng, mong muốn của em nó đơn giản hơn chút:

 

- Chạy lisp, lisp yêu cầu chọn dãy dim cần dãn text trùng

+ Người dùng chọn dãy dim

- Lisp nhận diện các text bị đè lên nhau và move text trùng xuống dưới hàng dim (khoảng cách move bằng 2 lần chiều cao text). Kết thúc lệnh

 

File ví dụ:

http://www.mediafire.com/file/4oczix0pcd0dred/Vidu2.dwg

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


×