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

Nhờ Các Bác Giúp Em Giải Quyết Bài Toán Này Với !

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

Cấu trúc câu lệnh :

 

- câu lệnh ( tùy các bác đặt)

- nhập D,  D1, D2, D3  (D1,D2,D3 >0)

- chọn đối tượng ( có thể chọn , hoặc quét toàn bộ đối tượng)

- kết quả

 

trong hình em đưa ra là D>0 ( đường màu tím nằm ngoài đối tượng )

nếu D<0 thì đường màu tím nằm bên trong đối tượng)

 

Đối tượng em đưa ra là đường PL, hoặc L

Các bác xem hình đính kèm bên cạnh giúp em nhé !

...

Em rất mong được các bác ghé qua giúp đỡ

 

http://www.cadviet.com/upfiles/6/151325_1_2.dwg

151325_1_1.jpg

Chỉnh sửa theo Chym Code

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

Offset 4 lần!

Đây là bạn đang vẽ cái gì? Có nhiều không? Nếu không thì mất công rèn dao (viết lisp) để cắt móng tay.

 

nhiều bác @Hà ah, vài trăm hình như vậy, mà nó là đa giác 4 cạnh, nhưng chủ yếu là HCN. Bác có thể giúp em chút được không?  OFFSET nhưng vẫn phải có cái đường nối các đỉnh như trong hình nhé Bác,hjhj

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

Xài tạm cái này. Chỉ dùng cho LWPOLYLINE.

 

(defun c:tes(/ D D1 D2 D3 DN DT E EG EL EL1 EL2 X Y)
(defun doimn (v a b) (command "change" v "" "P" "C" a "LT" b ""))
(defun laydinhr (e) (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= 10 (car x))) (entget e))))
(defun line (a b m) (entmake (list '(0 . "LINE") (cons 10 a) (cons 11 b) (cons 62 m))))
 
(command "ucs" "w")
(setq e (car (entsel "\nChon polyline:"))
eg (laydinhr e)
dt (polar (car eg) (angle (car eg) (nth 2 eg)) (* 0.5 (distance (car eg) (nth 2 eg)) ))
dn (polar (car eg) (angle (nth 2 eg) (car eg)) (* 0.5 (distance (car eg) (nth 2 eg)) )))
 
(setq d (getreal "\nKich thuoc D:"))
(command "offset" (abs d) e (if (> d 0) dn dt) "") (setq el (entlast)) (doimn el 6 "continuous")
 
(setq d1 (getreal "\nKich thuoc D1:"))
(command "offset" d1 el dn "") (setq el1 (entlast)) (doimn el1 3 "continuous")
 
(setq d2 (getreal "\nKich thuoc D2:"))
(command "offset" d2 el dt "") (doimn (entlast) 3 "continuous")
 
(setq d3 (getreal "\nKich thuoc D3:"))
(command "offset" (+ d2 d3) el dt "") (setq el2 (entlast)) (doimn el2 3 "continuous") 
 
(mapcar '(lambda(x y) (line x y 3)) (laydinhr el1) (laydinhr el2))
(princ)
)
  • 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

 

Xài tạm cái này. Chỉ dùng cho LWPOLYLINE.

(defun c:tes(/ D D1 D2 D3 DN DT E EG EL EL1 EL2 X Y)
(defun doimn (v a b) (command "change" v "" "P" "C" a "LT" b ""))
(defun laydinhr (e) (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= 10 (car x))) (entget e))))
(defun line (a b m) (entmake (list '(0 . "LINE") (cons 10 a) (cons 11 b) (cons 62 m))))
 
(command "ucs" "w")
(setq e (car (entsel "\nChon polyline:"))
eg (laydinhr e)
dt (polar (car eg) (angle (car eg) (nth 2 eg)) (* 0.5 (distance (car eg) (nth 2 eg)) ))
dn (polar (car eg) (angle (nth 2 eg) (car eg)) (* 0.5 (distance (car eg) (nth 2 eg)) )))
 
(setq d (getreal "\nKich thuoc D:"))
(command "offset" (abs d) e (if (> d 0) dn dt) "") (setq el (entlast)) (doimn el 6 "continuous")
 
(setq d1 (getreal "\nKich thuoc D1:"))
(command "offset" d1 el dn "") (setq el1 (entlast)) (doimn el1 3 "continuous")
 
(setq d2 (getreal "\nKich thuoc D2:"))
(command "offset" d2 el dt "") (doimn (entlast) 3 "continuous")
 
(setq d3 (getreal "\nKich thuoc D3:"))
(command "offset" (+ d2 d3) el dt "") (setq el2 (entlast)) (doimn el2 3 "continuous") 
 
(mapcar '(lambda(x y) (line x y 3)) (laydinhr el1) (laydinhr el2))
(princ)
)

 

Cảm ơn bác @Tot 77, nhưng lip của bác chỉ dùng cho được 1 đối tượng . Khi em muốn làm đối tượng tiếp theo, e phải nhập lại toàn bộ thông số 1 lần nữa, làm như vậy lâu quá bác ah.

Em mong muốn khi nhập xong các thông số D, D1, D2, D3, mình chọn đối tượng bất kì thì ra kết quả luôn, vì của em có vài trăm hình như vậy.

Bác có thể thêm chút thời gian sửa lại giúp em được không ?

Chỉnh sửa theo Chym Code
  • Vote tăng 1
  • Vote giảm 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

 Lisp trên chỉ cốt có cái nhìn "trực quan" về từng bước offset thôi. Còn muốn quét nhieu thì xài cái này.

 

(defun c:tes(/ D D1 D2 D3 DN DT E EG EL EL1 EL2 X Y)
(defun doimn (v a b) (command "change" v "" "P" "C" a "LT" b ""))
(defun laydinhr (e) (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= 10 (car x))) (entget e))))
(defun line (a b m) (entmake (list '(0 . "LINE") (cons 10 a) (cons 11 b) (cons 62 m))))
 
(command "ucs" "w")
(prompt "\nChon polyline:")
(setq d (getreal "\nKich thuoc D:")
d1 (getreal "\nKich thuoc D1:")
d2 (getreal "\nKich thuoc D2:")
d3 (getreal "\nKich thuoc D3:")
)
(foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LWPOLYLINE"))))))
(setq eg (laydinhr e)
dt (polar (car eg) (angle (car eg) (nth 2 eg)) (* 0.5 (distance (car eg) (nth 2 eg)) ))
dn (polar (car eg) (angle (nth 2 eg) (car eg)) (* 0.5 (distance (car eg) (nth 2 eg)) )))
 
(command "offset" (abs d) e (if (> d 0) dn dt) "") (setq el (entlast)) (doimn el 6 "continuous")
(command "offset" d1 el dn "") (setq el1 (entlast)) (doimn el1 3 "continuous")
(command "offset" d2 el dt "") (doimn (entlast) 3 "continuous")
(command "offset" (+ d2 d3) el dt "") (setq el2 (entlast)) (doimn el2 3 "continuous") 
 
(mapcar '(lambda(x y) (line x y 3)) (laydinhr el1) (laydinhr el2))
)
(princ)
)
  • 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

 

 Lisp trên chỉ cốt có cái nhìn "trực quan" về từng bước offset thôi. Còn muốn quét nhieu thì xài cái này.

(defun c:tes(/ D D1 D2 D3 DN DT E EG EL EL1 EL2 X Y)
(defun doimn (v a b) (command "change" v "" "P" "C" a "LT" b ""))
(defun laydinhr (e) (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= 10 (car x))) (entget e))))
(defun line (a b m) (entmake (list '(0 . "LINE") (cons 10 a) (cons 11 b) (cons 62 m))))
 
(command "ucs" "w")
(prompt "\nChon polyline:")
(setq d (getreal "\nKich thuoc D:")
d1 (getreal "\nKich thuoc D1:")
d2 (getreal "\nKich thuoc D2:")
d3 (getreal "\nKich thuoc D3:")
)
(foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LWPOLYLINE"))))))
(setq eg (laydinhr e)
dt (polar (car eg) (angle (car eg) (nth 2 eg)) (* 0.5 (distance (car eg) (nth 2 eg)) ))
dn (polar (car eg) (angle (nth 2 eg) (car eg)) (* 0.5 (distance (car eg) (nth 2 eg)) )))
 
(command "offset" (abs d) e (if (> d 0) dn dt) "") (setq el (entlast)) (doimn el 6 "continuous")
(command "offset" d1 el dn "") (setq el1 (entlast)) (doimn el1 3 "continuous")
(command "offset" d2 el dt "") (doimn (entlast) 3 "continuous")
(command "offset" (+ d2 d3) el dt "") (setq el2 (entlast)) (doimn el2 3 "continuous") 
 
(mapcar '(lambda(x y) (line x y 3)) (laydinhr el1) (laydinhr el2))
)
(princ)
)

Cảm ơn bác, chuẩn rồi đấy !

Cảm ơn bác nhiều nha, đúng bài toán của e rồ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

Bác @Tot77 cho em hỏi thêm chút được không ? ( 1 dạng bài toán khác, phát triển từ bài toán trên )

..................

..................

..vẫn dùng lip của bác, nhập các thông số đầu vào như bình thường, cho ra kết quả. Trong bài toán này, cạnh C ( D1, D2, D3, vẫn giữ nguyên ), nhưng d1 # D. Bác có cách nào để em được cạnh C có tham số (d1, D1, D2, D3) không bác?

 

 

http://www.cadviet.com/upfiles/6/151325_1_5.dwg

 

151325_2.jpg

  • Vote giảm 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ái đó bạn chịu khó stretch bằng tay chứ offset thì nó đều nhau ở mọi cạnh chứ không có khác biệt.

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

×