Đến nội dung


Hình ảnh
- - - - -

lisp vẽ 2 đoạn thẳng song song


  • Please log in to reply
11 replies to this topic

#1 haimed

haimed

    biết vẽ circle

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

Đã gửi 10 December 2008 - 04:40 PM

Mình định viết 1 đoạn lisp làm việc sau: trên bản vẽ có các line lớp "0", chọn các điểm đầu bên trái các line đó, vẽ từ điểm đó 2 đoạn thẳng song song cách nhau 0,5. Bác nào giúp mình sửa đoạn lisp này với:
(defun c:vd()
;(command "-layer" "new" "vd" "color" "20" "cat-20" "")
(setq ssg (ssget "x" '((0 . "line")(8 . "0")) ) )
(setq sodt (sslength ssg)
index 0)

(repeat sodt
(setq ent (ssname ssg index)
index (1+ index)
data (entget ent)
x (car(cdr(assoc 10 data)))
y (cadr(cdr(assoc 10 data)))
y1 (- y 30)
x1 (+ x 0.5)
)
(princ x1)
(command "line" (list x y) (list x y1) "")
(command "line" (list x1 y) (list x1 y1) "")
)


)
Mong đc chỉ giáo nhiều!!!
  • 0

#2 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 11 December 2008 - 07:26 AM

Mình định viết 1 đoạn lisp làm việc sau: trên bản vẽ có các line lớp "0", chọn các điểm đầu bên trái các line đó, vẽ từ điểm đó 2 đoạn thẳng song song cách nhau 0,5. Bác nào giúp mình sửa đoạn lisp này với:
Mong đc chỉ giáo nhiều!!!


Đề bài của bạn chưa rỏ:
-Nếu đoạn thẳng thẳng đứng thì điểm nào là điểm bên trái?
-Hai đoạn thẳng vẽ theo phương nào, chiều dài bao nhiêu?
-vẽ từ điểm đó 2 đoạn thẳng song song từ 1 điểm không thể vẽ ra 2 đường thẳng song song!
  • 0

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


#3 haimed

haimed

    biết vẽ circle

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

Đã gửi 11 December 2008 - 07:49 AM

Đề bài của bạn chưa rỏ:
-Nếu đoạn thẳng thẳng đứng thì điểm nào là điểm bên trái?
-Hai đoạn thẳng vẽ theo phương nào, chiều dài bao nhiêu?
-vẽ từ điểm đó 2 đoạn thẳng song song từ 1 điểm không thể vẽ ra 2 đường thẳng song song!

Ý mình là 2 đoạn thẳng thẳng đứng, song song với nhau, đoạn đầu tiên bắt đầu từ điểm bên trái của các đoạn thẳng ban đầu trên bản vẽ. Độ dài các đoạn thẳng song song tùy ý, như trog đoạn lisp trên mình lấy 35. Mong bạn chỉ giáo
  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 11 December 2008 - 08:03 AM

Ý mình là 2 đoạn thẳng thẳng đứng, song song với nhau, đoạn đầu tiên bắt đầu từ điểm bên trái của các đoạn thẳng ban đầu trên bản vẽ. Độ dài các đoạn thẳng song song tùy ý, như trog đoạn lisp trên mình lấy 35. Mong bạn chỉ giáo

Ch­ưa rõ lắm. Bạn có thể minh họa bằng hình vẽ có được không? hoặc upload hình minh họa bằng CAD cũng được.
  • 0

#5 haimed

haimed

    biết vẽ circle

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

Đã gửi 11 December 2008 - 08:23 AM

Mình up bản vẽ minh họa, trên đó lúc đầu có các đoạn thẳng màu đỏ, lisp sẽ tự vẽ các đoạn màu trắng như hình vẽ
http://www.cadviet.c...pfiles/vd_2.dwg
  • 0

#6 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 11 December 2008 - 08:26 AM

Ch­ưa rõ lắm. Bạn có thể minh họa bằng hình vẽ có được không? hoặc upload hình minh họa bằng CAD cũng được.

Mình cũng cho là vậy. Bạn haimed nên úp file lên.
-Thẳng đứng thì có 2 phương lên và xuống.
-Đường thẳng thứ 2 nằm bên trái hai bên phải đường thứ nhất?
-2 đường thẳng mới có yêu cầu gì về layer không hay dùng layer hiện hành để vẽ.
-Hỏi lại. Nếu đoạn thẳng (nguồn) thẳng đứng thì điểm nào là điểm bên trái?
-Ý bạn mốn lisp tự động chọn tất cả line lớp 0 trong bản vẽ hay chỉ chọn trong vùng chọn thôi.

@haimed : Bạn nên đọc kỹ và trả lời đủ những vướng mắc trên không nên để người khác phải hỏi nhiều lần cho 1 yêu cầu của bạn! Đoạn líp của bạn thì chiều dài ý định của bạn là 30 chứ không phải 35.
  • 0

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


#7 haimed

haimed

    biết vẽ circle

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

Đã gửi 11 December 2008 - 08:49 AM

Mình cũng cho là vậy. Bạn haimed nên úp file lên.
-Thẳng đứng thì có 2 phương lên và xuống.
-Đường thẳng thứ 2 nằm bên trái hai bên phải đường thứ nhất?
-2 đường thẳng mới có yêu cầu gì về layer không hay dùng layer hiện hành để vẽ.
-Hỏi lại. Nếu đoạn thẳng (nguồn) thẳng đứng thì điểm nào là điểm bên trái?
-Ý bạn mốn lisp tự động chọn tất cả line lớp 0 trong bản vẽ hay chỉ chọn trong vùng chọn thôi.

@haimed : Bạn nên đọc kỹ và trả lời đủ những vướng mắc trên không nên để người khác phải hỏi nhiều lần cho 1 yêu cầu của bạn! Đoạn líp của bạn thì chiều dài ý định của bạn là 30 chứ không phải 35.

Sorry, mình mới tham gia diễn đàn nên chưa quen. Mình đã up bản vẽ minh họa, trên đó lúc đầu có các đoạn thẳng layer 0, lisp sẽ chọn tất cả các đoạn đó, bắt đầu từ điểm bên trái của các đoạn đó (hoặc điểm đầu tiên của đoạn thẳng) vẽ 2 đoạn song song thẳng đứng xuống dưới, dài 30 cách nhau 0.5, đường thứ 2 ở bên phải đường thứ nhất. 2 đường thẳng mới layer 2, màu trắng, nét liền. Cám ơn các bạn đã quan tâm
  • 0

#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 11 December 2008 - 09:31 AM

Sorry, mình mới tham gia diễn đàn nên chưa quen. Mình đã up bản vẽ minh họa, trên đó lúc đầu có các đoạn thẳng layer 0, lisp sẽ chọn tất cả các đoạn đó, bắt đầu từ điểm bên trái của các đoạn đó (hoặc điểm đầu tiên của đoạn thẳng) vẽ 2 đoạn song song thẳng đứng xuống dưới, dài 30 cách nhau 0.5, đường thứ 2 ở bên phải đường thứ nhất. 2 đường thẳng mới layer 2, màu trắng, nét liền. Cám ơn các bạn đã quan tâm

Đây bạn!

(Defun C:vd ( )
(command "undo" "be")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(command "-layer" "new" "2" "color" "7" "2" "")
(setq taphoplinegoc (ssget "x" '((8 . "0"))))
(setq taphoplinegoc (ssget "p" '((0 . "line"))))

(setq L 0)
(setq M (sslength taphoplinegoc))
(while (< L M)
(setq DTs (ssname taphoplinegoc L))
(setq DTMs (entget DTs))
(setq diemdau (cdr (assoc 10 DTMs)))
(command "line" diemdau "@30<-90" "")
(command ".chprop" "last" "" "la" "2" "color" "bylayer" "")
(setq diemdau2 (list (+ (car diemdau) (/ 1.0 2)) (cadr diemdau)))
(command "line" diemdau2 "@30<-90" "")
(command ".chprop" "last" "" "la" "2" "color" "bylayer" "")


(setq L (1+ L))
)
(setvar "osmode" luubatdiem)
(command "undo" "end")
(Princ)
)


Cái chổ giá trị 0.5 nó làm mắc công ghê gớm. Nhập 0.5 nó không chịu, nhập 1/2 nó cũng không chịu cuối cùng nhập 1.0/2 thì nó được :cheers:
Lưu ý mình lấy điểm đầu tiên của đoạn thẳng mà không xét là trái hay phải.
  • 0

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 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 11 December 2008 - 11:41 AM

Đây bạn!

(Defun C:vd ( )
(command "undo" "be")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(command "-layer" "new" "2" "color" "7" "2" "")
(setq taphoplinegoc (ssget "x" '((8 . "0"))))
(setq taphoplinegoc (ssget "p" '((0 . "line"))))

(setq L 0)
(setq M (sslength taphoplinegoc))
(while (< L M)
(setq DTs (ssname taphoplinegoc L))
(setq DTMs (entget DTs))
(setq diemdau (cdr (assoc 10 DTMs)))
(command "line" diemdau "@30<-90" "")
(command ".chprop" "last" "" "la" "2" "color" "bylayer" "")
(setq diemdau2 (list (+ (car diemdau) (/ 1.0 2)) (cadr diemdau)))
(command "line" diemdau2 "@30<-90" "")
(command ".chprop" "last" "" "la" "2" "color" "bylayer" "")


(setq L (1+ L))
)
(setvar "osmode" luubatdiem)
(command "undo" "end")
(Princ)
)


Cái chổ giá trị 0.5 nó làm mắc công ghê gớm. Nhập 0.5 nó không chịu, nhập 1/2 nó cũng không chịu cuối cùng nhập 1.0/2 thì nó được :cheers:
Lưu ý mình lấy điểm đầu tiên của đoạn thẳng mà không xét là trái hay phải.



Cũng với đường thẳng song song, nhờ bác Duy sửa lại với nội dung : chọn đối tượng sau đó vẽ polyline layer hiện hành màu đỏ, continuos, lineweight 0.3mm, độ dài 2000mm, 2 đường cách nhau 200mm, song song đi từ tâm đối tượng.

http://www.cadviet.c...g_song_song.dwg

Xin cám ơn.
  • 0

#10 haimed

haimed

    biết vẽ circle

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

Đã gửi 11 December 2008 - 01:14 PM

Thanks Duy, nhưng có bác nào xem hộ đoạn code lúc đầu của mình sai ở chỗ nào ko
  • 0

#11 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 11 December 2008 - 01:35 PM

Cũng với đường thẳng song song, nhờ bác Duy sửa lại với nội dung : chọn đối tượng sau đó vẽ polyline layer hiện hành màu đỏ, continuos, lineweight 0.3mm, độ dài 2000mm, 2 đường cách nhau 200mm, song song đi từ tâm đối tượng.

http://www.cadviet.c...g_song_song.dwg

Xin cám ơn.

Mình không biết cách lấy tâm của 1 đối tượng nên không viết lisp của bạn được!
  • 0

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


#12 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 11 December 2008 - 01:44 PM

Mình không biết cách lấy tâm của 1 đối tượng nên không viết lisp của bạn được!


Cám ơn Duy đã quan tâm. Khi nào Duy biết thì hãy viết dùm mình nhé. Thanks a lot. :cheers:
  • 0