Đế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

#2461 kid112

kid112

    Chưa sử dụng CAD

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

Đã gửi 19 July 2009 - 01:01 PM

Cảm ơn a Tue_VN. Em đã làm dc rồi.
  • 0

#2462 khibeo

khibeo

    Chưa sử dụng CAD

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

Đã gửi 19 July 2009 - 01:17 PM

Bác Hoanh ơi cho em hỏi:
+ có thể đưa một số thuộc tính của đối tượng trên bản vẽ vào cơ sở dữ liệu của chính bản vẽ đó được không?
+ Nếu có thể, Bác viết cho C.trình "tạo bảng nhập dữ liệu cho đối tượng được chọn trên màn hình"
Ví dụ: chon đối tượng nhà. cần nhập các thuộc tính:
địa chỉ: số nhà, ngõ, phố, phường(xã), quận(huyện), tỉnh(thành phố)
loại nhà: nhà trung cư, nhà riêng, nhà vườn ...
kiểu kiến trúc: nhà mái bằng, mái ngói, số tầng...
diện tích thực tế:....
giá trị bằng tiền:
thời điểm nhập dữ liệu: giờ... ngày/tháng/ năm
  • 0

#2463 khibeo

khibeo

    Chưa sử dụng CAD

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

Đã gửi 19 July 2009 - 01:26 PM

Vâng, sẽ có nhiều loại đối tượng. xong mỗi đối tượng chỉ có vài thuộc tính (không quá 10). các thông tin đều ngắn gọn chỉ mang tính thống kê...
  • 0

#2464 vanthanhfpt

vanthanhfpt

    biết vẽ line

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

Đã gửi 20 July 2009 - 11:19 AM

Cảm ơn ban Tue_NV nhiều nhá.
Cái lisp ấy của mình vẫn còn nhiều lỗi lắm. Bạn có biết cách nào tìm lỗi trong Visual lisp không. Giống thằng pascal ấy.
Cảm ơn bạn nhiều nhé!
  • 0

-*-TO BE OR NOT TO BE-*-


#2465 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 20 July 2009 - 02:09 PM

Trước khi chạy Lisp -> Conghoan đánh lệnh trim -> và thiết lập như sau :
Command: trim

Select objects: Specify opposite corner: 1 found : chọn đối tượng

Select objects: Enter

Select object to trim or shift-select to extend or [Project/Edge/Undo]: e : gõ e
Enter an implied edge extension mode [Extend/No extend] : e gõ e
Select object to trim or shift-select to extend or [Project/Edge/Undo]:
-> rồi sau đó mới sử dụng lệnh VBUN
Hy vọng bạn thành công :s_dead:
-> Conghoan sử dụng giải pháp này xem sao

Cái này mình cũng đã thử rồi nhưng vẫn không có tác dụng gì. Mình đang dùng cad 2007 liệu có ảnh hưởng gì không Tuê_NV. Hình như Tuê_NV dùng lệnh trim để nối nó lại với nhau à? Tuệ_NV có thể chuyển sang dùng lệnh fillet (với R=0) được không? phải thử giải pháp này thế nào chứ Tuê_NV "bó tay" thì mình cũng "bó chân" luôn. Thấy cái này hay thế mà chưa sử dụng được thấy tiết quá. Tuệ cố gắng giúp mình lần nữa nhé. Thank a lot!
  • 0
Học học nữa học mãi.
Đúp học lại!

#2466 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 20 July 2009 - 03:21 PM

Các bác ơi giúp em với! loai hoai từ tối tới giờ mà vẫn không làm dc. các bác đừng cười em nhé...hihi
Em đã thực hiện appload chương trình "scale block và text theo điểm chèn đối tượng" và có kết quả:SB.lsp successfuly loader
Khi gõ lệnh SB trên dong command C.Trình báo lỗi " error: no function definition" em phải làm sao bây giờ...
thank you very much!

Chào bạn Khibeo,
Bạn hãy mở file lisp ra kiểm tra lại xem tên lệnh có phải là SB không nhé. Nếu không phải thì bạn có gõ cả ngày cũng vẫn vậy thối. Vì chả biết file lisp của bạn ra sao nên chả thể trả lời bạn rõ hơn. Nếu được bạn hãy upload file lisp đó 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.

#2467 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 July 2009 - 08:38 AM

Bác ơi, em.....hix, lisp này bác đã dùng đc chưa ah? Em pick vào vùng đầu tiên thì báo lỗi thế này: ; "error: bad argument type: lselsetp nil". Bác xem lại rùi sửa júp em đc hôk ah? Cám ơn bác.Bác jữ sk để viết nhìu nhìu lisp hay cho bọn em na! hjj

Tue_NV không hiểu sao bạn test Lisp bị lỗi trong khi đó Tue_NV test OK
Tue_NV có chỉnh lại Lisp một chút. Bach1212 test thử xem.
Hy vọng bạn thành công

(defun c:gdt(/ oldim p1 frome cur toe ss ss2 tt S ans po cao te ente)
(setq oldim (getvar "DimZin"))
(setvar "DimZin" 0)
(setvar "cmdecho" 0)
(setq p1 (getpoint "\n Pick diem vao mien de lay dien tich : ") S 0 ss2 (ssadd))
(While p1
(setq frome (entlast));;

(command ".boundary" p1 "");; boundary
(setq toe (entlast));;

(setq cur frome; khoi tao
ss (ssadd)
)
(while (not (eq cur toe));;
(setq
cur (entnext cur)
ss (ssadd cur ss)
)

(command "list" ss "")
(graphscr)
(setq tt (getvar "area"))
(setq S (+ S tt))
)

(Command "erase" ss "")
(setq p1 (getpoint "\n Pick diem vao mien de lay dien tich : "))

)
(initget "T C")
(setq ans (getkword "\n Chon Text de thay gia tri dien tich / chon diem chen de ghi dien tich :"))
(if (or (= ans "c") (= ans "C"))
(progn
(setq po (getpoint "\n Chon diem chen de ghi dien tich :"))
(setq cao (getdist "\n Nhap chieu cao chu : "))
(wtxt (rtos S 2 2) po 0 cao)
(command "erase" ss2 "")
)
)
(if (or (= ans "t") (= ans "T"))
(progn
(setq te (car(entsel "\n Chon Text de thay gia tri dien tich ")))
(setq ente (entget te))
(setq ente (subst(cons 1 (rtos S 2 2)) (assoc 1 ente) ente))
(entmod ente)
(command "erase" ss2 "")
)
)
(setvar "DimZin" oldim)
(Princ)
)
;
(defun wtxt (txt p ang h / sty)
(setq sty (getvar "textstyle"))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p)
(cons 72 2) (cons 73 2) (cons 50 ang) (cons 40 h) (cons 41 0.8))
)
)

  • 0

#2468 thai_nguyen

thai_nguyen

    Chưa sử dụng CAD

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

Đã gửi 22 July 2009 - 09:04 AM

Em làm bên quy họach. Em đã load lisp tính diện tích và chèn giá trị vào vòng tròn ký hiệu. Rất hay nhưng có tới 3 biến là tên lô, diện tích và dân số. Em đang cần gấp lisp tương tự nhưng chỉ có hai biến thôi là tên lô và diện tích. Ngòai ra có thể chọn kiểu hình vuông hoặc hình tròn ký hiệu.

Anh chị nào có rồi thì cho em xin nhé. Nếu không nhờ mọi người viết hộ vì em không biết viết lisp. Cảm ơn nhiều nhiều. Em cần gấp lắm ạ. :s_dead: :s_dead: :s_dead:
  • 0

#2469 lelenlau2

lelenlau2

    biết pan

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

Đã gửi 22 July 2009 - 10:47 AM

Cac Bac giup Em với, làm sao để có thể sửa được cái lisp này.
http://www.cadviet.c..._NUOC_HUNG_.fas
Em sửa mà không được.
  • 0

#2470 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 July 2009 - 02:25 PM

Em làm bên quy họach. Em đã load lisp tính diện tích và chèn giá trị vào vòng tròn ký hiệu. Rất hay nhưng có tới 3 biến là tên lô, diện tích và dân số. Em đang cần gấp lisp tương tự nhưng chỉ có hai biến thôi là tên lô và diện tích. Ngòai ra có thể chọn kiểu hình vuông hoặc hình tròn ký hiệu.

Anh chị nào có rồi thì cho em xin nhé. Nếu không nhờ mọi người viết hộ vì em không biết viết lisp. Cảm ơn nhiều nhiều. Em cần gấp lắm ạ. :s_dead: :s_dead: :s_dead:

Chào bạn thai_nguyen
Chưa hiểu ý của bạn. Bạn nói hai biến thôi là tên lô và diện tích. có phải là bạn đang nói tới Attribute
Nếu bạn đang nói tới Attribute thì đấy không phải là biến bạn à.
Bạn có thể upload cái file mà bạn cần lên và nói rõ điều bạn muốn nhé.
Bạn nói rõ cách thức tính diện tích luôn nhé. (tính diện tích bằng cách pick điểm hay là tính diện tích bằng cách khác)
  • 0

#2471 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 22 July 2009 - 02:55 PM

Cac Bac giup Em với, làm sao để có thể sửa được cái lisp này.
http://www.cadviet.c..._NUOC_HUNG_.fas
Em sửa mà không được.

Hì hì, bác này chơi khó quá,
Nếu bác muốn sửa thì phải mở no ra xem trong đó người ta viết cái gì rồi mới sửa được chớ, đằng này bác cho mọi người cái file .fas này thì quá là đánh đố nhau bác ạ. Bác có cách nào mở được file .fas thì mách anh em với. Hoặc giả bác gửi file .lsp gốc lên xem thế nào chứ kiểu này thì bó giò rồi bác ạ.
Cầu mong bác có được các cao thủ trợ giúp. Chúc bác thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2472 quygtvt

quygtvt

    biết vẽ circle

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

Đã gửi 22 July 2009 - 03:34 PM

Em dung Nova4.0 trên nền CAD14, nhờ các bác giúp em với.
Khi thiết kế cắt ngang tuyến, em phải thực hiện nhiều lần lệnh TL, rất mất công. Em muốn hỏi các bác xem có thể lập lisp để xử lý vụ này không.
Ví dụ, bình thường trong Nova em phải làm thế này:
Command: tl
Chän lÒ hoÆc mÆt phÝa cÇn t¹o taluy:
Select object:
Undo/:0.4

[font="Courier New"][font="Arial"]§é dèc %<100.00>:100

Undo/:0.4

§é dèc %<100.00>:0

Undo/:0.4

§é dèc %<0.00>:-100

Undo/:6

§é dèc %<-100.00>:-133.33

Undo/:1.5

§é dèc %<-133.33>:4

Undo/:6

§é dèc %<4.00>:-100

Undo/:

Em định lập lisp như sau:

(defun c:4()
(setq dtuong (car(entsel)))
(command "TL" dtuong 0.4 100 0.4 0 0.4 -100 8 -133.33 1.5 4 6 -100 "")
); ve taluy co ranh, 1/0.75, co, 1/1

nhưng mà khi chạy thì Nova không nhận dữ liệu nhập. Các bác gỡ cho em vụ này với.
  • 0
Không thể nói trời không xanh hơn,
và mắt em không xanh khác ngày thường

Hình đã gửi


#2473 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 22 July 2009 - 03:44 PM

Em dung Nova4.0 trên nền CAD14, nhờ các bác giúp em với.
Khi thiết kế cắt ngang tuyến, em phải thực hiện nhiều lần lệnh TL, rất mất công. Em muốn hỏi các bác xem có thể lập lisp để xử lý vụ này không.
Ví dụ, bình thường trong Nova em phải làm thế này:
Command: tl
Chän lÒ hoÆc mÆt phÝa cÇn t¹o taluy:
Select object:
Undo/:0.4

[font="Courier New"][font="Arial"]§é dèc %<100.00>:100

Undo/:0.4

§é dèc %<100.00>:0

Undo/:0.4

§é dèc %<0.00>:-100

Undo/:6

§é dèc %<-100.00>:-133.33

Undo/:1.5

§é dèc %<-133.33>:4

Undo/:6

§é dèc %<4.00>:-100

Undo/:

Em định lập lisp như sau:


(defun c:4()
(setq dtuong (car(entsel)))
(command "TL" dtuong 0.4 100 0.4 0 0.4 -100 8 -133.33 1.5 4 6 -100 "")
); ve taluy co ranh, 1/0.75, co, 1/1

nhưng mà khi chạy thì Nova không nhận dữ liệu nhập. Các bác gỡ cho em vụ này với.

Đoạn code trên chỉ chạy được với Nova 2xxx còn đối với r14 thì mình đã thử và đã động chạm đến cả Xdata của nó nhưng vẫn ko ăn thua. Có thể giải quyết nhanh hơn 1 chút bằng cách "bán scrips" là
Command: tl
Chän lÒ hoÆc mÆt phÝa cÇn t¹o taluy:
Select object:
Undo/:0.4 100 0.4 0 0.4 -100 6 -133.33 1.5 4 6 100
Bạn lưu dòng 0.4 100 0.4 0 0.4 -100 6 -133.33 1.5 4 6 100 trong 1 file .txt nào đó (mỗi loại taluy sẽ có một list khác nhau) và nếu động đến loại taluy nào thì copy dòng đó vào dòng nhắc command thôi.
Mình mới chỉ nghĩ ra cách này . Ai biết cách nào hay hơn thì xin chỉ giáo.
  • 1

#2474 aliosa

aliosa

    biết vẽ polygon

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

Đã gửi 22 July 2009 - 04:46 PM

Chào các bạn !
Mình xin nhờ các bạn một chuơng trình sau:
Cho hai đường polyline song song cánh nhau một khoảng cho trước. (D=10)
Yêu cầu:
Vẽ một đường POLYLINE nằm giữa hai đường thẳng cho trước đó. Chiều dài của MIN của mỗi đọan của đuờng POLYLINE đó lớn hơn một giá trị cho trước (ví dụ là 70m).
Rất mong các bạn giúp đỡ.
File bản vẽ gửi kèm.
http://www.cadviet.c.../duongthang.zip
  • 0

#2475 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 22 July 2009 - 06:45 PM

Chào các bạn !
Mình xin nhờ các bạn một chuơng trình sau:
Cho hai đường polyline song song cánh nhau một khoảng cho trước. (D=10)
Yêu cầu:
Vẽ một đường POLYLINE nằm giữa hai đường thẳng cho trước đó. Chiều dài của MIN của mỗi đọan của đuờng POLYLINE đó lớn hơn một giá trị cho trước (ví dụ là 70m).
Rất mong các bạn giúp đỡ.
File bản vẽ gửi kèm.
http://www.cadviet.c.../duongthang.zip


chỉ cần nằm bên trong 2 biên thôi sao, k co qui định gì khác hả?
nếu 2 đg biên gấp khúc quá thì làm sao đủ 70?
  • 0

#2476 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 22 July 2009 - 09:28 PM

Chào các bạn !
Mình xin nhờ các bạn một chuơng trình sau:
Cho hai đường polyline song song cánh nhau một khoảng cho trước. (D=10)
Yêu cầu:
Vẽ một đường POLYLINE nằm giữa hai đường thẳng cho trước đó. Chiều dài của MIN của mỗi đọan của đuờng POLYLINE đó lớn hơn một giá trị cho trước (ví dụ là 70m).
Rất mong các bạn giúp đỡ.
File bản vẽ gửi kèm.
http://www.cadviet.c.../duongthang.zip


Ko thấy bạn trả lời nên mình làm "đại" cái lisp này, bạn dùng thử xem.


(defun laydinh(obj diem dai)
(if (setq pt (vlax-curve-getPointAtDist obj (+ dai (vlax-curve-getDistAtPoint obj diem))))
(vlax-curve-getPointAtParam obj
(1+ (fix (vlax-curve-getParamAtPoint obj pt))))
nil)
)

(defun c:dt()
(vl-load-com)
(setq ss (ssget '((0 . "*POLYLINE"))))
(while (and ss (/= (sslength ss) 2))
(alert "Chi duoc chon 2 pline")
(setq ss (ssget '((0 . "*POLYLINE")))))
(setq obj1 (vlax-ename->vla-object (ssname ss 0))
pt1 (vlax-curve-getStartPoint obj1)
obj2 (vlax-ename->vla-object (ssname ss 1))
pt21 (vlax-curve-getStartPoint obj2)
pt22 (vlax-curve-getEndPoint obj2))
(if (< (distance pt1 pt21) (distance pt1 pt22))
(setq pt2 pt21)
(setq pt2 pt22))
(vla-Copy obj1)
(setq obj3 (vlax-ename->vla-object (setq ent (entlast))))
(vla-Move obj3 (vlax-3d-Point pt1)
(vlax-3d-Point (setq pt3 (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2))))))

(setq Ld1 (list pt3)
pt4 (laydinh obj3 pt3 70))
(while pt4
(setq Ld1 (append Ld1 (list pt4))
pt4 (laydinh obj3 pt4 70))
)
(setq Ld1 (append Ld1 (list (last Ld)))
Ld2 nil)
(entdel ent)
(foreach d Ld1 (setq Ld2 (append Ld2 (list (cons 10 d) (cons 42 0)))))
(entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length Ld1)))
Ld2))
)

  • 0

#2477 aliosa

aliosa

    biết vẽ polygon

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

Đã gửi 22 July 2009 - 09:54 PM

chỉ cần nằm bên trong 2 biên thôi sao, k co qui định gì khác hả?
nếu 2 đg biên gấp khúc quá thì làm sao đủ 70?

Buổi chiều về nhà lên không kịp kiểm tra mạng. Mục tiêu của bài toán là kỉe một đường thảng cố gắng (tối ưu nhất) là nằm trong phạm vi hai đường polyline sơng song. Những vị trí bất khả kháng thì mình phải chấp nhận. Thực chất đây là bài toán kẻ đưòng đỏ của tuyến đường nâng cấp. Đường đỏ được kẻ ra phải đảm bảo về mặt cao độ sao cho không cao quá cũng không thấp quá so với đường thiên nhiên. Đường đỏ nằm tròng khoảng hai đường song song đó là tối ưu nhât.
Rất chân thành cảm ơn bạn đã giúp. Minhd sẽ test lại và có phản hồi ngay.
  • 0

#2478 aliosa

aliosa

    biết vẽ polygon

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

Đã gửi 22 July 2009 - 09:57 PM

Buổi chiều về nhà lên không kịp kiểm tra mạng. Mục tiêu của bài toán là kỉe một đường thảng cố gắng (tối ưu nhất) là nằm trong phạm vi hai đường polyline sơng song. Những vị trí bất khả kháng thì mình phải chấp nhận. Thực chất đây là bài toán kẻ đưòng đỏ của tuyến đường nâng cấp. Đường đỏ được kẻ ra phải đảm bảo về mặt cao độ sao cho không cao quá cũng không thấp quá so với đường thiên nhiên. Đường đỏ nằm tròng khoảng hai đường song song đó là tối ưu nhât.
Rất chân thành cảm ơn bạn đã giúp. Minhd sẽ test lại và có phản hồi ngay.


Mình test thì chương trình báo lỗi sau:
Select objects: ; error: bad DXF group: (10)
Bạn xem lại giúp mình nhé.
Nếu được thì bạn chỉnh lại chương trình cho mình một chút:
- Từ một đường polyline vẽ một đường polyline có khoảng cách giữa các đỉnh lớn hơn một giá trị A (ví dụ trong bài là A=70m) , nằm phía trên (hay dưới) đường polyline đã cho và cách đường Polyline đã cho một khoảng nhỏ hơn D ( trong ví dụ là 10). Hai giá tri A và D cho phép nhập vào từ chương trình.
Nếu đường thẳng đã cho quá gấp khúc không đảm bảo được khoảng cách giữa hai đỉnh của polyline là A thì cho phép kẻ tại vị trí đó đường Polyline kẻ nẳm cách đường thẳng đã cho một khoảng lớn hơn D. Nhưng thống nhất là cách đương Polyline kẻ ra nằm ở một phía và không giao cắt với đường đã cho. Hết vị trí gấp khúc thì lại đường polyline kẻ lại phỉa đảm bảo đề bài.
  • 0

#2479 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 22 July 2009 - 10:27 PM

Mình test thì chương trình báo lỗi sau:
Select objects: ; error: bad DXF group: (10)
Bạn xem lại giúp mình nhé.
Nếu được thì bạn chỉnh lại chương trình cho mình một chút:
- Từ một đường polyline vẽ một đường polyline có khoảng cách giữa các đỉnh lớn hơn một giá trị A (ví dụ trong bài là A=70m) , nằm phía trên (hay dưới) đường polyline đã cho và cách đường Polyline đã cho một khoảng nhỏ hơn D ( trong ví dụ là 10). Hai giá tri A và D cho phép nhập vào từ chương trình.


Bạn thử cái này, có điều là chỉ hỏi giá trị A thôi còn D thì nó đo khoảng cách giữa 2 pline rồi, ko cần hỏi nữa.

(defun laydinh(obj diem dai)
(if (setq pt (vlax-curve-getPointAtDist obj (+ dai (vlax-curve-getDistAtPoint obj diem))))
(vlax-curve-getPointAtParam obj
(1+ (fix (vlax-curve-getParamAtPoint obj pt))))
nil)
)

(defun c:dt()
(vl-load-com)
(setq kctt (getreal "\nKhoang cach toi thieu:")
ss (ssget '((0 . "*POLYLINE"))))
(while (and ss (/= (sslength ss) 2))
(alert "Chi duoc chon 2 pline")
(setq ss (ssget '((0 . "*POLYLINE")))))
(setq obj1 (vlax-ename->vla-object (ssname ss 0))
pt1 (vlax-curve-getStartPoint obj1)
obj2 (vlax-ename->vla-object (ssname ss 1))
pt21 (vlax-curve-getStartPoint obj2)
pt22 (vlax-curve-getEndPoint obj2))
(if (< (distance pt1 pt21) (distance pt1 pt22))
(setq pt2 pt21)
(setq pt2 pt22))
(vla-Copy obj1)
(setq obj3 (vlax-ename->vla-object (setq ent (entlast))))
(vla-Move obj3 (vlax-3d-Point pt1)
(vlax-3d-Point (setq pt3 (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2))))))

(setq Ld1 (list pt3)
Ld2 nil
pt4 (laydinh obj3 pt3 kctt))
(while pt4
(setq Ld1 (append Ld1 (list pt4))
pt4 (laydinh obj3 pt4 kctt))
)
(entdel ent)
(foreach d Ld1 (setq Ld2 (append Ld2 (list (cons 10 d) (cons 42 0)))))
(entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length Ld1)))
Ld2))
)

  • 1

#2480 thai_nguyen

thai_nguyen

    Chưa sử dụng CAD

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

Đã gửi 22 July 2009 - 10:38 PM

Chào bạn thai_nguyen
Chưa hiểu ý của bạn. Bạn nói hai biến thôi là tên lô và diện tích. có phải là bạn đang nói tới Attribute
Nếu bạn đang nói tới Attribute thì đấy không phải là biến bạn à.
Bạn có thể upload cái file mà bạn cần lên và nói rõ điều bạn muốn nhé.
Bạn nói rõ cách thức tính diện tích luôn nhé. (tính diện tích bằng cách pick điểm hay là tính diện tích bằng cách khác)


Dạ thế này ạ.
1. Em gõ lệnh
2. Chọn object - 1 polyline
3. Nhập tên lô
4. Chọn vòng tròn ký hiệu hay hình chữ nhật ký hiệu (em sẽ chọn 1 trong hai)
5. Chọn điểm chèn.
Và cuối cùng ra vòng tròn hoặc hình chữ nhật gồm tên lô và diện tích của object tại vị trí điểm chèn đã chọn.

Bước 3, 4,5 có thể thay đổi thứ tự. Không biết em giải thích như thế đã rõ chưa. Em thấy cũng giống lisp tính diện tích và chèn giá trị vào vòng tròn ký hiệu (gõ lệnh SA, DSA) trong phần Download của CadViet, chỉ khác là không có phần dân số thôi.

Em gửi hình ví dụ đính kèm. Trong hình là hai kiểu vòng tròn ký hiệu của tên lô lớn và diện tích, hình chữ nhật ký hiệu gồm tên lô nhỏ và diện tích. Em vẫn phải làm rất thủ công là đo từng diện tích rồi edit chữ và số.

Cảm ơn nhiều ạ!!!
Hình đã gửi
  • 0