Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
amateurday

help_ lisp thu hẹp khoảng cách giữa đường kthước và đg được ghi kthước

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

các bác viết júp em lisp này: lisp thu hẹp (và kéo giãn hàng loạt) khoảng cách giữa đường kthước và đường được ghi kthước. theo 1 khoảng cách cho trướ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
các bác viết júp em lisp này: lisp thu hẹp (và kéo giãn hàng loạt) khoảng cách giữa đường kthước và đường được ghi kthước. theo 1 khoảng cách cho trước

Chịu. Bạn viết khó hiểu quá.

Thế nào là đường kthước??? và thế nào là đường được ghi kthước?????

thu hẹp (và kéo giãn hàng loạt) theo điểm chuẩn nào???

 

Bạn có thể nói rõ hơn? Tue_NV nghĩ rằng bạn nên upload minh họa điều bạn nói qua file .dwg

  • 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
các bác viết júp em lisp này: lisp thu hẹp (và kéo giãn hàng loạt) khoảng cách giữa đường kthước và đường được ghi kthước. theo 1 khoảng cách cho trước

Nếu đường kich thước là đường gióng, và đường được ghi kích thước là đường kích thước thì trên diễn đàn đã có lisp rồi bạn ạ, hãy chịu khó tìm kiếm nha.

  • 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 muốn hình bên trái biến thành hình bên phải. vì cần phải thao tác với nhiều đối tượng nằm lung tung trên bản vẽ nên nếu làm thủ công thì "bó tay lun"

99599543.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
em muốn hình bên trái biến thành hình bên phải. vì cần phải thao tác với nhiều đối tượng nằm lung tung trên bản vẽ nên nếu làm thủ công thì "bó tay lun"

99599543.jpg

Dưới đây là Lisp do Nguyen Hoanh viết:

+ Đánh lệnh SD

+ Pick dim 800 trước (trục X)

+ Select các dim khác theo trục X

+ Dùng lệnh Stretch để dời các dim gần Object

Thực hiện các bước như trên cho các dim theo trục Y

Amateurday nên dùng chức năng Tìm kiếm của cadviet.com http://www.cadviet.com/sub/hsearch.php?cx=...search.php#1233

 

http://www.cadviet.com/upfiles/2/sd_sapxepdim.lsp

 

P/s: Sẽ có dòng "Unknown command "SD". Press F1 for help" sau khi Chon duong dim goc. Nhưng Lisp vẫn chạy OK.

  • 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
Dưới đây là Lisp do Nguyen Hoanh viết:

+ Đánh lệnh SD

+ Pick dim 800 trước (trục X)

+ Select các dim khác theo trục X

+ Dùng lệnh Stretch để dời các dim gần Object

Thực hiện các bước như trên cho các dim theo trục Y

Amateurday nên dùng chức năng Tìm kiếm của cadviet.com http://www.cadviet.com/sub/hsearch.php?cx=...search.php#1233

 

http://www.cadviet.com/upfiles/2/sd_sapxepdim.lsp

 

P/s: Sẽ có dòng "Unknown command "SD". Press F1 for help" sau khi Chon duong dim goc. Nhưng Lisp vẫn chạy OK.

 

thank bác phi, nhưg lisp này có 2 nhược điểm:

+ không dùng đc cho cad2008, bác hoanh có nói cad08 có lisp tương tự nhưg em ko biết là lips nào

+ không tự chọn khoảng cách theo ý mình đc, bác hoanh có bảo xem các reply, nhưg em xem cũng ko thấy cách nào, vì em ko hiểu rõ về lips lắm

bác phi hay bác nào hoàn thiện 2 yêu cầu trên júp em đc ko.

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
Dưới đây là Lisp do Nguyen Hoanh viết:

+ Đánh lệnh SD

+ Pick dim 800 trước (trục X)

+ Select các dim khác theo trục X

+ Dùng lệnh Stretch để dời các dim gần Object

Thực hiện các bước như trên cho các dim theo trục Y

......

http://www.cadviet.com/upfiles/2/sd_sapxepdim.lsp

Chào bạn amateurdayPhiphi

Nhìn vào hình ảnh mà amateurday đã upload ta có thể thấy rằng amateurday muốn co giãn hoặc thu hẹp các DIMENSION theo 1 đường chuẩn nào đó, cụ thể đường chuẩn của DIM theo phương X là đường nằm trên cùng, đường chuẩn của DIM theo phương Y là đường nằm bên trái,

trong khi đó lisp của bác Hoành co giãn và thu hẹp theo 1 DIMENSION chuẩn nào đó.

 

Mạn phép bác Nguyễn Hoành, Tue_NV sửa lại Lisp của bác đôi chút cho phù hợp với yêu cầu của bạn amateurday và đôi khi các bạn khác cũng cần sử dụng đến

Lisp này co giãn hoặc thu hẹp các DIM theo 1 đường chuẩn do User chọn bằng việc Pick 2 điểm

 

Command: sd

Sap xep dim © CADViet.com

Chon diem goc : -> chọn điểm chuẩn đầu tiên

Chon 1 diem theo phuong : -> hiện chế độ Ortho, Nếu bạn muốn co giãn hay thu hẹp DIM theo phương nào thì kéo chuột theo phương đó và ...Pick

 

Select objects: Specify opposite corner: 3 found -> Chọn đối tượng DIM cần co giãn hoặc thu hẹp

 

Select objects: -> Enter

 

Khoang cach Dim goc : Chọn khoảng cách co giãn hoặc thu hẹp DIM bằng cách nhập từ bàn phím hoặc bằng cách pick điểm. Với cách chọn khoảng cách bằng cách pick điểm thì Lisp đã chọn cho mình trước 1 điểm chuẩn rồi, mình chỉ còn chọn điểm thứ 2 nữa mà thôi. Khoảng cách giữa 2 điểm này là khoảng cách.

Và khoảng cách được lưu lại cho các lần nhập về sau. Đồng ý thì Enter, không đồng ý thì nhập khoảng cách mới bằng cách nhập từ bàn phím hoặc bằng cách pick điểm

 

Đay là Code của bác Hoành đã được chỉnh lại theo ý của amateurday.

Các bạn sử dụng thử nhé :

(defun c:sd (/ p p2 entgoc ttgoc p13goc goc heightdimgoc ssd lstd
	lstlevel lstam lstduong lstamtmp lstduongtmp plht
       kcdimht khoangcachdim pgoc duongthu diemchenht pmoi)
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (cond
(ss (sslength ss))
(t 0)
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(defun hoanh_newerror (msg)
(if (and (/= msg "Function cancelled")
(/= msg "quit / exit abort")
)
(princ (strcat "\n" msg))
)
(done)
)
;;----------
(defun init ()
(setq
HOANH_CMD (getvar "CMDECHO")
HOANH_OLDERROR *error*
*error* hoanh_newerror

)
(setvar "CMDECHO" 0)
(command ".undo" "BE")
)
;;----------
(defun done ()
(command ".redraw")
(command ".undo" "E")
(if HOANH_CMD
(setvar "CMDECHO" HOANH_CMD)
)
(if HOANH_OLDERROR
(setq *error* HOANH_OLDERROR)
)
(princ)
)
;;----------

(defun cdim (entdt pchan pduong / tt old10
old13 old14 new10 new13 new14 p10n
p13n p14n p10o p13o p14o gocduong
gocchan pchanb pduongb loaidim
)
(defun chanvuonggoc (ph p1 p2 / ptemp pkq goc)
(setq
goc (+ (angle p1 p2) (/ pi 2.0))
ptemp (polar ph goc 1000.0)
pkq (inters ph ptemp p1 p2 nil)
)
pkq
)
(setq
tt (entget entdt)
old10 (assoc '10 tt)
old13 (assoc '13 tt)
old14 (assoc '14 tt)
p10o (cdr old10)
p13o (cdr old13)
p14o (cdr old14)
loaidim (logand (cdr (assoc '70 tt)) 7)
gocduong (cond
((= loaidim 1) (angle p13o p14o))
((= loaidim 0) (cdr (assoc '50 tt)))
(t nil)
)
pchan (cond
(pchan (list (car pchan) (cadr pchan) 0.0))
(t pchan)
)
pduong (cond
(pduong (list (car pduong) (cadr pduong) 0.0))
(t pduong)
)

)
(if gocduong
(progn
(if pchan
(setq
pchanb (polar pchan gocduong 1000.0)
p13n (chanvuonggoc
(list (car p13o) (cadr p13o) 0.0)
pchan
pchanb
)
p14n (chanvuonggoc
(list (car p14o) (cadr p14o) 0.0)
pchan
pchanb
)
new13 (cons 13 p13n)
new14 (cons 14 p14n)
tt (subst new13 old13 tt)
tt (subst new14 old14 tt)
)
)
(if pduong
(setq
pduongb (polar pduong gocduong 1000.0)
p10n (chanvuonggoc
(list (car p10o) (cadr p10o) 0.0)
pduong
pduongb
)
new10 (cons 10 p10n)
tt (subst new10 old10 tt)
)
)
(entmod tt)
)
)
gocduong
)

(defun textdimheight (ent / tmp)
(command ".copy" ent "" (list 0.0 0.0 0.0) "@")
(command ".explode" (entlast) "")
(setq tmp (cdr (assoc 40 (entget (entlast)))))
(command ".erase" "p" "")
tmp
)
(defun phia (p1 p2 p3 / x1 y1 z1 x2 y2 z2 x3 y3 z3)
(setq
x1 (car p1)
y1 (cadr p1)
z1 (caddr p1)
x2 (car p2)
y2 (cadr p2)
z2 (caddr p2)
x3 (car p3)
y3 (cadr p3)
z3 (caddr p3)
tmp (+ (* (- x1 x2) x3)
(* (- y1 y2) y3)
(* (- z1 z2) z3)
)
)
(cond
((= tmp 0.0) 0.0)
(t (/ tmp (abs tmp)))
)
)
(defun khoangcachdim (p1 ent goc / tt p2 A B D)
(setq tt (entget ent)
p2 (cdr (assoc 10 tt))
B (cdr (assoc 50 tt))
A (angle p1 p2)
D (distance p1 p2)
)
(* (* D (sin (- A B ))) (phia p1 (polar p1 goc 1.0) p2))
)

(defun phanloai (ent)
(setq
kc (khoangcachdim pgoc ent goc)
loai (fix (/ kc heightdimgoc 0.93))
)
(cons loai ent)
)

(init)
(princ "\nSap xep dim © CADViet.com")
(setq p (getpoint "\n Chon diem goc :"))
(setvar "orthomode" 1)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq p2 (getpoint p "\n Chon 1 diem theo phuong :"))
(command "dimlinear" p p2 p)
;(while (not (setq entgoc (car (entsel "\nChon duong dim goc: "))))
:cheers:
(setq entgoc (entlast))

(setq ttgoc (entget entgoc)) 
(setq p13goc (cdr (assoc 13 ttgoc))
pgoc (cdr (assoc 10 ttgoc))
goc (cdr (assoc 50 ttgoc))
heightdimgoc (textdimheight entgoc) ) 
(entdel entgoc)
(setq ssd (ssget (list
(cons 0 "DIMENSION")
(cons -4 "(cons 70 32)
(cons 70 64)
(cons 70 96)
(cons 70 128)
(cons 70 160)
(cons 70 196)
(cons 70 224)
(cons -4 "OR>")
(cons -4 "(cons 50 goc)
(cons 50 (+ goc pi))
(cons 50 (- goc pi))
(cons -4 "OR>")
)
)
lstd (ss2ent ssd)
lstd (mapcar 'phanloai lstd)
lstlevel nil
)

(foreach pp lstd
(if (not (member (car pp) lstlevel))
(setq lstlevel (append lstlevel (list (car pp))))
)
)
(setq lstlevel (vl-sort lstlevel '(lambda (x1 x2) (lstam nil
lstduong nil
lstamtmp nil
lstduongtmp nil
)
(foreach pp lstlevel
(if ((setq lstam (append lstam (list pp)))
)
(if (> pp 0.0)
(setq lstduong (append lstduong (list pp)))
)
)
(setq index 0)
(foreach pp (reverse lstam)
(setq
index (1+ index)
lstamtmp (append lstamtmp (list (cons pp index)))
)
)
(setq
lstam lstamtmp
index 0
)
(foreach pp lstduong
(setq
index (1+ index)
lstduongtmp (append lstduongtmp (list (cons pp index)))
)
)
(setq lstduong lstduongtmp)
(setq lstlevel (append lstduong lstam (list (cons 0.0 0))))

;(setq kcdimstandard (* 3.0 heightdimgoc))
(if (not *kcdim*) (setq *kcdim* (* 2.0 heightdimgoc)) )
(setq kcdimstandard (getdist p (strcat "\n Khoang cach Dim goc  :")))
(if (not kcdimstandard) (setq kcdimstandard *kcdim*) (setq *kcdim* kcdimstandard) )
(foreach pp lstd
(setq plht (car pp))
(progn
(setq
kcdimht (khoangcachdim pgoc (cdr pp) goc)
duongthu (cdr (assoc plht lstlevel))
heso (cond
((/= 0 kcdimht)
(abs (* (/ kcdimstandard kcdimht) duongthu))
)
(t 0.0)
)
diemchenht (cdr (assoc 10 (entget (cdr pp))))
pmoi (polar pgoc
(angle pgoc diemchenht)
(* heso (distance pgoc diemchenht))
)
)

(cdim (cdr pp) p13goc pmoi)
)
)
(done)
(setvar "osmode" oldos)
)
(princ "\nSap xep dim, SD - free lisp from www.cadviet.com")
(princ)

Chỉnh sửa theo Tue_NV
  • 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

cám ơn bác TUE_NV, nhưg nó không dùng đc cho cad08 phải không vì em làm theo chỉ dẫn nó ra thế này:

Command: sd

Sap xep dim © CADViet.com

Chon diem goc : -> chọn điểm chuẩn đầu tiên

Chon 1 diem theo phuong : -> hiện chế độ Ortho, Nếu bạn muốn co giãn hay thu hẹp DIM theo phương nào thì kéo chuột theo phương đó và ...Pick

 

sau đó nó ra cái dưới luôn, không cho chọn đối tượng:

 

Khoang cach Dim goc < 7.77 > :

 

sau đó là thoát lênh luôn, bác Tue_NV à

 

kết quả cuối cùng đây bác:

 

Command: SD

Sap xep dim © CADViet.com

Chon diem goc :

Chon 1 diem theo phuong :Unknown command "SD". Press F1 for help.

Khoang cach Dim goc < 50.00 > :

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, nhưg nó không dùng đc cho cad08 phải không vì em làm theo chỉ dẫn nó ra thế này:

Command: sd

Sap xep dim © CADViet.com

Chon diem goc : -> chọn điểm chuẩn đầu tiên

Chon 1 diem theo phuong : -> hiện chế độ Ortho, Nếu bạn muốn co giãn hay thu hẹp DIM theo phương nào thì kéo chuột theo phương đó và ...Pick

 

sau đó nó ra cái dưới luôn, không cho chọn đối tượng:

 

Khoang cach Dim goc :

 

sau đó là thoát lênh luôn, bác Tue_NV à

 

kết quả cuối cùng đây bác:

 

Command: SD

Sap xep dim © CADViet.com

Chon diem goc :

Chon 1 diem theo phuong :Unknown command "SD". Press F1 for help.

Khoang cach Dim goc :

Chức năng Download Lisp file của diễn đàn bị lỗi.

'amateurday' sử dụng Code được upload ở file dưới đây về chạy thử nhé :

 

http://www.cadviet.com/upfiles/2/sd.lsp

 

Chúc thành công nhé :cheers:

  • 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
thank bác phi, nhưg lisp này có 2 nhược điểm:

+ không dùng đc cho cad2008, bác hoanh có nói cad08 có lisp tương tự nhưg em ko biết là lips nào

+ không tự chọn khoảng cách theo ý mình đc, bác hoanh có bảo xem các reply, nhưg em xem cũng ko thấy cách nào, vì em ko hiểu rõ về lips lắm

bác phi hay bác nào hoàn thiện 2 yêu cầu trên júp em đc ko.

Trích lời bác Hòanh : Không ngờ, ACAD 2008 đã có sẵn lệnh này với cái tên là DIMSPACE.

Tham khảo : http://www.cadviet.com/forum/index.php?showtopic=1661

 

Vấn đề của bạn Tui đã trả lời ở đây : http://www.cadviet.com/forum/index.php?sho...ost&p=81433

  • 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ức năng Download Lisp file của diễn đàn bị lỗi.

'amateurday' sử dụng Code được upload ở file dưới đây về chạy thử nhé :

 

http://www.cadviet.com/upfiles/2/sd.lsp

 

Chúc thành công nhé :D

Vài ý kiến về lệnh sd

1. Thay (command ".explode" (entlast) "")

thành (command ".explode" (entlast)) sẽ hết thông báo lỗi Unknown command "SD"

2. Khoảng cách default giữa các dim lấy = 2 lần chiều cao text, khoảng cách này có thể khác với khoảng cách khi dùng lệnh dimbaseline

Đối với dimstyle hiện hành, giá trị này bằng

(* (getvar "DIMSCALE") (getvar "DIMDLI"))

Đối với dimstyle của dim được chọn làm dim gốc tính như sau

(defun BaselineSpacing ( ent / el)
(setq el (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget ent)))))
(* (cdr(assoc 40 el)) (cdr(assoc 43 el)))
)

3. Trường hợp vị trí text của dim đã thay đổi , sau khi sắp xếp sẽ không đúng.

4. Dùng lệnh ".explode" tuy đơn giản nhưng có thể không an toàn, trong chương trình này thì không sao, nhưng nếu có lỗi xảy ra sẽ sinh ra rác.

Ngoài ra, nếu chọn dim thì có thể xảy ra các trường hợp sau

1. dim có text move vào nằm giữa dimline, (entlast) không phải là mtext mà là các mũi tên

2. dim có text là " " (blank) sẽ không có mtext

Có thể truy xuất đối tượng mtext của dim thông qua block

(nil nếu dim không có mtext)

(defun GetMtextDim (en / ei ed)
(if(setq ei (cdr(assoc 2 (entget en))))
(progn
(setq ei (cdr(assoc -2 (tblsearch "BLOCK" ei))))
(while (and ei (not ed))
(if (= "MTEXT" (cdr(assoc 0 (entget ei)))  )(setq ed ei))
(setq ei (entnext ei))
)
))
	ed
)

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
Đăng nhập để thực hiện theo  

×