Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu]Tính cao độ một điểm bất kỳ khi có cao độ cho trước


  • Please log in to reply
8 replies to this topic

#1 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 26 December 2011 - 02:15 PM

Nhờ các Member làm giúp theo yêu cầu sau để tìm cao độ :
1-Chọn điểm đã biết cao độ ( có thể nhập số hoặc click vào số có sẵn)
2-Chọn điểm cần tìm cao độ
3-Kết quả tìm được (ghi ra nơi mình cần ghi, hoặc thay thế 1 số có sẵn)
4-font chữ đồng nhất với bản vẽ đang dùng
5-Chỉ kết thúc lệnh khi nhấn Enter
6-Không bị bỏ chức năng bắt điểm khi đã dùng xong lệnh
Đường dẫn bản vẽ ví dụ : http://www.cadviet.c...3675_vd22_3.dwg
  • 0

#2 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 26 December 2011 - 03:05 PM

Đã có nhiều lisp như vậy rồi, bạn chịu khó tìm kiếm trước nhé :) Nếu k thấy thì ta bàn tiếp

Cụ thể là cũng đã tìm ra được một cái Lisp tương tự như thế. Nhưng không giống trường hợp của mình.
Cái Lisp tìm được nó thế này cơ :


(defun c:12 ( / pt p1 p01 p02 ent ecopy elev elev1 offset etype txth)
(setvar "osmode" 1)
(command "ucs" "w")
(setq pt (getpoint "\nPick reference point: ")
ent (entget(car(entsel "\nSelect elevation text: ")))
etype (cdr(assoc 0 ent))
txth (cdr(assoc 40 ent))
)
(if (/= etype "TEXT") (progn
(princ "\nThe elevation selection must be a TEXT entity")
(exit))
(setq elev (atof(cdr(assoc 1 ent))))
)
(command "layer" "m" "UNSUITABLE" "")
(while (setq p1(getpoint "\nPick offset point"))
(setq elev1 (+ elev (- (cadr p1) (cadr pt)))
offset (abs(- (car p1) (car pt)))
p01 (polar p1 (* 3.0 (/ pi 2)) txth)
p01 (polar p01 pi (* 0.9 txth))
p02 (polar p01 0 (* 1.6 txth))
ecopy (list (assoc 0 ent)
(cons 100 "AcDbEntity")
(cons 8 "UNSUITABLE")
(cons 100 "AcDbText")
(assoc 10 ent)
(assoc 40 ent)
(cons 1 (strcat "" (rtos elev1 2 2)))
(assoc 50 ent)
(assoc 41 ent)
(assoc 51 ent)
(assoc 7 ent)
(cons 71 0)
(cons 72 2)
(list 11 (car p01) (cadr p01) 0.0)
(list 210 0.0 0.0 1.0)
(cons 100 "AcDbText")
(cons 73 2)
)
)
(entmake ecopy)
(setq ecopy (list (assoc 0 ent)
(cons 100 "AcDbEntity")
(cons 8 "UNSUITABLE")
(cons 100 "AcDbText")
(assoc 10 ent)
(assoc 40 ent)
(cons 1 (strcat "" (rtos offset 2 2)))
(assoc 50 ent)
(assoc 41 ent)
(assoc 51 ent)
(assoc 7 ent)
(cons 71 0)
(cons 72 2)
(list 11 (car p02) (cadr p02) 0.0)
(list 210 0.0 0.0 1.0)
(cons 100 "AcDbText")
(cons 73 2)
)
)
(entmake ecopy)
(princ "\nPress ESC or SPACE bar to cancel")
)
(end_task)
)

-chọn điểm đã biết cao độ
-click chọn giá trị đã biết đó
-Chọn điểm cần tìm cao độ
Kết quả này khi tìm được nó ghi luôn tại điểm mình chọn
Bây giờ ý mình thế này:
- Sau khi chọn điểm cần tìm cao độ, kết quả sẽ ghi ra nơi mình muốn ghi
Mình cũng đã tìm nhiêu rùi, không được nên mới lập topic. Thông cảm nha :mellow:

Bài viết đã được chỉnh sửa nội dung bởi vantuan18nd: 26 December 2011 - 03:14 PM

  • 0

#3 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 26 December 2011 - 04:36 PM

Nhờ các Member làm giúp theo yêu cầu sau để tìm cao độ :
1-Chọn điểm đã biết cao độ ( có thể nhập số hoặc click vào số có sẵn)
2-Chọn điểm cần tìm cao độ
3-Kết quả tìm được (ghi ra nơi mình cần ghi, hoặc thay thế 1 số có sẵn)
4-font chữ đồng nhất với bản vẽ đang dùng
5-Chỉ kết thúc lệnh khi nhấn Enter
6-Không bị bỏ chức năng bắt điểm khi đã dùng xong lệnh
Đường dẫn bản vẽ ví dụ : http://www.cadviet.c...3675_vd22_3.dwg

Nhìn vào bản vẽ bạn upload lên thì không hiểu ý của bạn là gì?
Bạn upload 1 file dwg (trong đó viết thật cụ thể yêu cầu của bạn) lên đây và viết thật rõ yêu cầu của bạn nhé

Tue_NV sẽ xóa các bài viết không liên quan đến chủ đề này.
  • 0

#4 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 28 December 2011 - 11:44 AM

Nhìn vào bản vẽ bạn upload lên thì không hiểu ý của bạn là gì?
Bạn upload 1 file dwg (trong đó viết thật cụ thể yêu cầu của bạn) lên đây và viết thật rõ yêu cầu của bạn nhé

Tue_NV sẽ xóa các bài viết không liên quan đến chủ đề này.

Đây là câu hỏi của em. Em đã trình bày tất cả trong đó, nhờ các Member giúp đỡ.
http://www.cadviet.c.../3/0_vd22_2.dwg
  • 0

#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 28 December 2011 - 11:48 AM

Bạn chuyển Version xuống thấp hơn có thể đi, cao qua không vươn tới!
  • 0

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


#6 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 28 December 2011 - 01:39 PM

của em đây. xin lỗi các bác.
http://www.cadviet.c...3675_vd22_4.dwg
  • 0

#7 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 30 December 2011 - 08:19 AM

Bạn chuyển Version xuống thấp hơn có thể đi, cao qua không vươn tới!

Anh làm giúp em với
  • 0

#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 30 December 2011 - 11:49 AM

Đây là câu hỏi của em. Em đã trình bày tất cả trong đó, nhờ các Member giúp đỡ.
http://www.cadviet.c.../3/0_vd22_2.dwg

Dựa vào code đã viết cho bạn trước đó, Tue_NV viết quick code cho bạn.
Cách thức sử dụng tương tự như code mà Tue_NV viết cho bạn trước đó và đương nhiên là theo yêu cầu của bạn
Chúc vui


(defun C:TL3( / ss L te p1 p2 textmau P)
(initget "P")
(setq cdd (getreal "\nNhap cao do dau hoac go P de chon Text cao do dau :"))
(if (= cdd "P")
(setq cdd (atof (cdr(assoc 1 (entget(car(entsel "\n Pick chon Text cao do dau :")))))))
)

(setq p1 (getpoint "\n Chon diem thu nhat :"))

(while (setq p2 (getpoint p1 "\n Chon diem thu hai :"))
(setq L (+ cdd (- (cadr p2) (cadr p1))))

(initget "T")
(setq p (getpoint "\nPick diem chen Text hoac go T de chon Text :"))

(if (/= p "T")
(progn
(if (not textmau) (setq textmau (car(entsel "\nChon Text mau:"))))
(entmake (list (cons 0 "TEXT") (cons 1 (rtos L 2 2)) (assoc 40 (entget textmau))
(cons 10 p) (cons 11 p) (assoc 7 (entget textmau))
(assoc 8 (entget textmau))
))
)
(progn
(setq te (entget(car(entsel"\n Chon Text de gan ket qua :")))
te (subst (cons 1 (rtos L 2 2)) (assoc 1 te) te))
(entmod te)
)
)
);while
(princ)
)

  • 2

#9 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 30 December 2011 - 03:14 PM

Dựa vào code đã viết cho bạn trước đó, Tue_NV viết quick code cho bạn.
Cách thức sử dụng tương tự như code mà Tue_NV viết cho bạn trước đó và đương nhiên là theo yêu cầu của bạn
Chúc vui



(defun C:TL3( / ss L te p1 p2 textmau P)
(initget "P")
(setq cdd (getreal "\nNhap cao do dau hoac go P de chon Text cao do dau :"))
(if (= cdd "P")
(setq cdd (atof (cdr(assoc 1 (entget(car(entsel "\n Pick chon Text cao do dau :")))))))
)

(setq p1 (getpoint "\n Chon diem thu nhat :"))

(while (setq p2 (getpoint p1 "\n Chon diem thu hai :"))
(setq L (+ cdd (- (cadr p2) (cadr p1))))

(initget "T")
(setq p (getpoint "\nPick diem chen Text hoac go T de chon Text :"))

(if (/= p "T")
(progn
(if (not textmau) (setq textmau (car(entsel "\nChon Text mau:"))))
(entmake (list (cons 0 "TEXT") (cons 1 (rtos L 2 2)) (assoc 40 (entget textmau))
(cons 10 p) (cons 11 p) (assoc 7 (entget textmau))
(assoc 8 (entget textmau))
))
)
(progn
(setq te (entget(car(entsel"\n Chon Text de gan ket qua :")))
te (subst (cons 1 (rtos L 2 2)) (assoc 1 te) te))
(entmod te)
)
)
);while
(princ)
)

Cảm ơn rất nhiều .
  • 0