Đế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

#1 trungkien_hatangdothi

trungkien_hatangdothi

    biết lệnh properties

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

Đã gửi 29 March 2012 - 09:49 AM

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)
-B2: Chọn 2 điểm trên đường gốc mà mình muốn đường pline, Le song song với nó , 2 điểm này thể hiện hướng mà mình muốn đường pline xoay theo hướng đó (giống khi chọn text với torient) =>enter

(Hoặc ở bước 1 có thể ngắn gọn hơn là khi chon pline, line hay Le thì cái đoạn trên đường pline, line, le mà khi mình click chọn sẽ chính là đoạn cần xoay luôn ạ)

Lisp này hiểu đơn giản giống như lệnh torient dùng cho text đó ạ

Các bác viết giúp mình với, nếu lisp này đã có trên diễn đàn thì nhờ mod cho xin link và xóa giúp mình topic đi, thank mod và các bác trước.
  • 0
BUILD CAREER !


(Make life go to the dog..)


"Whenever I was in failure,I tried to overcome it & then to be SuccessFul man"

#2 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 29 March 2012 - 09:52 AM

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:
- 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
- Chọn đường gốc mà mình muốn đường ở trên song song với nó =>enter

Các bác viết giúp mình với ạ, nếu lisp này đã có trên diễn đàn thì nhờ mod cho xin link và xóa giúp mình topic đi ạ, thank mod và các bác trước ạ

Hình như còn thiếu 1 giả thiết: điểm gốc cần xoay?
  • 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.


#3 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 29 March 2012 - 09:55 AM

Lisp này tương đương với xoay đối tượng bất kỳ song song với đường thẳng cho trước phải không nhỉ?
  • 1

#4 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 29 March 2012 - 10:02 AM

Lisp này tương đương với xoay đối tượng bất kỳ song song với đường thẳng cho trước phải không nhỉ?

Chắc là đúng ý chủ topic rồi. Mà nếu như vậy thì thằng rotate làm được, chả cần lisp.
  • 1

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

trungkien_hatangdothi

    biết lệnh properties

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

Đã gửi 29 March 2012 - 10:12 AM

Hình như còn thiếu 1 giả thiết: điểm gốc cần xoay?

ko cần điểm gốc bạn ạ, chỉ cần chọn 2 đường thẳng và nó song song nhau là đc, mình chỉ cần đơn giản thôi vì đang cần có ngay mà


Lisp này tương đương với xoay đối tượng bất kỳ song song với đường thẳng cho trước phải không nhỉ?

Đúng rồi đó bạn, ở đây mình nêu đối tượng cụ thể là 1 đường line, pline và Le luôn.

Chắc là đúng ý chủ topic rồi. Mà nếu như vậy thì thằng rotate làm được, chả cần lisp.


Ở đây mình muốn dùng lisp để thao tác nhanh hơn dùng rotate bạn ạ, giống như lệnh "torient" với text vậy, lệnh này sẽ giống hệt "torient" làm thế sẽ nhanh và chính xác hơn "rotate"
  • 0
BUILD CAREER !


(Make life go to the dog..)


"Whenever I was in failure,I tried to overcome it & then to be SuccessFul man"

#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 March 2012 - 10:27 AM

:D
Bạn ơi
- Đã xoay đối tượng thì phải có điểm gốc - dù muốn hay không
- Pline và Le có thể chứa nhiều đoạn
- Torient lấy điểm quay là tâm *Text (MC)
- Càng cần có ngay thì càng phải minh họa kỹ
  • 2

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


#7 trungkien_hatangdothi

trungkien_hatangdothi

    biết lệnh properties

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

Đã gửi 29 March 2012 - 10:38 AM

Hình đã gửi
Bạn ơi
- Đã xoay đối tượng thì phải có điểm gốc - dù muốn hay không
- Pline và Le có thể chứa nhiều đoạn
- Torient lấy điểm quay là tâm *Text (MC)
- Càng cần có ngay thì càng phải minh họa kỹ


thank bác, e hiểu ý bác nói rồi.E vừa edit lại yêu cầu ở #1 rồi bác ạ, lúc đầu chưa viết rõ ràng lắm.
  • 0
BUILD CAREER !


(Make life go to the dog..)


"Whenever I was in failure,I tried to overcome it & then to be SuccessFul man"

#8 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 29 March 2012 - 10:46 AM

Bác viết bài cũng nhiều rồi. "Pline và Le có thể chứa nhiều đoạn" thì bác làm nào. Ra đề bài phải nghĩ cách làm thủ công thì mọi người mới viết lisp dựa trên cái cách thủ công ấy.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#9 trungkien_hatangdothi

trungkien_hatangdothi

    biết lệnh properties

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

Đã gửi 29 March 2012 - 10:54 AM

Bác viết bài cũng nhiều rồi. "Pline và Le có thể chứa nhiều đoạn" thì bác làm nào. Ra đề bài phải nghĩ cách làm thủ công thì mọi người mới viết lisp dựa trên cái cách thủ công ấy.

sorry mọi người, e đã edit lại chi tiết ở bài viết rôi , do vội quá nên viết chưa được rõ ràng, bác đọc lại #1 để làm giúp e nhé

thank các bác đã góp ý nhé, e viết chưa đc rõ ràng có gì các bác cứ góp ý ạ
  • 0
BUILD CAREER !


(Make life go to the dog..)


"Whenever I was in failure,I tried to overcome it & then to be SuccessFul man"

#10 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 March 2012 - 11:09 AM

Quick code cho bạn :

(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" (list (cons 0 "*LINE,LEADER"))) 0))))
(princ "\nChon cac doi tuong can quay :")
(ssget (list (cons 0 "*LINE,LEADER")))
(setq SelSet (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
)
(vlax-for object Selset
(vla-rotate object (vlax-3d-point (car (setq tmp (ST:Geom-Entity-Box-Fast object)))) (- (cdr mau)(cdr tmp)))
)
(vla-delete Selset)
)
)

Nếu muốn dùng cho tất cả các đối tượng (k riêng gì Pline, Line, Leader thì bạn xóa tất cả dòng này trong lisp đi
(list (cons 0 "*LINE,LEADER"))
  • 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


#11 trungkien_hatangdothi

trungkien_hatangdothi

    biết lệnh properties

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

Đã gửi 29 March 2012 - 11:25 AM

Quick code cho bạn :


(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" (list (cons 0 "*LINE,LEADER"))) 0))))
(princ "\nChon cac doi tuong can quay :")
(ssget (list (cons 0 "*LINE,LEADER")))
(setq SelSet (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
)
(vlax-for object Selset
(vla-rotate object (vlax-3d-point (car (setq tmp (ST:Geom-Entity-Box-Fast object)))) (- (cdr mau)(cdr tmp)))
)
(vla-delete Selset)
)
)

Nếu muốn dùng cho tất cả các đối tượng (k riêng gì Pline, Line, Leader thì bạn xóa tất cả dòng này trong lisp đi
(list (cons 0 "*LINE,LEADER"))


- Thank bác kẹt xu nhé (ko hiểu sao ko like this được), đúng cái lisp e cần, đơn giản gọn nhẹ mà rất nhanh, bác có thể giúp e thêm chút nữa được ko
+ ở đây khi e làm với đường Le , vì nó có mũi tên nên có lúc sau khi hoàn thành lệnh thì chiều mũi tên xoay ko đúng như mình muốn, bác chèn giúp e thêm vào khi dùng lệnh này với Le (mũi tên) thì sẽ có thêm tùy chọn chọn 2 điểm trên đường mẫu để xác định hướng mũi tên ạ.
  • 1
BUILD CAREER !


(Make life go to the dog..)


"Whenever I was in failure,I tried to overcome it & then to be SuccessFul man"

#12 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 March 2012 - 11:27 AM

Rất tiếc là mình không hiểu ý bạn, cũng chưa hiểu lúc nào là không như ý :)
  • 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


#13 trungkien_hatangdothi

trungkien_hatangdothi

    biết lệnh properties

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

Đã gửi 29 March 2012 - 11:42 AM

Rất tiếc là mình không hiểu ý bạn, cũng chưa hiểu lúc nào là không như ý Hình đã gửi


Hình đã gửi Lisp này của bác đã giải quyết được vấn đề của e đang cần rồi bác ạ

Vừa rồi e ko để ý đến đối tượng e chọn , đã ok rồi bác ạ

( Muốn bấm vào cái " like this" của bác nhưng mà thấy báo là quá số lần,hic)
  • 0
BUILD CAREER !


(Make life go to the dog..)


"Whenever I was in failure,I tried to overcome it & then to be SuccessFul man"

#14 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 March 2012 - 12:19 PM

OK, chúc bạn thành công :)
  • 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


#15 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 March 2012 - 04:37 PM

Có 2 chỗ có dòng đó, bạn phải bỏ cả 2 chỗ đ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


#16 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 - 07:05 PM

Có 2 chỗ có dòng đó, bạn phải bỏ cả 2 chỗ đi

Bác ketxu ơi, em xóa 2 dòng có chữ (list (cons 0 "*LINE,LEADER")) nhưng khi quay 2 đối tượng là Text và mũi tên thì chỉ đúng với mũi tên còn Text cũng quay nhưng không song song với đối tượng được chọn. Bác coi giúp em với!
  • 0

#17 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 March 2012 - 07:38 PM

Bạn gửi file lên . Text mình chưa test :)
  • 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


#18 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 - 08:07 PM

em gửi file lên Bác giúp nhé!http://www.cadviet.c...47_drawing1.dwg
mỗi lúc dùng lệnh XOAY nó xoay 1 kiểu khác nhau, không theo mẫu!
  • 0

#19 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 March 2012 - 09:13 PM

À, giờ mình đã hiểu ý bạn. Mình nói có thể sử dụng với các loại khác - không có nghĩa là áp dụng sẽ theo ý muốn chủ quan. Lisp trên sở dĩ lấy đường chéo của đường bao ảo (1 hình chữ nhật) của đối tượng làm cơ sở quay, nên nhiều trường hợp tất lẽ nó k đúng ý bạn :)
Update thêm cái Text hoặc Le :

(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))))
(reverse l)
) 10 (entget (vlax-vla-object->ename object))))
)
(last tmp)
)
)
(T (cdr tmp))
)
)
)
)
(vla-delete Selset)
)
)

  • 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


#20 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 - 10:44 PM

ồ đúng ý em rối đó, chạy được rồi và quay mũi tên song song rồi nhưng còn 1 chút nữa là nó lại bị quay ngược mũi tên 180độ, bác chỉnh giúp nó quay song song thôi chứ không phải lật ngược lại. cảm ơn rất nhiều!
  • 0