Chuyển đến nội dung
Diễn đàn CADViet
dinhtuongndvn1211

Nội suy cao độ trên chiếu bằng

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

Nội suy cao độ trên chiếu bằng

 

Em mong các pro giúp em viết 1 lips

Em có một hình chiếu bằng 2 cơ có cao trình +590m và +580m mái dốc là 1.5. một mặt cắt vuông góc với 2 cơ. từ bản vẽ mặt bằng đó em muốn nội suy cao độ của một điểm bất kỳ trên mái dốc tại vị trí mặt cắt nêu trên ( trong bản vẽ đính kèm của em là điểm A và điểm B). mong các pro giúp đỡ

noi suy cao độ.dwg

  • Vote giảm 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
10 giờ trước, dinhtuongndvn1211 đã nói:

Nội suy cao độ trên chiếu bằng

1: Đề bài thừa dữ liệu:  +. Chỉ cần 1 cao trình + mái dốc   / hoặc chỉ cần 2 cao trình là nội suy được.

2. Muốn có lisp thì phải mô tả được các bước 1, bước 2... bước n.... là làm cái gì.

Ví dụ: B1, pick điểm 1 , nhập cao trình +590, pick điểm 2 nhập +580

           B2: Pick A.... Rồi còn số liệu xuất ra như thế nào... vv... Phải mô tả cho kỹ thì chúng tôi mới có thể giúp được.

 

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

Đang rảnh, múc tới cho bạn vậy ^^

;lisp noi suy
(defun c:NS( / CD CD1 CD2 DIS1 DIS2 LST_VA OLD PL1 PL2 PT TEXT1 TEXT2)
(vl-load-com)
(setq lst_va '("osmode" "cmdecho"))
(setq old (mapcar 'getvar lst_va))
(mapcar 'setvar lst_va '(4 0))
(setq pl1 (car (entsel "\n Chon dinh (hoac chan) ta luy: "))
	  text1 (car (entsel "\n Chon text cao do tuong ung: "))
	  pl2 (car (entsel "\n Chon chan (hoac dinh) ta luy: "))
	  text2 (car (entsel "\n Chon text cao do tuong ung: "))
	  )
(if (and pl1 pl2 text2 text2)
	(progn
		(setq cd1 (atof (Replace_First_Comma_by_Dot (cdr (assoc 1 (entget text1)))))
			  cd2 (atof (Replace_First_Comma_by_Dot (cdr (assoc 1 (entget text2)))))
		
			;  pl1 (vlax-ename->vla-object pl1)
			;  pl2 (vlax-ename->vla-object pl2)
			)
		(while
			(setq pt (getpoint "\n Pick diem can noi suy cao do <Enter de thoat>: "))
				(setq pt (reverse (cdr (reverse pt)))
					  dis1 (distance pt (vlax-curve-getClosestPointTo pl1 pt))
					  dis2 (distance pt (vlax-curve-getClosestPointTo pl2 pt))
					  cd (+ cd1 (* dis1 (/ (- cd2 cd1) (+ dis1 dis2))))
					  )
				(princ (strcat "\n Cao do tai diem nay la: " (rtos cd 2 4)))
		)
	)
	(princ "\n Bam lung tung roi ^^ Lam lai!")
)
;;xong tra ve:
(mapcar 'setvar lst_va old)
(princ)
)
;;;===================================
(defun Replace_First_Comma_by_Dot (string_with_comma / STR STR1 STR2 VT)
(cond
	((setq vt (vl-string-position (ascii ",") string_with_comma))
		(setq str1 (substr string_with_comma 1 vt)
			  str2 (substr string_with_comma (+ vt 2))
			  str (strcat str1 "." str2)
			  )
			  )
	(t (setq str string_with_comma))
)
)

 

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 2/27/2018 tại 08:18, Danh Cong đã nói:

1: Đề bài thừa dữ liệu:  +. Chỉ cần 1 cao trình + mái dốc   / hoặc chỉ cần 2 cao trình là nội suy được.

2. Muốn có lisp thì phải mô tả được các bước 1, bước 2... bước n.... là làm cái gì.

Ví dụ: B1, pick điểm 1 , nhập cao trình +590, pick điểm 2 nhập +580

           B2: Pick A.... Rồi còn số liệu xuất ra như thế nào... vv... Phải mô tả cho kỹ thì chúng tôi mới có thể giúp được.

 

cảm ơn bác đã góp ý lần sau e sẽ miêu tả rõ hơn

 

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 2/28/2018 tại 09:22, hiepttr đã nói:

Đang rảnh, múc tới cho bạn vậy ^^


;lisp noi suy
(defun c:NS( / CD CD1 CD2 DIS1 DIS2 LST_VA OLD PL1 PL2 PT TEXT1 TEXT2)
(vl-load-com)
(setq lst_va '("osmode" "cmdecho"))
(setq old (mapcar 'getvar lst_va))
(mapcar 'setvar lst_va '(4 0))
(setq pl1 (car (entsel "\n Chon dinh (hoac chan) ta luy: "))
	  text1 (car (entsel "\n Chon text cao do tuong ung: "))
	  pl2 (car (entsel "\n Chon chan (hoac dinh) ta luy: "))
	  text2 (car (entsel "\n Chon text cao do tuong ung: "))
	  )
(if (and pl1 pl2 text2 text2)
	(progn
		(setq cd1 (atof (Replace_First_Comma_by_Dot (cdr (assoc 1 (entget text1)))))
			  cd2 (atof (Replace_First_Comma_by_Dot (cdr (assoc 1 (entget text2)))))
		
;  pl1 (vlax-ename->vla-object pl1)
;  pl2 (vlax-ename->vla-object pl2)
			)
		(while
			(setq pt (getpoint "\n Pick diem can noi suy cao do <Enter de thoat>: "))
				(setq pt (reverse (cdr (reverse pt)))
					  dis1 (distance pt (vlax-curve-getClosestPointTo pl1 pt))
					  dis2 (distance pt (vlax-curve-getClosestPointTo pl2 pt))
					  cd (+ cd1 (* dis1 (/ (- cd2 cd1) (+ dis1 dis2))))
					  )
				(princ (strcat "\n Cao do tai diem nay la: " (rtos cd 2 4)))
		)
	)
	(princ "\n Bam lung tung roi ^^ Lam lai!")
)
;;xong tra ve:
(mapcar 'setvar lst_va old)
(princ)
)
;;;===================================
(defun Replace_First_Comma_by_Dot (string_with_comma / STR STR1 STR2 VT)
(cond
	((setq vt (vl-string-position (ascii ",") string_with_comma))
		(setq str1 (substr string_with_comma 1 vt)
			  str2 (substr string_with_comma (+ vt 2))
			  str (strcat str1 "." str2)
			  )
			  )
	(t (setq str string_with_comma))
)
)

 

bác có thể viết lại lips giùm em không. lips sau khi nội suy có thể xuất cao độ tại điểm đó không bác. và có thể nội suy cao độ liên tục mà không cẩn pick chân với đỉnh ta luy không ạ

  • Vote giảm 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
4 giờ trước, dinhtuongndvn1211 đã nói:

lips sau khi nội suy có thể xuất cao độ tại điểm đó không bác.

Nghĩa là tạo text cao độ ???

4 giờ trước, dinhtuongndvn1211 đã nói:

và có thể nội suy cao độ liên tục mà không cẩn pick chân với đỉnh ta luy không ạ

Bạn có nhầm nhọt vào đâu không? Hiện tại nó thế mà ^^

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

Uhm, thì tạo text vậy ^^

;lisp noi suy
(defun c:NS( / CD CD1 CD2 DIS1 DIS2 LST_VA OLD PL1 PL2 PT TEXT1 TEXT2)
(vl-load-com)
(setq lst_va '("osmode" "cmdecho"))
(setq old (mapcar 'getvar lst_va))
(mapcar 'setvar lst_va '(4 0))
(setq pl1 (car (entsel "\n Chon dinh (hoac chan) ta luy: "))
	  text1 (car (entsel "\n Chon text cao do tuong ung: "))
	  pl2 (car (entsel "\n Chon chan (hoac dinh) ta luy: "))
	  text2 (car (entsel "\n Chon text cao do tuong ung: "))
	  )
(if (and pl1 pl2 text2 text2)
	(progn
		(setq cd1 (atof (Replace_First_Comma_by_Dot (cdr (assoc 1 (entget text1)))))
			  cd2 (atof (Replace_First_Comma_by_Dot (cdr (assoc 1 (entget text2)))))
		
			;  pl1 (vlax-ename->vla-object pl1)
			;  pl2 (vlax-ename->vla-object pl2)
			)
		(while
			(setq pt (getpoint "\n Pick diem can noi suy cao do <Enter de thoat>: "))
				(setq pt (reverse (cdr (reverse pt)))
					  dis1 (distance pt (vlax-curve-getClosestPointTo pl1 pt))
					  dis2 (distance pt (vlax-curve-getClosestPointTo pl2 pt))
					  cd (+ cd1 (* dis1 (/ (- cd2 cd1) (+ dis1 dis2))))
					  )
				(princ (strcat "\n Cao do tai diem nay la: " (rtos cd 2 4)))
				(MakeText (trans pt 1 0) (rtos cd 2 2) 1 0 "L" nil nil nil nil)
		)
	)
	(princ "\n Bam lung tung roi ^^ Lam lai!")
)
;;xong tra ve:
(mapcar 'setvar lst_va old)
(princ)
)
;;;===================================
(defun Replace_First_Comma_by_Dot (string_with_comma / STR STR1 STR2 VT)
(cond
	((setq vt (vl-string-position (ascii ",") string_with_comma))
		(setq str1 (substr string_with_comma 1 vt)
			  str2 (substr string_with_comma (+ vt 2))
			  str (strcat str1 "." str2)
			  )
			  )
	(t (setq str string_with_comma))
)
)
;;;=======================================
(defun MakeText (point string Height Ang justify Style Layer Color xdata / Lst)
; Ang: Radial	
(setq Lst (list '(0 . "TEXT")
				(cons 8 (if Layer Layer (getvar "Clayer")))									
				(cons 62 (if Color Color 256))									
				(cons 10 point)									
				(cons 40 Height)									
				(cons 1 string)									
				(if Ang (cons 50 Ang))									
				(cons 7 (if Style Style (getvar "Textstyle")))									
				(cons -3 (if xdata (list xdata) nil)))				
				justify (strcase justify))	
				(cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))				
					  ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))				
					  ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))				
					  ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3)))))				
					  ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3)))))				
					  ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3)))))					
					  ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2)))))				
					  ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2)))))				
					  ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2)))))				
					  ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1)))))				
					  ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1)))))				
					  ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1)))))
					  )	
					  (entmakex Lst)
);end

 

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

Em thấy lisp này khá hay nhưng cho em hỏi thêm một chút:

1. Tỷ lệ ở đây là 1/1 nếu tỷ lệ khác thì mình xử lý như thế nào?

2. Thay vì chọn "Chon dinh (hoac chan) ta luy" là một đường line hoặc pline thì có thể chuyển sang chọn "điểm" được hay không? ví dụ điểm đầu, điểm cuối

3. Chế độ truy bắt điểm nó bị tắt, nên nếu chọn các điểm trên đường taluy thì hơi khó (dù đã cố bật nó lên nhưng khi sử dụng xong lệnh nó tắt mất) mong muốn lần sử dụng sau nó vẫn nhớ chế độ truy bắt điểm

4. Lisp này dành cho dân thủy lợi nội suy cao độ mái đập thì cứ gọi là ngon thôi rồi, mong muốn, hi vọng và đề nghị bác hiepttr ngâm cứu xem 3 ý nho nhỏ kia có phù hợp không? hehe

  • Vote giảm 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

@chien_lv : 

1. Ok

2. Như vậy thì chỉ nội suy trên đoạn thẳng nối 2 điểm pick hay sao?

3. Làm vậy để tránh bắn nhầm mà, bạn có thể shift+ phải chuột, hoặc là bạn mong muốn chế độ truy bắt là gì thì duyệt ...

 

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
17 giờ trước, chien_lv đã nói:

Em thấy lisp này khá hay nhưng cho em hỏi thêm một chút:

1. Tỷ lệ ở đây là 1/1 nếu tỷ lệ khác thì mình xử lý như thế nào?

2. Thay vì chọn "Chon dinh (hoac chan) ta luy" là một đường line hoặc pline thì có thể chuyển sang chọn "điểm" được hay không? ví dụ điểm đầu, điểm cuối

3. Chế độ truy bắt điểm nó bị tắt, nên nếu chọn các điểm trên đường taluy thì hơi khó (dù đã cố bật nó lên nhưng khi sử dụng xong lệnh nó tắt mất) mong muốn lần sử dụng sau nó vẫn nhớ chế độ truy bắt điểm

4. Lisp này dành cho dân thủy lợi nội suy cao độ mái đập thì cứ gọi là ngon thôi rồi, mong muốn, hi vọng và đề nghị bác hiepttr ngâm cứu xem 3 ý nho nhỏ kia có phù hợp không? hehe

Bạn sài thử, bắt buộc phải chọn đỉnh trước rồi mới đến chân, mình chưa biết cách để chọn "tùy tiện" như của bác @hiepttr ^^

 cái tỷ lệ bạn nói là độ dốc taluy hay tỷ lệ mái dốc trên hình chiếu bằng? nếu là tỷ lệ mái dốc trên chiếu bằng thì đâu có ảnh hưởng gì đâu nhỉ? Vì cơ bản vẫn là nội suy từ khoảng cách giữa các điểm trên bản vẽ nên tỷ lệ nào thì cũng như nhau chứ nhỉ?

NS.lsp

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
5 giờ trước, doductiep đã nói:

Bạn sài thử, bắt buộc phải chọn đỉnh trước rồi mới đến chân, mình chưa biết cách để chọn "tùy tiện" như của bác @hiepttr ^^

 cái tỷ lệ bạn nói là độ dốc taluy hay tỷ lệ mái dốc trên hình chiếu bằng? nếu là tỷ lệ mái dốc trên chiếu bằng thì đâu có ảnh hưởng gì đâu nhỉ? Vì cơ bản vẫn là nội suy từ khoảng cách giữa các điểm trên bản vẽ nên tỷ lệ nào thì cũng như nhau chứ nhỉ?

NS.lsp

Mình đã dùng lisp bạn sửa nhưng có cái mình không hiểu lắm đó là sau khi chọn các thông số đến chỗ chọn " chọn diem CD" thì không được  mình gửi hình minh họaUntitled.jpg.f503c427624f231802443f3300b25d15.jpg

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
8 giờ trước, hiepttr đã nói:

@chien_lv : 

1. Ok

2. Như vậy thì chỉ nội suy trên đoạn thẳng nối 2 điểm pick hay sao?

3. Làm vậy để tránh bắn nhầm mà, bạn có thể shift+ phải chuột, hoặc là bạn mong muốn chế độ truy bắt là gì thì duyệt ...

 

Có khi phải dùng thử và áp dụng vào công việc cụ thể thì mới có thể đưa ra thêm câu hỏi. Có lẽ về cơ bản lisp cũng đã đáp ứng được yêu cầu của người xin lisp rồi. 

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 Fri Mar 02 2018 tại 19:11, chien_lv đã nói:

Mình đã dùng lisp bạn sửa nhưng có cái mình không hiểu lắm đó là sau khi chọn các thông số đến chỗ chọn " chọn diem CD" thì không được  mình gửi hình minh họaUntitled.jpg.f503c427624f231802443f3300b25d15.jpg

bạn tạo ta 1 kiểu textstyle mới với chiều cao chữ khác 0 là ok nhé

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

×