Đến nội dung


Hình ảnh

Đổi vị trí base point của block thế nào


  • Please log in to reply
16 replies to this topic

#1 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 09 September 2008 - 08:24 PM

Chưa gặp bao giờ, hôm nay gặp ko biết làm thế nào cả
Nhờ các bác chỉ cách đổi vị trí tâm của Block
  • 0

#2 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 09 September 2008 - 09:41 PM

Chưa gặp bao giờ, hôm nay gặp ko biết làm thế nào cả
Nhờ các bác chỉ cách đổi vị trí tâm của Block

Trước hết Bác phải nhớ tên cái block đó, Explode rồi Make Block, chọn lại tên Block đó, dùng Pick point để chọn vị trí tâm, Select objects, OK, Yes.
  • 0

#3 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 09 September 2008 - 09:48 PM

Trước hết Bác phải nhớ tên cái block đó, Explode rồi Make Block, chọn lại tên Block đó, dùng Pick point để chọn vị trí tâm, Select objects, OK, Yes.



Ôi trời. Mình có phải con gà đâu mà ko biết làm điều đó
Phiphi hãy chịu khó lên diễn đàn nhiều hơn nữa nhé.
Làm sao để đổi tâm của tất cả các Block cùng tên
  • 0

#4 gp14

gp14

    DO TUAN GIAP

  • Moderator
  • PipPipPipPipPipPipPip
  • 1860 Bài viết
Điểm đánh giá: 1120 (rất tốt)

Đã gửi 09 September 2008 - 10:38 PM

Chưa gặp bao giờ, hôm nay gặp ko biết làm thế nào cả
Nhờ các bác chỉ cách đổi vị trí tâm của Block

TH này mình cũng không để ý lắm, giải pháp tạm thời của mình là bedit rồi chèn điểm base point parameter (kết quả cũng tương tự như mình chèn pick point khi tạo block)
  • 0

#5 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 09 September 2008 - 10:45 PM

TH này mình cũng không để ý lắm, giải pháp tạm thời của mình là bedit rồi chèn điểm base point parameter (kết quả cũng tương tự như mình chèn pick point khi tạo block)


base point parameter? Em ko tin là có thể làm đc. Để mai lên công ty em thử xem sao
Thanks Bác
  • 0

#6 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 09 September 2008 - 11:37 PM

base point parameter? Em ko tin là có thể làm đc. Để mai lên công ty em thử xem sao
Thanks Bác

Bản thân điểm chèn của block chính là điểm có toạ độ (0 0 0) trong block. Vậy bạn chỉ cần vào block rồi move đối tượng đi một khoảng nào đó thì điểm chèn đối với block đó đã bị thay đổi đi còn gì.
  • 0

#7 traitimsat034

traitimsat034

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 10 September 2008 - 08:58 AM

Bản thân điểm chèn của block chính là điểm có toạ độ (0 0 0) trong block. Vậy bạn chỉ cần vào block rồi move đối tượng đi một khoảng nào đó thì điểm chèn đối với block đó đã bị thay đổi đi còn gì.

Mình cũng hay làm theo cách của bạn, đầu tiên vào bedit rồi vẽ một đoạn thẳng với gốc có toạ độ là (0,0) đó chính là điểm chèn của block, sau đó bạn có thể move cả block đến vị trí bạn muốn với điểm chèn block là gốc đường thẳng vừa vẽ.
  • 0

#8 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 10 September 2008 - 07:46 PM

Chưa gặp bao giờ, hôm nay gặp ko biết làm thế nào cả
Nhờ các bác chỉ cách đổi vị trí tâm của Block

Muốn thay đổi vị trí của tất cả các block trong bản vẽ mà ko làm thay đổi điểm chèn của block (yêu cầu quả là rắc rối :) ) Bạn có thể dùng thử lisp sau đây, có thể sửa để rotate block với một góc xác định mà ko động chạm thay đổi gì đến block cả.
(defun bocdt (ss1 c) (entget (ssname ss1 c)))
;;;======================================
(defun C:Mblk (/ ssld sstmp Pbase obj Goc Dis Ptmp1 Ptmp2)
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(Princ "\nChon 2 diem dinh huong di chuyen...")
(Setq Ptmp1 (getpoint "\nDiem thu nhat (diem goc) ..."))
(Setq Ptmp2 (getpoint
Ptmp1
"\nDiem thu 2 (chi huong va khoang cach di chuyen) ..."
)
Goc (angle Ptmp1 Ptmp2)
Dis (distance Ptmp1 Ptmp2)
)

(princ "Chon cac doi tuong block can di chuyen")
(setq ssld (ssget '((0 . "Insert")))
Count (sslength ssld)
i1 0
)
(while (<= i1 (1- Count))
(setq obj (bocdt ssld i1)
i1 (1+ i1)
Pbase (cdr (assoc 10 obj))
Pdes (polar Pbase goc dis)
)

(command "move" (cdr (assoc -1 obj)) "" Pbase pdes)
)
(setvar "osmode" osm)
)


Cái này dùng với những trường hợp "điểm chèn phải đi liền với đối tượng" (hố ga chẳng hạn - toạ độ hố ga thường lấy bằng cách lọc toạ độ block, di chuyển đối tượng trong block mà giữ nguyên điểm chèn thì đến lúc thi công...cống đặt một nơi, hố ga một nẻo :)
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#9 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 11 September 2008 - 06:46 AM

Bản thân điểm chèn của block chính là điểm có toạ độ (0 0 0) trong block. Vậy bạn chỉ cần vào block rồi move đối tượng đi một khoảng nào đó thì điểm chèn đối với block đó đã bị thay đổi đi còn gì.


Không thoả mãn! Chắc nataca ít sử dụng Block, nên đưa ra cách làm sai nguyên tắc
Bác gp14 nói đúng, em đã thử và làm đc với Block bình thường
Còn đối với block thuộc tính thì không đc (giả sử cốt cao độ)
Em sẽ thử cách của Snowman xem thế nào
Vậy mà mình cứ nghĩ có lệnh đổi base point
  • 0

#10 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 11 September 2008 - 07:09 AM

Muốn thay đổi vị trí của tất cả các block trong bản vẽ mà ko làm thay đổi điểm chèn của block (yêu cầu quả là rắc rối :) ) Bạn có thể dùng thử lisp sau đây, có thể sửa để rotate block với một góc xác định mà ko động chạm thay đổi gì đến block cả.

(defun bocdt (ss1 c) (entget (ssname ss1 c)))
;;;======================================
(defun C:Mblk (/ ssld sstmp Pbase obj Goc Dis Ptmp1 Ptmp2)
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(Princ "\nChon 2 diem dinh huong di chuyen...")
(Setq Ptmp1 (getpoint "\nDiem thu nhat (diem goc) ..."))
(Setq Ptmp2 (getpoint
Ptmp1
"\nDiem thu 2 (chi huong va khoang cach di chuyen) ..."
)
Goc (angle Ptmp1 Ptmp2)
Dis (distance Ptmp1 Ptmp2)
)

(princ "Chon cac doi tuong block can di chuyen")
(setq ssld (ssget '((0 . "Insert")))
Count (sslength ssld)
i1 0
)
(while (<= i1 (1- Count))
(setq obj (bocdt ssld i1)
i1 (1+ i1)
Pbase (cdr (assoc 10 obj))
Pdes (polar Pbase goc dis)
)

(command "move" (cdr (assoc -1 obj)) "" Pbase pdes)
)
(setvar "osmode" osm)
)


Cái này dùng với những trường hợp "điểm chèn phải đi liền với đối tượng" (hố ga chẳng hạn - toạ độ hố ga thường lấy bằng cách lọc toạ độ block, di chuyển đối tượng trong block mà giữ nguyên điểm chèn thì đến lúc thi công...cống đặt một nơi, hố ga một nẻo :)



Có lẽ phải nói thế này thì đúng hơn - thay đổi tâm (điểm chèn) của block mà không làm thay đổi vị trí của block (vị trí tương đối của block) với các đối tượng khác.
Code của bạn chưa tính đến trường hợp block bị scale, đặc biệt là vừa scale, vừa rotate và scale với hệ số âm
  • 0

#11 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 11 September 2008 - 07:19 AM

Có lẽ phải nói thế này thì đúng hơn - thay đổi tâm (điểm chèn) của block mà không làm thay đổi vị trí của block (vị trí tương đối của block) với các đối tượng khác.
Code của bạn chưa tính đến trường hợp block bị scale, đặc biệt là vừa scale, vừa rotate và scale với hệ số âm


Chính xác! Đối tg scale sẽ bị thay đổi vị trí
  • 0

#12 gp14

gp14

    DO TUAN GIAP

  • Moderator
  • PipPipPipPipPipPipPip
  • 1860 Bài viết
Điểm đánh giá: 1120 (rất tốt)

Đã gửi 12 September 2008 - 09:57 AM

Không thoả mãn! Chắc nataca ít sử dụng Block, nên đưa ra cách làm sai nguyên tắc
Bác gp14 nói đúng, em đã thử và làm đc với Block bình thường
Còn đối với block thuộc tính thì không đc (giả sử cốt cao độ)
Em sẽ thử cách của Snowman xem thế nào
Vậy mà mình cứ nghĩ có lệnh đổi base point

Block thường hay block thuộc tính thì cũng như nhau thôi. Với block khi bạn không tạo base point cho Block thì cad mặc định gốc 0,0,0 là điểm chèn cho nên khi bạn tạo base point parameter thì text thuộc tính sẽ giữ nguyên vị trí tương đối với base point còn các đối tượng khác sẽ bị move về điểm base point mặc định (gốc 0,0,0). Do đó, sau khi chèn base point parameter bạn phải dùng lệnh Battman để up lại cho block thuộc tính.
  • 0

#13 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 12 September 2008 - 07:27 PM

Có lẽ phải nói thế này thì đúng hơn - thay đổi tâm (điểm chèn) của block mà không làm thay đổi vị trí của block (vị trí tương đối của block) với các đối tượng khác.
Code của bạn chưa tính đến trường hợp block bị scale, đặc biệt là vừa scale, vừa rotate và scale với hệ số âm


Các bác đòi hỏi cao quá :) Em đâu fải SE pro như bác VNdesperados. em chỉ là dân CE thui, cách làm việc của em thế này, đang làm việc, gặp phải vấn đề gì cần lisp thì ngồi 5', 10' viết code xong là áp dụng ngay. Làm xong việc rồi gặp vấn đề khác lại viết lisp khác hoặc sửa lisp cũ, cốt sao dùng được là ổn rồi. Tính chất công việc của em là CAD thay fải, lisp tay trái. (Em mà ngồi coding mà sếp thấy là bị quát ngay :)) Lisp em post lên cũng như mã nguồn mở, bác nào có tg thì sửa lại cho hoàn thiện (Em nghĩ rằng chỉ cần sửa lại cho phù hợp với nhu cầu của mình là ổn, đỡ lằng nhằng). Bác Vndesperados SE pro viết một bộ công cụ hoàn chỉnh về block cho anh em dùng với ! :lol: (Em mới nhìn thấy cái dialog replace block của bác xong, hy vọng bác sớm có sản fẩm cho anh em dùng :)
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#14 3d.decor

3d.decor

    biết vẽ arc

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

Đã gửi 09 June 2011 - 07:43 AM

Muốn thay đổi vị trí của tất cả các block trong bản vẽ mà ko làm thay đổi điểm chèn của block (yêu cầu quả là rắc rối :) ) Bạn có thể dùng thử lisp sau đây, có thể sửa để rotate block với một góc xác định mà ko động chạm thay đổi gì đến block cả.

(defun bocdt (ss1 c) (entget (ssname ss1 c)))
;;;======================================
(defun C:Mblk (/ ssld sstmp Pbase obj Goc Dis Ptmp1 Ptmp2)
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(Princ "\nChon 2 diem dinh huong di chuyen...")
(Setq Ptmp1 (getpoint "\nDiem thu nhat (diem goc) ..."))
(Setq Ptmp2 (getpoint
Ptmp1
"\nDiem thu 2 (chi huong va khoang cach di chuyen) ..."
)
Goc (angle Ptmp1 Ptmp2)
Dis (distance Ptmp1 Ptmp2)
)

(princ "Chon cac doi tuong block can di chuyen")
(setq ssld (ssget '((0 . "Insert")))
Count (sslength ssld)
i1 0
)
(while (<= i1 (1- Count))
(setq obj (bocdt ssld i1)
i1 (1+ i1)
Pbase (cdr (assoc 10 obj))
Pdes (polar Pbase goc dis)
)

(command "move" (cdr (assoc -1 obj)) "" Pbase pdes)
)
(setvar "osmode" osm)
)


Cái này dùng với những trường hợp "điểm chèn phải đi liền với đối tượng" (hố ga chẳng hạn - toạ độ hố ga thường lấy bằng cách lọc toạ độ block, di chuyển đối tượng trong block mà giữ nguyên điểm chèn thì đến lúc thi công...cống đặt một nơi, hố ga một nẻo :)

Select objects: ; error: no function definition: BOCDT
bị lỗi rồi
bác nào rảnh xem hộ em
em dùng cad 2012
  • 0

#15 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 09 June 2011 - 08:17 AM

Chưa gặp bao giờ, hôm nay gặp ko biết làm thế nào cả
Nhờ các bác chỉ cách đổi vị trí tâm của Block

Lúc trước có viết cái này nhưng nay tìm không thấy pót lại nhé.

(defun c:dbl ()
(command "undo" "be")

(setq doituong1 (entsel "\nChon Block muon chinh diem chen"))
(while
(or
(null doituong1)
(/= "INSERT" (cdr (assoc 0 (entget (car doituong1)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq doituong1 (entsel "\nChon Block muon chinh diem chen"))
)

(command "ucs" "ob" doituong1)
(setq DIEMCHENMOI (getpoint "\n Chon diem chen moi cho Block nay :"))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(command "layer" "s" 0 "")
(setq doituong (car doituong1))
(setq doituong (entget doituong))
(setq TENKHOI (cdr (assoc 2 doituong)))
(setq TENKHOIMOI (strcat TENKHOI "TAOTHEM"))
(setq TYLEX (cdr (assoc 41 doituong)))
(setq TYLEY (cdr (assoc 42 doituong)))
(setq DIEMTINH (list (/ (car DIEMCHENMOI) TYLEX) (/ (cadr DIEMCHENMOI) TYLEY)))
(setq XDIEMTINH (car DIEMTINH))
(setq YDIEMTINH (cadr DIEMTINH))
(setq DAICHUAS (distance (list 0 0) DIEMTINH))
(setq GOCCHUAS (angle (list 0 0) DIEMTINH))
(setq DIEMCHENTUONGDOI (polar (LIST 0 0) GOCCHUAS DAICHUAS))
(command ".INSERT" TENKHOI (LIST 0 0) 1 1 0)
(Command "EXPLODE" "last" "")
(Command "Block" TENKHOIMOI DIEMCHENTUONGDOI "Previous" "")
(command "ucs" "p")


(setq xx (ssget "X" (list( cons 0 "INSERT") (cons 2 TENKHOI))))

(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DTs (ssname XX L))
(setq DTMs (entget DTs))
(command "ucs" "ob" DTs)
(setq TYLEX1 (cdr (assoc 41 DTMs)))
(setq TYLEY1 (cdr (assoc 42 DTMs)))
(setq DIEMDOI (list (* XDIEMTINH TYLEX1) (* YDIEMTINH TYLEY1)))

(setq DTMs (subst (cons 2 TENKHOIMOI) (assoc 2 DTMs) DTMs))
(entmod DTMs)
(setq DIEMDOI (trans DIEMDOI 1 0))
(setq DTMs (subst (cons 10 DIEMDOI) (assoc 10 DTMs) DTMs))
(entmod DTMs)
;(command "move" DTs "" (list 0 0) DIEMDOI)
(command "ucs" "p")
(setq L (1+ L))
)


(setvar "osmode" luubatdiem)
(Command "Purge" "B" TENKHOI "Y" "Y")
(command "rename" "b" TENKHOIMOI TENKHOI)
(command "undo" "end")

(princ (strcat "\nVua chinh tam cua block <" TENKHOI "> :" (itoa L) " doi tuong"))
(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ))

  • 2

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


#16 ponaparte2003

ponaparte2003

    biết vẽ rectang

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

Đã gửi 09 June 2011 - 09:33 AM

Chưa gặp bao giờ, hôm nay gặp ko biết làm thế nào cả
Nhờ các bác chỉ cách đổi vị trí tâm của Block

Bạn dùng lệnh edit block sau đó move điểm cần làm base mới về tọa độ 0,0 là được!
  • 0
Y=acosh(x/a)

#17 kanjichan

kanjichan

    biết pan

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

Đã gửi 09 November 2011 - 02:13 PM

http://www.cadviet.c...showtopic=38470
Các bác dùng cách của bác lp_hai thử xem nhe
  • 0