Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#1681 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 07 March 2009 - 12:07 PM

cảm ơn bạn nhiều lắm. mình đã dùng thử nhưng mà lệnh này nó bắt mình phải chọn những 2 lần các đoạn thẳng cần nối, đầu tiên phải chọn sau đó đánh lệnh LJ sau đó lại chọn lại các đoạn cần nối, :undecided: liệu có cách nào chỉ cần đánh lệnh rồi chọn và enter là đuợc kô vậy bạn

Bận quá, chưa có thời gian sử cho bạn được. Bạn thử dùng cái này nhé :
(defun C:pj (/ a b list1)
(defun *error* (msg)
(command "_.undo" "_E")
(princ "\nError: ") (princ msg) (princ " ")
(setq *error* olderr)
(princ)
)
(setq olderr *error*)
;;;(setq b (ssget '((0 . "LINE") (0 . "LWPOLYLINE") (0 . "ARC") )))
(setq b (ssget '((-4 . ""))))
(setq a (ssname b 0))
(setq list1 (assoc 0 (entget a)))
(cond
((null a) (princ "\nNone object selected"))
((= (cdr list1) "LWPOLYLINE")
(command "_.Pedit" a "j" b "" ""))
(progn (command "_.Pedit" a "" "j" b "" ""))
)
(setq *error* olderr)
(princ)
)
  • 0

#1682 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 08 March 2009 - 09:56 AM

cảm ơn bạn nhiều lắm. mình đã dùng thử nhưng mà lệnh này nó bắt mình phải chọn những 2 lần các đoạn thẳng cần nối, đầu tiên phải chọn sau đó đánh lệnh LJ sau đó lại chọn lại các đoạn cần nối, :undecided: liệu có cách nào chỉ cần đánh lệnh rồi chọn và enter là đuợc kô vậy bạn

Chào bạn nguyênkhoadung98,
Bạn nhầm rồi, đâu cần chọn đối tượng trước khi nhập lệnh lJ. Bạn chỉ cần load lisp, gõ lệnh LJ rồi chọn các đường cần nối. Sau khi nối xong một pline, lisp sẽ hỏi bạn có muốn nối tiếp nữa hay không? nếu bạn yes lisp sẽ yêu cầu bạn chọn tiếp đường nữa và các đoạn cần nối. Cứ thế cho đến khi bạn chán khống muốn nối nữa mà thôi.
Cái lisp này có ưu điểm là bạn theo dõi được suốt quá trình nối mà không sợ nhầm lẫn đường nọ với đường kia. Nhất là khi trên bản vẽ của bạn có tới vài trăm cái đường lít nhít đó bạn ạ.
Nếu bạn chỉ muốn nhập một lần thì như bài trước mình đã nói bạn rất dễ nhầm lẫn. Nếu bạn chấp nhận thì chỉ cần sử dụng cái lisp lần trước là Ok mà.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1683 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 08 March 2009 - 11:06 AM

Chào bác phamthanhBinh
Việc đặt cố định điểm ghi Text cố định và chiều cao chữ cố định là hơi bị gò bó, chưa được theo ý muốn của người sử dụng. nên có thêm điểm đặt text và chiều cao chữ thì sẽ hợp ý với nguời sử dụng hơn.

Không phải góc dốc lớn hơn >pi/2 bạn sẽ thấy text bị lộn ngược đâu bác Bình ạ mà khi vẽ đường line từ phải qua trái (tức là điểm đầu nằm bên phải, điểm cuối nằm bên trái hay (Xdau>Xcuoi)
thì chắc chắn Text sẽ bị lộn ngược ở cả 2 trường hợp góc dốc >pi/2 và góc dốc nhỏ hơn pi/ 2
Như vậy bác phải bổ sung vào Lisp hàm if :
Nếu Xdau < Xcuoi thì làm theo trường hợp trên của bác (Text không bị lộn ngược)
Nếu Xdau > Xcuoi thì xử lý sao cho Text không bị lộn ngược

Bác xem điều đó có đúng không nhé?


Chào các bác Tue_nv, Tdvn, Sucuph.
Đây là cái lisp mình đã sửa theo ý bác Tue_nv.
Mọi người sử dụng thử và góp ý thêm nha.
(defun c:gocdoc ( / ent p1 cao_text sp ep ang dodoc thap_phan)
(vl-load-com)
(setq ent (entsel "\nChon mai doc:"))
(setq cao_text 0.5
thap_phan 2
p1 (cadr ent)
ent (car ent)
sp (vlax-curve-getStartPoint ent)
ep (vlax-curve-getEndPoint ent)
ang (angle sp ep)
dodoc (* (abs (/ (sin ang) (cos ang))) 100)
dodoc (strcat (rtos dodoc 2 thap_phan) "%"))
(if (< (car sp) (car ep))
(command "_.text" (getpoint "\n Nhap diem dat text") (Getreal "\n Nhap chieu cao text : ") (/ (* ang 180) pi)(strcat " Do doc mai la " dodoc))
(if (> (car sp) (car ep))
(command "_.text" (getpoint "\n Nhap diem dat text") (Getreal "\n Nhap chieu cao text : ") (+ 180 (/ (* ang 180) pi)) (strcat " Do doc mai la " dodoc))
(command "_.text" (getpoint "\n Nhap diem dat text") (Getreal "\n Nhap chieu cao text : ") 90 (strcat " Do doc mai la " dodoc))
)
)
)
Các bác lưu ý giùm trường hợp đường thẳng đứng Xđầu bằng Xcuối. Khi đó không rõ trong chuyên môn thì gọi đó là độ dốc gì? Hiện tại mình cứ để giá trị text là kết quả của biến dodoc, nhưng nó không nhất quán được do biến này dựa trên hàm tang là không xác định khi góc là bội lẻ của pi/2. Vậy nên nếu có thuật ngữ chuyên môn chỉ cái độ dốc oái oăm này thì các bác nhập béng nó vào trong nội dung text thể hiện là OK.
Ý mình như vậy, các bác cho thêm ý kiến nhé vì mình là dân cơ khí nên chịu mấy cái thuật ngữ chuyên ngành xây dựng cầu đường này.
Chúc các bác khỏe và vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1684 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 08 March 2009 - 02:09 PM

Chào các bác Tue_nv, Tdvn, Sucuph.
Đây là cái lisp mình đã sửa theo ý bác Tue_nv.
Mọi người sử dụng thử và góp ý thêm nha.

(defun c:gocdoc ( / ent p1 cao_text sp ep ang dodoc thap_phan)
(vl-load-com)
(setq ent (entsel "\nChon mai doc:"))
(setq cao_text 0.5
thap_phan 2
p1 (cadr ent)
ent (car ent)
sp (vlax-curve-getStartPoint ent)
ep (vlax-curve-getEndPoint ent)
ang (angle sp ep)
dodoc (* (abs (/ (sin ang) (cos ang))) 100)
dodoc (strcat (rtos dodoc 2 thap_phan) "%"))
(if (< (car sp) (car ep))
(command "_.text" (getpoint "\n Nhap diem dat text") (Getreal "\n Nhap chieu cao text : ") (/ (* ang 180) pi)(strcat " Do doc mai la " dodoc))
(if (> (car sp) (car ep))
(command "_.text" (getpoint "\n Nhap diem dat text") (Getreal "\n Nhap chieu cao text : ") (+ 180 (/ (* ang 180) pi)) (strcat " Do doc mai la " dodoc))
(command "_.text" (getpoint "\n Nhap diem dat text") (Getreal "\n Nhap chieu cao text : ") 90 (strcat " Do doc mai la " dodoc))
)
)
)
Các bác lưu ý giùm trường hợp đường thẳng đứng Xđầu bằng Xcuối. Khi đó không rõ trong chuyên môn thì gọi đó là độ dốc gì? Hiện tại mình cứ để giá trị text là kết quả của biến dodoc, nhưng nó không nhất quán được do biến này dựa trên hàm tang là không xác định khi góc là bội lẻ của pi/2. Vậy nên nếu có thuật ngữ chuyên môn chỉ cái độ dốc oái oăm này thì các bác nhập béng nó vào trong nội dung text thể hiện là OK.
Ý mình như vậy, các bác cho thêm ý kiến nhé vì mình là dân cơ khí nên chịu mấy cái thuật ngữ chuyên ngành xây dựng cầu đường này.
Chúc các bác khỏe và vui.

Rất cảm ơn bác PhamThanhBinh và bác Tdvn.
Code trên chạy ngon lành.
Mình thấy hàm góc vẽ của bác Tdvn cực kì hay có thể xử lý cho Text quay đầu lên trên trong mọi trường hợp.
Nó làm cho Code trên trở nên gọn gàng hơn, khỏi cần lấy ra giá trị Xdau hay Xcuoi của Line gì hết chỉ cần kết hợp một hàm
(defun gocve( goc)
(if (and (> goc 90.0) (< goc 270.0)) (+ goc 180.0) goc)
)
và một dòng lệnh ghi Text tại điểm p, độ cao h, góc nghiêng g
(command "_.text" p h (gocve g) text)

Nó sẽ thay thế cho các dòng này :
(if (< (car sp) (car ep))
(command "_.text" (getpoint "\n Nhap diem dat text") (Getreal "\n Nhap chieu cao text : ") (/ (* ang 180) pi)(strcat " Do doc mai la " dodoc))
(if (> (car sp) (car ep))
(command "_.text" (getpoint "\n Nhap diem dat text") (Getreal "\n Nhap chieu cao text : ") (+ 180 (/ (* ang 180) pi)) (strcat " Do doc mai la " dodoc))
(command "_.text" (getpoint "\n Nhap diem dat text") (Getreal "\n Nhap chieu cao text : ") 90 (strcat " Do doc mai la " dodoc))
)
)
Mình đã thử thay thế những dòng Code ở trên rồi, chạy tuyệt vời. Một lần nữa cám ơn bác Tdvn
Bác Bình thử chạy với hàm gocve nhé. Tuyệt lắm :undecided:
  • 0

#1685 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 09 March 2009 - 02:46 PM

Chào bạn nguyênkhoadung98,
Bạn nhầm rồi, đâu cần chọn đối tượng trước khi nhập lệnh lJ. Bạn chỉ cần load lisp, gõ lệnh LJ rồi chọn các đường cần nối. Sau khi nối xong một pline, lisp sẽ hỏi bạn có muốn nối tiếp nữa hay không? nếu bạn yes lisp sẽ yêu cầu bạn chọn tiếp đường nữa và các đoạn cần nối. Cứ thế cho đến khi bạn chán khống muốn nối nữa mà thôi.
Cái lisp này có ưu điểm là bạn theo dõi được suốt quá trình nối mà không sợ nhầm lẫn đường nọ với đường kia. Nhất là khi trên bản vẽ của bạn có tới vài trăm cái đường lít nhít đó bạn ạ.
Nếu bạn chỉ muốn nhập một lần thì như bài trước mình đã nói bạn rất dễ nhầm lẫn. Nếu bạn chấp nhận thì chỉ cần sử dụng cái lisp lần trước là Ok mà.
Chúc bạn vui.

Thành thật xin lỗi bạn tớ nhầm to rồi. lisp này của bạn là ok lắm rồi :undecided: , nhân tiện nhờ các bạn viết cho mình cái lisp để căn chỉnh text thẳng theo 1 đường ( cong hoac thang ) nào đó ( song song ) giống như là lệnh AL vậy. cụ thể như sau :
- đánh lệnh ( ao ( al va offset ) chẳng hạn )
- lisp sẽ hỏi text cần chỉnh và hỏi đuờng cần text song song theo
- hỏi khoảng cách offset giữa đường và text
- hết :cheers:
cảm ơn các bạn :cheers:
  • 0

#1686 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 09 March 2009 - 06:27 PM

Thành thật xin lỗi bạn tớ nhầm to rồi. lisp này của bạn là ok lắm rồi :undecided: , nhân tiện nhờ các bạn viết cho mình cái lisp để căn chỉnh text thẳng theo 1 đường ( cong hoac thang ) nào đó ( song song ) giống như là lệnh AL vậy. cụ thể như sau :
- đánh lệnh ( ao ( al va offset ) chẳng hạn )
- lisp sẽ hỏi text cần chỉnh và hỏi đuờng cần text song song theo
- hỏi khoảng cách offset giữa đường và text
- hết :cheers:
cảm ơn các bạn :cheers:

Xin lỗi bạn nguyenkhoadung98, cho mình hỏi lại một chút.
Ý bạn căn text theo đường cong là thế nào nhỉ? Nghĩa là text cũng uốn cong đi hay là text vẫn thẳng nhưng song song với tiếp tuyến tại điểm chọn bạn nhỉ? Cái vụ text cong thì mình chưa làm được trong cád bao giờ. Trong Corel hay photoshop thì còn biết một chút. Nếu có thể bạn nói luôn cho mình biết cách bạn làm thằng text cong trong Cad nhé. Qua đó mới có thể hình dung ra cách dùng lisp được bạn ạ.
Bạn đừng giận vì cái sự chưa biết của mình.
Nếu có thể bạn hãy post bản vẽ cái ý tưởng của bạn lên nhé.
So ....or.....ry.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1687 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 10 March 2009 - 11:21 AM

Xin lỗi bạn nguyenkhoadung98, cho mình hỏi lại một chút.
Ý bạn căn text theo đường cong là thế nào nhỉ? Nghĩa là text cũng uốn cong đi hay là text vẫn thẳng nhưng song song với tiếp tuyến tại điểm chọn bạn nhỉ? Cái vụ text cong thì mình chưa làm được trong cád bao giờ. Trong Corel hay photoshop thì còn biết một chút. Nếu có thể bạn nói luôn cho mình biết cách bạn làm thằng text cong trong Cad nhé. Qua đó mới có thể hình dung ra cách dùng lisp được bạn ạ.
Bạn đừng giận vì cái sự chưa biết của mình.
Nếu có thể bạn hãy post bản vẽ cái ý tưởng của bạn lên nhé.
So ....or.....ry.

cảm ơn bạn Binh đã quan tâm, mình chỉ cần nó song song với tiếp tuyến của đuờng cong tại điểm mình chọn thôi (các đuơng cong của mình nó chỉ hơi cong thôi gần như là thẳng vậy ). file up đây bạn ah.

http://www.cadviet.c...ntitled_116.jpg
  • 0

#1688 ForLogin

ForLogin

    biết pan

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

Đã gửi 11 March 2009 - 12:15 PM

Xin lỗi vì đã chen ngang, mình có vấn đề muốn hỏi một chút.
Hiện mình đang sử dụng Đánh cốt tự động bằng lisp DC của bạn Nguyen Hoang, nhưng mình gặp vấn đề như sau, trong bản vẽ mình hay dùng các tỷ lệ khác nhau (1/100, 1/50, 1/25...) nhưng mình chỉ dùng lisp này ở các mặt cắt có tỷ lệ trùng với của bản vẽ (giả sử là 1/100), ở các mặt cắt khác (giả như là 1/50, mình vẽ bằng cách scale 2) thì lisp này không dùng được nữa, các bạn có cách nào có câu hỏi xác định lỷ lệ trước được không? (mình gõ TYLE mà cad không hiểu lệnh này, set dym hiện hành khác cũng không được).
Mình nghĩ câu hỏi tỷ lệ này nên có giá trị mặc định để chỉ thay đổi khi cần thiết thôi, chứ mỗi lần dùng lại một lần xác định thì cũng hơi mất công. Hoặc sét tỷ lệ theo thông số của dim style hiện hành thì càng tốt.
Thz , hi vọng mọi người quan tâm vì mình hiện rất thích lisp này.
  • 0

#1689 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 March 2009 - 06:25 PM

cảm ơn bạn Binh đã quan tâm, mình chỉ cần nó song song với tiếp tuyến của đuờng cong tại điểm mình chọn thôi (các đuơng cong của mình nó chỉ hơi cong thôi gần như là thẳng vậy ). file up đây bạn ah.

http://www.cadviet.c...ntitled_116.jpg

Chào bạn nguyenkhoadung98,
Bạn dùng thử đoạn lisp này nhé. Nếu bạn thấy có gì chưa phù hợp hãy post lên để cùng trao đổi.
(defun C:AO ()
(setq text (entsel "\n Chon text can hieu chinh ")
lst1 (entget (car text))
p1 (cdr (assoc 10 lst1))
ln (entsel "\n Chon duong chuan ")
lst2 (entget (car ln))
p2 (cadr ln)
p3 (cdr (assoc 10 lst2))
gc (angle p2 p3)
h (getreal "\n Nhap khoang cach dat text : ")
)
;;; (setvar "pdmode" 3)
(if (= (cdr (assoc 0 lst2)) "LINE")
(progn
(if (and (< (* pi 0.5) gc) (> (* 1.5 pi) gc))
(setq gc (+ pi gc))
)
(setq p4 (polar p2 (+ (/ pi 2) gc) h))
(command "point" p4)
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 gc) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
)
(if (= (cdr (assoc 0 lst2)) "ARC")
(progn
(setq gc (+ pi gc))
(setq p4 (polar p2 gc h))
(command "point" p4)
(if (and (< pi gc) (> (* 2 pi) gc))
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (+ gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (- gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
)
)
)
)
Bạn lưu ý một số điểm về đoạn líp này như sau:
1/- Mình chưa viết phần check lại đối tượng chọn xem có đúng là text hay không nên khi lisp yêu cầu bạn chọn text thì bạn phải chọn đúng đối tượng là text, còn nếu bạn chọn đối tượng lá Mtext thì mã DXF của nó sẽ khác và kết quả lisp sẽ chạy sai.
2/- Mình mới viết phần chọn đường chuẩn là các line và các arc. Nếu bạn chọn đường chuẩn là các polyline, Mline, Lwpolyline thì lisp sẽ cho kết quả sai. Lẽ ra cần có việc kiểm tra xem đối tượng được chọn làm đường chuẩn có phải là line hay arc không nhưng mình lười chưa làm.
3/- Với đường chuẩn là cung tròn, mình luôn đặt text nằm bên ngoài cung (khoảng cách từ tâm cung tròn tới text lớn hơn bàn kính). Muốn nó nằm vào trong thì khi nhập khoảng cách bạn nhập một số âm.
4/- Với đường chuẩn là line, mình luôn đặt text nằm trên đường chuẩn. Muốn nó nằm dưới bạn cũng nhập khoảng cách là số âm.
5/- Lisp này cho bạn chỉnh mỗi lần một đối tượng text, nếu muốn chỉnh nhiều text thì cần cải tạo thêm một chút là được.
6/- Khi bạn chọn đường chuẩn cần lưu ý đặt điểm chọn trên đối tượng sao cho tương ứng với vị trí mà bạn muốn text vào. Cái này là do mình tiết kiệm thao tác khỏi phải chọn lại cái điểm đặt text sau khi chọn đường chuẩn thôi mà. Nếu bạn thấy không phù hợp thì mình sẽ sửa lại.
7/- Mình chỉ thay đổi điểm đặt và góc xoay của text nên các thuộc tính khác của nó vẫn giữ nguyên như nó vốn có. Do vậy cái thuộc tính Justify của text có thể làm cho bạn thấy text không song song với đường chuẩn cung tròn, nhất là khi chiều cao text lớn mà bán kính cung tròn lại nhỏ.

Với các đường chuẩn là polyline hay Spline thì việc lấy tiếp tuyến của nó phức tạp hơn khá nhiều do mã DXF của nó khá lôi thôi. Mình cũng đang thử nghiệm việc này nên chưa thể đưa vào cái lisp này được, mong bạn thông cảm.

Chúc bạn khỏe và vui.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1690 tdvn

tdvn

    biết lệnh rotate

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

Đã gửi 11 March 2009 - 06:50 PM

Với các đường chuẩn là polyline hay Spline thì việc lấy tiếp tuyến của nó phức tạp hơn khá nhiều do mã DXF của nó khá lôi thôi. Mình cũng đang thử nghiệm việc này nên chưa thể đưa vào cái lisp này được, mong bạn thông cảm.

Về lệnh này mình nghỉ bạn nên cho chọn một điểm ngoài đường chuẩn (phía cần đặt text) để được điểm thứ nhất, sau đó dùng chế độ bắt điểm vuông góc với đường chuẩn bạn sẽ được điểm thứ 2. Text bạn cần thể hiện sẽ vuông góc với đoạn thẳng này (tất nhiên sẽ // với đường chuẩn) và cách đường chuẩn bao nhiêu là việc khá dễ dàng. Cách làm này bạn luôn tìm được hướng // với đường chuẩn cho dù nó là line, pline, spline ... khỏi phải tìm mã dxf. Vấn đề sẽ đơn giản hơn nhiều, không cần truy xuất csdl của đối tượng. Vài gợi ý cùng bạn.Chúc bạn thành công.
  • 0

#1691 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 12 March 2009 - 01:14 AM

Về lệnh này mình nghỉ bạn nên cho chọn một điểm ngoài đường chuẩn (phía cần đặt text) để được điểm thứ nhất, sau đó dùng chế độ bắt điểm vuông góc với đường chuẩn bạn sẽ được điểm thứ 2. Text bạn cần thể hiện sẽ vuông góc với đoạn thẳng này (tất nhiên sẽ // với đường chuẩn) và cách đường chuẩn bao nhiêu là việc khá dễ dàng. Cách làm này bạn luôn tìm được hướng // với đường chuẩn cho dù nó là line, pline, spline ... khỏi phải tìm mã dxf. Vấn đề sẽ đơn giản hơn nhiều, không cần truy xuất csdl của đối tượng. Vài gợi ý cùng bạn.Chúc bạn thành công.

Chào bác tdvn,
Rất cám ơn sự gợi ý của bác, và đây là cái kết quả từ sự gợi ý này. Quả thật là với cách suy luận này thì hoàn toàn không phụ thuộc vào loại đường chuẩn và bài toán trở nên đơn giản hơn rất nhiều. Hy vọng rằng điều này sẽ đáp ứng được yêu cầu của bạn nguyenkhoadung98.
(defun C:ao ()
(setq Oldos (getvar "osmode"))
(setvar "osmode" 128)
(setq text (entsel "\n Chon text can hieu chinh ")
lst1 (entget (car text))
p1 (cdr (assoc 10 lst1))
ln (entsel "\n Chon duong chuan ")

p2 (getpoint "\n Chon diem phia dat text")
p3 (getpoint p2 "\n Lay diem tren duong chuan")
gc (angle p2 p3)
h (getreal "\n Nhap khoang cach dat text : ")
)
;;;(setvar "pdmode" 3)
(setq p4 (polar p3 (+ pi gc) h))
(command "point" p4)
(if (and (< pi gc) (> (* 2 pi) gc))
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (+ gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (- gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
)
(setvar "osmode" oldos)
)

@nguyenkhoadung98: Nếu bạn có nhu cầu hiệu chỉnh nhiều text trong một lần chạy lisp thì hãy post lên nhé, mình sẽ bổ sung. Lưu ý khi chọn điểm xác định phía đặt text cần phải chọn sao cho nó tương ứng với vị trí sẽ đặt text sau khi căn chỉnh.
  • 3
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1692 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 12 March 2009 - 10:14 AM

Chào bác tdvn,
Rất cám ơn sự gợi ý của bác, và đây là cái kết quả từ sự gợi ý này. Quả thật là với cách suy luận này thì hoàn toàn không phụ thuộc vào loại đường chuẩn và bài toán trở nên đơn giản hơn rất nhiều. Hy vọng rằng điều này sẽ đáp ứng được yêu cầu của bạn nguyenkhoadung98.

(defun C:ao ()
(setq Oldos (getvar "osmode"))
(setvar "osmode" 128)
(setq text (entsel "\n Chon text can hieu chinh ")
lst1 (entget (car text))
p1 (cdr (assoc 10 lst1))
ln (entsel "\n Chon duong chuan ")

p2 (getpoint "\n Chon diem phia dat text")
p3 (getpoint p2 "\n Lay diem tren duong chuan")
gc (angle p2 p3)
h (getreal "\n Nhap khoang cach dat text : ")
)
;;;(setvar "pdmode" 3)
(setq p4 (polar p3 (+ pi gc) h))
(command "point" p4)
(if (and (< pi gc) (> (* 2 pi) gc))
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (+ gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (- gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
)
(setvar "osmode" oldos)
)

@nguyenkhoadung98: Nếu bạn có nhu cầu hiệu chỉnh nhiều text trong một lần chạy lisp thì hãy post lên nhé, mình sẽ bổ sung. Lưu ý khi chọn điểm xác định phía đặt text cần phải chọn sao cho nó tương ứng với vị trí sẽ đặt text sau khi căn chỉnh.


hì cảm ơn bạn nhiều lắm, mình đã dùng thử và dùng rất tốt bạn ah, nhưng nó có 1 vấn đề như sau :
- sau khi thực hiện xong lệnh thì nó xuất hiện thêm 1 điểm bên cạnh text ( hic cái này rất là kô mong muốn )
và hi vọng bạn cải tiến nó sao cho nó có thể dùng đuợc cho nhiều text cug lúc :undecided:. cảm ơn bạn nhiều lắm.
  • 0

#1693 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 12 March 2009 - 11:26 AM

hì cảm ơn bạn nhiều lắm, mình đã dùng thử và dùng rất tốt bạn ah, nhưng nó có 1 vấn đề như sau :
- sau khi thực hiện xong lệnh thì nó xuất hiện thêm 1 điểm bên cạnh text ( hic cái này rất là kô mong muốn )
và hi vọng bạn cải tiến nó sao cho nó có thể dùng đuợc cho nhiều text cug lúc :undecided:. cảm ơn bạn nhiều lắm.

Chào bạn nguyenkhoadung98,
Cái điểm xuất hiện là do đoạn code (command "point" p4) mà ra. Mình viết đoạn code này cho mục tiêu kiểm tra lại điểm đặt của text cò đúng với khoảng cách nhập vào hay không. Nếu bạn không cần thì chỉ việc xóa đoạn code này đi hoặc vô hiệu hóa nó bằng các dấu ;;;; phía trước hàm. Ngoài ra bạn cũng có thể không hiển thị cái điểm này bằng cách đặt biến hệ thống pdmode về giá trị 1. (setvar "pdmode" 1)
Việc cải tiến để có thể chỉnh nhiều text trong một lần chạy mình sẽ làm và gửi bạn. Ráng chờ chút xíu.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1694 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 12 March 2009 - 12:54 PM

hì cảm ơn bạn nhiều lắm, mình đã dùng thử và dùng rất tốt bạn ah, nhưng nó có 1 vấn đề như sau :
- sau khi thực hiện xong lệnh thì nó xuất hiện thêm 1 điểm bên cạnh text ( hic cái này rất là kô mong muốn )
và hi vọng bạn cải tiến nó sao cho nó có thể dùng đuợc cho nhiều text cug lúc :undecided:. cảm ơn bạn nhiều lắm.

Chào bạn nguyenkhoadung98,
Lisp này mình đã sửa lại theo ý bạn. Bạn dùng thử nhé và hy vọng sẽ OK.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Check (/ans);;; Kiem tra dieu kien lap
(if (= ans "y")
(main text)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun main (text /)
(setq Oldos (getvar "osmode"))
(setvar "osmode" 128)
(setq text (entsel "\n Chon text can hieu chinh ")
lst1 (entget (car text))
p1 (cdr (assoc 10 lst1))
ln (entsel "\n Chon duong chuan ")

p2 (getpoint "\n Chon diem phia dat text")
p3 (getpoint p2 "\n Lay diem tren duong chuan")
gc (angle p2 p3)
h (getreal "\n Nhap khoang cach dat text : ")
)
;;;(setvar "pdmode" 3)
(setq p4 (polar p3 (+ pi gc) h))
;;;;(command "point" p4)
(if (and (< pi gc) (> (* 2 pi) gc))
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (+ gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (- gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
)
(setq sl (1+ sl))
(setvar "osmode" oldos)
(setq ans (getstring "\n Tiep tuc? [y or n] : "))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:ao (/ text ans sl oldos lst1 p1 p2 p3 p4 ln gc h)
(setq sl 0)
(main text)
(while (= ans "y")
(check ans)
)
(alert (strcat "Ban da chinh lai vi tri cua " (itoa sl) " text"))
(princ)
)

  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1695 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 12 March 2009 - 01:30 PM

Chào bạn nguyenkhoadung98,
Lisp này mình đã sửa lại theo ý bạn. Bạn dùng thử nhé và hy vọng sẽ OK.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Check (/ans);;; Kiem tra dieu kien lap
(if (= ans "y")
(main text)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun main (text /)
(setq Oldos (getvar "osmode"))
(setvar "osmode" 128)
(setq text (entsel "\n Chon text can hieu chinh ")
lst1 (entget (car text))
p1 (cdr (assoc 10 lst1))
ln (entsel "\n Chon duong chuan ")

p2 (getpoint "\n Chon diem phia dat text")
p3 (getpoint p2 "\n Lay diem tren duong chuan")
gc (angle p2 p3)
h (getreal "\n Nhap khoang cach dat text : ")
)
;;;(setvar "pdmode" 3)
(setq p4 (polar p3 (+ pi gc) h))
;;;;(command "point" p4)
(if (and (< pi gc) (> (* 2 pi) gc))
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (+ gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
(Progn
(setq lst1 (subst (cons 10 p4) (assoc 10 lst1) lst1))
(entmod lst1)
(setq lst1 (subst (cons 50 (- gc (/ pi 2))) (assoc 50 lst1) lst1))
(entmod lst1)
(entupd (car text))
)
)
(setq sl (1+ sl))
(setvar "osmode" oldos)
(setq ans (getstring "\n Tiep tuc? [y or n] : "))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:ao (/ text ans sl oldos lst1 p1 p2 p3 p4 ln gc h)
(setq sl 0)
(main text)
(while (= ans "y")
(check ans)
)
(alert (strcat "Ban da chinh lai vi tri cua " (itoa sl) " text"))
(princ)
)

cảm ơn bạn Binh rất nhiều, cho mình xin thêm 1 chút điều chỉnh nhé. bạn có thể đặt chế độ multi để lần sau mình chỉ cần chọn text, điểm đặt text và điểm trên đường chuẩn thôi đc kô còn chiều dài và đuờng cong thì vẫn thế ( vậy cho nhanh vì mình chỉ chỉnh trên 1 đuờng và khoảng cách đặt text là như nhau hết bạn ah :undecided: ), nếu đòi hỏi quá đáng mong bạn bỏ wa
  • 0

#1696 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 12 March 2009 - 01:38 PM

cảm ơn bạn Binh rất nhiều, cho mình xin thêm 1 chút điều chỉnh nhé. bạn có thể đặt chế độ multi để lần sau mình chỉ cần chọn text, điểm đặt text và điểm trên đường chuẩn thôi đc kô còn chiều dài và đuờng cong thì vẫn thế ( vậy cho nhanh vì mình chỉ chỉnh trên 1 đuờng và khoảng cách đặt text là như nhau hết bạn ah :cheers: ), nếu đòi hỏi quá đáng mong bạn bỏ wa

hic thêm nữa là sau khi thực hiện lệnh nó tự động bỏ hết snap của mình chỉ cho chọn mỗi cái perpendicular ( vuông góc ) thôi :undecided:(
  • 0

#1697 kts_k80

kts_k80

    biết zoom

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

Đã gửi 12 March 2009 - 01:38 PM

Mình cần viết một đoạn để người dùng nhập dữ liệu vào. nếu lười, thì enter chấp nhận giá trị mặc định. nếu nhập vào, giá trị ấy sẽ mặc định cho lần sau. Nhưng viết xong, đọc lại thấy lòng vòng như dở hơi. Bạn nào sửa hộ hoặc cho một đoạn khác với.
(if (= UDRL nil)(setq UDRL 1000)(setq UDRL UDR))
(setq UDR (getint (strcat "\nUNIT DRAW ? <" (rtos UDRL 2 0) "> :")))
(if (= UDR nil)(setq UDR UDRL))
  • 0

#1698 kts_k80

kts_k80

    biết zoom

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

Đã gửi 12 March 2009 - 01:50 PM

...trong bản vẽ mình hay dùng các tỷ lệ khác nhau (1/100, 1/50, 1/25...) nhưng mình chỉ dùng lisp này ở các mặt cắt có tỷ lệ trùng với của bản vẽ (giả sử là 1/100), ở các mặt cắt khác (giả như là 1/50, mình vẽ bằng cách scale 2) thì lisp này không dùng được nữa, các bạn có cách nào có câu hỏi xác định lỷ lệ trước được không?

Mình viết thế này, bạn xem thử. Mình lấy tên là FRA (viết tắt của frame) tức là vẽ luôn một cái khung, tạo mõt kiểu text, một kiểu dim, thiết lập tỉ lệ cho net khuất.vvv, khi cần loại tỉ lệ nào, bạn phang tỉ lệ ấy. mình viết lâu rồi, và để dễ chỉnh sửa, mìng cứ để nguyên con theo hàng, không gộp lại, nên không ngắn và đẹp mắt lắm...nhưng kệ thôi, hì
;-----------
(defun c:FRA ()
(setvar "EXPERT" 5)
(if (= nil (tblsearch "layer" "defpoints"))
(command "layer" "n" "defpoints" "c" "251" "defpoints" "")
)
(if (= nil (tblsearch "layer" "center"))
(command "layer" "n" "CENTER" "C" "251" "CENTER" "L" "CENTER" "CENTER" "LW" "0.09" "CENTER" "")
)
(command "layer" "C" "252" "0" "LW" "0.18" "0" "")
(smod)
(if (= PLAL nil)(setq PLAL 3)(setq PLAL PLA))
(setq PLA (getint (strcat "\nPAGE A? <" (rtos PLAL 2 0) "> :")))
(if (= PLA nil)(setq PLA PLAL))
(cond
((= PLA 0)(setq XPT 1154.94 YPT 830.92))
((= PLA 1)(setq XPT 830.92 YPT 559.99))
((= PLA 2)(setq XPT 583.95 YPT 386.0))
((= PLA 3) (setq XPT (* 1.41 283.91) YPT (* 1.41 196.91)))
((= PLA 4) (setq XPT 283.91 YPT 196.91))
)
;-------------------------------------------------------------------------------
;TAO BLOCK $UDR THAM CHIEU DON VI VE

(setq e (tblsearch "block" "$UDR"))
(if (= nil e)
(progn
(if (= UDRL nil)(setq UDRL 1000)(setq UDRL UDR))
(setq UDR (getint (strcat "\nUNIT DRAW ? <" (rtos UDRL 2 0) "> :")))
(if (= UDR nil)(setq UDR UDRL))

(entmake '((0 . "block")(2 . "$UDR")(70 . 64)(10 0 0 0)))
(entmake (list '(0 . "LINE")(cons 39 UDR) '(10 0 0 0) '(11 1000 0 0)))
(entmake '((0 . "endblk")))
(setvar "ltscale" (* 0.22 UDR))
)
(progn
(setq e (tblsearch "block" "$UDR"))
(setq UDR (cdr (assoc 39 (entget(cdr(assoc -2 e))))))
(setvar "ltscale" (* 0.22 UDR))
; (setvar "celtscale" (* 0.004 (* 0.22 UDR (/ SCD 100))))
)
)
;-------------------------------------------------------------------------------
;TAO BLOCK $DFAL DIMFAL

(setq e (tblsearch "block" "$DFAL"))
(if (= nil e)
(progn
(setq DFAL (/ 1000.0 UDR))
(if (= 1 UDR)(setq DFAL 1.0 DDEC 1)(setq DDEC 0))
(entmake '((0 . "block")(2 . "$DFAL")(70 . 64)(10 0 0 0)))
(entmake (list '(0 . "LINE")(cons 39 DFAL) '(10 0 0 0) '(11 1000 0 0)))
(entmake '((0 . "endblk")))
)
(progn
(setq e (tblsearch "block" "$DFAL"))
(setq DFAL (cdr (assoc 39 (entget(cdr(assoc -2 e))))))
)
)
;-------------------------------------------------------------------------------
(if (= SCDL nil)(setq SCDL "100")(setq SCDL SCDT))
(setq SCDT (getstring (strcat "\nSCALE DRAW 100,200,500... <" SCDL "> :")))
(if (= SCDT "")(setq SCDT SCDL))
(setq SCD (atof SCDT))
;-------------------------------------------------------------------------------
;tao textstyle

(setq TST (rtos SCD 2 0))
(setq TS (* 0.22 UDR (/ SCD 100))) ;tao textsize
(setvar "textsize" TS)
(FR1)
(setq DSC (* TS 0.5))
(FR2)
(setq e (tblsearch "style" TST))
(if (/= nil e)
(progn
(setvar "textstyle" TST)
(command "dimstyle" "r" TST)
)
)
;-------------------------------------------------------------------------------

;TAO KHUNG BAN VE

(SETVAR "OSMODE" 0)
(setq XPT (* 0.001 SCD UDR XPT) YPT (* 0.001 SCD UDR YPT))
(setq P0 (getpoint "\nBASE FRAM OR ENTER :"))
(if (/= nil p0)
(progn
(setq PC (list (+ (car P0) XPT) (+ (cadr P0) YPT)))
(command "rectangle" P0 PC)
(setq e0 (entlast))
(command "chprop" e0 "" "la" "defpoints" "")
(command "text" "j" "TL" P0 "0" (strcat "IN A" (rtos PLA 2 0) " ,TL : 1/" SCDT))
(setq e0 (entlast))
(command "chprop" e0 "" "layer" "defpoints" "")
(command "rectangle"
(list (+ (* 5 TS) (car P0)) (+ (* 0.5 TS) (cadr P0)))
(list (- (car PC) (* 0.5 TS)) (- (cadr PC) (* 0.5 TS)))
)
(setq e0 (entlast))
(command "chprop" e0 "" "c" "1" "lw" "0.4" "")

(setq TS (* 0.22 UDR (/ SCD 100))) ;tao textsize

)
(progn
(setq P0 (list 0 0 0))
(if (> 500 (distance (getvar "vsmin")(getvar "vsmax")))
(progn
(setq PC (list (+ (car P0) XPT) (+ (cadr P0) YPT)))
(command "rectangle" P0 PC)
(setq e0 (entlast))
(command "chprop" e0 "" "la" "defpoints" "")
(command
"zoom" P0 (list (+ (car P0) XPT) (+ (cadr P0) YPT))
"zoom" "0.9x"
)
(command "text" "j" "TL" P0 "0" (strcat "IN A" (rtos PLA 2 0) " ,TL : 1/" SCDT))
(setq e0 (entlast))
(command "chprop" e0 "" "layer" "defpoints" "")
(command "rectangle"
(list (+ (* 5 TS) (car P0)) (+ (* 0.5 TS) (cadr P0)))
(list (- (car PC) (* 0.5 TS)) (- (cadr PC) (* 0.5 TS)))
)
(setq e0 (entlast))
(command "chprop" e0 "" "c" "1" "lw" "0.4" "")
(setq TS (* 0.22 UDR (/ SCD 100))) ;tao textsize
)
)
)
)
;-------------------------------------------------------------------------------
;TAO KIEU NET DUT VA NET GACH

(setvar "ltscale" (* 0.22 UDR))
(setvar "celtscale" (* 0.004 (* 0.22 UDR (/ SCD 100))))


(rmod)
(princ "\n")
(princ)
)
;---------------------------------------------------------------------
(defun FR1 ()
(setq e (entget(tblobjname "style" (getvar "textstyle"))))
(setq e (subst (cons 2 TST) (assoc 2 e) e))
(setq e (subst (cons 40 TS)(assoc 40 e) e))
(setq e (subst (cons 41 0.7)(assoc 41 e) e))
; (setq e (subst (cons 3 "VAVOB.TTF") (assoc 3 e) e))
(setq e (subst (cons 3 "VAVOB__0.TTF") (assoc 3 e) e))
; (setq e (subst (cons 3 "ARIAL.TTF") (assoc 3 e) e))
(entmake e)
(setvar "textstyle" TST)
)
(defun FR2 ()
(if (= nil (tblobjname "block" "dimled"))
(progn
(entmake '((0 . "block")(2 . "dimled")(70 . 64)(10 70 0 0)));diem chen 70
(entmake '((0 . "polyline")))
(entmake '((0 . "vertex")(40 . 0)(41 . 0)(10 120 0 0)));bat dau tu 120
(entmake '((0 . "vertex")(10 0 0 0))) ;ve 0
(entmake '((0 . "vertex")(40 . 300)(41 . 0)(10 0 0 0)));mo do rong 300 tu 0
(entmake '((0 . "vertex")(10 70 0 0))) ;dai mui ten den 70 do rong 0
(entmake '((0 . "seqend")))
(entmake '((0 . "endblk")))
)
)
(if (= nil (tblobjname "block" "dim"))
(progn
(entmake '((0 . "block")(2 . "dim")(70 . 64)(10 0 0 0)))
(entmake '((0 . "polyline")))
(entmake '((0 . "vertex")(40 . 70)(41 . 70)(10 -60 -60 0)))
(entmake '((0 . "vertex")(10 60 60 0)))
(entmake '((0 . "seqend")))
(entmake '((0 . "endblk")))
)
)
(command
"dim" "setvar"
"dimsah" 1
"dim" "setvar"
"dimsoxd" 0
"dim" "setvar"
"dimblk1" "dim"
"dim" "setvar"
"dimblk2" "dim"
"dim" "setvar"
"dimldrblk" "dimled"
"dim" "setvar"
"dimasz" 2
"dim" "setvar"
"dimdli" 5
"dim" "setvar"
"dimexe" 1.25
"dim" "setvar"
"dimexo" 0
"dim" "setvar"
"dimasz" 0.01
"dim" "setvar"
"dimcen" 2.5
"dim" "setvar"
"dimtad" 1
"dim" "setvar"
"dimjust" 0
"dim" "setvar"
"dimgap" 1
"dim" "setvar"
"dimtix" 1
"dim" "setvar"
"dimtxt" 0.18
"dim" "setvar"
"dimtmove" 2
"dim" "setvar"
"dimupt" 0
"dim" "setvar"
"dimtofl" 1
"dim" "setvar"
"dimtih" 0
"dim" "setvar"
"dimrnd" 0
"dim" "setvar"
"dimtxsty" TST
"dim" "setvar"
"dimscale" DSC
"dim" "setvar"
"dimdec" DDEC
"dim" "setvar"
"dimlfac" DFAL
"save" TST "e"
)
)

;----------
  • 0

#1699 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 12 March 2009 - 05:23 PM

Mình cần viết một đoạn để người dùng nhập dữ liệu vào. nếu lười, thì enter chấp nhận giá trị mặc định. nếu nhập vào, giá trị ấy sẽ mặc định cho lần sau. Nhưng viết xong, đọc lại thấy lòng vòng như dở hơi. Bạn nào sửa hộ hoặc cho một đoạn khác với.
(if (= UDRL nil)(setq UDRL 1000)(setq UDRL UDR))
(setq UDR (getint (strcat "\nUNIT DRAW ? <" (rtos UDRL 2 0) "> :")))
(if (= UDR nil)(setq UDR UDRL))

Một ví dụ:
(if (not UDR0) (setq UDR0 1000))
(setq UDR (getint (strcat "\nUNIT DRAW <" (itoa UDR0) "> :")))
(if (not UDR) (setq UDR UDR0) (setq UDR0 UDR))

Bạn tham khảo thêm các lisp đã post trên diễn đàn sẽ thấy có một số thủ thuật khác nữa.
Good luck!
  • 0

#1700 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 12 March 2009 - 08:04 PM

cảm ơn bạn Binh rất nhiều, cho mình xin thêm 1 chút điều chỉnh nhé. bạn có thể đặt chế độ multi để lần sau mình chỉ cần chọn text, điểm đặt text và điểm trên đường chuẩn thôi đc kô còn chiều dài và đuờng cong thì vẫn thế ( vậy cho nhanh vì mình chỉ chỉnh trên 1 đuờng và khoảng cách đặt text là như nhau hết bạn ah :undecided: ), nếu đòi hỏi quá đáng mong bạn bỏ wa

Chào bạn nguyenkhoa dung98,
Yêu cầu của bạn không khó khăn gì, bạn có thể tự sửa đoạn lisp trên như sau:
1/- Cut dòng lisp: ln (entsel "\n Chon duong chuan ") trong main lisp Paste vào dưới dòng (setq sl 0) trong lisp AO. Trêm vào trước ln các ký tự (setq và cuối dòng ký tự ) thành dòng lisp hoàn chỉnh sau: (setq ln (entsel "\n Chon duong chuan "))
2/- Cut dòng lisp: h (getreal "\n Nhap khoang cach dat text : ") trong main lisp paste vào dưới dòng lisp trên và cũng thêm cácký tự như trên để thành dòng lisp hoàn chỉnh: (setq h (getreal "\n Nhap khoang cach dat text : "))
3/- Bạn hãy kiểm tra lại chế độ osnap của bạn trước khi chạy lisp nhé vì lisp đã trả biến hệ thống "osmode" về giá trị oldos ban đầu của bản vẽ rồi mà. Có thể là do bạn đã đặt giá trị biến này là 128 từ trước lúc chạy lisp rồi nên sau khi chạy nó mới chỉ còn một chế độ truy bắt perpencular bạn ạ.

Rất mong bạn đạt được mong muốn.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.