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

[Yêu cầu] Lisp scale đối tượng quanh tâm của nó

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

Xin chào diễn đàn.

Nhờ anh em diễn đàn viết giúp em Lisp scale đối tượng quanh tâm của nó.

- Trong bản vẽ có rất nhiều đoạn thẳng có chiều dài a. Các đoạn thẳng này hợp với phương nằm ngang 1 góc anpha bất kỳ.

Mình muốn scale các đoạn thẳng này 1 lớn lên hoặc nhỏ lại 1 tỷ lệ nào đó nhưng không là thay đổi vị trí và phương của nó. (Tức là lấy điểm giữa của đoạn thẳng làm tâm scale)

- Vì mình phải làm thủ công hàng trăm đoạn thẳng lâu quá nên mong anh em giúp đỡ. Đối tượng mình cần scale là cọc của tuyến đường.

- Qua đây cũng cho em hỏi nếu scale text Tên cọc cũng lấy tâm của text làm tâm scale luôn được không. Nếu được nhờ anh em viết lisp tổng hợp scale đoạn thẳng và text tên cọc luôn giùm em. Nêu quá phức tạp thì nhờ anh em viết giúp em lisp scale đoạn thẳng quanh tâm của nó và không làm thay đổi phương của nó.

Em xin chân thành cảm ơn.

  • 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

Xin chào diễn đàn.

Nhờ anh em diễn đàn viết giúp em Lisp scale đối tượng quanh tâm của nó.

- Trong bản vẽ có rất nhiều đoạn thẳng có chiều dài a. Các đoạn thẳng này hợp với phương nằm ngang 1 góc anpha bất kỳ.

Mình muốn scale các đoạn thẳng này 1 lớn lên hoặc nhỏ lại 1 tỷ lệ nào đó nhưng không là thay đổi vị trí và phương của nó. (Tức là lấy điểm giữa của đoạn thẳng làm tâm scale)

- Vì mình phải làm thủ công hàng trăm đoạn thẳng lâu quá nên mong anh em giúp đỡ. Đối tượng mình cần scale là cọc của tuyến đường.

- Qua đây cũng cho em hỏi nếu scale text Tên cọc cũng lấy tâm của text làm tâm scale luôn được không. Nếu được nhờ anh em viết lisp tổng hợp scale đoạn thẳng và text tên cọc luôn giùm em. Nêu quá phức tạp thì nhờ anh em viết giúp em lisp scale đoạn thẳng quanh tâm của nó và không làm thay đổi phương của nó.

Em xin chân thành cảm ơn.

Hề hề hề,

Muốn cái gì thì cũng cần gửi bản vẽ trước và sau khi dùng lisp lên mới được. Nếu chỉ Scale các đoạn thẳng tại chính giữa của nó thì sau khi làm xong sẽ có một bản vẽ trông không giống ai cả đâu.....

Với text cũng tương tự.

Nếu thực sự cần như vậy, hãy gửi một bản vẽ mẫu lên để mọi người xem thử nó giống cái thằng cu oẳn tà roằn nào 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

Hồi sáng bạn y/c scale line nên đã làm xong. Giờ thêm scale text thì xét sau. Hay search trên cadviet để tìm lisp của Ketxu vậy.

Lisp Scale nhóm Lines tại tâm của mỗi Line.

(setq *tl* nil)
(defun C:HA( / osm ss tl i p1 p2 pg ent)
;Doan Van Ha - CADViet.com - Ngay 17/12/2012
;Chuc nang: Scale nhom Lines tai Center cua moi Line.
(or cal (arxload "geomcal"))
(command "undo" "be")
(setq osm (getvar "osmode"))
(while
 (and
  (princ "\nChon nhom Lines can Scale...")
  (setq ss (ssget '((0 . "Line")))))
 (setvar "osmode" 0)
 (if (not *tl*) (setq *tl* 1.0))
 (initget 6)
 (setq tl (getreal (strcat "\nHe so Scale <" (rtos *tl* 2) ">: ")))
 (if (not tl) (setq tl *tl*) (setq *tl* tl))
 (setq i -1)
 (while (setq ent (ssname ss (setq i (1+ i))))
  (setq p1 (cdr (assoc 10 (entget ent))))
  (setq p2 (cdr (assoc 11 (entget ent))))
  (setq pg (cal "plt(p1,p2,0.5)"))
  (if (/= tl 1) (command "scale" ent "" pg tl))))
(setvar "osmode" osm)
(command "undo" "end")
(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
Hồi sáng bạn y/c scale line nên đã làm xong. Giờ thêm scale text thì xét sau. Hay search trên cadviet để tìm lisp của Ketxu vậy.

Lisp Scale nhóm Lines tại tâm của mỗi Line.<pre class="cadvietlispcode">file: ha.lsp</pre>

Em cảm ơn anh Hà

Nhưng khi sử dụng lisp anh gửi thì các line khi scale nó nhảy khỏi vị trí khác anh ạ

File bản vẽ em gửi phía trên.

Em xin cảm ơn

Nhờ anh khắc phục giúp

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 cảm ơn anh Hà Nhưng khi sử dụng lisp anh gửi thì các line khi scale nó nhảy khỏi vị trí khác anh ạ File bản vẽ em gửi phía trên. Em xin cảm ơn Nhờ anh khắc phục giúp

Hề hề hề,

Dựa theo bản vẽ bạn gửi, mình đoán ý và viết cái lisp này, bạn dùng thử coi có ưng ý không. Lisp có hai lựa chọn phương án scale:

1/- Phương án A: lisp chỉ scale các đoạn thẳng.

2/- Phương án B: lisp scale các đoạn thẳng và các text đi kèm theo tâm là điểm giữa của đoạn thẳng.

 

http://www.cadviet.com/upfiles/3/5194_specialscale.lsp

 

(defun C:Spsc (/ oldos lnlst ans k p1 p2 p3 d ss)
(vl-load-com)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "ucs" "w")
(setq lnlst (acet-ss-to-list (ssget (list (cons 0 "line")))))
(setq ans (getstring "\n Chon phuong an scale <A or B> : "))
(setq k (getreal "\n Nhap ty le scale: ")) 
(foreach ln lnlst
      (setq p1 (cdr (assoc 10 (entget ln)))
                p2 (cdr (assoc 11 (entget ln)))
                p3 (mapcar '(lambda (x y) (/ (+ x y) 2)) p1 p2) 
                d (distance p1 p2) )
      (if (= (strcase ans) "A")
          (command "scale" ln "" p3 k)
          (progn
               (setq ss (ssget "w" (list (- (car p3) (* 1.5 d)) (- (cadr p3) (* 1.5 d)))
                                                (list (+ (car p3) (* 1.5 d)) (+ (cadr p3) (* 1.5 d)))  ))
               (command "scale" ss "" p3 k)
          )
      )
)
(command "ucs" "p")
(setvar "osmode" oldos)
(command "undo" "e")
(princ)
) 

 

Lưu ý là lisp chỉ ứng dụng cho các đoạn thẳng là line chứ không dùng cho pline.

  • 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
Hề hề hề,

Dựa theo bản vẽ bạn gửi, mình đoán ý và viết cái lisp này, bạn dùng thử coi có ưng ý không. Lisp có hai lựa chọn phương án scale:

1/- Phương án A: lisp chỉ scale các đoạn thẳng.

2/- Phương án B: lisp scale các đoạn thẳng và các text đi kèm theo tâm là điểm giữa của đoạn thẳng.

Da em xin cảm ơn anh phamthanhbinh.

Khi sử dụng lisp của anh e thấy như thế này mong anh chỉnh sửa giúp

Giữa 2 phương án A và B không có sự khác biệt anh ạ

Tức là với phương án B: B: lisp scale các đoạn thẳng và các text đi kèm theo tâm là điểm giữa của đoạn thẳng. Tuy nhiên text không scale được mà chỉ scale đoạn thẳng như phương án A. (Theo em nghĩ vì mình select objects trước dòng lệnh chọn phương án A hoặc B. Nên khi chọn phương án B thì phần text và đọa thẳng đi kèm ko được chọn mà chỉ chọn được các đoạn thẳng vì vậy các text này ko được scale theo đoạn thẳng.

- Có ý này mong anh xem giúp em thử được không. Anh viết giùm em đoạn code để move các text và đoạn thẳng đi kèm theo text ra xa hoặc lại gần 1 khoảng a nào đó nhưng không làm tây đổi phương (góc) của các đoạn thẳng và các text đi kèm này. Nếu được thì anh viết giúp

Mong anh Bình xem và chỉnh sửa giúp em.

Xin cảm ơn anh và mọi người trên diễn đà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

Da em xin cảm ơn anh phamthanhbinh.

Khi sử dụng lisp của anh e thấy như thế này mong anh chỉnh sửa giúp

Giữa 2 phương án A và B không có sự khác biệt anh ạ

Tức là với phương án B: B: lisp scale các đoạn thẳng và các text đi kèm theo tâm là điểm giữa của đoạn thẳng. Tuy nhiên text không scale được mà chỉ scale đoạn thẳng như phương án A. (Theo em nghĩ vì mình select objects trước dòng lệnh chọn phương án A hoặc B. Nên khi chọn phương án B thì phần text và đọa thẳng đi kèm ko được chọn mà chỉ chọn được các đoạn thẳng vì vậy các text này ko được scale theo đoạn thẳng.

- Có ý này mong anh xem giúp em thử được không. Anh viết giùm em đoạn code để move các text và đoạn thẳng đi kèm theo text ra xa hoặc lại gần 1 khoảng a nào đó nhưng không làm tây đổi phương (góc) của các đoạn thẳng và các text đi kèm này. Nếu được thì anh viết giúp

Mong anh Bình xem và chỉnh sửa giúp em.

Xin cảm ơn anh và mọi người trên diễn đàn

Hề hề hê,

Mình đã test với bản vẽ bạn gửi thì OK, còn cái bạn làm không được hãy gửi lên để mình kiểm tra. mình đoán là do text của bạn nằm quá xa đoạn thẳng nên khi chọn tập ss bởi cửa sổ, nó không chọn được text.

Nếu muốn move, bạn chỉ cần thay đổi dòng code lệnh scale bằng code của lệnh move là OK.

Hãy làm thử xem sao 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

e cũng đang tìm lisp này, giờ tìm dc rồi!

Nhưng ko biết các a có thể sửa lisp để có thể áp dụng dc mới các đối tượng khác nữa dc ko? ví dụ: áp dụng dc cho circle, block, polyline..

thanks!

 

P/S: Mình đang tìm lại lisp trim các đoạn line, pline trong vùng giao nhau chúng, lúc trước có load trên 4rum về rồi nhưng lại làm mất. Bạn nào có thì gửi lại giúp mình với. Mình ko muốn tạo 1 topic nữa sợ loãng 4rum mất.

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

e cũng đang tìm lisp này, giờ tìm dc rồi!

Nhưng ko biết các a có thể sửa lisp để có thể áp dụng dc mới các đối tượng khác nữa dc ko? ví dụ: áp dụng dc cho circle, block, polyline..

thanks!

 

P/S: Mình đang tìm lại lisp trim các đoạn line, pline trong vùng giao nhau chúng, lúc trước có load trên 4rum về rồi nhưng lại làm mất. Bạn nào có thì gửi lại giúp mình với. Mình ko muốn tạo 1 topic nữa sợ loãng 4rum mất.

cảm ơn nhiều!

Để scale quanh tâm thì bạn phải định nghĩa tâm là điểm nào trên đối tương: block, pline... Scale đối tượng nào cũng được cả, chỉ là vấn đề tâm mà thô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

Để scale quanh tâm thì bạn phải định nghĩa tâm là điểm nào trên đối tương: block, pline... Scale đối tượng nào cũng được cả, chỉ là vấn đề tâm mà thôi.

 

nhưng vấn đề là dùng với lisp thì chỉ chọn dc đối tượng là line thôi, ko chọn đc pline và circle hay block a ah!

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

nhưng vấn đề là dùng với lisp thì chỉ chọn dc đối tượng là line thôi, ko chọn đc pline và circle hay block a ah!

Cứ định nghĩa tâm rất rõ ràng của từng kiểu đối tượng mà bạn cần scale, sau đó sẽ có lisp mới chứ không phải lisp cũ ở 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

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  

×