Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * - - - 3 Bình chọn

Vẽ Đường Pl Có Điểm Nút Là Đường Tròn Có Bán Kính Được Định Trước


  • Please log in to reply
17 replies to this topic

#1 Toan.CP

Toan.CP

    biết pan

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

Đã gửi 15 May 2017 - 03:40 PM

Mình thường xuyên phải vẽ các đường bao bằng đường pline. Sau đó copy đường tròn đến từng điểm nút nên mất nhiều thời gian. Mong các cao nhân chỉ giúp lisp vẽ đường pline mà vẽ đến đâu thì điểm nút là đường tròn đến đó còn đường nối các điểm nút vẫn là đường thẳng. Các đường tròn là bằng nhau và có bán kính được xác định trước hoặc được xác định ngay đầu tiên khi bắt đầu lệnh.

            Mong các bác giúp với ạ!


  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 May 2017 - 04:09 PM

(defun c:p1(/ e e1)
	(setq e (entlast))
	(command ".pline") (while (/= (getvar 'cmdactive) 0) (command pause))
	(and
		(setq e1 (entlast))
		(not (equal e e1))
		(mapcar '(lambda(x)(entmake (list (cons 0 "CIRCLE")(cons 40 2)(cons 10 (cdr x))))) (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget e1)))
	)
) 

Quick code. Số 2 đằng sau số 40 là cái bạn cần chỉnh


  • 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


#3 Toan.CP

Toan.CP

    biết pan

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

Đã gửi 15 May 2017 - 04:17 PM

(defun c:p1(/ e e1)
	(setq e (entlast))
	(command ".pline") (while (/= (getvar 'cmdactive) 0) (command pause))
	(and
		(setq e1 (entlast))
		(not (equal e e1))
		(mapcar '(lambda(x)(entmake (list (cons 0 "CIRCLE")(cons 40 2)(cons 10 (cdr x))))) (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget e1)))
	)
) 

Quick code. Số 2 đằng sau số 40 là cái bạn cần chỉnh

 

Cám ơn bác. Bác có thể chỉnh hộ em để đường tròn ấy và đường pline chỉ là 1 đối tượng được không ạ. Nó chỉ giống như chỉ là 1 dạng linetype thôi ấy. Để khi kích chọn đường và copy đi thi các đường tròn cũng đi theo luôn.


  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 May 2017 - 04:30 PM

Rất tiếc, yêu cầu đó lisp k làm được, linetype định nghĩa bằng file LIN không làm được, chỉ có thể tạo ra bằng các ngôn ngữ tạo được custom object


  • 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


#5 Toan.CP

Toan.CP

    biết pan

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

Đã gửi 15 May 2017 - 04:38 PM

Rất tiếc, yêu cầu đó lisp k làm được, linetype định nghĩa bằng file LIN không làm được, chỉ có thể tạo ra bằng các ngôn ngữ tạo được custom object

Vậy ạ. Em không biết về lisp nên nghĩ là có thể làm được. Hì hì Cảm ơn bác nhiều. Tại em hay phải copy các đường tròn đến các đầu nút pline rồi lại phải copy toàn bộ pl và các đường tròn vào các đối tượng khác. Vì vậy khi muốn chọn đối tượng này tách riêng ra rất khó khăn. Nên nếu làm được được như vậy thì sẽ giảm được nhiều công sức. Bác thử xem còn cách nào khác có thể làm được hộ em không ạ. E cảm ơn nhiều nhiều


  • 0

#6 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 15 May 2017 - 04:48 PM

Giải pháp là cuộn Pline tại các đỉnh thành các đường tròn.


  • 0

#7 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 15 May 2017 - 05:09 PM

Giải pháp là cuộn Pline tại các đỉnh thành các đường tròn.

 
Để khẳng định điều nói trên. Chạy thử:

(defun c:p2 ()
(entmake '((0 . "LWPOLYLINE")
(100 . "AcDbEntity")
(67 . 0)
(410 . "Model")
(8 . "0")
(62 . 1)
(100 . "AcDbPolyline")
(90 . 17)
(70 . 0)
(43 . 0.0)
(38 . 0.0)
(39 . 0.0)
(10 254.464 206.656)
(40 . 0.0)
(41 . 0.0)
(42 . -1.2303)
(91 . 0)
(10 250.631 205.856)
(40 . 0.0)
(41 . 0.0)
(42 . -0.812807)
(91 . 0)
(10 254.464 206.656)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 252.631 205.856)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 298.757 225.991)
(40 . 0.0)
(41 . 0.0)
(42 . 0.540215)
(91 . 0)
(10 302.055 225.43)
(40 . 0.0)
(41 . 0.0)
(42 . 1.85112)
(91 . 0)
(10 298.757 225.991)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 300.59 226.791)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 324.163 204.883)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 322.698 206.245)
(40 . 0.0)
(41 . 0.0)
(42 . 1.64675)
(91 . 0)
(10 326.12 205.3)
(40 . 0.0)
(41 . 0.0)
(42 . 0.607257)
(91 . 0)
(10 322.698 206.245)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 324.163 204.883)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 363.786 213.322)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 361.83 212.905)
(40 . 0.0)
(41 . 0.0)
(42 . -2.05449)
(91 . 0)
(10 364.657 211.522)
(40 . 0.0)
(41 . 0.0)
(42 . -0.486738)
(91 . 0)
(10 361.83 212.905)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(210 0.0 0.0 1.0)))
(princ))

P/s: Vấn đề còn lại là Code. Ket tiếp tục đê...! Giúp thì giúp cho trót...  :D 


  • 0

#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 May 2017 - 09:12 PM

Về bản chất nó không phải là đường tròn, và khi cần thay đổi bán kính thì ... 
So với giải pháp này thì giải pháp ổn hơn là tạo Group. E k ngồi máy :)


  • 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


#9 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 16 May 2017 - 10:46 AM

Quick code, số 2 vẫn là số e phải sửa. 
A để những đối tượng này vào một group, nếu muốn liền hoặc rời thì sử dụng tổ hợp phím Ctrl + Shift + A để bật/ tắt chế độ Group

(defun c:p1(/ e e1 s)
	(setq e (entlast) s (ssadd))
	(command ".pline") (while (/= (getvar 'cmdactive) 0) (command pause))
	(and
		(setq e1 (entlast))
		(not (equal e e1))
		(mapcar '(lambda(x)(entmake (list (cons 0 "CIRCLE")(cons 40 2)(cons 10 (cdr x))))) (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget e1)))
	)
(while (setq e (entnext e))
	(ssadd e s)
)
(command "-group" "_Create" "*" "" s "")
)

  • 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 Bee

Bee

    biết lệnh ddedit

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

Đã gửi 16 May 2017 - 10:47 AM

Mình thường xuyên phải vẽ các đường bao bằng đường pline. Sau đó copy đường tròn đến từng điểm nút nên mất nhiều thời gian. Mong các cao nhân chỉ giúp lisp vẽ đường pline mà vẽ đến đâu thì điểm nút là đường tròn đến đó còn đường nối các điểm nút vẫn là đường thẳng. Các đường tròn là bằng nhau và có bán kính được xác định trước hoặc được xác định ngay đầu tiên khi bắt đầu lệnh.

            Mong các bác giúp với ạ!

Phương án khác là makeshape sau đó makelinetype trong công cụ của express. Tạo thành linetype theo nhu cầu. Nhanh gọn mà không phải gõ lisp gì cả lại đúng ý của người tạo. Sai hay đúng là do người dùng vận dụng công cụ để tạo ra linetype thoai.

 

^_^


  • 1

#11 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 16 May 2017 - 11:02 AM

Theo mình biết linetype k quy định được là shape chỉ hiển thị ở vertex :) (bài trên)


  • 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


#12 Bee

Bee

    biết lệnh ddedit

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

Đã gửi 16 May 2017 - 01:49 PM

Theo mình biết linetype k quy định được là shape chỉ hiển thị ở vertex :) (bài trên)

Vẫn tạo được linetype mà. ^_^

 

https://drive.google...iew?usp=sharing

 

Nhưng sẽ phải tính toán hình shape thoai. ^_^


  • 0

#13 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 16 May 2017 - 03:50 PM

GD này k ở chế độ pub :) Bee sửa lại nhé. Để ket down về và sửa lại tư duy logic của mình :D


  • 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


#14 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 16 May 2017 - 04:16 PM

Theo cái sự biết của Duy thì tạo linetype sẽ chỉ được khi khoảng cách các shape là điều nhau. Nếu chỉ cho xuất hiện tại các đỉnh pline thì chưa thấy bao giờ.


  • 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


#15 Bee

Bee

    biết lệnh ddedit

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

Đã gửi 16 May 2017 - 11:32 PM

GD này k ở chế độ pub :) Bee sửa lại nhé. Để ket down về và sửa lại tư duy logic của mình :D

Hì chém gió cho vui mà ^_^


  • 0

#16 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 17 May 2017 - 10:01 AM

Hì chém gió cho vui mà ^_^

Thảo nào...! Lạnh đến ghê người :D 


  • 0

#17 Bee

Bee

    biết lệnh ddedit

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

Đã gửi 17 May 2017 - 07:49 PM

Thảo nào...! Lạnh đến ghê người :D

Forum không cho chém ah ^_^ 


  • 0

#18 Toan.CP

Toan.CP

    biết pan

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

Đã gửi 18 May 2017 - 10:15 AM

 

Quick code, số 2 vẫn là số e phải sửa. 
A để những đối tượng này vào một group, nếu muốn liền hoặc rời thì sử dụng tổ hợp phím Ctrl + Shift + A để bật/ tắt chế độ Group

(defun c:p1(/ e e1 s)
	(setq e (entlast) s (ssadd))
	(command ".pline") (while (/= (getvar 'cmdactive) 0) (command pause))
	(and
		(setq e1 (entlast))
		(not (equal e e1))
		(mapcar '(lambda(x)(entmake (list (cons 0 "CIRCLE")(cons 40 2)(cons 10 (cdr x))))) (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget e1)))
	)
(while (setq e (entnext e))
	(ssadd e s)
)
(command "-group" "_Create" "*" "" s "")
)

Cảm ơn Bác Nhiều nhiều lắm. Tuy không thể gán cao độ cho đường được. Nhưng nó gom chung đường tròn và Pl thành 1 đối tượng là em thấy thỏa mãn lắm lắm rồi. Hì hì Chúc bác và gia đình mạnh khỏe hạnh phúc!


  • 0