Đến nội dung


Hình ảnh
- - - - -

Sửa Lisp xoay thành scale đối tượng tại tâm


  • Please log in to reply
14 replies to this topic

#1 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 26 May 2009 - 04:33 PM

Em đã có cái lisp xoay đối tượng quanh tâm của chúng, Em muốn nhờ các bác Pro sửa giúp em thành lisp Scale đối tượng quanh tâm của chúng. Hay bác nào có lisp đó thì cho em xin có được ko ? Thanks !
CODE :
;;; ****************************** xoay text quanh tam cua chung *********************************
(defun c:rt ()
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq thop (ssget))
(setq gocxoay (getangle "\nGoc xoay cho cac text:"))
(setq gocxoay (/ (* gocxoay 180) pi))
(setq i 0)
(repeat (sslength thop)
(setq dt (ssname thop i))
(setq ds (entget dt))
(setq p1 (cdr (assoc 10 ds)))
(setq p2 (cdr (assoc 11 ds)))
(if (null p2)
(setq dxoay p1)
(setq dxoay (list (* 0.5 (+ (car p1) (car p2)))
(* 0.5 (+ (cadr p1) (cadr p2)))
) )
);;; end if
(command "rotate" dt "" dxoay gocxoay)
(setq i (1+ i))
);;;; end repeat
(setvar "cmdecho" cmd)
(princ)
)
  • 0
Hoàng Giang

#2 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 27 May 2009 - 08:17 AM

Em đã có cái lisp xoay đối tượng quanh tâm của chúng, Em muốn nhờ các bác Pro sửa giúp em thành lisp Scale đối tượng quanh tâm của chúng. Hay bác nào có lisp đó thì cho em xin có được ko ? Thanks !
CODE :
;;; ****************************** xoay text quanh tam cua chung *********************************
(defun c:rt ()
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq thop (ssget))
(setq gocxoay (getangle "\nGoc xoay cho cac text:"))
(setq gocxoay (/ (* gocxoay 180) pi))
(setq i 0)
(repeat (sslength thop)
(setq dt (ssname thop i))
(setq ds (entget dt))
(setq p1 (cdr (assoc 10 ds)))
(setq p2 (cdr (assoc 11 ds)))
(if (null p2)
(setq dxoay p1)
(setq dxoay (list (* 0.5 (+ (car p1) (car p2)))
(* 0.5 (+ (cadr p1) (cadr p2)))
) )
);;; end if
(command "rotate" dt "" dxoay gocxoay)
(setq i (1+ i))
);;;; end repeat
(setvar "cmdecho" cmd)
(princ)
)

Bác Pro nào sửa giúp em thành lisp scale đối tượng tại tâm của nó đi ???
  • 0
Hoàng Giang

#3 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 29 May 2009 - 07:37 AM

Bác Pro nào sửa giúp em thành lisp scale đối tượng tại tâm của nó đi ???


Bạn phải nói rõ đối tượng là đt gì, text, dim, hay các loại đg như line, arc, pline, spline, circle, đồng thời phải định nghĩa thế nào là tâm mới đc, là trung điểm hay điểm đặt ... thì ng khác mới biết và giúp bạn chứ.
  • 0

#4 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 01 June 2009 - 08:01 AM

Bạn phải nói rõ đối tượng là đt gì, text, dim, hay các loại đg như line, arc, pline, spline, circle, đồng thời phải định nghĩa thế nào là tâm mới đc, là trung điểm hay điểm đặt ... thì ng khác mới biết và giúp bạn chứ.

Đối tượng ở đây là các đường tròn hoặc Line, có hatch Solid ở bên trong, Đề bài có n đường tròn Được Hatch Solid chẳng hạn, mình sẽ phải dùng lisp để scale với Base point là tâm đường tròn đó. Nếu mà mở rộng cho mọi đối tượng được thì tốt quá.
  • 0
Hoàng Giang

#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 01 June 2009 - 08:31 AM

Đối tượng ở đây là các đường tròn hoặc Line, có hatch Solid ở bên trong, Đề bài có n đường tròn Được Hatch Solid chẳng hạn, mình sẽ phải dùng lisp để scale với Base point là tâm đường tròn đó. Nếu mà mở rộng cho mọi đối tượng được thì tốt quá.

Tue_NV đã góp ý với bạn tại sao bạn không nghe? Bạn khiến cho Tue_NV không vui rồi đấy

Lời đầu tiên, Tue_NV xin góp ý chân thành với bạn hhhhgggg : Khi viết bài bạn nên nhìn nhận vấn đề một cách tổng quát và nói rõ vấn đề vì có thể mọi người không hiểu theo ý bạn và từ đó làm mất thời gian của chính mình và làm mất thời gian của người khác là điều không nên và phải tránh


Mở rộng với mọi đối tượng thì tâm được định nghĩa như thế nào ???

Đây là code scale n đường tròn tại tâm của đường tròn
(defun c:SCT(/ ci tl n i)
(prompt "\n Moi ban chon CIRCLE")
(setq ci (ssget '((0 . "CIRCLE"))))
(setq tl (getreal "\n Nhap ti le scale :") n (sslength ci) i 0)

(while (< i n)
(setq ent (ssname ci i))
(command "scale" ent "" (cdr(assoc 10 (entget ent))) tl)
(setq i (1+ i))
)
(princ)
)

  • 1

#6 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 02 July 2009 - 09:21 PM

Em đã có cái lisp xoay đối tượng quanh tâm của chúng, Em muốn nhờ các bác Pro sửa giúp em thành lisp Scale đối tượng quanh tâm của chúng. Hay bác nào có lisp đó thì cho em xin có được ko ? Thanks !
CODE :
;;; ****************************** xoay text quanh tam cua chung *********************************
(defun c:rt ()
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq thop (ssget))
(setq gocxoay (getangle "\nGoc xoay cho cac text:"))
(setq gocxoay (/ (* gocxoay 180) pi))
(setq i 0)
(repeat (sslength thop)
(setq dt (ssname thop i))
(setq ds (entget dt))
(setq p1 (cdr (assoc 10 ds)))
(setq p2 (cdr (assoc 11 ds)))
(if (null p2)
(setq dxoay p1)
(setq dxoay (list (* 0.5 (+ (car p1) (car p2)))
(* 0.5 (+ (cadr p1) (cadr p2)))
) )
);;; end if
(command "rotate" dt "" dxoay gocxoay)
(setq i (1+ i))
);;;; end repeat
(setvar "cmdecho" cmd)
(princ)
)


Nhờ bác Tue_NV sửa lại Lisp trên để có thể xoay lại điểm tâm: MIDDLE CENTER.
THK.
  • 0

#7 dovananh.xd

dovananh.xd

    biết lệnh offset

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

Đã gửi 14 October 2011 - 09:44 AM

Tue_NV đã góp ý với bạn tại sao bạn không nghe? Bạn khiến cho Tue_NV không vui rồi đấy



Mở rộng với mọi đối tượng thì tâm được định nghĩa như thế nào ???

Đây là code scale n đường tròn tại tâm của đường tròn

(defun c:SCT(/ ci tl n i)
(prompt "\n Moi ban chon CIRCLE")
(setq ci (ssget '((0 . "CIRCLE"))))
(setq tl (getreal "\n Nhap ti le scale :") n (sslength ci) i 0)

(while (< i n)
(setq ent (ssname ci i))
(command "scale" ent "" (cdr(assoc 10 (entget ent))) tl)
(setq i (1+ i))
)
(princ)
)

Thanks!
Lisp này cực hay. Bác có thể phát triển lisp này để có thể scale các đối tượng như Donut, Block không ạ?
  • 0

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 14 October 2011 - 10:44 AM

Thanks!
Lisp này cực hay. Bác có thể phát triển lisp này để có thể scale các đối tượng như Donut, Block không ạ?

Trong lúc bác Tue_NV đi vắng, tạm thời giúp bạn vậy. Lisp này scale các loại đối tượng: Circle, Block, Donut, Rectangle.

;by Tue_NV + Doan Van Ha CADViet.com
(defun c:SCT(/ ci tl n i)
(prompt "\n Moi ban chon CIRCLE/DONUT/BLOCK")
(setq ci (ssget '((0 . "CIRCLE,LWPOLYLINE,INSERT"))))
(setq tl (getreal "\n Nhap ti le scale :") n (sslength ci) i 0)
(while (< i n)
(setq ent (ssname ci i))
(if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
(command "scale" ent "" (centre ent) tl)
(command "scale" ent "" (cdr (assoc 10 (entget ent))) tl))
(setq i (1+ i)))
(princ))
;-----
(defun centre(dt / cen)
(vl-load-com)
(if (or (= (cdr (assoc 0 (entget dt))) "REGION")
(and (wcmatch (cdr (assoc 0 (entget dt))) "*POLYLINE")
(= (cdr (assoc 70 (entget dt))) 1)))
(if (and (wcmatch (cdr (assoc 0 (entget dt))) "*POLYLINE")
(= (cdr (assoc 70 (entget dt))) 1))
(progn
(setq cen (vlax-get (car (vlax-invoke (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
'addregion (list (vlax-ename->vla-object dt)))) 'Centroid))
(entdel (entlast)))
(setq cen (vlax-get (vlax-ename->vla-object dt) 'Centroid))))
cen)

  • 2

* 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.


#9 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 14 October 2011 - 11:07 AM

Bệnh nghề nghiệp rồi ^^ Cả Block, Donut, Circle đều dùng được Dxf 10 mà bác ^^ Của bác tổng quát rồi

Chọn Donut : (ssget (list (cons 0 "LWPOLYLINE")(cons 90 2)(cons 70 1))))


  • 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


#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 14 October 2011 - 11:18 AM

Bệnh nghề nghiệp rồi ^^ Cả Block, Donut, Circle đều dùng được Dxf 10 mà bác ^^ Của bác tổng quát rồi

Tâm Donut lấy dxf 10 hơi rắc rối nên có (centre) thì dùng luôn cho tiện. Còn chọn Donut thì Ket đúng.
Trích dẫn ent là donut có tâm là (80 2):
((-1 . <Entity name: 7ef921a8>) (0 . "LWPOLYLINE") (330 . <Entity name:
7ef90cf8>) (5 . "E5") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(100 . "AcDbPolyline") (90 . 2) (70 . 1) (43 . 5.0) (38 . 0.0) (39 . 0.0) (10
77.5 2.0) (40 . 5.0) (41 . 5.0) (42 . 1.0) (10 82.5 2.0) (40 . 5.0) (41 . 5.0)
(42 . 1.0) (210 0.0 0.0 1.0))
  • 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.


#11 saycaphe

saycaphe

    biết vẽ circle

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

Đã gửi 26 December 2011 - 01:13 PM

mình chuyển từ arc thành polyline, vậy có cách nào scale polyline đó tại tâm của nó ko các bác?
  • 0

#12 girl

girl

    biết vẽ spline

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

Đã gửi 26 December 2011 - 05:51 PM

Trong lúc bác Tue_NV đi vắng, tạm thời giúp bạn vậy. Lisp này scale các loại đối tượng: Circle, Block, Donut, Rectangle.


;by Tue_NV + Doan Van Ha CADViet.com
(defun c:SCT(/ ci tl n i)
(prompt "\n Moi ban chon CIRCLE/DONUT/BLOCK")
(setq ci (ssget '((0 . "CIRCLE,LWPOLYLINE,INSERT"))))
(setq tl (getreal "\n Nhap ti le scale :") n (sslength ci) i 0)
(while (< i n)
(setq ent (ssname ci i))
(if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
(command "scale" ent "" (centre ent) tl)
(command "scale" ent "" (cdr (assoc 10 (entget ent))) tl))
(setq i (1+ i)))
(princ))
;-----
(defun centre(dt / cen)
(vl-load-com)
(if (or (= (cdr (assoc 0 (entget dt))) "REGION")
(and (wcmatch (cdr (assoc 0 (entget dt))) "*POLYLINE")
(= (cdr (assoc 70 (entget dt))) 1)))
(if (and (wcmatch (cdr (assoc 0 (entget dt))) "*POLYLINE")
(= (cdr (assoc 70 (entget dt))) 1))
(progn
(setq cen (vlax-get (car (vlax-invoke (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
'addregion (list (vlax-ename->vla-object dt)))) 'Centroid))
(entdel (entlast)))
(setq cen (vlax-get (vlax-ename->vla-object dt) 'Centroid))))
cen)

Anh DVH ạ ! Cái lisp này khá hay nhưng mà còn hạn chế như sau ? Không thể chọn nhiều đối tượng để scale được 1 lần. Anh sửa sao cho lisp có thể scale nhiều đối tượng tại tâm của mỗi đối tượng được ko ạ ? (Chắc là yêu cầu này hơi khó nhưng mà rất cần thiết ).
  • 0

#13 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 26 December 2011 - 06:01 PM

mình chuyển từ arc thành polyline, vậy có cách nào scale polyline đó tại tâm của nó ko các bác?

Hề hề hề,
Có cách, đó là phải xác định lại "tâm" của cái cung polyline đó. Hãy tham khảo việc xác định tâm vòng tròn ngoại tiếp của một tam giác. Sau đo chơi cái lisp của bác DoanVanHa là Ok
Hề hề hề,...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#14 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 26 December 2011 - 06:07 PM

Anh DVH ạ ! Cái lisp này khá hay nhưng mà còn hạn chế như sau ? Không thể chọn nhiều đối tượng để scale được 1 lần. Anh sửa sao cho lisp có thể scale nhiều đối tượng tại tâm của mỗi đối tượng được ko ạ ? (Chắc là yêu cầu này hơi khó nhưng mà rất cần thiết ).

Hề hề hề,
Cái em Girl này có hiểu mình nói gì không cà??? Của bác DoanVanHa cho phép em chơi mút cung thang mà. Tại em khoái chơi nhát một chứ đâu phải bác ấy muốn vậy. Không tin em cứ thử liều mình như chẳng có, chọn một phát dăm bảy nghìn chú xem nó có chơi được không nhé, Đảm bảo chỉ trong .... vài chục cái hít hà là xong thôi.
Hề hề hề,
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#15 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 26 December 2011 - 09:18 PM

Hề hề hề,
Cái em Girl này có hiểu mình nói gì không cà???

Dạo này thấy diễn đàn thật lắm bài chéo ngoe :)
  • 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