Đến nội dung


Hình ảnh
- - - - -

(Yêu cầu) Xin lisp làm 1 đường thẳng song song với 1 đường thẳng đã chọn


  • Please log in to reply
32 replies to this topic

#21 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 March 2012 - 10:54 PM

Tùy thuộc vào đối tượng mẫu bạn chọn là Line hay Pline hay cái j. Bạn gói gọn lại yêu cầu đi :)
  • 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


#22 vuminhchau

vuminhchau

    biết vẽ polygon

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

Đã gửi 30 March 2012 - 11:02 PM

em muốn chọn đối tượng mẫu có thể là đường line hoặc pline để khi chọn text và mũi tên (LE) chỉ đường nó quay song song với đường đi
  • 0

#23 vuminhchau

vuminhchau

    biết vẽ polygon

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

Đã gửi 01 April 2012 - 10:52 AM

Bác ketxu sửa giúp em như hình thứ 3 với:
Hình đã gửi
  • 0

#24 vuminhchau

vuminhchau

    biết vẽ polygon

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

Đã gửi 02 April 2012 - 10:51 AM

các bác ơi, có ai có thể giúp em sửa lisp của bác kẹt xu để cái mũi tên chỉ đường nó không bị quay ngược 180 độ như hình trên không ạ!
rất xin lỗi vì ngày lễ vẫn làm phiền các bác.
  • 0

#25 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 02 April 2012 - 11:31 AM

các bác ơi, có ai có thể giúp em sửa lisp của bác kẹt xu để cái mũi tên chỉ đường nó không bị quay ngược 180 độ như hình trên không ạ!
rất xin lỗi vì ngày lễ vẫn làm phiền các bác.

Sửa lại 1 tí cho bạn đây :

(defun c:xoay(/ ST:Geom-Entity-Box-Fast mau Selset tmp)
(vl-load-com)
(defun ST:Geom-Entity-Box-Fast (vla-obj / ll lr ur ul rt)
(vla-getboundingbox vla-obj 'll 'ur)
(cons (mapcar '(lambda (x y) (* (+ x y) 0.5)) (setq ll (vlax-safearray->list ll))(setq ur (vlax-safearray->list ur))) (angle ll ur))
)
(if (and (princ "\nChon doi tuong mau :")
(setq mau (ST:Geom-Entity-Box-Fast (vlax-ename->vla-object (ssname (ssget ":S" ) 0))))
(princ "\nChon cac doi tuong can quay :")
(ssget)
(setq SelSet (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
)
(vlax-for object Selset
(setq typ (vla-get-ObjectName object))
(vla-rotate object (vlax-3d-point (car (setq tmp (ST:Geom-Entity-Box-Fast object))))
(- (cdr mau)
(cond ((wcmatch typ "AcDb*Text")
(vla-get-Rotation object))
((wcmatch typ "AcDb*Leader")
(angle
(car (setq tmp (reverse ((lambda(key lst / l )
(foreach x lst (if (= key (car x))(setq l (cons (cdr x) l))))
(reverse l)
) 10 (entget (vlax-vla-object->ename object)))))
)
(last tmp)
)
)
(T (cdr tmp))
)
)
)
)
(vla-delete Selset)
)
)
Edit : Sửa lại code theo ý bạn vuminhchau

Bài viết đã được chỉnh sửa nội dung bởi Tue_NV: 02 April 2012 - 09:34 PM
Sửa lại code theo ý bạn vuminhchau

  • 1

#26 vuminhchau

vuminhchau

    biết vẽ polygon

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

Đã gửi 02 April 2012 - 02:01 PM

Sửa lại 1 tí cho bạn đây :



(defun c:xoay(/ ST:Geom-Entity-Box-Fast mau Selset tmp)
(vl-load-com)
(defun ST:Geom-Entity-Box-Fast (vla-obj / ll lr ur ul rt)
(vla-getboundingbox vla-obj 'll 'ur)
(cons (mapcar '(lambda (x y) (* (+ x y) 0.5)) (setq ll (vlax-safearray->list ll))(setq ur (vlax-safearray->list ur))) (angle ll ur))
)
(if (and (princ "\nChon doi tuong mau :")
(setq mau (ST:Geom-Entity-Box-Fast (vlax-ename->vla-object (ssname (ssget ":S" ) 0))))
(princ "\nChon cac doi tuong can quay :")
(ssget)
(setq SelSet (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
)
(vlax-for object Selset
(setq typ (vla-get-ObjectName object))
(vla-rotate object (vlax-3d-point (car (setq tmp (ST:Geom-Entity-Box-Fast object))))
(- (cdr mau)
(cond ((wcmatch typ "AcDb*Text")
(vla-get-Rotation object))
((wcmatch typ "AcDb*Leader")
(angle
(car (setq tmp ((lambda(key lst / l )
(foreach x lst (if (= key (car x))(setq l (cons (cdr x) l))))
) 10 (entget (vlax-vla-object->ename object))))
)
(last tmp)
)
)
(T (cdr tmp))
)
)
)
)
(vla-delete Selset)
)
)


em dùng lệnh xoay mà bác Tue_NV như hình 2 chỉ quay được chữ, không quay được mũi tên = lệnh LE.
nhờ bác sữa giúp khi dùng lệnh xong nó sẽ quay như hình thứ 3. cảm ơn bác nhiều!
http://www.cadviet.c..._drawing2_1.dwg
  • 0

#27 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 02 April 2012 - 03:38 PM


em dùng lệnh xoay mà bác Tue_NV như hình 2 chỉ quay được chữ, không quay được mũi tên = lệnh LE.
nhờ bác sữa giúp khi dùng lệnh xong nó sẽ quay như hình thứ 3. cảm ơn bác nhiều!
http://www.cadviet.c..._drawing2_1.dwg

Code bạn ketxu viết theo yêu cầu của bạn Trungkien (dòng màu đỏ) chưa viết cho dòng màu xanh ở bài viết ở dưới
Vì vậy, bạn nêu ra yêu cầu lần nữa cho trường hợp Pline có nhiều đoạn


Mình muốn nhờ các bác viết giúp mình 1 cái lisp như sau ạ:

Mình có 1 đường thẳng (Pline. line, Le...) giờ mình muốn cho nó song song với 1 đường thẳng có sẵn, nếu dùng lệnh al thì khá lâu vì phải chọn điển trên mỗi đường thẳng, giờ mình muốn chỉ cần 2 bước:
- B1: Chọn đường thẳng cần xoay (đường thẳng đc tạo bởi lệnh pline, line và le (mũi tên)) => enter
(với các đường Pline, line và Le được tạo bởi chỉ 1 đoạn duy nhất thì gốc xoay là trung điểm của đường đó, nếu tạo bởi nhiều đoạn thì sẽ có tùy chọn yêu cầu chọn đoạn cần xoay trên đường đó (gốc xoay vẫn là trung điểm) hoặc chọn điểm gốc cần xoay cho cả đường gồm nhiều đoạn)
........


  • 0

#28 vuminhchau

vuminhchau

    biết vẽ polygon

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

Đã gửi 02 April 2012 - 09:24 PM

thực ra cái lisp của bác ketxu ở #20 đã giải quyết được gần xong rồi, nhưng chỉ có cái mũi tên nó bị quay ngược lại, vẫn song song với đối tượng chọn vì vậy em phải dùng thêm lệnh ROTATE để quay cái mũi tên đó 1 góc ngược lại 180 độ thì mới xong.
nếu đối tượng đường là pline nó khó thì có thể các bác giúp em chọn đối tượng mẫu là Line thì các đối tượng cần quay là Text và mũi tên (LE) nó sẽ quay song song như hình vẽ trên em đã gửi được không ạ!

  • 0

#29 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 02 April 2012 - 09:35 PM

thực ra cái lisp của bác ketxu ở #20 đã giải quyết được gần xong rồi, nhưng chỉ có cái mũi tên nó bị quay ngược lại, vẫn song song với đối tượng chọn vì vậy em phải dùng thêm lệnh ROTATE để quay cái mũi tên đó 1 góc ngược lại 180 độ thì mới xong.
nếu đối tượng đường là pline nó khó thì có thể các bác giúp em chọn đối tượng mẫu là Line thì các đối tượng cần quay là Text và mũi tên (LE) nó sẽ quay song song như hình vẽ trên em đã gửi được không ạ!

Tue_NV sửa lại code đã viết ở bài số 26.
Bạn check lại thử nhé!
  • 1

#30 vuminhchau

vuminhchau

    biết vẽ polygon

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

Đã gửi 02 April 2012 - 09:47 PM

oh được rồi bác Tue_NV ạ, cảm ơn bác rất nhiều.
  • 0

#31 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 17 June 2013 - 09:21 AM

Lisp bác Tue_NV sửa lại tí là ok rồi, đúng í của chủ topic.

Xin anh thêm dòng lệnh chọn điểm gốc xoay để tiện áp dụng cho các trường hợp khác luôn! 

Mong các anh giúp cho. Cảm ơn!


  • 0

#32 sonnv36

sonnv36

    biết lệnh copy

  • Members
  • PipPipPip
  • 119 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 17 June 2013 - 10:36 AM

Có thể làm cho nó xoay được blok k các bác nhỉ ?


  • 0

Online một ngày đàng...học vài sàng khôn :)


#33 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 26 June 2013 - 03:53 PM

Bổ sung thêm lisp này đi các pro ơi???

Thêm dòng lệnh chọn điểm gốc xoay đi các bác? Khi chọn điểm gốc thì click chuột để chọn!


  • 0