Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
diennv50

Xin viết lsp cad vẽ bo từ các đường thẳng

Các bài được khuyến nghị

lisp bo.dwg

Mình thi công trong mặt bằng rất rộng, và ô lưới thi công phức tạp. Hằng ngày sẽ thi công 1 khu theo ví dụ như file đính kèm. công việc của mình là bo kín khu vực thi công theo ngày. Nhờ các bạn giúp đỡ ah

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ví dụ trên mình đã đơn giản hóa rồi. Trên bình đồ của mình có hàng nghìn cột và hàng, không thể zoom lại để vẽ chữ nhật được vì lúc đó số cột và hàng quá nhỏ và quá xa. Mà phải zoom to lên chọn cột và hàng trước rồi tạo đường bo sau, hoặc làm lệnh trước rồi chọn cột và hàng sau....

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn thử xem được không nhé!

Yêu cầu cài Cad full (có tool express)

(defun C:00	(/ LTSG LTSLINE PNTMAX PNTMIN SSLINE)
	(defun *error* (msg)
		(if	Olmode
			(setvar 'osmode Olmode)
		)
		(if	(not (member msg '("*BREAK,*CANCEL*,*EXIT*")))
			(princ (strcat "\nError: " msg))
		)
		(princ)
	)
	(setq Olmode (getvar "OSMODE"))
	(setvar "OSMODE" 0)
	(setvar "CMDECHO" 0)
	(setq ssLine (ssget (list (cons 0 "LINE,LWPOLYLINE,POLYLINE"))))
	(if	ssLine
		(progn
			(setq LtsLine (acet-ss-to-list ssLine))
			(setq LtsG (LM:IntersectionsinList LtsLine))
			(if	(= (length LtsG) 4)
				(progn
					(setq PntMin (list (apply 'min (mapcar 'car LtsG)) (apply 'min (mapcar 'cadr LtsG))))
					(setq PntMax (list (apply 'max (mapcar 'car LtsG)) (apply 'max (mapcar 'cadr LtsG))))
					(command "rectang" PntMin PntMax)
					(vla-put-color (vlax-ename->vla-object (entlast)) 1)
				)
			)
		)
	)
	(setvar "OSMODE" Olmode)
	(princ)
)



(defun LM:Intersections	(obj1 obj2 mode / l r)
	(setq l (vlax-invoke obj1 'intersectwith obj2 mode))
	(repeat	(/ (length l) 3)
		(setq	r	(cons (list (car l) (cadr l) (caddr l)) r)
					l	(cdddr l)
		)
	)
	(reverse r)
)

(defun LM:IntersectionsinList	(lst / a l)
	(while (setq a (car lst))
		(foreach b (setq lst (cdr lst))
			(setq	l	(cons	(LM:Intersections
											(vlax-ename->vla-object a)
											(vlax-ename->vla-object b)
											acextendnone
										)
										l
							)
			)
		)
	)
	(apply 'append (reverse l))
)

 

 

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 14/9/2021 tại 17:50, thanhduan2407 đã nói:

Bạn thử xem được không nhé!

Yêu cầu cài Cad full (có tool express)


(defun C:00	(/ LTSG LTSLINE PNTMAX PNTMIN SSLINE)
	(defun *error* (msg)
		(if	Olmode
			(setvar 'osmode Olmode)
		)
		(if	(not (member msg '("*BREAK,*CANCEL*,*EXIT*")))
			(princ (strcat "\nError: " msg))
		)
		(princ)
	)
	(setq Olmode (getvar "OSMODE"))
	(setvar "OSMODE" 0)
	(setvar "CMDECHO" 0)
	(setq ssLine (ssget (list (cons 0 "LINE,LWPOLYLINE,POLYLINE"))))
	(if	ssLine
		(progn
			(setq LtsLine (acet-ss-to-list ssLine))
			(setq LtsG (LM:IntersectionsinList LtsLine))
			(if	(= (length LtsG) 4)
				(progn
					(setq PntMin (list (apply 'min (mapcar 'car LtsG)) (apply 'min (mapcar 'cadr LtsG))))
					(setq PntMax (list (apply 'max (mapcar 'car LtsG)) (apply 'max (mapcar 'cadr LtsG))))
					(command "rectang" PntMin PntMax)
					(vla-put-color (vlax-ename->vla-object (entlast)) 1)
				)
			)
		)
	)
	(setvar "OSMODE" Olmode)
	(princ)
)



(defun LM:Intersections	(obj1 obj2 mode / l r)
	(setq l (vlax-invoke obj1 'intersectwith obj2 mode))
	(repeat	(/ (length l) 3)
		(setq	r	(cons (list (car l) (cadr l) (caddr l)) r)
					l	(cdddr l)
		)
	)
	(reverse r)
)

(defun LM:IntersectionsinList	(lst / a l)
	(while (setq a (car lst))
		(foreach b (setq lst (cdr lst))
			(setq	l	(cons	(LM:Intersections
											(vlax-ename->vla-object a)
											(vlax-ename->vla-object b)
											acextendnone
										)
										l
							)
			)
		)
	)
	(apply 'append (reverse l))
)

 

 

Cảm ơn bạn nhiều. Tuy nhiên lisp của bạn chỉ đúng với các đường song song thẳng đứng, nằm ngang vuông góc với nhau, lại không thể dùng cho các đường thẳng chéo nhau. (các vùng kín hợp với nhau có thể tạo thành đa giác nhiều hơn 4 cạnh hoặc hình thoi, hình thang, tam giác ....)

  • Vote giảm 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
2 giờ trước, diennv50 đã nói:

Cảm ơn bạn nhiều. Tuy nhiên lisp của bạn chỉ đúng với các đường song song thẳng đứng, nằm ngang vuông góc với nhau, lại không thể dùng cho các đường thẳng chéo nhau. (các vùng kín hợp với nhau có thể tạo thành đa giác nhiều hơn 4 cạnh hoặc hình thoi, hình thang, tam giác ....)

Mình thấy các bạn yêu cầu thì đưa ra các trường hợp thật lý tưởng, xong có người viết rồi thì lại áp dụng vào thực tế toàn trên trời rơi xuống. Thật khổ cho người nào hỗ trợ. Bạn nên đưa file thực tế của bạn đang làm rồi nhờ người nào đó có thể hỗ trợ hoặc gửi họ ít phí họ hỗ trợ luôn

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×