Đến nội dung


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

Viết lisp theo yêu cầu [phần 2]


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

#1681 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 06 September 2010 - 12:00 AM

Em đang tìm lisp thực hiện việc gióng các đường dim cho thẳng hàng (đứng và ngang). Lệnh này khi e dùng SpeedCad của anh Ghost thì nó có lệnh tắt là VD. Em tìm trên diển đàn nhưng ko thấy?? Mong các ACE giúp đỡ.

Thanks!!

Chào bạn nguyentieu,
Đây là lisp sắp xếp dim của bác nguyenhoanh, bạn dùng thử nhé.
http://www.cadviet.c...3333333333/124/
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1682 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 September 2010 - 07:13 AM

Chào bạn hdg2318,
Hề hề hề, cứ thế có phải dễ người dễ ta không hỉ.
Đây là cái tớ xào nấu ra từ cái bạn gửi. Bạn coi có dùng được không, có cần thêm mắm muối chi nữa thì bạn cứ thêm cho vừa miệng hỉ.
Bạn lưu ý rằng việc nhập text theo bảng của bạn phải nhập cho đàng hoàng, hàng ra hàng mà cột ra cột chớ có lèm nhèm thò ra thụt vô, nhấp lên nhỏm xuống là lisp nó chê đó. Khoảng rộng cột cần nhập ở đây chính là cái khoảng cách từ cốt thứ hai đến cột kết quả. Mình để cho bạn tùy nhập cho sướng, muốn chỗ mô cũng được . Hề hề hề.
Còn cái lisp bạn gửi là lisp chia chớ nhân cái chi đâu. Cái đó cũng không đúng với cái yêu cầu bạn post lắm vì nó chèn đúng vào chỗ số nhân chớ không cho ra cột kết quả khác như bạn post trên hình. Tuy nhiên với trình độ của bạn thì việc sửa nó chả khó gì mình để bạn tự làm nha.


(foreach num lsn1
(setq y (caddr (assoc 10 (entget (car num))))
k (cadr num)
)
(foreach num1 lsn2
(setq y1 (caddr (assoc 10 (entget (car num1))))
m (cadr num1)
)
(if (= y1 y)
(progn
(setq kq (* m k)
as (entget (car num1))
h (cdr (assoc 40 as))
g (cdr (assoc 50 as))
l (cdr (assoc 8 as))
p (assoc 10 as)
pt (list (+ wid (cadr p)) y1 (cadddr p))
)
(entmake (list (cons 0 "TEXT") (cons 1 (rtos kq 2 1)) (cons 10 pt) (cons 40 h) (cons 50 g) (cons 8 l)))
)
)
)
)
......

Chào bác Bình
Thấy đoạn code trên thì Tue_NV có góp ý đôi chút ạ :
Bạn lưu ý rằng việc nhập text theo bảng của bạn phải nhập cho đàng hoàng, hàng ra hàng mà cột ra cột chớ có lèm nhèm thò ra thụt vô, nhấp lên nhỏm xuống là lisp nó chê đó
Đúng là nhèm thò ra thụt vô, nhấp lên nhỏm xuống là lisp nó chê đó. Nhưng đúng hơn phải nói rằng Tung độ y của số ở cột thứ nhất phải đúng bằng tung độ y của số ở cột thứ hai thì Lísp mới chạy được thể hiện ở đoạn này của bác (if (= y1 y)..... . Tue_NV nghĩ xử lý cái này không khó lắm. Chỉ là việc sắp xếp lại các số theo thứ tự tung độ Y theo thứ tự mà thôi.

2. Là mình nên kiểm tra độ dài của 2 cột số do user chọn. Nếu số phần tử của cột thứ nhất không bằng số phần tử của cột thứ hai thì hiện thông báo

3. Tue_NV khuyên các bạn không nên sử dụng cách này để nhân 2 cột số bằng cách dùng Text mà nên sử dụng Table của CAD vì nó có nhiều ưu điểm hơn
  • 2

#1683 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 06 September 2010 - 07:43 AM

Chào bác Bình
Thấy đoạn code trên thì Tue_NV có góp ý đôi chút ạ :
Bạn lưu ý rằng việc nhập text theo bảng của bạn phải nhập cho đàng hoàng, hàng ra hàng mà cột ra cột chớ có lèm nhèm thò ra thụt vô, nhấp lên nhỏm xuống là lisp nó chê đó
Đúng là nhèm thò ra thụt vô, nhấp lên nhỏm xuống là lisp nó chê đó. Nhưng đúng hơn phải nói rằng Tung độ y của số ở cột thứ nhất phải đúng bằng tung độ y của số ở cột thứ hai thì Lísp mới chạy được thể hiện ở đoạn này của bác (if (= y1 y)..... . Tue_NV nghĩ xử lý cái này không khó lắm. Chỉ là việc sắp xếp lại các số theo thứ tự tung độ Y theo thứ tự mà thôi.

2. Là mình nên kiểm tra độ dài của 2 cột số do user chọn. Nếu số phần tử của cột thứ nhất không bằng số phần tử của cột thứ hai thì hiện thông báo

3. Tue_NV khuyên các bạn không nên sử dụng cách này để nhân 2 cột số bằng cách dùng Text mà nên sử dụng Table của CAD vì nó có nhiều ưu điểm hơn


Sao anh Tue_NV không diễn đạt những điều đó rõ hơn bằng 1 lisp đính kèm nữa nhỉ?
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#1684 congdung04

congdung04

    biết vẽ line

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

Đã gửi 06 September 2010 - 08:07 AM

Em có việc này nhờ các cao thủ, em đã search trên diễn đàn và biết được bác NguyenHoanh có viết một đoạn code mà khi pick chọn một DIM sẽ xuất ra text các thông số của DIM đó, ví dụ DIMSCALE........... nhưng giờ em muốn thay vì xuất ra text như thế các bác có thể viết giúp em một lisp mà sau khi pick chọn DIM đó sẽ ra một dòng nhắc người dùng các giá trị hiện tại (cụ thể em chỉ cần giá trị Dim scale overal) và yêu cầu nhập giá trị mới cần thay đổi. sau khi người dùng nhập thì sẽ áp dụng giá trị đó cho DIM.
Cảm ơn các bác rât nhiều.


sao không thấy bác nào giúp em?
  • 0

#1685 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 September 2010 - 08:23 AM

Sao anh Tue_NV không diễn đạt những điều đó rõ hơn bằng 1 lisp đính kèm nữa nhỉ?

Lisp đó đã có rồi nên mình không viết nữa
Nhan 2 cot so
với lại mình cũng ít dùng đến nó mà sử dụng Table vì nó ưu điểm hơn
  • 0

#1686 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 06 September 2010 - 09:00 AM

Mình đã xây dựng được code của lệnh Ironpat như thế này
Hình đã gửi

(DEFUN stretchblock()
(batdau)
(princ "chon doi tuong: ")
(setq ss0 (ssget))
(initget 1)
(setq hs (getreal "Cho biet he so STRETCH: "))
(setq P01 (getpoint "\nChon diem chen: "))
(delblock)
(command "-Block" "vkc_temp1" "0,0" ss0 "")
(command "-insert" "vkc_temp1" "0,0" "" "" "")
(setq sstt1 (entlast))
(setq sstt (ssget "l"))
(blockrectang)
(setq re1 (entlast))
(setq tt (entget re1))
(setq tt (vl-remove-if '(lambda (x) (/= 10 (car x))) tt))
(setq dinh1 (cdr (nth 0 tt)))
(setq dinh2 (cdr (nth 1 tt)))
(command "_.erase" "l" "")
(command "_.copy" sstt1 "" "0,0" "0,0")
(command "_.explode" "l")
(setq ss00 (ssget "p"))
(Command "_.Explode" sstt1)
(command "-Block" "vkc_temp1" "y" dinh1 ss00 "")
(command "line" dinh2 dinh1 "")
(setq re (ssget "l"))
(command "_.move" re "" dinh1 p01)
(command "_.rotate" re "" p01 "45")
(command "-insert" "vkc_temp1" "r" "45" p01 "" "")
(setq blgoc (entlast))
(Command "Explode" blgoc)
(setq bl (ssget "p"))
(command "-Block" "vkc_temp2" P01 re "")
(command "-Block" "vkc_temp3" P01 bl "")
(Command "-Insert" "vkc_temp3" P01 "" hs "")
(setq dt1 (entlast))
(Command "-Insert" "vkc_temp2" P01 "" hs "")
(Command "_.Explode" "l" "")
(setq dt2 (entlast))
(setq tt1 (entget dt2))
(setq tt1 (vl-remove-if '(lambda (x) (/= 10 (car x))) tt1))
(setq dinh11 (cdr (nth 0 tt1)))
(command "_.align" dt1 "" p01 dinh1 dinh11 dinh2 "" "y")
(command "_.erase" dt2 "")
(command "_.move" dt1 "" dinh1 p01)
(Command "_.Explode" "l")
(ketthuc)
(princ)
)
;**************************************************************
(defun c:stb ()
(stretchblock)
)

(defun batdau ()
(command "undo" "be")
(setvar "cmdecho" 0)
(while (/= (logand (getvar "cmdactive") 31) 0)(command pause))
)
;**************************************************************
(defun ketthuc ()
(command "undo" "e")
(setvar "cmdecho" 1)
)
;**************************************************************
(defun delblock ()
(Command "-Purge" "B" "vkc_temp1" "Y" "Y")
(Command "-Purge" "B" "vkc_temp2" "Y" "Y")
(Command "-Purge" "B" "vkc_temp3" "Y" "Y")
)
;**************************************************************
(defun blockrectang ()
(while (setq e (ssname sstt 0))
(setq sstt (ssdel e sstt)
tmp (vla-getboundingbox (vlax-ename->vla-object e) 'p1 'p3)
p1 (vlax-safearray->list p1)
p3 (vlax-safearray->list p3)
p1 (list (car p1) (cadr p1))
p3 (list (car p3) (cadr p3))
p2 (list (car p1) (cadr p3))
p4 (list (car p3) (cadr p1))
tmp (list
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 4)
(cons 70 1)
(cons 10 p1)
(cons 10 p2)
(cons 10 p3)
(cons 10 p4)
)
)
(entmake tmp)
)
)

Code cua mình có một số lỗi sau mà không biết khắc phục thế nào.
1. Nếu sử dụng cho đối tượng đã block thì chỉ dùng được 1 lần. Vì không explode được block đã scale theo trục.
2. không khống chế được hệ số stretch theo ý muốn được.
3. lệnh stb chỉ dử dụng được 4 lần là báo lỗi "FATAL ERROR: commands may not be nested more than 4 deep"
Mình mới học Autolisp nên còn gà quá code viết khá dài dòng do mình biết ít code quá. Các bạn giúp mình rút gọn code lại được không. Xin cám ơn !
  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1687 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 06 September 2010 - 12:08 PM

Chào bác Bình
Thấy đoạn code trên thì Tue_NV có góp ý đôi chút ạ :
Bạn lưu ý rằng việc nhập text theo bảng của bạn phải nhập cho đàng hoàng, hàng ra hàng mà cột ra cột chớ có lèm nhèm thò ra thụt vô, nhấp lên nhỏm xuống là lisp nó chê đó
Đúng là nhèm thò ra thụt vô, nhấp lên nhỏm xuống là lisp nó chê đó. Nhưng đúng hơn phải nói rằng Tung độ y của số ở cột thứ nhất phải đúng bằng tung độ y của số ở cột thứ hai thì Lísp mới chạy được thể hiện ở đoạn này của bác (if (= y1 y)..... . Tue_NV nghĩ xử lý cái này không khó lắm. Chỉ là việc sắp xếp lại các số theo thứ tự tung độ Y theo thứ tự mà thôi.

2. Là mình nên kiểm tra độ dài của 2 cột số do user chọn. Nếu số phần tử của cột thứ nhất không bằng số phần tử của cột thứ hai thì hiện thông báo

3. Tue_NV khuyên các bạn không nên sử dụng cách này để nhân 2 cột số bằng cách dùng Text mà nên sử dụng Table của CAD vì nó có nhiều ưu điểm hơn

Hề hề hề,
Chào bác Tue_NV,
Bác góp ý chí phải, song quả thực nó còn có những rắc rối khác, tỷ như cột 1 và cột 2 không có cùng số lượng đối tượng nhưng vẫn muốn có kết quả. Khi đó tại cái vị trí không có text ấy biết đàng mô mà nhân
Hơn nữa do chọn đối tượng theo hàm ssget nên có giời mới biết các đối tượng này đứng thứ mấy vì các thầy nhà ta thích sẽ chỉnh sửa tùm lum các số liệu này.
Vả lại cái việc sắp xếp lại dữ liệu theo tung độ, tuy không khó lắm như bác nói, nhưng vớ phải các cột có dăm anh trống hơ trống hoắc mà lại không trùng tung độ với nhau cũng có thể gây ra kết quả trật chìa bác ạ.
Chính vì nghĩ như vậy nên mình mới xài cái kiểu ni, cứ anh nào có đủ ở hai cột thì mới nhân còn không thì mặc thây nó, kệ các thầy muốn xử lý ra răng thì tùy. Bạn hdg2318 chớ có cười mình nghen.....

Cuối cùng nữa là như bác đã nhắc nhở là hổng nên xài ( cái ni mình đọc được từ bài post của bác trước khi làm lisp này cơ) nên mình mới viết để mà cấp cứu cho các trường hợp quá bí bách chưa xài được cái table của CAD mà thôi chứ chắc là chả có được ứng dụng bi nhiêu nên mình cũng lười nghĩ thêm cái vụ sắp xếp lại tập chọn bác ạ. Với bác có thể cái vụ sắp xếp này ngon chớ với mình cũng còn lúng túng lắm vì cái hàm vl-sort và mapcar, lambda mình vẫn cứ rối mù bác ạ, dùng nó lúc trúng lúc trật do chả hiểu hết về các biến, sợ đáo để. Túm lại cũng chỉ là bỏ khó chọn dễ thôi bác à. Cái tật lười này nó hại mình không ít rồi nhưng vẫn chửa bỏ được bác ạ.
Hề hề hề,......
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1688 nguyentieu

nguyentieu

    biết vẽ circle

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

Đã gửi 06 September 2010 - 11:57 PM

Chào bạn nguyentieu,
Đây là lisp sắp xếp dim của bác nguyenhoanh, bạn dùng thử nhé.
http://www.cadviet.c...3333333333/124/


Lisp này là giãn dim theo khoảng cách. E muốn dim thực hiện thao tác như trên hình e up kèm theo sau đây:

Hình đã gửi

Mong các ACE giúp đỡ!
  • 0

#1689 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 September 2010 - 06:53 AM

Hề hề hề,
Chào bác Tue_NV,
Bác góp ý chí phải, song quả thực nó còn có những rắc rối khác, tỷ như cột 1 và cột 2 không có cùng số lượng đối tượng nhưng vẫn muốn có kết quả. Khi đó tại cái vị trí không có text ấy biết đàng mô mà nhân
Hơn nữa do chọn đối tượng theo hàm ssget nên có giời mới biết các đối tượng này đứng thứ mấy vì các thầy nhà ta thích sẽ chỉnh sửa tùm lum các số liệu này.
Vả lại cái việc sắp xếp lại dữ liệu theo tung độ, tuy không khó lắm như bác nói, nhưng vớ phải các cột có dăm anh trống hơ trống hoắc mà lại không trùng tung độ với nhau cũng có thể gây ra kết quả trật chìa bác ạ.
Chính vì nghĩ như vậy nên mình mới xài cái kiểu ni, cứ anh nào có đủ ở hai cột thì mới nhân còn không thì mặc thây nó, kệ các thầy muốn xử lý ra răng thì tùy. Bạn hdg2318 chớ có cười mình nghen.....
--------
Hề hề hề,......

Chào bác Bình
Nếu ý của bác như vậy thì Tue_NV nghĩ rằng bác không nên sử dụng dòng code này (if (= y1 y) ..... bởi vì nó tuyệt đối quá phải không bác? Bác cho nó "li lai" đi 1 ít, "tương đối" thôi bác ạ, anh nào không vượt quá giới hạn cho phép thì mới thực thi câu lệnh sau hàm if.
Bác có thể thay dòng (= y1 y)
bằng dòng : (equal y y1 (cdr(assoc 40 (entget (car num1)))))
Nếu bác muốn thu hẹp "giới hạn cho phép" lại thì bác có thể nhân trị số (cdr(assoc 40 (entget (car num1))))) với hệ số K:rolleyes:

@CongDung04 : Bạn đã sử dụng lệnh DOV (DIMOVERRIDE) chưa? Hãy tìm kiếm lệnh này trên diễn đàn và tìm cách sử dụng nó. Tue_NV đã có vài bài viết về lệnh này rồi.

@nguyên tiêu : Lisp như điều bạn muốn đã có trên diễn đàn rồi. Bạn chịu khó Tìm kiếm vậy.

@PhamngocTu : Bạn có thể upload 1 file .dwg có minh họa đầy đủ dữ kiện input và kết quả output mà bạn muốn. Vậy nhé
  • 1

#1690 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 07 September 2010 - 10:15 AM

Cuối cùng thì mình cũng hoàn thành viết code cho lệnh Ironpat như mình đã trình bày ở trên.
Vấn đề này hình như không được mọi người quan tâm lắm nhưng mình vẫn port lên đây nếu ai có hứng thú thì sử dụng.
code mình viết khá tiện lợi khi sử dụng. Chỉ cần chọn đối tượng gốc, chọn điểm chèn, chọn hướng là ok.
đây là hình minh hoạ.
Hình đã gửi
còn đây là code

(defun nhapsolieu ()
(setq goc1 (getangle p01 "chon diem thu 2 theo huong bac: "))
(setq goc (/ (* goc1 180) pi))
(setq xulygoc (- 45 (/ goc 2)))
(setq gocra (/ (* pi xulygoc) 180))
(setq sina (sin gocra))
(setq cosa (sqrt (- 1 (expt sina 2))))
(setq tang (/ sina cosa))
(setq a (distance dinh2 dinh3))
(setq duongcheo (* a (sqrt 2)))
(setq b (/ duongcheo (* 2 tang)))
(setq anso (- b (/ duongcheo 2)))
(setq x (* anso 2))
(setq hs (+ (/ x duongcheo) 1))
)

(DEFUN stretchblock()
(batdau)
(princ "chon doi tuong: ")
(setq ss0 (ssget))
(initget 1)
(setq P01 (getpoint "\nChon diem chen: "))
(delblock)
(command "-Block" "vkc_temp1" "0,0" ss0 "")
(command "-insert" "vkc_temp1" "0,0" "" "" "")
(setq sstt1 (entlast))
(setq sstt (ssget "l"))
(blockrectang)
(setq re1 (entlast))
(setq tt (entget re1))
(setq tt (vl-remove-if '(lambda (x) (/= 10 (car x))) tt))
(setq dinh1 (cdr (nth 0 tt)))
(setq dinh2 (cdr (nth 1 tt)))
(setq dinh3 (cdr (nth 2 tt)))
(command "_.erase" "l" "")
(nhapsolieu)
(command "_.copy" sstt1 "" "0,0" "0,0")
(command "_.explode" "l")
(setq ss00 (ssget "p"))
(Command "_.Explode" sstt1)
(command "-Block" "vkc_temp1" "y" dinh1 ss00 "")
(command "line" dinh2 dinh1 "")
(setq re (ssget "l"))
(command "_.move" re "" dinh1 p01)
(command "_.rotate" re "" p01 "45")
(command "-insert" "vkc_temp1" "r" "45" p01 "" "")
(setq blgoc (entlast))
(Command "Explode" blgoc)
(setq bl (ssget "p"))
(command "-Block" "vkc_temp2" P01 re "")
(command "-Block" "vkc_temp3" P01 bl "")
(Command "-Insert" "vkc_temp3" P01 "" hs "")
(setq dt1 (entlast))
(Command "-Insert" "vkc_temp2" P01 "" hs "")
(Command "_.Explode" "l" "")
(setq dt2 (entlast))
(setq tt1 (entget dt2))
(setq tt1 (vl-remove-if '(lambda (x) (/= 10 (car x))) tt1))
(setq dinh11 (cdr (nth 0 tt1)))
(command "_.align" dt1 "" p01 dinh1 dinh11 dinh2 "" "y")
(command "_.erase" dt2 "")
(command "_.move" dt1 "" dinh1 p01)
(Command "_.Explode" "l")
(ketthuc)
(princ)
)

(defun c:stb ()
(stretchblock)
)

(defun batdau ()
(command "undo" "be")
(setvar "cmdecho" 0)
(while (/= (logand (getvar "cmdactive") 31) 0)(command pause))
)

(defun ketthuc ()
(command "undo" "e")
(setvar "cmdecho" 1)
)
(defun delblock ()
(Command "-Purge" "B" "vkc_temp1" "Y" "Y")
(Command "-Purge" "B" "vkc_temp2" "Y" "Y")
(Command "-Purge" "B" "vkc_temp3" "Y" "Y")
)

(defun blockrectang ()
(while (setq e (ssname sstt 0))
(setq sstt (ssdel e sstt)
tmp (vla-getboundingbox (vlax-ename->vla-object e) 'p1 'p3)
p1 (vlax-safearray->list p1)
p3 (vlax-safearray->list p3)
p1 (list (car p1) (cadr p1))
p3 (list (car p3) (cadr p3))
p2 (list (car p1) (cadr p3))
p4 (list (car p3) (cadr p1))
tmp (list
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 4)
(cons 70 1)
(cons 10 p1)
(cons 10 p2)
(cons 10 p3)
(cons 10 p4)
)
)
(entmake tmp)
)
)

Tiện thể bác nào cho em hỏi cái:
Làm thế nào để khi mình chọn nhóm đối tượng thì lọc ra những đối tượng là block. Nếu đối tượng nào là block thì explode nó ra.
  • 2
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1691 lamtaclk8

lamtaclk8

    Chưa sử dụng CAD

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

Đã gửi 07 September 2010 - 10:21 AM

bạn nào có lisp như thế này cho mình xin nhé:
Từ 1 điểm cho trước vẽ được 2 đường thẳng song song, cách đều điểm đó.
Thanks trước :undecided:
  • 0

#1692 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 07 September 2010 - 12:34 PM

Cuối cùng thì mình cũng hoàn thành viết code cho lệnh Ironpat như mình đã trình bày ở trên.
Vấn đề này hình như không được mọi người quan tâm lắm nhưng mình vẫn port lên đây nếu ai có hứng thú thì sử dụng.
code mình viết khá tiện lợi khi sử dụng. Chỉ cần chọn đối tượng gốc, chọn điểm chèn, chọn hướng là ok.
Tiện thể bác nào cho em hỏi cái:
Làm thế nào để khi mình chọn nhóm đối tượng thì lọc ra những đối tượng là block. Nếu đối tượng nào là block thì explode nó ra.

Chào bạn phamngoctukts,
Bạn xài thử đoạn code này nhé:

(defun c:exbl ()
(setq ssb (ssget (list (cons 0 "INSERT")))
n (sslength ssb)
i 0
)
(while (< i n)
(setq ent (ssname ssb i))
(command "explode" ent "")
(setq i (1+ i))
)
)

Bạn hãy đọc thêm về cách sử dụng hàm ssget bạn nhé. Trong đó việc sử dụng filter list rất chi là lợi hại, hãy thử xem.......
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.

#1693 congdung04

congdung04

    biết vẽ line

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

Đã gửi 07 September 2010 - 12:39 PM

@CongDung04 : Bạn đã sử dụng lệnh DOV (DIMOVERRIDE) chưa? Hãy tìm kiếm lệnh này trên diễn đàn và tìm cách sử dụng nó. Tue_NV đã có vài bài viết về lệnh này rồi.


Theo gợi ý của bác em đã tìm lệnh này, mặc dù tìm không ra :bigsmile: nhưng em cũng mò ra đuợc một mục đích chỉnh DIM scale overal.
Sau khi gõ lệnh DOV, ta gõ tiếp biến "SCALE" rồi gõ giá trị cần thay đổi vào rồi chọn đối tuợng.
Như vậy nói về mục đích sử dụng là được nhưng mất hơi nhiều thao tác và một nhược điểm là nó không cho pick chọn truớc DIM để xem Current Dim scale overal.
Vậy em mong bác cùng các cao thủ trợ giúp chỉ cần một lisp nhỏ vài để tiết kiệm nhiều thao tác :undecided:

Em xin phép nói lại mục đích là thay đổi giá trị dim scale overal, khi gõ lệnh sẽ yêu cầu chọn DIM, sau khi chọn lệnh sẽ cho ra giá trị Current Dim scale overal và yêu cầu nhập giá trị cần thay đổi, rồi áp dụng giá trị mới nhập vào cho DIM đó.

trân trọng cảm ơn các bác.
  • 0

#1694 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 07 September 2010 - 12:41 PM

bạn nào có lisp như thế này cho mình xin nhé:
Từ 1 điểm cho trước vẽ được 2 đường thẳng song song, cách đều điểm đó.
Thanks trước :undecided:

Hề hề hề,
Muốn nhận cái thanks của bạn mà sao khó quá, hề hề hề.
Này nhé: song song thì OK rồi, nhưng theo phương nào nhỉ?????
Cách đều điểm đó cũng được đi nhưng cách bao nhiêu???
Cuối cùng là cái đường song song này bắt đầu từ cái chỗ mô hỉ??? Tây, tàu hay malai hử bạn????
Hề hề hề....
  • 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 congdung04

congdung04

    biết vẽ line

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

Đã gửi 07 September 2010 - 01:16 PM

bạn nào có lisp như thế này cho mình xin nhé:
Từ 1 điểm cho trước vẽ được 2 đường thẳng song song, cách đều điểm đó.
Thanks trước :undecided:

không cần lisp lệnh MLINE (ML) sẵn có của CAD cũng làm đuợc 100% yêu cầu của bạn.
  • 0

#1696 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 07 September 2010 - 01:45 PM

Cho mình hỏi có lisp nào như thế này ko?mình đã search rồi mà ko thấy!
ví dụ mình có bản vẽ có 100 bóng đèn, đã bị explode ra rồi, vậy giờ có cách nào quét chọn lại hết các bóng đèn đó thì nó trở lại thành block ko?(mỗi bóng đèn là một 1 block, tất cả các block cùng 1 tên,tên block do mình đặt!)
Thankss!
  • 0

#1697 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 07 September 2010 - 02:15 PM

Theo gợi ý của bác em đã tìm lệnh này, mặc dù tìm không ra :bigsmile: nhưng em cũng mò ra đuợc một mục đích chỉnh DIM scale overal.
Sau khi gõ lệnh DOV, ta gõ tiếp biến "SCALE" rồi gõ giá trị cần thay đổi vào rồi chọn đối tuợng.
Như vậy nói về mục đích sử dụng là được nhưng mất hơi nhiều thao tác và một nhược điểm là nó không cho pick chọn truớc DIM để xem Current Dim scale overal.
Vậy em mong bác cùng các cao thủ trợ giúp chỉ cần một lisp nhỏ vài để tiết kiệm nhiều thao tác :undecided:

Em xin phép nói lại mục đích là thay đổi giá trị dim scale overal, khi gõ lệnh sẽ yêu cầu chọn DIM, sau khi chọn lệnh sẽ cho ra giá trị Current Dim scale overal và yêu cầu nhập giá trị cần thay đổi, rồi áp dụng giá trị mới nhập vào cho DIM đó.

trân trọng cảm ơn các bác.

Chào bạn condung04,
Bạn dùng thử cái này. Về cơ bản có thể nó đáp ứng cái yêu cầu của bạn, tuy nhiên cũng như cái lisp mình đã viết cho bạn nguyentuyen6 thì nó chỉ đổi kích thước trong díplay mà thôi, còn trong properties thì bạn chả thấy thay đổi gì. Phần lấy giá trị bạn có thể sử dụng lisp của bác Hoành, còn lisp này yêu cầu bạn nhập giá trị mới và nó đổi phóc luôn chứ chả có thông báo chi đâu nhé.

(defun C:chovrl ()
(setq ent (car (entsel)))
(command "dimoverride" "scale" (getstring "/n nhap ty le: ") "" ent "")
)

Cái vụ đổi cả trong properties thì mình cũng đang mò thêm. Hy vọng sẽ sớm có kết quả.
Chúc bạn 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.

#1698 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 07 September 2010 - 02:47 PM

Chào bạn phamngoctukts,
Bạn xài thử đoạn code này nhé:
Bạn hãy đọc thêm về cách sử dụng hàm ssget bạn nhé. Trong đó việc sử dụng filter list rất chi là lợi hại, hãy thử xem.......
Chúc bạn vui.

Chào bạn Phamthanhbinh bạn chưa hiểu ý mình rồi.
với code để chỉ chọn block thì mình đã biết rồi.
Ý mình là chọn tất cả các đồi tượng gọi tắt là nhóm1. Kiểm tra trong nhóm đó có block hay không. nếu có thì explode nó ra. Nếu không có thì thôi.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1699 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 07 September 2010 - 02:47 PM

Theo gợi ý của bác em đã tìm lệnh này, mặc dù tìm không ra :bigsmile: nhưng em cũng mò ra đuợc một mục đích chỉnh DIM scale overal.
Sau khi gõ lệnh DOV, ta gõ tiếp biến "SCALE" rồi gõ giá trị cần thay đổi vào rồi chọn đối tuợng.
Như vậy nói về mục đích sử dụng là được nhưng mất hơi nhiều thao tác và một nhược điểm là nó không cho pick chọn truớc DIM để xem Current Dim scale overal.
Vậy em mong bác cùng các cao thủ trợ giúp chỉ cần một lisp nhỏ vài để tiết kiệm nhiều thao tác :undecided:

Em xin phép nói lại mục đích là thay đổi giá trị dim scale overal, khi gõ lệnh sẽ yêu cầu chọn DIM, sau khi chọn lệnh sẽ cho ra giá trị Current Dim scale overal và yêu cầu nhập giá trị cần thay đổi, rồi áp dụng giá trị mới nhập vào cho DIM đó.

trân trọng cảm ơn các bác.

Hề hề hề,
Với sự giúp sức của bác Master_Worse. mình mới mót được cái nè, hay lắm lắm. Biếu bạn dùng chơi:

(defun c:chovr ()
(vl-load-com)
(command "undo" "be")
(setq di (vlax-ename->vla-object (car (entsel "/n Chon doi tuong dim can thay doi"))))
(alert (strcat "Chieu cao text cua doi tuong hien tai la: " (rtos (vla-get-textheight di))))
(setq new (getreal "\n Nhap chieu cao text moi: "))
(vla-put-textheight di new)
(command "undo" "e")
)

Cái này chỉ thay đổi chiều cao text chứ không thay đổi biến dim overal scale nên các mũi tên không bị thay đổi. Nếu muốn chúng thay đổi thì phải chờ mình mót thêm. Hề hề hề....


@ nguyentuyen6: Bạn có thể xài cái này cho trường hợp của bạn. Nếu bạn không thể hãy post lên nhé.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1700 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 07 September 2010 - 02:57 PM

Chào bạn Phamthanhbinh bạn chưa hiểu ý mình rồi.
với code để chỉ chọn block thì mình đã biết rồi.
Ý mình là chọn tất cả các đồi tượng gọi tắt là nhóm1. Kiểm tra trong nhóm đó có block hay không. nếu có thì explode nó ra. Nếu không có thì thôi.

Hề hề hề,
Vậy là bạn biết rồi, xin lỗi vì mình cầm đèn chạy trước ô tô. Hề hề hề.
Cái ý của bạn như vậy bạn có thể làm như sau:
1/- Chọn tập hợp gồm tất cả các đối tượng bạn muốn kiểm tra.
2/- Dùng vòng lặp while lặp qua tất cả các đối tượng có trong tập hợp đối tượng đã được chọn.
3/-trong quá trình lặp này bạn dùng hàm if để kiểm tra xem đối tượng có phải là block không, nếu đúng bạn explode nó ra, còn nếu không thì mặc xác nó bơ vơ.
4/- kết thúc vòng lặp.

Do bạn cũng đã có khả năng viết được nên bạn hãy thử viết theo hướng như tren xem sao. Nếu gặp khó khăn hãy post lên mọi nhười sẽ giúp bạn nhé.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.