Đến nội dung


lp_hai

Đăng ký: 28 May 2010
Offline Đăng nhập: May 27 2015 10:00 AM
-----

#217297 [ yêu cầu ] lisp đo khoảng cách dán bào block att

Posted by lp_hai trong 26 October 2012 - 03:45 PM

bạn text thử thế nào

(defun c:muong(/ dz p1 p2 bl dis)
(setq dz (getvar "dimzin"))
(while (setq p1 (getpoint "\nchon diem 1:"))
(setq p2 (getpoint p1 "\nchon diem 2:")
bl (entget(entnext(entnext(car(entsel)))))
)
(setvar "dimzin" 4)
(setq dis (rtos (distance p1 p2) 2 2))
(setq bl (subst (cons 1 dis) (assoc 1 bl) bl))
(entmod bl)
)
(setvar "dimzin" dz)
(princ)
)

ở đây mình bỏ qua chọn phương vì mình nghĩ không cần thiết, và bạn có thể bật tắt F8 (chế độ othor) để chọn điểm như khi vẽ line vậy thôi.
  • 1


#206733 [Yêu cầu] Lisp Cộng các số trong Dim thành một công thức

Posted by lp_hai trong 19 July 2012 - 02:23 PM

Chắc là cộng dim ra con số tổng chứ hả? Code này chỉ cho ra kết quả tại dòng command line

(defun c:ccd(/ gtt dt sdt ent id)
(setq dt (ssget '((0 . "DIMENSION")))
sdt (sslength dt)
id 0
gtt 0
)
(repeat sdt
(setq
ent (ssname dt id)
id (1+ id)
gtt (+ gtt (gt1 ent) )
)
)
(princ gtt)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun gt1(ent / so)
(if (wcmatch(cdr(assoc 1 (entget ent)))"")
(setq so (cdr(assoc 42 (entget ent))))
(setq so (atof(cdr(assoc 1 (entget ent)))))
)
)

  • 1


#206567 Cách chỉnh 1000 mm = 1 đơn vị cad

Posted by lp_hai trong 18 July 2012 - 12:02 PM

Thật khó hiểu cho câu : 1000 Đv vẽ = 1 Đv cad??

Bạn phải hiểu rõ vấn đề: trong cùng một bản vẽ thì đơn vị của các đối tượng là như nhau.
Chỉ có 2 Bản vẽ khác nhau mới có thể có 2 đơn vị khác nhau, và khi bạn insert bản vẽ này sang bảng vẽ khác Cad sẽ dựa vào Đơn vị khác nhau này mà sẽ tự scale chúng lại.

VD: bản vẽ 1 bạn setup đơn vị là mm. trong đó bạn vẽ cái line dài 1000 đơn vị (có nghĩa là 1000mm)
Bản vẽ thứ 2 bạn setup đơn vị là m. Khi bạn insert cái BV 1 qua bên BV 2 thì kích thước của line đó còn có 1 đơn vị thôi

bạn có thể dùng cách này để giải quyết.
  • 1


#206349 Đố vui: làm sao plot được BV này

Posted by lp_hai trong 16 July 2012 - 03:38 PM

hhehe, đúng là không khó, vã lại nó có liên quan đến Block, mà cái thao tác "rút ruột" Block này cũng hay sữ dụng lắm, nên mình mới để ở đây.
  • 1


#206327 Đố vui: làm sao plot được BV này

Posted by lp_hai trong 16 July 2012 - 02:13 PM

Chào cả nhà, không biết mình post mục đố vui ở đây có vi phạm gì không, vì câu hỏi của mình cũng có liên quan đến Block. Mod có đi ngang qua mà thấy không hợp lý thì nhắc giùm em cái. :)
Từ ý tưởng là khóa bản vẽ, đầu tiên mình có 1 File cad, bây giờ gửi cho chủ đầu tư xem (đúng với nghĩa đen là chỉ được xem thôi). Mình vẫn gửi file cad, nhưng nội dung trong đó đã bị mình block lại với tùy chọn không cho explode, và chuyển qua layer depoint (cái này ae có thể áp dụng đối với những chủ đầu tư gà cad :) ). Bây giờ chẳn thể làm gì ngoài zoom pan bản vẽ. hheheh

Câu đố là làm sao lấy lại các nội dung trong đó để có thể làm việc bình thường và in ?
http://www.cadviet.c...91_drawing1.dwg

mời cả nhà thư giản
  • 1


#206317 [Yêu cầu ] Lisp Tự Động Phát Sinh Vùng Chọn Theo " UCS ảo "

Posted by lp_hai trong 16 July 2012 - 01:19 PM

1 Lips về lệnh SELECTSIMILAR
Command : gọi lệnh của Lips , đang view tầng 1, bôi chuột chọn đối tượng để hiện Grip box thì tại mặt bằng tầng 2-3-4-....-n các đối tượng nằm tại các vị trí tương ứng với các đối tượng vừa đc chọn ở tầng 1 sẽ cũng được chọn và hiện Grip box . vì bản chất của lệnh SELECTSIMILAR nên Lisp sẽ phải tự động loại ra các đối tượng nằm bên ngoài các "hình chữ nhật"
Nhớ chú ý khi UCS bị quay xiên đi hay các bản vẽ bị quay xiên nhé

Mình nhớ trước đây có bạn yêu cầu lisp chọn những dt có vị trí trương đồng ở nhiều Mặt bằng khác nhau, có viết cho riêng trường hợp bạn ấy yêu cầu, kiểu chọn đối tượng là (ssget "W"), bạn test thử có giống như vậy không?

(defun c:ss(/ dt lstp p01 p02 n id dtc p1 p2 stdc spt)
(setq dt (ssadd)
osm (getvar "osmode")
)
(setq p01(getpoint "\nchon diem goc 1:"))
(command "ucs" "n" p01)
(setvar "osmode" 0)
(while (setq p1(getpoint"\nchon doi tuong:"))
(setq p2(getcorner p1)
lstp (append (list p1 p2) lstp))
)
(setq spt (/(length lstp)2)
n 0)
(repeat spt
(setq dtc (ssget "W" (nth n lstp) (nth (+ n 1) lstp))
n (+ n 2)
)
(setq sdtc (sslength dtc)
id 0)
(repeat sdtc
(setq dt (ssadd (ssname dtc id) dt)
id (1+ id))
)
)
(setvar "osmode" osm)
;;;;
(while (setq p02 (getpoint "\nchon diem goc tiep theo:"))
(command "ucs" "n" p02)
(setvar "osmode" 0)
(setq n 0)
(repeat spt
(setq dtc (ssget "W" (nth n lstp) (nth (+ n 1) lstp))
n (+ n 2)
)
(setq sdtc (sslength dtc)
id 0)
(repeat sdtc
(setq dt (ssadd (ssname dtc id) dt)
id (1+ id))
)
)
(setvar "osmode" osm)
)
(command "ucs" "w")
(sssetfirst dt dt)
(princ)
)

  • 2


#206269 [Yêu cầu ] Lisp Xoay Viewport tùy ý

Posted by lp_hai trong 16 July 2012 - 09:05 AM

Bạn xem lại dòng này: AB trùng AC ==> view đc xoay 1 góc BAC ==> góc quay luôn dương (??). Mình viết theo kiểu Align space của cad:

(defun c:ACS(/ p1 p2 p3 goc vs)
(setq p1 (getpoint "\nChon Tam")
p2 (getpoint p1 "\nChon Phuong hien tai")
p3 (getpoint p1 "\nChon Phuong moi")
goc (-(angle p3 p1)(angle p2 p1))
vs (getvar "viewsize")
p1 (trans p1 1 0))
(command "ucs" "z" (/(* 180 goc)pi) "")
(command "plan" "")
(command "zoom" "c" (trans p1 0 1) vs)
(princ)
)

P/s Có bác lo cho topic này em sướng rồi , cảm ơn bác nhiều bạn mà viết như thế này là đã bỏ qua biết bao ý kiến của nhiều bác khác trong diễn đàn, mà cách giải quyết của họ có thể nhanh gọn và hay hơn của mình gấp nhiều lần. Bạn rút kinh nghiệm nhá!
  • 2


#205875 [Yêu cầu ] Lisp Xoay Viewport tùy ý

Posted by lp_hai trong 12 July 2012 - 05:19 PM

Chào các bác.
Em chưa biết nhiều về Ucs hay Plan lắm, nhưng thi thoảng thấy mấy anh trong phòng xoay view port bằng lệnh UCS rồi Plan gì đó (em chưa nhìn kịp) thì thấy cũng hơi lâu, Em thử chạy đoạn lisp của bác lp_hai thì thấy nhanh hơn, nhưng có điều nếu góc xoay là lẻ thì mình làm thế nào? Liệu có thể chọn góc xoay bằng cách pick 2 điểm không ạ? Em xin cảm ơn ạ!

Nếu bạn muốn dùng chuột chọn góc:


(defun c:AAS(/ goc dtz)
(setq dtz (ssget)
goc (getangle "\nangle: "))
(command "ucs" "z" (/(* -180 goc) pi)"")
(command "plan" "")
(command "zoom" "o" dtz "")
(princ)
)

  • 2


#205823 [Yêu cầu ] Lisp Xoay Viewport tùy ý

Posted by lp_hai trong 12 July 2012 - 02:20 PM

Theo em thì do bác NTD này ko diễn đạt đúng ý đồ thôi, em là một thợ vẽ nên thường dụng tới thằng này lắm, khi có một mặt bằng và muốn vẽ 4 mặt đứng xung quanh: thay vì phải copy ra một mặt bằng nữa rồi vẽ xong mặt đứng này lại phải quay cái mặt bằng vừa copy ra để vẽ tiếp cái khác===> vừa nặng máy vừa khó đối chiếu mặt đứng với MB
Vì vậy sữ dụng lệnh Plan để vẽ 4 mặt đứng nằm xung quanh cái MB. có lẽ đây là "View port bên Model" của bác ấy?!
Em xin góp một code để giảm phiền toái khi phải sữ dụng Plan nhiều. Lisp yêu cầu chọn đối tượng để zoom object và nhập vào góc quay. lệnh AS để thay đổi View, lệnh ASS để trở về Plan của UCS World

(defun c:AS(/ goc dtz)
(setq dtz (ssget)
goc (getreal "\nangle: "))
(command "ucs" "z" (* -1 goc) "")
(command "plan" "")
(command "zoom" "o" dtz "")
(princ)
)
(defun c:AsS()
(command "ucs" "")
(command "plan" "")
(princ)
)

  • 2


#204167 Đố vui

Posted by lp_hai trong 27 June 2012 - 10:38 AM

Theo như cái gợi ý của bác thì nó là đáp án rồi :) vì lệnh txtexp chỉ thự hiện được ở view 0 0 1 là nhìn từ trên xuống
Command: TXTEXP
Initializing...
View needs to be in plan (0 0 1).
  • 1


#203921 Đố vui

Posted by lp_hai trong 25 June 2012 - 11:55 AM

theo em nghĩ thì Đề của bác nên đổi lại là Tạo text như thế nào để ko dùng TXTEXP được.
Chứ bác đố text mà cho bằng hình vẽ thì hơi trừu tượng quá, (em ko tìm được đáp án của bác nên cứ nghĩ cái text màu trắng đó chắc ko phải là TEXT mà do bác hatch ??? >-<) hehehhe
  • 1


#203917 dim bị đứt rời

Posted by lp_hai trong 25 June 2012 - 11:33 AM

bạn chỉnh trong Dim style:
Hình đã gửi
  • 1


#203316 [Yêu cầu] Lisp tạo tỷ lệ cho Viewport và Lisp Copy base point.

Posted by lp_hai trong 19 June 2012 - 02:02 PM

- Viewport scale là hệ số tỷ lệ đơn vị vẽ của viewport đó so với model. hệ số này thay đổi ngay khi ta cuộn zoom chuột mà không khóa viewport. (command "zoom" "scale" "HesoTyle layout/model")
- Nếu chỉnh sửa như trong hình bạn post thì đó là sửa hệ số annotation scale của viewport, bạn nhầm lẫn 2 cái này. (setvar "cannoscale" "scale in ScaleList")


Bác Thai nói đúng nhưng chưa đủ lắm, bình thường em muốn chỉnh tỉ lệ của Viewport thì cũng chỉ mở bảng Properties rồi chọc ngoáy nó thôi, nếu thay đổi tại ô Standard scale thì đúng là làm thay đổi Annotation scale và ảnh hưởng đến những đối tượng có annotation. Nhưng chỉ thay đổi tại ô Custom scale thì annotation vẫn giữ nguyên bác ah.
  • 1


#203313 [Hỏi] Cách thay đổi giá trị cho 1 đối tượng bằng Lisp

Posted by lp_hai trong 19 June 2012 - 01:48 PM

em xin bổ sung: có thể dùng hàm Subtr để thay thế nội dung text, sau đó entmod ?
  • 1


#202985 Ko sử dụng được lệnh offset trong bản vẽ này?

Posted by lp_hai trong 15 June 2012 - 10:03 AM

Những đường Spline ko Offset được là do các điểm của Spline ko nằm trên cùng một mặt phẳng (Cad báo vậy), qua kiểm tra thì thấy đúng vậy,
Đầu tiên bạn chọn đường SPL đó, ở bảng Properties nhấp chuột vào mũi tên tại ô Fit points ở đây để kiểm tra từng điểm xem điểm nào có Fit point Z khác 0 thì sữa lại vào ô đó cho bằng 0 là ok.Hình đã gửi
  • 1