Đến nội dung


Hình ảnh
- - - - -

LISP GPMB


  • Please log in to reply
20 replies to this topic

#1 w1nDream

w1nDream

    biết lệnh ddedit

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

Đã gửi 23 March 2010 - 04:18 PM

Em đang phải làm GPMB.Phải Dim từ tim ra 2 bên như hình vẽ dưới đây.Nếu thực hiện thủ công thì sẽ rất là mất thời gian.Nên em muốn nhờ các bác và mọi người viết hộ em 1 con lisp thực hiện việc đó 1 cách hiệu quả nhất.Thanks mọi người nhiều.
http://www.cadviet.c...m8__km9_xxx.dwg
:D
  • 0
__Tâm tựa lưu thủY__
Vi nhân nan

#2 hoaletrang

hoaletrang

    biết vẽ line

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

Đã gửi 24 March 2010 - 12:23 AM

Đề bài của bạn khá hay. Tôi hình dung công việc của bạn như thế này.
bạn muốn làm công tác đền bù giải phóng mặt bằng và muốn vẽ thêm vào các trác ngang vị trí đặt mốc lộ giới và điền đầy đủ kích thức từ tim đường ra mốc lộ giới.
Nghiên cứu 1 hồi thì cũng tìm được ra các điểm riêng của bản vẽ. Để thực hiện được dễ dàng thì bạn cần chỉnh sửa cách làm 1 chút đó là 2 khối (Block) mốc lộ giới trái và phải bạn cần định nghĩa lại cho nó có điểm chèn nằm tại cao độ của chân taluy và thống nhất chỉ đặt tên 2 khối là GPMBL và GPMBR.
Copy các trắc ngang theo các trường hợp vào từng File riêng lẻ rồi thực hiện lệnh hoặc có thể thêm chức năng chọn tung đối tượng, mặc định chương trinhg tự động dò tìm các khung bản vẽ sau đó thực hiện, trường hợp mặc định là trường hợp 2, nếu muốn thực hiện cho trường hợp 1 thì nhập 1 khi được hỏi. Bây h chỉ cần ngồi ngắm kết quả.
Tôi đã test kỹ với 100 mặt cắt chạy mất khoảng 12 đến 13 giây. Bạn thử xem nhé.
(DEFUN C:gpmb(/ TH SS Index Lst LenEn I J Pt1 Pt2 PlineLeft PlineRight GPMBL GPMBR ChanTrai ChanPhai PtMid PtLine S Now)  
(ACET-ERROR-INIT (LIST (LIST "OSMODE" 0 "CLAYER" "DIM" "CMDECHO" 0) T))
(setq TH (getstring "\nChọn trường hợp: "))
(setq s (getvar "DATE"))
(setq Now (* 86400.0 (- s (fix s))))
(setq ss (ssget "X" '((8 . "PointCheckModelLayout") (0 . "LWPOLYLINE") (70 . 1)))
Index 0);Chon tat ca cac khung ban ve trac ngang "LWPOLYLINE" nam tren lop "PointCheckModelLayout"
(while (setq Ent (ssname ss Index));Lan luot xet tung trac ngang
(setq Lst (entget ent);Liet ke cac thuoc tinh cua khung ban ve
LenEn (length Lst);Dem so luong cac thuoc tinh
I 0; Chi so cua cac thuoc tinh
J 1); Dem cac dinh cua khung chu nhat
(while (< I LenEn)
(if (= (car (nth I Lst)) 10);Tim cac dinh cua khung chu nhat
(progn
(if (= J 1);Neu la dinh dau tien
(setq PT1 (cdr (nth I Lst)));Lay toa do dinh dau tien
)
(if (= J 3);Neu la dinh thu 3
(setq PT2 (cdr (nth I Lst)));Lay Toa do dinh thu 3
)
(setq J (1+ J))
)
)
(setq I (1+ I))
)
(command "zoom" pt1 pt2);Zoom tung ban ve
(setq PlineLeft (ssname (ssget "w" Pt1 Pt2 '((0 . "POLYLINE")(8 . "PLINETALUYTRAI"))) 0);tim duong taluy trai
PlineRight (ssname (ssget "w" Pt1 Pt2 '((0 . "POLYLINE")(8 . "PLINETALUYPHAI"))) 0));tim duong taluy phai
(command "Explode" PlineLeft);chuyen thanh LINE
(setq ChanTrai (cdr (assoc 10 (entget (ssname (ssget "w" Pt1 Pt2 '((0 . "LINE")(8 . "PLINETALUYTRAI"))) 0)))));Chan taluy trai
(command "Undo" "");Khoi phuc
(command "Explode" PlineRight)
(setq ChanPhai (cdr (assoc 11 (entget (ssname (ssget "w" Pt1 Pt2 '((0 . "LINE")(8 . "PLINETALUYPHAI"))) 0)))));Chan Taluy phai
(command "Undo" "")
(setq GPMBL (Polar ChanTrai Pi 1.5));Ranh gioi GPMB trai
(if (= TH "1")
(setq GPMBR (Polar ChanPhai 0 1.5));Ranh gioi GPMB phai
(setq GPMBR ChanPhai)
)
(command "Insert" "GPMBL" GPMBL "" "" "" );Chen Block GPMB trai
(command "Insert" "GPMBR" GPMBR "" "" "");Chen Block GPMB phai
(setq GPMBL (polar GPMBL (/ pi 2) 2);Tinh toan cac diem dat kich thuoc
GPMBR (polar GPMBR (/ pi 2) 2)
PtLine (Polar GPMBR (/ pi 2) 2)
PtMid (cdr (assoc 10 (entget (ssname (ssget "w" Pt1 Pt2 '((0 . "INSERT")(2 . "Dau_co"))) 0))));Tim duong
PtMid (list (car PtMid) (cadr GPMBL) 0.0))
(command "_dimlinear" GPMBL PtMid PtLine);Dien kich thuoc
(command "_dimlinear" PtMid GPMBR PtLine)
(setq Index (1+ Index))
)
(command "zoom" "e");Xem toan bo ban ve
(setq s (getvar "DATE"))
(alert (strcat "Tổng thời gian thực hiện là:" (rtos (- (* 86400.0 (- s (fix s))) Now )) " giây."))
(acet-error-restore)
)

  • 1

#3 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 24 March 2010 - 08:08 AM

.....................

(DEFUN C:gpmb(/ TH SS Index Lst LenEn I J Pt1 Pt2 PlineLeft PlineRight GPMBL GPMBR ChanTrai ChanPhai PtMid PtLine S Now)  
(ACET-ERROR-INIT (LIST (LIST "OSMODE" 0 "CLAYER" "DIM" "CMDECHO" 0) T))
(setq TH (getstring "\nChọn trường hợp: "))
(setq s (getvar "DATE"))
(setq Now (* 86400.0 (- s (fix s))))
.................................
(setq s (getvar "DATE"))
(alert (strcat "Tổng thời gian thực hiện là:" (rtos (- (* 86400.0 (- s (fix s))) Now )) " giây."))
(acet-error-restore)
)

Góp ý với bạn :
1- truớc khi dùng hàm : ACET-ERROR-INIT, acet-error-restore cần kiểm tra xem CAD có cài EXPRESS hay không?
nếu chưa cài sẽ báo lỗi.
2- Cad có biến hệ thống MILLISECS trả về thời gian của hệ thống - đơn vị mili giây

Có thể thay đoạn tính thời gian thưc hiện
(setq s (getvar "DATE"))
(setq Now (* 86400.0 (- s (fix s))))
.............
(setq s (getvar "DATE"))
(alert (strcat "Tổng thời gian thực hiện là:" (rtos (- (* 86400.0 (- s (fix s))) Now )) " giây."))

bằng :

(setq time (getvar "MILLISECS"))
.............
(princ (strcat "\nTong thoi gian thuc hien : " (rtos(/ (- (getvar "MILLISECS") time) 1000.0)) " giay."))

  • 2

#4 w1nDream

w1nDream

    biết lệnh ddedit

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

Đã gửi 24 March 2010 - 11:34 AM

Trước tiên xin cảm ơn 2 bác rất nhiều.Em đã chạy thử nhưng không được.Nó báo thế này:


Command: gpmb

Ch?n tru?ng h?p: 1

"GPMBR.dwg": Can't find file in search path:
C:\Harmony CAD_Group\NovaTDN16\ (current directory)
C:\Documents and Settings\Windows XP\Desktop\
C:\Documents and Settings\Windows XP\Application Data\Autodesk\AutoCAD
2005\R16.1\enu\support\
C:\Program Files\AutoCAD 2005\support\
C:\Program Files\AutoCAD 2005\fonts\
C:\Program Files\AutoCAD 2005\help\
C:\Program Files\AutoCAD 2005\express\
C:\Program Files\AutoCAD 2005\support\color\
C:\Program Files\AutoCAD 2005\drv\
C:\Program Files\AutoCAD 2005\
*Invalid*


Hoaletrang có thể hướng dẫn cụ thể để sử dụng lisp của bác được không.
1.2 Block GPMB đó có cần phải copy đặt vào đâu không hay chỉ cần tạo trong bản vẽ là được.
2.Em cũng sử dụng khung nhưng khi đặt trong khung sẽ có 2 hoặc 4 trắc ngang(Nếu bạn làm giao thông sẽ rất rõ).
3.Trắc ngang nào cũng được DIM từ tim và ở đó có gốc trắc ngang.Hiện tại hình như bạn đang tìm các khung để xác định vị trí.Nếu tìm các gốc trắc ngang sẽ thuận lợi hơn vì khi đó trắc ngang ở bất cứ vị trí nào cũng có thể DIM chính xác.
Mong bác và mọi người giúp đỡ.
:D
  • 0
__Tâm tựa lưu thủY__
Vi nhân nan

#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 March 2010 - 11:49 AM

Trước tiên xin cảm ơn 2 bác rất nhiều.Em đã chạy thử nhưng không được.Nó báo thế này:
Command: gpmb

Ch?n tru?ng h?p: 1

"GPMBR.dwg": Can't find file in search path:
C:\Harmony CAD_Group\NovaTDN16\ (current directory)
C:\Documents and Settings\Windows XP\Desktop\
C:\Documents and Settings\Windows XP\Application Data\Autodesk\AutoCAD
2005\R16.1\enu\support\
C:\Program Files\AutoCAD 2005\support\
C:\Program Files\AutoCAD 2005\fonts\
C:\Program Files\AutoCAD 2005\help\
C:\Program Files\AutoCAD 2005\express\
C:\Program Files\AutoCAD 2005\support\color\
C:\Program Files\AutoCAD 2005\drv\
C:\Program Files\AutoCAD 2005\
*Invalid*


Hoaletrang có thể hướng dẫn cụ thể để sử dụng lisp của bác được không.
1.2 Block GPMB đó có cần phải copy đặt vào đâu không hay chỉ cần tạo trong bản vẽ là được.
2.Em cũng sử dụng khung nhưng khi đặt trong khung sẽ có 2 hoặc 4 trắc ngang(Nếu bạn làm giao thông sẽ rất rõ).
3.Trắc ngang nào cũng được DIM từ tim và ở đó có gốc trắc ngang.Hiện tại hình như bạn đang tìm các khung để xác định vị trí.Nếu tìm các gốc trắc ngang sẽ thuận lợi hơn vì khi đó trắc ngang ở bất cứ vị trí nào cũng có thể DIM chính xác.
Mong bác và mọi người giúp đỡ.
:D

Dịch nghĩa :
"GPMBR.dwg": Can't find file in search path:
C:\Harmony CAD_Group\NovaTDN16\ (current directory)
"GPMBR.dwg": không thể tìm thấy file trong các đường dẫn sau :

Muốn chạy được Lisp trên (như file bạn đã post) -> bạn phải
1./ Đổi tên Block GPMB thành GPMBL
2./ Đổi tên Block as thành GPMBR

Gợi ý : Sử dụng lệnh Rename để đổi
-> Code Lisp của Hoaletrang có 1 nhược điểm : Khi chạy xong bạn sẽ phát hiện ra.
Bạn chạy thử và có ý kiến nhé
Chúc thành công
  • 0

#6 hoaletrang

hoaletrang

    biết vẽ line

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

Đã gửi 24 March 2010 - 01:35 PM

Cảm ơn gia_bach da gợi ý cho tôi về mấy hàm đó, tôi sẽ nghiên cứu lại. Tiện thể ở đây cho tôi hỏi: Làm sao để biết 1 hàm nào đó đã được load?
@w1nDream: Bạn đọc lại lưu ý đi, bạn fải tạo thêm 2 block GPMBL và GPMBR, k đổi tên như Tue_NV được đâu, trường hợp muốn dùng 1 Block thì fai thêm lệnh mirro. Viêc bố trí nhiều trắc trong 1 bản vẽ cg đuoc nhưng bạn fải tuân thủ 1 ngtắc: Tỷ lệ của chúng fải như nhau va mỗi 1 trắc fải đươc bố trí trong những hình chữ nhật co kích thước cố định (Tưởng tượng thôi) co nthế mới dò tìm nhanh được. Tạm thời tôi đang đi ctác k co máy tính nên chưa kiểm chứng được.
@Tue_NV: Có nhược điểm j bác nói luôn đi, ai lại làm khó nhau vậy, bác có nói thì e mới biết ma tiến bộ chứ.
  • 0

#7 w1nDream

w1nDream

    biết lệnh ddedit

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

Đã gửi 24 March 2010 - 02:12 PM

Cảm ơn gia_bach da gợi ý cho tôi về mấy hàm đó, tôi sẽ nghiên cứu lại. Tiện thể ở đây cho tôi hỏi: Làm sao để biết 1 hàm nào đó đã được load?
@w1nDream: Bạn đọc lại lưu ý đi, bạn fải tạo thêm 2 block GPMBL và GPMBR, k đổi tên như Tue_NV được đâu, trường hợp muốn dùng 1 Block thì fai thêm lệnh mirro. Viêc bố trí nhiều trắc trong 1 bản vẽ cg đuoc nhưng bạn fải tuân thủ 1 ngtắc: Tỷ lệ của chúng fải như nhau va mỗi 1 trắc fải đươc bố trí trong những hình chữ nhật co kích thước cố định (Tưởng tượng thôi) co nthế mới dò tìm nhanh được. Tạm thời tôi đang đi ctác k co máy tính nên chưa kiểm chứng được.
@Tue_NV: Có nhược điểm j bác nói luôn đi, ai lại làm khó nhau vậy, bác có nói thì e mới biết ma tiến bộ chứ.


Thanks bác nhiều.Em chạy thử được rồi.Rename như bác TUE vẫn được mà.Nhưng chắc chắn trong bản vẽ phải có 2 block GPMBL và GPMBR.
Em thường xếp trắc ngang như thế này:
http://www.cadviet.c...8__km9_xxxx.dwg
Bác nghiên cứu hộ em làm thế nào với.
:D
  • 0
__Tâm tựa lưu thủY__
Vi nhân nan

#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 March 2010 - 04:09 PM

......
@Tue_NV: Có nhược điểm j bác nói luôn đi, ai lại làm khó nhau vậy, bác có nói thì e mới biết ma tiến bộ chứ.

Ôii Tue_NV có làm khó gì bạn đâu. Oan uổng quá :D
Mình cứ nghĩ bạn w1nDream chạy Lisp xong sẽ phát hiện ra chứ?

Khi chạy Lisp xong : Trong bản vẽ có cả 2 trường hợp như bạn w1nDream đã upload thì khi Chọn truòng hợp 1 : thì Lisp vẽ DIM luôn cho cả 2 trường hợp.
Nếu chọn trường hợp 1 thì trường hợp 1 vẽ đúng, trường hợp 2 vẽ sai và ngược lại

@ hoaletrang : Bạn đã Test thử trường hợp đổi tên Block bằng lệnh Rename theo cách của Tue_NV chưa mà kiu là hổng được dzậy? :cheers:

....
Em thường xếp trắc ngang như thế này:
http://www.cadviet.c...8__km9_xxxx.dwg
Bác nghiên cứu hộ em làm thế nào với.
:D

Nghiên cứu gì dzậy bạn? Mình chưa hiểu??
  • 0

#9 w1nDream

w1nDream

    biết lệnh ddedit

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

Đã gửi 24 March 2010 - 04:54 PM

@ Tue_NV :Mình cứ nghĩ bạn w1nDream chạy Lisp xong sẽ phát hiện ra chứ?
Khi chạy Lisp xong : Trong bản vẽ có cả 2 trường hợp như bạn w1nDream đã upload thì khi Chọn truòng hợp 1 : thì Lisp vẽ DIM luôn cho cả 2 trường hợp.
Nếu chọn trường hợp 1 thì trường hợp 1 vẽ đúng, trường hợp 2 vẽ sai và ngược lại

Không bác à.Em biết điều đó roài.Nhưng Hoaletrang đã bảo là tách ra 2 TH để chạy chứ không để chung như thế nữa.Nhưng em hơi tham nên vẫn muốn điều anh Tue fát hiện- đó là làm được cả 2 TH luôn.TH 2 khác TH 1 ở chỗ trắc ngang TH 2 có nhà nên mới fải GPMB ngay chân taluy.Nếu được các bác fát triển thêm hộ em với.

@ Tue_NV :nghiên cứu gì dzậy bạn? Mình chưa hiểu??

File của em có nhiều trắc ngang.có thể là 2 , 3 , 4 trắc ngang trong 1 khung và được sắp xếp như bản vẽ em đã up.Mà em chạy lisp trên cho bản vẽ này thì không được.Nên em không biết là phải làm thêm động tác jì nữa không hay có thể sửa lisp để làm được.
:D
  • 0
__Tâm tựa lưu thủY__
Vi nhân nan

#10 hoaletrang

hoaletrang

    biết vẽ line

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

Đã gửi 25 March 2010 - 12:25 AM

Bạn thử lại code này nhé:
(DEFUN C:gpmb(/ TH SS Index PtIns Ent PtM PtL PtR SSL SSR LenSSL LenSSR LstPtXL LstPtXR
XL XR YL YR I PtDimLine)
(ACET-ERROR-INIT (LIST (LIST "OSMODE" 0 "CLAYER" "DIM" "CMDECHO" 0) T))
(setq TH (getstring "\nChoòn trýõÌng hõòp: "))
(setq ss (ssget "X" '((0 . "INSERT") (2 . "Dau_co")))
Index 0)
(while (setq Ent (ssname ss Index))
(setq PtIns (cdr (assoc 10 (entget ent)))
PtM (polar PtIns (/ pi 2) -10))
(command "Zoom" "c" PtM 25)
(setq PtL (polar PtM pi 20);Dieu chinh cho nay cho phu hop
PtR (polar PtM 0 20)
PtM (polar PtM (/ pi 2) 1)
SSL (ssget "c" PtM PtL '((0 . "LINE") (8 . "ENTTNTHIETKE")))
SSR (ssget "c" PtM PtR '((0 . "LINE") (8 . "ENTTNTHIETKE")))
Index (1+ Index))
(setq LenSSL (sslength SSL)
I 0
LstPtXL Nil)
(while (< I LenSSL)
(Setq LstPtXL (append LstPtXL (list(cadr (assoc 10 (entget (ssname SSL I)))))) I (1+ I))
)
(Setq XL (nth 0 (vl-sort LstPtXL '<)))
(setq LenSSR (sslength SSR)
I 0
LstPtXR Nil)
(while (< I LenSSR)
(Setq LstPtXR (append LstPtXR (list(cadr (assoc 10 (entget (ssname SSR I)))))) I (1+ I))
)
(Setq XR (nth 0 (vl-sort LstPtXR '>)))
(setq I 0)
(while (< I LenSSL)
(if (= (cadr (assoc 10 (entget (ssname SSL I)))) XL)
(setq YL (caddr (assoc 10 (entget (ssname SSL I)))))
)
(setq I (1+ I))
)
(setq I 0)
(while (< I LenSSR)
(if (= (cadr (assoc 10 (entget (ssname SSR I)))) XR)
(setq YR (caddr (assoc 10 (entget (ssname SSR I)))))
)
(setq I (1+ I))
)
(setq PtL (polar (list XL YL 0.0) pi 1.5))
(if (= TH "1")
(setq PtR (polar (list XR YR 0.0) 0 1.5))
(setq PtR (list XR YR 0.0))
)
(command "Insert" "GPMB" PtL "" "" "" )
(command "Insert" "GPMB" PtR "" "" "")
(command "mirror" "l" "" PtR (polar PtR (/ pi 2) 5) "y")
(setq PtM (polar PtM (/ pi 2) 5)
PtL (list (car PtL) (cadr PtM) 0.0)
PtR (list (car PtR) (cadr PtM) 0.0)
PtDimLine (polar PtM (/ Pi 2) 2))
(command "_dimlinear" PtL PtM PtDimLine)
(command "_dimlinear" PtM PtR PtDimLine)
)
(command "zoom" "e")
(acet-error-restore)
)
Có thay đổi: Bạn chỉ cần tạo một khối mốc lộ giới Trái với tên GPMB, tôi dx bổ sung chức năng Mirror để chuyển nó sang bên phải.
Lưu ý: - Điểm chèn (Insert Point) của Block đặt trong Block đừng để xa tít mù tắp như cái Block GPMB ban đầu cảu bạn. Vì rất khó xác định điểm chèn Block trên mặt đất tự nhiên nên tôi chỉ xác định được cao độ của chân đường đắp hoặc đỉnh đường đào thôi.
- Vùng chọn các đối tượng tôi tính từ tâm ra mỗi phía 20m nên nếu các trắc ngang có khoảng cách từ tim đến chân đường đắp hoặc đỉnh đường đào lớn hơn 20m thì sẽ ko xác định được, nếu có chỗ nào lớn hơn thì chuyển riêng trắc đó vào một file và chỉnh các dòng như chú thích trong code cho phù hợp, không chỉnh tổng thể vì sẽ dễ bị chọn nhầm sang các trắc khác.
  • 1

#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 25 March 2010 - 05:16 AM

Lưu ý: - Điểm chèn (Insert Point) của Block đặt trong Block đừng để xa tít mù tắp như cái Block GPMB ban đầu cảu bạn. Vì rất khó xác định điểm chèn Block trên mặt đất tự nhiên nên tôi chỉ xác định được cao độ của chân đường đắp hoặc đỉnh đường đào thôi.

Mình chỉ góp ý nhỏ với bạn W1ndream :
Nếu bạn đã trót để cái Block với điểm chèn (Insert Point) của nó "xa tít tắp mù khơi" so với vị trí của nó (trên toàn bộ bản vẽ của bạn : hơn 1000 trắc ngang như bạn đã nói ) thì bạn có thể vô đây để mà chỉnh lại.
Dùng CAD hoặc Lisp để mà chỉnh lại. Tốt nhất là dùng CAD để mà chỉnh, để khỏi phải nhớ lệnh Lisp đau đầu.
Đổi điểm chèn sau khi đã chèn block khắp nơi

Em thường xếp trắc ngang như thế này:
http://www.cadviet.c...8__km9_xxxx.dwg
Bác nghiên cứu hộ em làm thế nào với.
:cheers:


File của em có nhiều trắc ngang.có thể là 2 , 3 , 4 trắc ngang trong 1 khung và được sắp xếp như bản vẽ em đã up.Mà em chạy lisp trên cho bản vẽ này thì không được.Nên em không biết là phải làm thêm động tác jì nữa không hay có thể sửa lisp để làm được.
:D


Rất xin lỗi bạn, bởi lẽ mình không là bạn nên chẳng biết được kết quả thu lại là gì???? Bạn thử nhìn lại bản vẽ của bạn xem. Chẳng biết kết quả thu lại là gì cả?
  • 0

#12 w1nDream

w1nDream

    biết lệnh ddedit

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

Đã gửi 26 March 2010 - 12:25 PM

Có thay đổi: Bạn chỉ cần tạo một khối mốc lộ giới Trái với tên GPMB, tôi dx bổ sung chức năng Mirror để chuyển nó sang bên phải.
Lưu ý: - Điểm chèn (Insert Point) của Block đặt trong Block đừng để xa tít mù tắp như cái Block GPMB ban đầu cảu bạn. Vì rất khó xác định điểm chèn Block trên mặt đất tự nhiên nên tôi chỉ xác định được cao độ của chân đường đắp hoặc đỉnh đường đào thôi.
- Vùng chọn các đối tượng tôi tính từ tâm ra mỗi phía 20m nên nếu các trắc ngang có khoảng cách từ tim đến chân đường đắp hoặc đỉnh đường đào lớn hơn 20m thì sẽ ko xác định được, nếu có chỗ nào lớn hơn thì chuyển riêng trắc đó vào một file và chỉnh các dòng như chú thích trong code cho phù hợp, không chỉnh tổng thể vì sẽ dễ bị chọn nhầm sang các trắc khác.


Thanks bác nhiều.Em làm được roài.Những cái còn lại chịu khó thủ công tí vậy.Được thế là ngon lắm roài.
:cheers:

Rất xin lỗi bạn, bởi lẽ mình không là bạn nên chẳng biết được kết quả thu lại là gì???? Bạn thử nhìn lại bản vẽ của bạn xem. Chẳng biết kết quả thu lại là gì cả?


Sorry bác Tuệ nha!Em lười nên file trên em đã thể hiện kết quả và file sau chỉ là file bố trí của em thôi chứ em không thể hiện kết quả lên đó nữa.Rất cảm ơn bác đã quan tâm.
:D
  • 0
__Tâm tựa lưu thủY__
Vi nhân nan

#13 hungtv0102

hungtv0102

    biết vẽ line

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

Đã gửi 17 November 2010 - 09:41 AM

Bạn thử lại code này nhé:

(DEFUN C:gpmb(/ TH SS Index PtIns Ent PtM PtL PtR SSL SSR LenSSL LenSSR LstPtXL LstPtXR
XL XR YL YR I PtDimLine)
(ACET-ERROR-INIT (LIST (LIST "OSMODE" 0 "CLAYER" "DIM" "CMDECHO" 0) T))
(setq TH (getstring "\nChoòn trýõÌng hõòp: "))
(setq ss (ssget "X" '((0 . "INSERT") (2 . "Dau_co")))
Index 0)
(while (setq Ent (ssname ss Index))
(setq PtIns (cdr (assoc 10 (entget ent)))
PtM (polar PtIns (/ pi 2) -10))
(command "Zoom" "c" PtM 25)
(setq PtL (polar PtM pi 20);Dieu chinh cho nay cho phu hop
PtR (polar PtM 0 20)
PtM (polar PtM (/ pi 2) 1)
SSL (ssget "c" PtM PtL '((0 . "LINE") (8 . "ENTTNTHIETKE")))
SSR (ssget "c" PtM PtR '((0 . "LINE") (8 . "ENTTNTHIETKE")))
Index (1+ Index))
(setq LenSSL (sslength SSL)
I 0
LstPtXL Nil)
(while (< I LenSSL)
(Setq LstPtXL (append LstPtXL (list(cadr (assoc 10 (entget (ssname SSL I)))))) I (1+ I))
)
(Setq XL (nth 0 (vl-sort LstPtXL '<)))
(setq LenSSR (sslength SSR)
I 0
LstPtXR Nil)
(while (< I LenSSR)
(Setq LstPtXR (append LstPtXR (list(cadr (assoc 10 (entget (ssname SSR I)))))) I (1+ I))
)
(Setq XR (nth 0 (vl-sort LstPtXR '>)))
(setq I 0)
(while (< I LenSSL)
(if (= (cadr (assoc 10 (entget (ssname SSL I)))) XL)
(setq YL (caddr (assoc 10 (entget (ssname SSL I)))))
)
(setq I (1+ I))
)
(setq I 0)
(while (< I LenSSR)
(if (= (cadr (assoc 10 (entget (ssname SSR I)))) XR)
(setq YR (caddr (assoc 10 (entget (ssname SSR I)))))
)
(setq I (1+ I))
)
(setq PtL (polar (list XL YL 0.0) pi 1.5))
(if (= TH "1")
(setq PtR (polar (list XR YR 0.0) 0 1.5))
(setq PtR (list XR YR 0.0))
)
(command "Insert" "GPMB" PtL "" "" "" )
(command "Insert" "GPMB" PtR "" "" "")
(command "mirror" "l" "" PtR (polar PtR (/ pi 2) 5) "y")
(setq PtM (polar PtM (/ pi 2) 5)
PtL (list (car PtL) (cadr PtM) 0.0)
PtR (list (car PtR) (cadr PtM) 0.0)
PtDimLine (polar PtM (/ Pi 2) 2))
(command "_dimlinear" PtL PtM PtDimLine)
(command "_dimlinear" PtM PtR PtDimLine)
)
(command "zoom" "e")
(acet-error-restore)
)
Có thay đổi: Bạn chỉ cần tạo một khối mốc lộ giới Trái với tên GPMB, tôi dx bổ sung chức năng Mirror để chuyển nó sang bên phải.
Lưu ý: - Điểm chèn (Insert Point) của Block đặt trong Block đừng để xa tít mù tắp như cái Block GPMB ban đầu cảu bạn. Vì rất khó xác định điểm chèn Block trên mặt đất tự nhiên nên tôi chỉ xác định được cao độ của chân đường đắp hoặc đỉnh đường đào thôi.
- Vùng chọn các đối tượng tôi tính từ tâm ra mỗi phía 20m nên nếu các trắc ngang có khoảng cách từ tim đến chân đường đắp hoặc đỉnh đường đào lớn hơn 20m thì sẽ ko xác định được, nếu có chỗ nào lớn hơn thì chuyển riêng trắc đó vào một file và chỉnh các dòng như chú thích trong code cho phù hợp, không chỉnh tổng thể vì sẽ dễ bị chọn nhầm sang các trắc khác.


Chào bác Holetrang và các Bác !
Tôi thấy cái lisp bác viết rất hay và hữu ích cho anh em làm GT – Đường. Tuy nhiên để lisp có thể vận dụng trong nhiều trường hợp hơn . Bác có thể phát triển lisp thêm nhiều lựa chọn hơn ví dụ như sau:
1. Chọn Trường hợp GPMB bên trái – phải – hai bên (T/P/2B).
2. Chọn khoảng cách GPMB tư chân ta luy (nhập gia trị).
3. Chọn Khoảng cách vẽ cọc GPMB (nhập KC).

(Ghi chú: vì thông thường không phải cọc nào cũng chèn Block GPMB như lisp hiện tại.
mà khoảng 50 – 100 m mới chèn 1 Block GPMB. Khoảng cách này có thể chọn dựa vào lý trình TN đầu tiện nếu trong trường hợp các TN tiếp theo cách TN đầu không đúng KC nhập vào thì có thể Block GPMB có thể chèn vào TN ngần với KC đấy nhất.)

Kính mong bác Hoaletrang và các Bác Pro Cadviet cố ngắng Phát triển giúp anh em vì cái này anh em làm GT rất cần hiện tại anh em vẫn phải làm tay các thao tác này rất lâu và vất vả.
Chân thành cảm ơn!
  • 0

#14 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 17 November 2010 - 10:51 AM

Bạn thử lại code này nhé:

(DEFUN C:gpmb(/ TH SS Index PtIns Ent PtM PtL PtR SSL SSR LenSSL LenSSR LstPtXL LstPtXR
XL XR YL YR I PtDimLine)
(ACET-ERROR-INIT (LIST (LIST "OSMODE" 0 "CLAYER" "DIM" "CMDECHO" 0) T))
(setq TH (getstring "\nChoòn trýõÌng hõòp: "))
(setq ss (ssget "X" '((0 . "INSERT") (2 . "Dau_co")))
Index 0)
(while (setq Ent (ssname ss Index))
(setq PtIns (cdr (assoc 10 (entget ent)))
PtM (polar PtIns (/ pi 2) -10))
(command "Zoom" "c" PtM 25)
(setq PtL (polar PtM pi 20);Dieu chinh cho nay cho phu hop
PtR (polar PtM 0 20)
PtM (polar PtM (/ pi 2) 1)
SSL (ssget "c" PtM PtL '((0 . "LINE") (8 . "ENTTNTHIETKE")))
SSR (ssget "c" PtM PtR '((0 . "LINE") (8 . "ENTTNTHIETKE")))
Index (1+ Index))
(setq LenSSL (sslength SSL)
I 0
LstPtXL Nil)
(while (< I LenSSL)
(Setq LstPtXL (append LstPtXL (list(cadr (assoc 10 (entget (ssname SSL I)))))) I (1+ I))
)
(Setq XL (nth 0 (vl-sort LstPtXL '<)))
(setq LenSSR (sslength SSR)
I 0
LstPtXR Nil)
(while (< I LenSSR)
(Setq LstPtXR (append LstPtXR (list(cadr (assoc 10 (entget (ssname SSR I)))))) I (1+ I))
)
(Setq XR (nth 0 (vl-sort LstPtXR '>)))
(setq I 0)
(while (< I LenSSL)
(if (= (cadr (assoc 10 (entget (ssname SSL I)))) XL)
(setq YL (caddr (assoc 10 (entget (ssname SSL I)))))
)
(setq I (1+ I))
)
(setq I 0)
(while (< I LenSSR)
(if (= (cadr (assoc 10 (entget (ssname SSR I)))) XR)
(setq YR (caddr (assoc 10 (entget (ssname SSR I)))))
)
(setq I (1+ I))
)
(setq PtL (polar (list XL YL 0.0) pi 1.5))
(if (= TH "1")
(setq PtR (polar (list XR YR 0.0) 0 1.5))
(setq PtR (list XR YR 0.0))
)
(command "Insert" "GPMB" PtL "" "" "" )
(command "Insert" "GPMB" PtR "" "" "")
(command "mirror" "l" "" PtR (polar PtR (/ pi 2) 5) "y")
(setq PtM (polar PtM (/ pi 2) 5)
PtL (list (car PtL) (cadr PtM) 0.0)
PtR (list (car PtR) (cadr PtM) 0.0)
PtDimLine (polar PtM (/ Pi 2) 2))
(command "_dimlinear" PtL PtM PtDimLine)
(command "_dimlinear" PtM PtR PtDimLine)
)
(command "zoom" "e")
(acet-error-restore)
)
Có thay đổi: Bạn chỉ cần tạo một khối mốc lộ giới Trái với tên GPMB, tôi dx bổ sung chức năng Mirror để chuyển nó sang bên phải.
Lưu ý: - Điểm chèn (Insert Point) của Block đặt trong Block đừng để xa tít mù tắp như cái Block GPMB ban đầu cảu bạn. Vì rất khó xác định điểm chèn Block trên mặt đất tự nhiên nên tôi chỉ xác định được cao độ của chân đường đắp hoặc đỉnh đường đào thôi.
- Vùng chọn các đối tượng tôi tính từ tâm ra mỗi phía 20m nên nếu các trắc ngang có khoảng cách từ tim đến chân đường đắp hoặc đỉnh đường đào lớn hơn 20m thì sẽ ko xác định được, nếu có chỗ nào lớn hơn thì chuyển riêng trắc đó vào một file và chỉnh các dòng như chú thích trong code cho phù hợp, không chỉnh tổng thể vì sẽ dễ bị chọn nhầm sang các trắc khác.

các bác cho e hỏi lệnh dùng cho líp này là lệnh gì vậy? em đã sử dụng lệnh GPMB mà không được. thanks các bác nhiều nhieu
  • 0

#15 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 17 November 2010 - 02:10 PM

hoaletrang có sử dụng lệnh CTK (copy các đối tượng theo trắc ngang) trong nova chưa? Mình nghĩ nên viết lisp này theo cách mà nova làm. Việc thao tác với các đối tượng nova nên tận dụng cơ sở dữ liệu mở rộng của chúng, sẽ dễ lập trình hơn nhiều bạn ạ
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#16 incc

incc

    Chưa sử dụng CAD

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

Đã gửi 29 November 2010 - 11:52 AM

Chào bác Holetrang và các Bác !
Tôi thấy cái lisp bác viết rất hay và hữu ích cho anh em làm GT – Đường. Tuy nhiên để lisp có thể vận dụng trong nhiều trường hợp hơn . Bác có thể phát triển lisp thêm nhiều lựa chọn hơn ví dụ như sau:
1. Chọn Trường hợp GPMB bên trái – phải – hai bên (T/P/2B).
2. Chọn khoảng cách GPMB tư chân ta luy (nhập gia trị).
3. Chọn Khoảng cách vẽ cọc GPMB (nhập KC).

(Ghi chú: vì thông thường không phải cọc nào cũng chèn Block GPMB như lisp hiện tại.
mà khoảng 50 – 100 m mới chèn 1 Block GPMB. Khoảng cách này có thể chọn dựa vào lý trình TN đầu tiện nếu trong trường hợp các TN tiếp theo cách TN đầu không đúng KC nhập vào thì có thể Block GPMB có thể chèn vào TN ngần với KC đấy nhất.)

Kính mong bác Hoaletrang và các Bác Pro Cadviet cố ngắng Phát triển giúp anh em vì cái này anh em làm GT rất cần hiện tại anh em vẫn phải làm tay các thao tác này rất lâu và vất vả.
Chân thành cảm ơn!


Em thấy chủ đề này rất hay và cần thiết cho các anh em làm TK giao thông.
Hiên tại em cũng đang phait làm tay tất cả các công việc (mất nhiều thời gian) Kinh mong các bác giúp đỡ sửa lại đoạn líp trên để hoàn thiện hơn.
  • 0

#17 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 28 September 2013 - 09:24 AM

Chào bác, cái này em thấy rất hay và em cũng thường phải dùng đến, nhưng nhờ bác sửa lại tý em nghĩ là tổng quát hơn không còn bó gọn trong 2 trường hợp của bác w1nDream nêu ra nữa.

Cụ thể bác sẽ cho nhận 2 giá trị: Khoảng cách từ chân taluy trái ra bên trái và từ chân taluy phải sang phải.

Như vậy sẽ có trường hợp tổng quát nhất, thích cắm cọc cách chân bao nhiêu cũng được, không còn phải bó buộc trong trường hợp cách chân 1,5m và tại chân nữa.

Thứ 2, tên cọc GPMB; thường thì bọn em lấy trùng với tên cọc tuyến (VD cọc KM8 hoặc cọc 333 như trên bản vẽ) và thêm vào chữ T hoặc P để thể hiện nó ở bên trái hay bên phải. vậy nên các block GPMBL và GPMBR bác để dạng Attribute của cái chữ GPMB rồi lấy cái tên cọc trên trắc ngang thêm vào chữ T hoặc P nữa để thể hiện.

Thêm 1 phát nữa bác làm cho quả thống kê luôn (gồm tên cọc, cách tim bên trái, cách tim bên phải) xuất ra file text bác à vì cái này còn phải đưa vào bản vẽ mặt bằng để xuất tọa độ cho từng cọc GPMB để cắm tại hiện trường nữa.

Hơi nhiều yêu cầu bác nhỉ, nhưng bác thương rồi thì thương cho trót làm giúp em thêm tý nữa cho trọn.

Thank bác nhiều nhiều.


  • 0

#18 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 28 September 2013 - 10:49 AM

Còn 1 ý nữa quên, nhờ bác fix luôn giúp cho.

Hình như trong lisp của bác yêu cầu current Dim style là dimGPMB và lớp hiện thời là lớp Dim, vậy bác cho nó auto thiết lập các lớp và Dim style đó luôn, chứ để đặt nhỡ sai chính tả nó lại không thực hiện được.

lần nữa cảm ơn bác.


  • 0

#19 dangky2510

dangky2510

    biết vẽ circle

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

Đã gửi 14 October 2015 - 05:48 PM

Chào các bác, mình cũng đang cắm cọc gpmb như chủ top. Mình đang dùng bản của hoaletrang nhưng bản trắc ngang của chủ top thì chạy đươc còn trắc ngang của mình thì lại ko chạy được, bác nào đi qua dừng lại 1 chút xem hộ mình với nhé. Thanks

P/s: D D D.dwg là file của chủ top; TD km27-28.dwg là của mìnhhttp://www.cadviet.com/upfiles/5/

 http://www.cadviet.c.../64560_dddd.dwg


  • 0

#20 dangky2510

dangky2510

    biết vẽ circle

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

Đã gửi 06 April 2016 - 03:30 PM

Bạn thử lại code này nhé:

(DEFUN C:gpmb(/ TH SS Index PtIns Ent PtM PtL PtR SSL SSR LenSSL LenSSR LstPtXL LstPtXR
		  XL XR YL YR I PtDimLine) 
(ACET-ERROR-INIT (LIST (LIST "OSMODE" 0 "CLAYER" "DIM" "CMDECHO" 0) T))
(setq TH (getstring "\nChoòn trýõÌng hõòp: "))
(setq ss (ssget "X" '((0 . "INSERT") (2 . "Dau_co")))
	  Index 0)
  (while (setq Ent (ssname ss Index))
	(setq PtIns (cdr (assoc 10 (entget ent)))	
	  PtM (polar PtIns (/ pi 2) -10))
	(command "Zoom" "c" PtM 25)
	(setq PtL (polar PtM pi 20);Dieu chinh cho nay cho phu hop
	  PtR (polar PtM 0 20)
	  PtM (polar PtM (/ pi 2) 1)
	  SSL (ssget "c" PtM PtL '((0 . "LINE") (8 . "ENTTNTHIETKE")))
	  SSR (ssget "c" PtM PtR '((0 . "LINE") (8 . "ENTTNTHIETKE")))
	  Index (1+ Index))
	(setq LenSSL (sslength SSL)
	  I 0
	  LstPtXL Nil)
	(while (< I LenSSL)
	  (Setq LstPtXL (append LstPtXL (list(cadr (assoc 10 (entget (ssname SSL I)))))) I (1+ I))
	)
	(Setq XL (nth 0 (vl-sort LstPtXL '<)))
	(setq LenSSR (sslength SSR)
	  I 0
	  LstPtXR Nil)
	(while (< I LenSSR)
	  (Setq LstPtXR (append LstPtXR (list(cadr (assoc 10 (entget (ssname SSR I)))))) I (1+ I))
	)
	(Setq XR (nth 0 (vl-sort LstPtXR '>)))
	(setq I 0)
	(while (< I LenSSL)
	  (if (= (cadr (assoc 10 (entget (ssname SSL I)))) XL)
	(setq YL  (caddr (assoc 10 (entget (ssname SSL I)))))
	  )
	  (setq I (1+ I))
	)
	(setq I 0)
	(while (< I LenSSR)
	  (if (= (cadr (assoc 10 (entget (ssname SSR I)))) XR)
	(setq YR  (caddr (assoc 10 (entget (ssname SSR I)))))
	  )
	  (setq I (1+ I))
	)	
	(setq PtL (polar (list XL YL 0.0) pi 1.5))
	(if (= TH "1")
	  (setq PtR (polar (list XR YR 0.0) 0 1.5))
	  (setq PtR (list XR YR 0.0))
	)
	(command "Insert" "GPMB" PtL "" "" "" )
	(command "Insert" "GPMB" PtR "" "" "")
	(command "mirror" "l" "" PtR (polar PtR (/ pi 2) 5) "y")	
	(setq PtM (polar PtM (/ pi 2) 5)
	  PtL (list (car PtL) (cadr PtM) 0.0)
	  PtR (list (car PtR) (cadr PtM) 0.0) 
	  PtDimLine (polar PtM (/ Pi 2) 2))
	(command "_dimlinear" PtL PtM PtDimLine)
	(command "_dimlinear" PtM PtR PtDimLine)  
  )
  (command "zoom" "e")
  (acet-error-restore)
)
Có thay đổi: Bạn chỉ cần tạo một khối mốc lộ giới Trái với tên GPMB, tôi dx bổ sung chức năng Mirror để chuyển nó sang bên phải.
Lưu ý: - Điểm chèn (Insert Point) của Block đặt trong Block đừng để xa tít mù tắp như cái Block GPMB ban đầu cảu bạn. Vì rất khó xác định điểm chèn Block trên mặt đất tự nhiên nên tôi chỉ xác định được cao độ của chân đường đắp hoặc đỉnh đường đào thôi.
- Vùng chọn các đối tượng tôi tính từ tâm ra mỗi phía 20m nên nếu các trắc ngang có khoảng cách từ tim đến chân đường đắp hoặc đỉnh đường đào lớn hơn 20m thì sẽ ko xác định được, nếu có chỗ nào lớn hơn thì chuyển riêng trắc đó vào một file và chỉnh các dòng như chú thích trong code cho phù hợp, không chỉnh tổng thể vì sẽ dễ bị chọn nhầm sang các trắc khác.

 

Mình đang dùng lisp này của bạn, các trắc ngang khác không sao đến mấy trắc ngang mình up dưới đây lại lỗi. Bro nào tiện đường đi qua xem giúp mình với nhé

Thank!

Lisp: http://www.cadviet.c.../64560_gpmb.lsp

DWG: http://www.cadviet.c...4560_test_1.dwg


  • 0