Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

Viết lisp theo yêu cầu [phần 2]


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#641 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 30 December 2009 - 10:55 AM

Chào bác bach_gia và anh em trên diến đàn!
Em tham gia vào diễn đàn nhưng chỉ đọc lips của các bác thôi, chứ em chẳng biết viết. Thấy bác bach_gia và mọi người rất đỉnh cao trong công nghệ này, nên em nhờ bác viết giúp em 1 lips có nội dung như sau: Em làm san nền, thể hiện khối lượng bằng 1 vòng tròn có text bên trong. 1 ô san nền có thể có đến hàng mấy trăm vòng tròn như thế. Bây giờ em muốn quay tất cả các đối tượng đi 1 góc, nhưng quay tại chính tâm của mỗi vòng tròn đó. Mong bác và anh em giúp đỡ, vì làm tay vo nên vất vả quá. Xinh chân thành cảm ơn bác và mọi người!

hề hề ... ai là bác bach_gia thì giơ tay lên nào ...
chẳng lẽ lại là tui : gia_bach đây. gia_bach là nguời nuớc nào mà bị đảo lộn tên nhỉ ?
hay bạn là nguời ngoài nuớc ?

"em muốn quay tất cả các đối tượng đi 1 góc, nhưng quay tại chính tâm của mỗi vòng tròn đó."
có phải yêu cầu của bạn như sau : quay tất cả các đối tượng trong 1 vòng tròn 1 góc nào đó với tâm quay là tâm của vòng tròn đó?
  • 0

#642 nqt266

nqt266

    biết vẽ circle

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

Đã gửi 30 December 2009 - 10:59 AM

Em xin lỗi vì viết lộn tên bác gia_bach.
Ý em là em có rất nhiều vòng tròn, trong mỗi vòng tròn lại có text. Giờ em muốn quay tất cả các vòng tròn ấy đồng thời cả text bên trong đó đi 1 góc, nhưng với tâm quay là tâm của các vòng tròn đó.( Quay tại chính tâm mỗi vòng tròn)
Em cảm ơn bác nhiều nhiều lắm
  • 0

#643 traitimsat034

traitimsat034

    biết vẽ pline

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

Đã gửi 30 December 2009 - 11:46 AM

Em xin lỗi vì viết lộn tên bác gia_bach.
Ý em là em có rất nhiều vòng tròn, trong mỗi vòng tròn lại có text. Giờ em muốn quay tất cả các vòng tròn ấy đồng thời cả text bên trong đó đi 1 góc, nhưng với tâm quay là tâm của các vòng tròn đó.( Quay tại chính tâm mỗi vòng tròn)
Em cảm ơn bác nhiều nhiều lắm

vòng tròn quay quanh tâm của nó thì có khác gì lúc chưa quay ko? túm lại bạn chỉ cần quay text thôi sao ko dùng lệnh TORIENT đi.
  • 2

#644 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 December 2009 - 11:49 AM

Rất cảm ơn bác binh đã quan tâm, đây là file mẫu nhờ bác giúp http://www.mediafire.com/?newwzddamzm

Chào bạn ohay102,
Rất tiếc là mình dùng cad2004 nên không mở được file bạn gửi. Bạn có thể gửi lại file ở dạng cad2004 được không???
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#645 huong259

huong259

    biết lệnh refedit

  • Members
  • PipPipPipPipPipPipPip
  • 596 Bài viết
Điểm đánh giá: 350 (khá)

Đã gửi 30 December 2009 - 11:58 AM

Chào bạn ohay102,
Rất tiếc là mình dùng cad2004 nên không mở được file bạn gửi. Bạn có thể gửi lại file ở dạng cad2004 được không???

Em Save xuống CAD 20004:
http://www.cadviet.c.../2/drawing1.rar
  • 1

#646 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 December 2009 - 12:07 PM

mấy anh giúp em viết lisp về đồ thị đường xicloit và đồ thị đường thân khai cái ,em đag rất cần mong các anh giúp đỡ,thanks mấy anh nhiều

Chào bạn goku250908,
Cái lisp vẽ đồ thị đường xycloid thì trên diễn đàn đã có của bác SSG, bạn chịu khó tìm kiếm một chút sẽ thấy, ngoài ra còn có lisp vẽ đồ thị các hàm số của bác Nguyenhoanh. Nếu bạn có thể có hàm số của đường thân khai thì bạn có thể sử dụng lisp của bác Nguyen hoanh để vẽ ngon lành mà.
Cái lisp đó đây nè: http://www.cadviet.c...?showtopic=9238
Và đây là cái biên dạng răng cycloid của bác SSG:
http://www.cadviet.c...amp;#entry21095
Chúc bạn thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#647 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 30 December 2009 - 12:32 PM

Mình có file cad mà sẽ gửi dưới đây rất muốn các bạn trong diễn đàn giúp đỡ. Mình muốn copy đối tượng với công sai n=1
http://www.cadviet.c...new_block_9.dwg

Chào KTS dlong, yêu cầu này hình như bạn đã đăng 1 lần rồi thì phải, nó là đối tượng leader torence, chứ không phải block reference. dlong dùng lisp này thử, Thiep viết gần được 98%, lisp yêu cầu người dùng chọn gia số, số đầu tiên, Suffix [+/-], chiều cao text, người dùng pick 3 điểm để tạo 1 leader với text là torence. 2% còn lại chưa được là hình ảnh leader khi pick 3 điểm không hiện cùng thời khi pick. Lisp nó đây:
(defun c:addleader (/ Lpo ano po PntArr obj)
(setq ActDoc (vla-get-ActiveDocument (vlax-get-acad-object))
*Model* (vla-get-ModelSpace ActDoc)
Lpo nil
)
(setvar "osmode" 0)
(setq n (getint "\nSo dau tien: ")
giaso (getint "\nGia so: ")
)
(setq bit (cond (bit)
("+")
)
)
(initget "+ -")
(setq tmp (strcat "\nSuffix [+/-] <" bit ">: ")
bit (cond ((getkword tmp))
(bit)
)
)
(setq hei (cond (hei)
(1)
)
)
(setq oldhei hei)
(setq hei (getreal (strcat "\nChon chieu cao chu <"
(rtos oldhei 2 1)
"> : "

)
)
)
(if (null hei)
(setq hei oldhei)
)
(setq n (+ n giaso))
(while (setq po (getpoint "\npick a point: "))
(setq Lpo (append Lpo
(list (car po))
(list (cadr po))
(list (caddr po))
)
)
(repeat 2
(setq po (getpoint po "\nPick a point continuous: "))
(setq Lpo (append Lpo
(list (car po))
(list (cadr po))
(list (caddr po))
)
)
)
(setq PntArr (vlax-make-safearray
vlax-vbDouble
(cons 0 (1- (length Lpo)))
)
)
(setq str (strcat "%%v" (itoa n) bit "%%v%%v%%v%%v"))
(vlax-safearray-fill PntArr Lpo)
(setq obj (vla-AddTolerance
*Model*
str
(vlax-3d-point po)
(vlax-3d-point (list 1 0 0))
)
)
(vla-put-TextHeight obj hei)
(setq objle (vla-AddLeader *Model* PntArr obj acLineWithArrow))
(vla-put-ArrowheadSize objle 1)
(vla-put-VerticalTextPosition objle acAbove)
(vla-put-ArrowheadType objle acArrowOpen)
(setq n (+ n giaso))
(setq Lpo nil)
)
(vla-put-Comments
(vla-get-SummaryInfo ActDoc)
(setq ok "Thank you for use addleader.lsp! THIEP 0918841230")
)
(princ)
)

  • 0

#648 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 December 2009 - 12:40 PM

Em xin lỗi vì viết lộn tên bác gia_bach.
Ý em là em có rất nhiều vòng tròn, trong mỗi vòng tròn lại có text. Giờ em muốn quay tất cả các vòng tròn ấy đồng thời cả text bên trong đó đi 1 góc, nhưng với tâm quay là tâm của các vòng tròn đó.( Quay tại chính tâm mỗi vòng tròn)
Em cảm ơn bác nhiều nhiều lắm

Chào bạn ngt266,
Yêu cầu này của bạn gần giống với yêu cầu của bạn muoild, bạn có thể tham khảo cái lisp mình đã gửi bạn muoild để xử lý cho yêu cầu của bạn nếu như bạn có cái vốn lưng lủng về lisp. Hãy mạnh dạn thử làm, rồi post lên mọi người sẽ giúp bạn hoàn thiện nó và bạn sẽ thu được một kết quả ngoài sự mong đợi của bạn.
Trường hợp bạn không thể tự chỉnh sửa cũng không sao, sau khi bạn ngấm cái lisp trên thì đọc cái lisp mới sẽ nhanh hơn nhiều bạn ạ. Mình sẽ tranh thủ lúc rảnh sửa lại cái lisp trên cho bạn.
Chúc bạn thành công
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#649 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 30 December 2009 - 02:05 PM

Chào bạn ngt266,
Yêu cầu này của bạn gần giống với yêu cầu của bạn muoild,
.....................

Em xin lỗi vì viết lộn tên bác gia_bach.
Ý em là em có rất nhiều vòng tròn, trong mỗi vòng tròn lại có text. Giờ em muốn quay tất cả các vòng tròn ấy đồng thời cả text bên trong đó đi 1 góc, nhưng với tâm quay là tâm của các vòng tròn đó.( Quay tại chính tâm mỗi vòng tròn)
Em cảm ơn bác nhiều nhiều lắm

Hình như bác phamthanhbinh nhầm với yêu cầu của bạn khác ?!
Trên CadViet chưa có Lisp : quay tất cả các text bên trong vòng tròn 1 góc nào đó, với tâm quay là tâm của vòng tròn đó.
(không cần quay vòng tròn - vòng tròn quay đều quay mãi ... vẫn là .... vòng tròn)
Bạn thử Lisp này :
(defun c:rot(/ ang axss cen lst ov ss_txt vl);Rotate text in Circle
;; By : Gia Bach, Copyrightゥ December 2009 ;;
;; Contact : gia_bach @ www.CadViet.com ;;
(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
(setq sp 0
ep (* 2 pi)
inc (/ ep 72) )
(while (< sp ep)
(setq pt (vlax-curve-getPointAtParam obj sp)
ptlst (cons pt ptlst)
sp (+ inc sp)) )
(reverse ptlst)
)

(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(or *ang* (setq *ang* (/ pi 4)))
(setq ang (getangle (strcat "\nNhap goc muon quay <" (angtos *ang*) ">: ")))
(if ang (setq *ang* ang))
(setq ang (/ (* *ang* 180.0) pi))
(princ "\nChon vong tron de quay Text : ")
(if (ssget (list (cons 0 "CIRCLE")))
(vlax-for e (vla-get-activeSelectionSet (vla-get-activedocument(vlax-get-acad-object)))
(setq lst (TraceCIRCLE e)
cen (vlax-safearray->list (variant-value (vla-get-Center e))))
(if (setq ss_txt (ssget "_cp" lst (list(cons 0 "TEXT") ) ) );chi chon Txt
(vl-cmdf "_rotate" ss_txt "" cen ang) ) ) )
(mapcar 'setvar vl ov) ; reset Sys Vars
(princ)
)

  • 3

#650 nqt266

nqt266

    biết vẽ circle

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

Đã gửi 30 December 2009 - 04:05 PM

Em cảm ơn bác gia_bach nhiều lắm. Lips bác viết cho em gần đúng với yêu cầu của em rồi. Tuy nhiên có một vấn đề là: Trong vòng tròn đó em thể hiện 2 dòng text, ngăn cách nhau bởi 1 đường line, đường line này là đối tượng của vòng tròn, có nghĩa là 1 vòng tròn được chia đôi bởi 1 đường line, trong vòng tròn đó có 2 dòng text , trên và dưới đường line, và em muốn quay cả luôn đường line đó cùng góc với text. Rất mong nhận được giúp đỡ từ bác và anh em trên diễn đàn
  • 0

#651 nqt266

nqt266

    biết vẽ circle

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

Đã gửi 30 December 2009 - 04:12 PM

http://www.cadviet.c...?fok=doc1_4.doc
Bác gia_bach và anh em xem hình ảnh em gửi theo link trên này nhé, em muốn quay rất nhiều đối tượng như vậy, làm tay vo nhiều mệt quá, rất mong nhận được sự giúp đỡ của bác và anh em!
Xin chân thành cảm ơn!
  • 0

#652 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 30 December 2009 - 04:29 PM

http://www.cadviet.c...?fok=doc1_4.doc
Bác gia_bach và anh em xem hình ảnh em gửi theo link trên này nhé, em muốn quay rất nhiều đối tượng như vậy, làm tay vo nhiều mệt quá, rất mong nhận được sự giúp đỡ của bác và anh em!
Xin chân thành cảm ơn!

Gửi bạn Lisp quay tất cả đối tuợng trong đuờng tròn.
(Tui e rằng mai mốt bạn lại yêu cầu quay thêm arc hay dimension ... )
Nhắc bạn : tại sao bạn không Upload file CAD (với file CAD mọi chuyện sẽ rõ ràng hơn).
nguời sử dụng CAD lại dùng File Word (document) để thể hiện hình ảnh (image)
(defun c:rot(/ ang axss cen lst ov ss_txt vl);Rotate text in Circle
;; By : Gia Bach, Copyrightゥ December 2009 ;;
;; Contact : gia_bach @ www.CadViet.com ;;
(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
(setq sp 0
ep (* 2 pi)
inc (/ ep 72) )
(while (< sp ep)
(setq pt (vlax-curve-getPointAtParam obj sp)
ptlst (cons pt ptlst)
sp (+ inc sp)) )
(reverse ptlst)
)

(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(or *ang* (setq *ang* (/ pi 4)))
(setq ang (getangle (strcat "\nNhap goc muon quay <" (angtos *ang*) ">: ")))
(if ang (setq *ang* ang))
(setq ang (/ (* *ang* 180.0) pi))
(princ "\nChon vong tron de quay Text : ")
(if (ssget (list (cons 0 "CIRCLE")))
(vlax-for e (vla-get-activeSelectionSet (vla-get-activedocument(vlax-get-acad-object)))
(setq lst (TraceCIRCLE e)
cen (vlax-safearray->list (variant-value (vla-get-Center e))))
(if (setq ss_txt (ssget "_cp" lst ) );chi chon Txt
(vl-cmdf "_rotate" ss_txt "" cen ang) ) ) )
(mapcar 'setvar vl ov) ; reset Sys Vars
(princ)
)

  • 4

#653 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 30 December 2009 - 05:32 PM

Gửi bạn Lisp quay tất cả đối tuợng trong đuờng tròn.
(Tui e rằng mai mốt bạn lại yêu cầu quay thêm arc hay dimension ... )
.....

Mạn phép bổ sung thêm ý của anh gia_bach
Lisp trên quay tất cả đối tuợng trong đuờng tròn và tất cả đối tuợng giao với đuờng tròn
Cảm ơn anh gia_bach rất nhiều :(
  • 1

#654 nqt266

nqt266

    biết vẽ circle

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

Đã gửi 30 December 2009 - 09:52 PM

Xin chân thành cảm ơn bác gia_bach rẩt nhìu nha! Lisp của bác đúng là cái em đang cần. Từ trước em cứ nghĩ là cái này chắc không làm được nên cứ mải miết quay tay, mặc cho số phận...Hjx hjx. HÔm nay quyết định đưa yêu cầu thử lần đầu tiên xem sao, không ngờ được bác và mọi người đáp ứng ngay. Thật quá vui mừng và nể phục. Xin chúc bác và anh em trong diễn đàn năm mới mạnh khỏe, công việc tốt và sẽ luôn sát cánh cùng anh em trong diễn đàn để có thể làm nhẹ bớt phần nào công việc thiết kế của chúng ta.
  • 0

#655 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 December 2009 - 10:06 PM

http://www.cadviet.c...?fok=doc1_4.doc
Bác gia_bach và anh em xem hình ảnh em gửi theo link trên này nhé, em muốn quay rất nhiều đối tượng như vậy, làm tay vo nhiều mệt quá, rất mong nhận được sự giúp đỡ của bác và anh em!
Xin chân thành cảm ơn!

Chào bạn nqt266,
Dựa vào gợi ý của bác Gia bach, mình làm thử cái lisp này theo nguyên tắc giống như cái lisp gửi bạn muoild (để move nhiều đối tượng theo nhiều khoảng cách khác nhau). Cái lisp này sẽ cho bạn rotate nhiều nhóm đối tượng trong các vòng tròn lựa chọn mà mỗi nhóm quay theo một góc khác nhau. Nhưng bạn phải nhớ cái trật tự khi lựa chọn các vòng tròn và trật tự góc quay khi nhập.
Bạn hãy thử xem nhé.

(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
(setq sp 0
ep (* 2 pi)
inc (/ ep 72) )
(while (< sp ep)
(setq pt (vlax-curve-getPointAtParam obj sp)
ptlst (cons pt ptlst)
sp (+ inc sp)) )
(reverse ptlst)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:mulro ()
(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(command "undo" "be")
(setq sscir (ssget (list (cons 0 "CIRCLE")))
n (sslength sscir)
i 0
lstg (list))
(while (< i n)
(setq goc (getreal "\Nhap goc quay theo do: ")
lstg (append lstg (list goc))
i (1+ i))
)
(setq i 0)
(while (< i n)
(setq ent (ssname sscir i)
cen (cdr (assoc 10 (entget ent)))
lstp (traceCircle (vlax-ename->vla-object ent))
ss (ssget "cp" lstp))
(command "rotate" ss "" cen (nth i lstg))
(setq i (1+ i))
)
(command "undo" "e")
(mapcar 'setvar vl ov) ; reset Sys Vars
(princ)
)

Chúc bạn vui.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#656 nqt266

nqt266

    biết vẽ circle

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

Đã gửi 30 December 2009 - 10:12 PM

Xin cảm ơn bác phamthanhbinh nha.Lisp của bác dùng cũng đúng như yêu cầu của em. Xin cảm ơn rất nhiiều, chúc bác năm mới khoẻ, công việc thuận lợi và có nhiều lisp hay!
  • 0

#657 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 December 2009 - 10:27 PM

Chào pro trong diễn đàn cadviet.xin viết cho em bài lisp theo yêu cầu của hình vẽ với .
[url="http://www.cadviet.com/upfiles/2/dao_xoc.dwg"]Visit My Website[/url
Em cảm ơn diễn đàn!

Chào bạn duongepu,
Chưa hiểu bạn muốn gì khi gửi cái bản vẽ dao xọc này lên. Bạn muốn lisp thực hiện tất cả các thao tác vẽ để có được cái bản vẽ như vậy, hay bạn muốn lisp làm cái gì, phần nào trong bản vẽ????
Bạn nên trình bày rõ hơn yêu cầu của bạn nhé chớ đừng đánh đố người đọc bài như vậy, 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.

#658 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 31 December 2009 - 06:07 AM

Chào bạn nqt266,
Dựa vào gợi ý của bác Gia bach, mình làm thử cái lisp này theo nguyên tắc giống như cái lisp gửi bạn muoild (để move nhiều đối tượng theo nhiều khoảng cách khác nhau). Cái lisp này sẽ cho bạn rotate nhiều nhóm đối tượng trong các vòng tròn lựa chọn mà mỗi nhóm quay theo một góc khác nhau. Nhưng bạn phải nhớ cái trật tự khi lựa chọn các vòng tròn và trật tự góc quay khi nhập.
Bạn hãy thử xem nhé.

Chào bác PhamthanhBinh
Thay vì nhớ trật tự góc quay khi nhập, mình nên cho hiện sáng đối tượng lên và quay đối tượng ngay tại thời điểm mà ta nhập góc vào. Chỉ cần 1 vòng While là đủ và biến lstg của bác trong code có lẽ rằng không cần thiết.
Như vậy thì bác khỏi phải nhớ cái trật tự khi lựa chọn các vòng tròn và trật tự góc quay khi nhập rồi.

Tue_NV xin phép bổ sung vào code Lisp việc lưu giá trị góc nhập vào cho lần sử dụng sau luôn ( ngay trong vòng lặp While), hiện sáng đối tượng, dây tóc chuột tại tâm đường tròn và quay đối tượng ngay thời điểm mà User nhập góc. Và không quay những đường tròn mà trong nó hoặc giao với nó không có đối tượng nào cả

(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
(setq sp 0
ep (* 2 pi)
inc (/ ep 72) )
(while (< sp ep)
(setq pt (vlax-curve-getPointAtParam obj sp)
ptlst (cons pt ptlst)
sp (+ inc sp)) )
(reverse ptlst)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:mulro (/ sscir i n ent cen lstp ss ang vl ov)
(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(command "undo" "be")
(setq sscir (ssget (list (cons 0 "CIRCLE")))
n (sslength sscir)
i 0
)
(or *ang* (setq *ang* (* (/ pi 4))))
(while (< i n)
(setq ent (ssname sscir i)
cen (cdr (assoc 10 (entget ent)))
lstp (traceCircle (vlax-ename->vla-object ent))
)
(if (and (setq ss (ssget "cp" lstp)) (> (sslength ss) 1))

(command "rotate" ss "" cen
(/ (* 180 (setq ang (getangle cen (strcat "\nNhap goc muon quay < " (angtos *ang*) " > : "))))
pi)
)
)
(setq i (1+ i))
(if ang (setq *ang* ang))
)
(command "undo" "e")
(mapcar 'setvar vl ov) ; reset Sys Vars
(princ)
)

@Anh giaBach : Anh cho Tue_NV hỏi chút : ý nghĩa của hàm vl-cmdf tương tự như hàm command. Em nghĩ rằng hàm vl-cmdf có ưu điểm hơn hàm command. Không biết em suy nghĩ như vậy có đúng không? Hình như các hàm Vl, Vla có tốc độ xử lý nhanh hơn các hàm trong Lisp thì phải. Không biết Tue_NV có suy nghĩ như thế đúng không?
Anh gia_bach cùng mọi người giải thích dùm Tue_NV chổ này tí nhé.
Cảm ơn anh rất nhiều
  • 3

#659 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 31 December 2009 - 07:43 AM

@Anh giaBach : Anh cho Tue_NV hỏi chút : ý nghĩa của hàm vl-cmdf tương tự như hàm command. Em nghĩ rằng hàm vl-cmdf có ưu điểm hơn hàm command. Không biết em suy nghĩ như vậy có đúng không? Hình như các hàm Vl, Vla có tốc độ xử lý nhanh hơn các hàm trong Lisp thì phải. Không biết Tue_NV có suy nghĩ như thế đúng không?
Anh gia_bach cùng mọi người giải thích dùm Tue_NV chổ này tí nhé.
Cảm ơn anh rất nhiều

Hàm vl-cmdf sẽ trả về giá trị T nếu công việc diễn ra suôn sẻ, như vậy anh có thể lấy luôn hàm vl-cmdf để làm điều kiện cho if được. Nếu suôn sẻ thì biểu thứ 1, nếu không suôn sẻ thì biểu thức 2. Đó là ý kiến riêng của em.
  • 2

#660 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 31 December 2009 - 08:30 AM

..........................
(traceCircle (vlax-ename->vla-object ent))
..........................

Mặc dù trong Help đối số của các hàm vlax-curve-get*** là VLA-object .
Tuy nhiên trong thực tế, các hàm vlax-curve-get*** chấp nhận cả đối số là entity (ename data type).
Do đó có thể gọi hàm traceCircle trực tiếp với ent : (traceCircle ent)

...........
cho Tue_NV hỏi chút : ý nghĩa của hàm vl-cmdf tương tự như hàm command. Em nghĩ rằng hàm vl-cmdf có ưu điểm hơn hàm command. Không biết em suy nghĩ như vậy có đúng không? Hình như các hàm Vl, Vla có tốc độ xử lý nhanh hơn các hàm trong Lisp thì phải.
.........

Đúng như Tue_NV nói : chức năng của vl-cmdf tương tự như hàm command.
Tuy nhiên vl-cmdf thêm chức năng xác minh (kiểm tra tính hợp lệ) các đối số và chỉ thực thi nếu đối số là hợp lệ.
Và như ý của Nataca : Hàm vl-cmdf sẽ trả về giá trị T (true) nếu công việc diễn ra suôn sẻ
Nguợc lại command thực hiện lần luợt các đối số cho đến khi lỗi được phát hiện (nếu có). Do đó, lệnh có thể được thực thi một phần và chưa hoàn toàn kết thúc.
  • 2