Đến nội dung


Hình ảnh
- - - - -

[yêu cầu] Lisp stretch nhóm đối tượng 2 phía vào giữa và xung quanh vào tâm


  • Please log in to reply
24 replies to this topic

#1 CUONG20051982

CUONG20051982

    biết lệnh extend

  • Members
  • PipPipPip
  • 196 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 22 September 2012 - 08:31 PM

Minhg nhờ các bạn viết hộ cái lisp stretch nhóm đối tượng(ví dụ của mình là các vòng tròn đường kính 20) với hai trường hợp là từ 2 phía thu vào giữa và từ xung quanh vào tâm. Như hình vẽ sau:
http://www.cadviet.c...tretch_nhóm.dwg
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5684 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 22 September 2012 - 08:39 PM

Yêu cầu hời hợt quá bạn ạ. Cái hình trước và sau của bạn mình chẳng thấy tạo nên 1 quy luật nào cả. Cứ chọn là nó được thế sao ? Thu thì nó cũng phải dựa trên cái j đó chứ. Tâm nó ở đâu, tỉ lệ thu ra sao , lúc nào stretch lúc nào scale ??? (đường tròn - hình tròn k được gán action stretch)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 CUONG20051982

CUONG20051982

    biết lệnh extend

  • Members
  • PipPipPip
  • 196 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 22 September 2012 - 08:55 PM

Yêu cầu hời hợt quá bạn ạ. Cái hình trước và sau của bạn mình chẳng thấy tạo nên 1 quy luật nào cả. Cứ chọn là nó được thế sao ? Thu thì nó cũng phải dựa trên cái j đó chứ. Tâm nó ở đâu, tỉ lệ thu ra sao , lúc nào stretch lúc nào scale ??? (đường tròn - hình tròn k được gán action stretch)


ketxu thông cảm vì do mình cũng không hiểu về lisp lên cách trình bày chưa được đúng lắm. Ý mình là với trường hợp thứ nhất là sau khi stretch thì các đối tượng từ 2 phía thu vào, lúc đầu đối tượng bao có kích thước là 300 sau còn 200 thì mỗi bên sẽ thu lại là 50. Còn với trường hợp thứ 2 thì dùng lệnh offset hay move nhóm có khi đúng hơn vì mình muốn các đối tượng có đường kính 20 đó vẫn giữ nguyên kích thước chỉ thu vào tâm ảo có đường kính 240.
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 22 September 2012 - 09:53 PM

Tr­ường hợp thứ nhất: khả dĩ.
Trường hợp thứ 2: biết thằng nào thu nhỏ, thằng nào không thu nhỏ mà chỉ move tâm?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 CUONG20051982

CUONG20051982

    biết lệnh extend

  • Members
  • PipPipPip
  • 196 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 22 September 2012 - 10:08 PM

Tr­ường hợp thứ nhất: khả dĩ.
Trường hợp thứ 2: biết thằng nào thu nhỏ, thằng nào không thu nhỏ mà chỉ move tâm?


Với trường hợp thứ hai theo mình thì bạn đang băn khoăn cái tâm ảo có đường kính 240 khi thu nhỏ lại nó là 140. Nếu không thể phân biệt được thì có thể bỏ qua cái đường tâm ảo đó miễn sao move được nhóm đó thu vào tâm với khoảng cách đều là 100.

P/s: Với cả hai trường hợp này nếu có thể thì bạn xem luôn giúp mình xem có thể phát triển thêm như sau: với trường hợp thứ nhất là kéo giãn 2 nhóm đối tượng chọn ra hai phía ngoài và trường hợp thứ 2 là move cá đối tượng chọn đó ra xa tâm cũng với cùng một khoảng cách nào đó.
  • 0

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 22 September 2012 - 10:16 PM

Tôi không băn khoăn như bạn nghĩ. Tôi băn khoăn thế này:
Khi bạn chọn như thế thì trong số các đối tượng được chọn làm sao để cad/lisp hiểu được đối tượng nào bạn cần scale vào tâm, còn đối tượng nào bạn cần move vào tâm?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 CUONG20051982

CUONG20051982

    biết lệnh extend

  • Members
  • PipPipPip
  • 196 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 22 September 2012 - 10:25 PM

Tôi không băn khoăn như bạn nghĩ. Tôi băn khoăn thế này:
Khi bạn chọn như thế thì trong số các đối tượng được chọn làm sao để cad/lisp hiểu được đối tượng nào bạn cần scale vào tâm, còn đối tượng nào bạn cần move vào tâm?

Trên mình cũng đã trình bày là có thể bỏ qua đường tròn có đường kính 240. Vậy có khi thực tế hơn. Mục đích của mình là làm sao di chuyển đựơc nhóm đối tượng mình chọn vào gần tâm hoặc ra xa tâm với cùng một khoàng cách. mình vẽ lại hình này có khi đúng ý bạn:
http://www.cadviet.c...8_move_nhóm.dwg
  • 0

#8 khuathoangthuy

khuathoangthuy

    biết vẽ pline

  • Members
  • PipPip
  • 60 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 23 September 2012 - 12:59 AM

Tôi có thể trả lời bạn Cuong20051982 như sau:
Về Trường hợp là hình chữ nhật bạn stretch như bình thường của lệnh stretch mà không cần lisp gì cả. Bởi vì với yêu cầu của bạn thì lệnh stretch đã có thể đáp ứng được.cửa sổ chon chính là như bạn vẽ trong hình với kiểu chọn acrosswindow.
Trường hợp 2: tôi hiểu là bạn muốn dãy đường tròn nhỏ, sắp xếp trên một đường tròn có đường kính như là 240, được thu vào theo hướng tâm và sắp xếp đều lại trên đường tròn 140. Nếu như vậy thì đúng là nằm ngoài khả năng của lệnh stretchOwrPhair viết lisp thì cũng là một vấn đề. bây giờ tôi cũng hơi bận nên không thể giúp bạn viết đc.
  • 0

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 23 September 2012 - 07:09 AM

Tôi có thể trả lời bạn Cuong20051982 như sau:
Về Trường hợp là hình chữ nhật bạn stretch như bình thường của lệnh stretch mà không cần lisp gì cả. Bởi vì với yêu cầu của bạn thì lệnh stretch đã có thể đáp ứng được.cửa sổ chon chính là như bạn vẽ trong hình với kiểu chọn acrosswindow.
Trường hợp 2: tôi hiểu là bạn muốn dãy đường tròn nhỏ, sắp xếp trên một đường tròn có đường kính như là 240, được thu vào theo hướng tâm và sắp xếp đều lại trên đường tròn 140. Nếu như vậy thì đúng là nằm ngoài khả năng của lệnh stretchOwrPhair viết lisp thì cũng là một vấn đề. bây giờ tôi cũng hơi bận nên không thể giúp bạn viết đc.

TH hình chữ nhật chỉ là 2 lần Stretch.
TH hình tròn : sử dụng lệnh ARRAY của CAD2012 -> RẤT OK -> Nên cài CAD2012 để có thể sử dụng được tính năng tuyệt vời này
Và Nó nằm ngoài phạm vi của lệnh STRETCH, nhưng nằm trong phạm vi của lệnh SCALE

- Ngoài ra còn có thể sử dụng Block Dynamic để làm. TH hình chữ nhật thì dùng action STRETCH, TH hình tròn thì sử dụng action SCALE

Theo tôi, không cần viết Lisp trong trường hợp này, chỉ cần sử dụng CAD là được rồi
  • 0

#10 CUONG20051982

CUONG20051982

    biết lệnh extend

  • Members
  • PipPipPip
  • 196 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 23 September 2012 - 09:29 AM

@ khuathoangthuy & Tue_NV :
Đúng là dùng CAD vẫn có thể thực hiện được đối với 2 trường hợp trên
Với TH1: sẽ phải dùng 2 lần lệnh Stretch cho 2 nhóm đối tượng.
Với TH2: thì phải move đối tượng hình tròn đường kính 20 vào gần tâm, xóa các đối tượng còn lại, rồi array đối tượng đó quanh tâm là được.
Nhưng nếu công việc phải làm lặp đi lặp lại các trường hợp đó với nhiều nhóm đối tượng như vậy trong khi vẽ cũng sẽ lâu hơn.
  • 0

#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 23 September 2012 - 10:17 AM

@ khuathoangthuy & Tue_NV :
Đúng là dùng CAD vẫn có thể thực hiện được đối với 2 trường hợp trên
Với TH1: sẽ phải dùng 2 lần lệnh Stretch cho 2 nhóm đối tượng.
Với TH2: thì phải move đối tượng hình tròn đường kính 20 vào gần tâm, xóa các đối tượng còn lại, rồi array đối tượng đó quanh tâm là được.
Nhưng nếu công việc phải làm lặp đi lặp lại các trường hợp đó với nhiều nhóm đối tượng như vậy trong khi vẽ cũng sẽ lâu hơn.

TH1 : Làm 2 lần sẽ lâu hơn làm 1 lần. Nhưng lâu hơn chẳng bao nhiêu thời gian
Nếu bạn thích thì code đây:

(defun c:stre(/ di p1 p3)
(setq di (getdist "\n Khoang cach dich chuyen :"))
(command "stretch" "c" (setq p1 (getpoint "\n P1 :")) (getcorner p1 "\n P2 :") ""
'(0 0 0) (list di 0 0)
"stretch" "c" (setq p3 (getpoint "\n P3 :")) (getcorner p3 "\n P4 :") ""
'(0 0 0) (list (- di) 0 0)) )
TH2: Bạn dùng Block Dynamic hoặc dùng lệnh ARRAY của CAD2012 thì chỉ việc pick chọn, kéo và kéo là xong
Nhanh hơn cả khi viết Lisp phải chọn tâm và lọc chọn đối tượng
  • 2

#12 CUONG20051982

CUONG20051982

    biết lệnh extend

  • Members
  • PipPipPip
  • 196 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 23 September 2012 - 10:32 AM

TH1 : Làm 2 lần sẽ lâu hơn làm 1 lần. Nhưng lâu hơn chẳng bao nhiêu thời gian
TH2: Bạn dùng Block Dynamic hoặc dùng lệnh ARRAY của CAD2012 thì chỉ việc pick chọn, kéo và kéo là xong
Nhanh hơn cả khi viết Lisp phải chọn tâm và lọc chọn đối tượng


Thanks Tue_NV.
Với một TH đó thôi thì không vấn đề nhưng phải lặp lại nhiều lần như vậy thì khá lâu. CAD2012 dùng lệnh ARRAY có thể chọn cả một nhóm đối tượng và kéo thu vào một cùng khoảng cách sao bạn? Mình đang dùng CAD2009 nên cũng chưa biết về chức năng này.
  • 0

#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 23 September 2012 - 11:01 AM


Thanks Tue_NV.
Với một TH đó thôi thì không vấn đề nhưng phải lặp lại nhiều lần như vậy thì khá lâu. CAD2012 dùng lệnh ARRAY có thể chọn cả một nhóm đối tượng và kéo thu vào một cùng khoảng cách sao bạn? Mình đang dùng CAD2009 nên cũng chưa biết về chức năng này.

1./ Đã gửi code cho bạn bài viết trên
2./ Bạn dùng Block Dynamic (action SCALE) chức năng tương tự ARRAY của CAD2012 -> Pick chọn 1 cái -> Hiện nhóm ARRAY rồi bạn kéo ra hoặc kéo vô -> Nó dịch cả nhóm vô/ ra cho bạn. Và ARRAY của CAD2012 trong TH này tiện lợi hơn nhiều
  • 1

#14 CUONG20051982

CUONG20051982

    biết lệnh extend

  • Members
  • PipPipPip
  • 196 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 23 September 2012 - 11:19 AM

TH1 : Làm 2 lần sẽ lâu hơn làm 1 lần. Nhưng lâu hơn chẳng bao nhiêu thời gian
Nếu bạn thích thì code đây:


(defun c:stre(/ di p1 p3)
(setq di (getdist "\n Khoang cach dich chuyen :"))
(command "stretch" "c" (setq p1 (getpoint "\n P1 :")) (getcorner p1 "\n P2 :") ""
'(0 0 0) (list di 0 0)
"stretch" "c" (setq p3 (getpoint "\n P3 :")) (getcorner p3 "\n P4 :") ""
'(0 0 0) (list (- di) 0 0)) )
TH2: Bạn dùng Block Dynamic hoặc dùng lệnh ARRAY của CAD2012 thì chỉ việc pick chọn, kéo và kéo là xong
Nhanh hơn cả khi viết Lisp phải chọn tâm và lọc chọn đối tượng


Cảm ơn Tue_NV nhiều! Lisp này của bạn đã giải quyết được vấn về tuy nhiên để hoàn thiện hơn bạn có thể sửa để khi nhập khoảng cách dịch chuyển là dương sẽ giãn ra và giá trị âm sẽ thu vào không phải phụ thuộc vào lựa chon nhóm nào trước. và có thể sử dụng stretch cho cả theo trục Y nữa thì tốt.

P/s: Với TH2 là quyét chọn chứ nhỉ chứ pick chọn thì chỉ chọn được từng đối tượng một thôi. Lệnh Array mà phát triển hay vậy chứ. tiếc là mình chưa cài CAD2012 để thử. nếu down về chắc nhiều file lâu lắm mà không chắc đã down được hoàn thiện.
  • 0

#15 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5684 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 23 September 2012 - 11:42 AM


(defun c:stre(/ p1 p2)
(command "stretch" (ssget) ""
(setq p1 (getpoint "\nBase Point :"))
(setq p2 (getpoint p1 "\n Target Point :"))
"stretch" (ssget) ""
p2 p1)
)
Dù sao thì cũng chỉ nhanh hơn mỗi chỗ k phải đánh lại distance cho stretch
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#16 CUONG20051982

CUONG20051982

    biết lệnh extend

  • Members
  • PipPipPip
  • 196 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 23 September 2012 - 12:19 PM

@ ketxu thanks bạn!
Mình thấy lisp Tue_NV tạo thao tác có nhanh hơn đó. Chỉ chỉnh thêm chút nữa thì hoàn thiện hơn. Có thể dùng với các trường hợp sử dụng stretch lặp đi lặp lại nhiều lần các cặp đối tượng như vậy.
  • 0

#17 khuathoangthuy

khuathoangthuy

    biết vẽ pline

  • Members
  • PipPip
  • 60 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 23 September 2012 - 03:02 PM

Bạn Tue_NV đúng rôi đấy. Tôi thich câu trả lời của bạn. Nhưng mà với bài toán kỹ thuật này có cần thiết phải làm hẳn một lisp như vậy không. Đặt giả sử công việt của bạn có nhiều trường hợp như vậy thì đúng là nên dung block dynamic. Bởi vì nó tiện hơn lisp. Còn lệnh stretch với việc phải sử dung select acrosswindow nên không thể làm cho trường hợp thứ 2 được. Mà tôi chắc chắn rằng chính hãng autodesk cũng đã nghĩ nghiên cứu nhiều về lệnh này.
  • 0

#18 mrphuocvie

mrphuocvie

    biết vẽ ellipse

  • Members
  • PipPip
  • 50 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 02 August 2014 - 04:40 PM

Nhân tiện cho em hỏi xíu.

Em muốn strecth đối tượng vào cách 1 đối tượng khác luôn bằng 1 khoảng cách là 10. Và em cũng đã viết thử 1 đoạn lisp mà không hiểu sao nó không chạy được.

Thao tác:

- Chọn đối tượng,

- Chọn điểm đầu

- Chọn điểm cuối.

LISP sẽ thực hiện lệnh strecth đối tượng được chọn theo phương (p1 p2) và cách điểm p2 1 khoảng bằng khoảng cách 2 điểm p1 p2 trừ 10

(defun c:s10 ()
	(setq ss1 (ssget))
	(setq P1 (getpoint "\nDiem dau : "))
	(setq P2 (getpoint p1 "\nDiem cuoi : "))
	(setq dt (- (distance P1 P2) 10))
	(command "stretch" ss1 p1 dt)
)

  • 0

#19 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5684 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 02 August 2014 - 06:35 PM

Trong command stretch thì bạn phải chú ý sau khi chọn đối tượng, tiếp theo phải chỉ định 2 điểm để tạo vector kéo giãn, chứ k phải chỉ định 1 điểm và khoảng cách như lúc thực hiện trên màn hình. Có nghĩa là bạn nên xem thêm hàm polar


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#20 mrphuocvie

mrphuocvie

    biết vẽ ellipse

  • Members
  • PipPip
  • 50 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 03 August 2014 - 12:04 PM

Vậy thì sửa lại nó như thế nào hả anh. Em chưa viết tiếp được.


  • 0