Đến nội dung


Hình ảnh

Cao độ trong cad bị làm tròn.


  • Please log in to reply
5 replies to this topic

#1 hongquan88

hongquan88

    biết zoom

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

Đã gửi 05 February 2013 - 11:17 AM

Chào các bạn, mình đang gặp tí vấn đề về cao độ, ví dụ như cao độ trên bản cad là 10, nhưng mình xem trong "Ctrl 1" thì nó hiển thị 9.81. Mình xuất thử tọa độ ra text để nhập nova thì vẫn chỉ là 10. Vậy các bạn giúp mình cách để đưa nó về lại 9.81 với. Vấn đề này mình hơi kém, xin các bạn giúp đỡ.
  • 0

#2 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 05 February 2013 - 02:16 PM

Chào các bạn, mình đang gặp tí vấn đề về cao độ, ví dụ như cao độ trên bản cad là 10, nhưng mình xem trong "Ctrl 1" thì nó hiển thị 9.81. Mình xuất thử tọa độ ra text để nhập nova thì vẫn chỉ là 10. Vậy các bạn giúp mình cách để đưa nó về lại 9.81 với. Vấn đề này mình hơi kém, xin các bạn giúp đỡ.

Lisp của bạn đây. Lệnh ct nhé. Hy vọng đúng ý bạn.
http://www.cadviet.c...change_text.lsp

(defun C:ct()
(setq taphop(ssget))
(setq soluong (sslength taphop))
(setq index 0)
(setq i 0)
(while (< index soluong)
(setq TEXT (entget (ssname taphop index)))
(setq KIEU(cdr(assoc 0 TEXT)))
(if (= KIEU "TEXT")
(progn
(setq i(1+ i))
(if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
(setq InsertPoint(cdr(assoc 10 TEXT)))
(setq InsertPoint(cdr(assoc 11 TEXT)))
)
(entmod (subst (cons 1 (rtos (caddr InsertPoint) 2 2)) (assoc 1 TEXT) TEXT))
)
)
(setq index (+ index 1))
)
(alert (strcat (rtos i 2 0) " objects changed"))
(princ)
)

  • 1

#3 hongquan88

hongquan88

    biết zoom

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

Đã gửi 05 February 2013 - 02:43 PM

Cám ơn bạn KangKung nhiều, chuẩn luôn đó bạn. Tiện thể cho mình hỏi thêm, cao độ đó lẽ ra là âm nhưng lại viết không có dấu trừ đằng trước, mình đã dùng cái lisp thêm ký tự, thêm dấu trừ đằng trước nhưng giá trị trong Cltr 1 vẫn là dương. Bạn giúp mình luôn nhé, cám ơn bạn.
  • 0

#4 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 05 February 2013 - 04:24 PM

Cám ơn bạn KangKung nhiều, chuẩn luôn đó bạn. Tiện thể cho mình hỏi thêm, cao độ đó lẽ ra là âm nhưng lại viết không có dấu trừ đằng trước, mình đã dùng cái lisp thêm ký tự, thêm dấu trừ đằng trước nhưng giá trị trong Cltr 1 vẫn là dương. Bạn giúp mình luôn nhé, cám ơn bạn.

Lisp mới sẽ thay đổi cao độ từ dương thành âm, âm thành dương. TEXT hiển thị sẽ tuỳ theo cao độ âm hay dương.
http://www.cadviet.c...e_text_rev1.lsp

(defun C:ct()
(command "OSMODE" 0)
(setq os(getvar "osmode"))
(setq taphop(ssget '(( 0 . "TEXT"))))
(setq soluong (sslength taphop))
(setq index 0)
(command "UNDO" "BE")
(while (< index soluong)
(setq TEXT (entget (ssname taphop index)))
(if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
(setq InsertPoint(cdr(assoc 10 TEXT)))
(setq InsertPoint(cdr(assoc 11 TEXT)))
)
(if (> (caddr InsertPoint) 0)
(setq newstring(strcat "-" (rtos (caddr InsertPoint) 2 2)))
(setq newstring(rtos (- 0 (caddr InsertPoint)) 2 2))
)
(entmod (subst (cons 1 newstring) (assoc 1 TEXT) TEXT))
(command "move" (ssname taphop index) "" (list 0 0 (caddr InsertPoint)) (list 0 0 (- 0 (caddr InsertPoint))))
(setq index (+ index 1))
)
(command "OSMODE" os)
(command "UNDO" "END")
(princ)
)
PS: Bạn làm bản vẽ đo sâu đúng không? Mấy bác đo sâu hay đưa điểm lên bản vẽ như này.
  • 1

#5 hongquan88

hongquan88

    biết zoom

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

Đã gửi 06 February 2013 - 10:28 AM

Thanks bạn nhiều lắm, mình đang làm đo sâu, tính khối lượng nạo vét ấy bạn. Một lần nữa, cảm ơn bạn đã giúp đỡ. Chúc sức khỏe và công tác tốt nhé.
  • 1

#6 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 06 February 2013 - 01:16 PM

Thanks bạn nhiều lắm, mình đang làm đo sâu, tính khối lượng nạo vét ấy bạn. Một lần nữa, cảm ơn bạn đã giúp đỡ. Chúc sức khỏe và công tác tốt nhé.

Lisp trên tuy chạy tốt nhưng vẫn còn vấn đề cần phải xử lý đó là: Nếu tập chọn có cả text biểu thị độ cao(dạng số) và text ghi chú (dạng chữ) thì các text dạng chữ sẽ bị thay đổi tuỳ theo positionZ của text này. Nếu người sử dụng vô tình chọn đối tượng có cả text ghi chú thì các text này sẽ bị mất và thay vào đó là text với nội dung là “0.00” (trong trường hợp Z=0). Lisp dưới đây đã khắc phục được vấn đề đó.
[/size][/size]
(defun C:ct()
(setq os(getvar "osmode"))
(command "OSMODE" 0)
(setq taphop(ssget '(( 0 . "TEXT"))))
(setq soluong (sslength taphop))
(setq index 0)
(command "UNDO" "BE")
(while (< index soluong)
(setq TEXT (entget (ssname taphop index)))
(if (= (read (cdr(assoc 1 TEXT))) (atof (cdr(assoc 1 TEXT))))
(progn
(if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
(setq InsertPoint(cdr(assoc 10 TEXT)))
(setq InsertPoint(cdr(assoc 11 TEXT)))
)
(if (> (caddr InsertPoint) 0)
(setq newstring(strcat "-" (rtos (caddr InsertPoint) 2 2)))
(setq newstring(rtos (- 0 (caddr InsertPoint)) 2 2))
)
(entmod (subst (cons 1 newstring) (assoc 1 TEXT) TEXT))
(command "move" (ssname taphop index) "" (list 0 0 (caddr InsertPoint)) (list 0 0 (- 0 (caddr InsertPoint))))
)
)
(setq index (+ index 1))
)
(command "OSMODE" os)
(command "UNDO" "END")
(princ)
)

  • 0