Đến nội dung


Hình ảnh
- - - - -

[Xin lisp] 10- LTRUC : lệnh chèn cột vào lưới trục (như Revit)


  • Please log in to reply
8 replies to this topic

#1 alpha1810

alpha1810

    biết pan

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

Đã gửi 01 April 2013 - 03:21 PM

Mình tìm hoài lisp chèn cột vào lưới trục mà ko có, thấy có trong bài dưới này nhưng down về lại ko chưa lisp đó. Ai có cho mình xin nha. Thanks.
-----------------------------------------------------------------------------------
1- CD : lệnh cắt chân Dim
2- CT : lệnh copy số tăng 1 đơn vị (1 copy ra 2, A copy ra B,...)
3- FR : lệnh nối 2 đoạn thẳng (như trim của Revit)
4- HB : lệnh hatch nhanh (gạch, kính, bê tông)
5- NN : lệnh nối các đường thành polyline
6- DV : lệnh chia khoảng cách đều nhau giữa 2 điểm (như lệnh DIV nhưng hay hơn)

7- ADVT : lệnh thêm nút điều khiển cho đối tượng
8- DBL : lệnh chọn điểm chèn mới cho block (cơ bản)
9- WO : lệnh tạo nhanh wipeout bằng cách pick điểm (vào miền kín)
10- LTRUC : lệnh chèn cột vào lưới trục (như Revit)
11- VTB1 : lệnh vẽ nhanh hình cắt (thấy) thang 1 vế
12- CVAV_1_04 : Lisp trị virus trong Acad (load để tiêm chủng)

----------------------
Mở rộng: Do Lisp cũng là lệnh nên ta có thể đặt lệnh tắt cho nó. Ví dụ:
1- CD - hiểu là cắt dim
2- CT - hiểu là copy tăng
3- FR - tương đương tổ hợp lệnh F-spacebar, R-spacebar, 0-spacebar. 
4- HB - có thể đặt lại là HN - hiểu là hatch nhanh
5- NN - 2 ký tự trùng (theo quy tắc đặt lệnh tắt)
6- DV - 2 ký tự gần nhau (theo quy tắc đặt lệnh tắt)
7- ADVT - có thể đặt lại là ADD 
8- DBL - có thể đặt lại là DDC - hiểu là đổi điểm chèn
9- WO - có thể đặt là WW (W - đã đặt cho Wipeout và lệnh gốc)
(wblock ít dùng ta gán là WWW)
10- LTRUC - ít dùng nên có thể khỏi đặt lệnh tắt
11- VTB1 - có thể đặt lại là VTN - hiểu là vẽ thang nhanh


  • 0

#2 alpha1810

alpha1810

    biết pan

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

Đã gửi 04 April 2013 - 02:34 PM

Hix...ai biết tìm dùm mình với. Thanks


  • 0

#3 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 05 April 2013 - 10:01 AM

Hix...ai biết tìm dùm mình với. Thanks

Hề hề hề,

Mình chả hiểu cái cột gì ở đây cả. Mấy bác Pro nói toàn từ chuyên môn như đánh đố nhau vậy. Cột chi vậy, cột điện hay cột cờ, cột cái hay cột con??? Lưới trục nào vậy, trục x hay trục y, trục lớn hay trục nhỏ ??? 

Muốn hỏi hay yêu cầu gì thì cần phải post bản vẽ mô tả cái yêu cầu đó lên. Nếu không thì ..... Hãy đơi đấy.


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

#4 alpha1810

alpha1810

    biết pan

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

Đã gửi 15 April 2013 - 02:44 PM

phamthanhbinh: Yêu cầu của em đây a.

File đính kèm.videohttp://www.cadviet.c...33456_ltruc.rar


  • 0

#5 thehost31

thehost31

    biết vẽ line

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

Đã gửi 25 April 2013 - 10:48 PM

Không biết ý bạn có phải là chọn hệ lưới trục ngang và dọc sẽ chèn các cột vào vị trí giao của hai hệ lưới. Nếu đúng ý thì hy vọng cái này sẽ dùng được.

 

(defun Str_Split(Root_string separate / Sep_len Olist temp_str si stri)
(setq Sep_len (strlen separate)
Olist '()
temp_str ""
si 1
)
(while (<= si (strlen Root_string))
(setq stri (substr Root_string si Sep_len))
(if (= stri separate)
(setq Olist (append Olist (list temp_str))
temp_str ""
si (+ si Sep_len -1)
)
(setq temp_str (strcat temp_str (substr Root_string si 1)))
)
(setq si (1+ si))
)
(setq Olist (append Olist (list temp_str)))
)
;==============================================================
(defun Get-intesect(ent1 ent2 Extend / obj1 obj2 inter Out Cnt)
(vl-load-com)
(setq obj1 (vlax-ename->vla-object ent1)
obj2 (vlax-ename->vla-object ent2)
)
(if Extend
(setq inter (vlax-variant-value (vla-IntersectWith obj1 obj2 acExtendBoth)))
(setq inter (vlax-variant-value (vla-IntersectWith obj1 obj2 acExtendNone)))
)
(if (/= (vlax-safearray-get-u-bound inter 1) -1)
(setq inter (vlax-safearray->list inter))
(setq inter nil)
)
(if inter
(progn
(setq Cnt (fix (/ (length inter) 3)) Out nil)
(repeat Cnt (setq Out (append Out (list (list (car inter) (cadr inter) (caddr inter)))) inter (cdddr inter)))
)
(setq Out nil)
)
Out
)
;==============================================================
(defun C:ktcot(/ ktc_string)
(setq ktc_string (getstring "\nKích th\U+01B0\U+1EDBc c\U+1ED9t: "))
(setq #KT_list (STR_SPLIT ktc_string "x")
#KT_list (mapcar 'atof #KT_list)
)
(setq check nil)
(if (/= (length #KT_list) 2)
(setq check T)
(if (OR (<= (car #KT_list) 0.0) (<= (cadr #KT_list) 0.0))
(setq check T)
)
)
(if check
(progn (princ "\nVui lòng nh\U+1EADp l\U+1EA1i.") (C:ktcot))
)
(princ)
(princ)
)
;==============================================================
(defun Draw_colunm(pt Ang / dai rong ptt1 ptt2 p1 p2 p3 p4 mspace ptlist tmp poly)
(setq dai (car #KT_list)
rong (cadr #KT_list)

)
(setq ptt1 (polar pt Ang (* 0.5 rong))
p1 (polar ptt1 (+ Ang (* 0.5 pi)) (* 0.5 dai))
p2 (polar ptt1 (- Ang (* 0.5 pi)) (* 0.5 dai))
ptt2 (polar pt (- Ang pi) (* 0.5 rong))
p3 (polar ptt2 (- Ang (* 0.5 pi)) (* 0.5 dai))
p4 (polar ptt2 (+ Ang (* 0.5 pi)) (* 0.5 dai))
)
(setq mspace (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(setq ptlist (apply 'append (list p1 p2 p3 p4 p1)))
(if (= (rem (length ptlist) 3) 0)
(progn
(setq tmp (vlax-make-safearray vlax-vbDouble (cons 0 (- (length ptlist) 1))))
(vlax-safearray-fill tmp ptlist)
(setq poly (vla-addPolyline mspace tmp))
)
)
)
;==============================================================
(defun c:col(/ ssgrid Gp_list Goc_list si gridi gridj sj giao)
(if (not #KT_list) (C:KTCOT))
(setq ssgrid (ssget '((0 . "LINE,POLYLINE,LWPOLYLINE")))
Gp_list '()
Goc_list '()
si 0
)
(while (> (sslength ssgrid) 0)
(setq gridi (ssname ssgrid si)
ssgrid (ssdel gridi ssgrid)
sj 0
)
(while (< sj (sslength ssgrid))
(setq gridj (ssname ssgrid sj))
(setq giao (GET-INTESECT gridi gridj nil))
(if giao
(setq Gp_list (append Gp_list (list (car giao)))
Goc_list (append Goc_list (list (angle (car giao) (cdr (assoc 10 (entget gridi))))))
)
)
(setq sj (1+ sj))
)
)
(setq si 0)
(while (< si (length Gp_list))
(DRAW_COLUNM (nth si Gp_list) (nth si Goc_list))
(setq si (1+ si))
)
(princ)
(princ)
)

 

Có hai lệnh:

                - Col  để thực hiện chèn cột. Nếu chưa có kích thước cột lệnh Ktcot sẽ tự động được gọi.

                - Khi muốn thay đổi kích thước cột dùng lệnh Ktcot. Kích thước cột nhập theo cú pháp ngang nhân dọc. Ví dụ: 300x300 – 500x500 – 500x1000.

Có thể dùng cho cả trường hợp hệ lưới trục quay nghiêng. Để có được code này mình có sưu tập được đoạn hàm nhỏ ở Trạm X.vn. Đây là link tham khảo:

 

http://www.tramx.vn/...od4252013100708


  • 2

#6 alpha1810

alpha1810

    biết pan

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

Đã gửi 26 April 2013 - 10:09 AM

Cảm ơn bạn thehost31, nhưng mình muốn lisp này chen cột như trong video trên ah bạn, các cột đều đã có Hatch và các cột khi chèn nhận biết dc các cột Biên ah.
  • 0

#7 thehost31

thehost31

    biết vẽ line

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

Đã gửi 28 April 2013 - 12:37 AM

Của bạn đây. Thêm hacth và vẽ khác đi cho các trục biên. Do có tính đến trường hợp trục nghêng nên hơi nhức đầu :). nhưng chắc thực tế thì không có trường hợp trục nghiêng. Cách dùng như cũ nhé. Code mình hơi dài, luộm thuộm do trình độ còn kém nhắm.

 

(defun Str_Split(Root_string separate / Sep_len Olist temp_str si stri)
(setq Sep_len (strlen separate)
Olist '()
temp_str ""
si 1
)
(while (<= si (strlen Root_string))
(setq stri (substr Root_string si Sep_len))
(if (= stri separate)
(setq Olist (append Olist (list temp_str))
temp_str ""
si (+ si Sep_len -1)
)
(setq temp_str (strcat temp_str (substr Root_string si 1)))
)
(setq si (1+ si))
)
(setq Olist (append Olist (list temp_str)))
)
;==============================================================
(defun Get-intesect(ent1 ent2 Extend / obj1 obj2 inter Out Cnt)
(vl-load-com)
(setq obj1 (vlax-ename->vla-object ent1)
obj2 (vlax-ename->vla-object ent2)
)
(if Extend
(setq inter (vlax-variant-value (vla-IntersectWith obj1 obj2 acExtendBoth)))
(setq inter (vlax-variant-value (vla-IntersectWith obj1 obj2 acExtendNone)))
)
(if (/= (vlax-safearray-get-u-bound inter 1) -1)
(setq inter (vlax-safearray->list inter))
(setq inter nil)
)
(if inter
(progn
(setq Cnt (fix (/ (length inter) 3)) Out nil)
(repeat Cnt (setq Out (append Out (list (list (car inter) (cadr inter) (caddr inter)))) inter (cdddr inter)))
)
(setq Out nil)
)
Out
)
;==============================================================
(defun C:ktcot(/ ktc_string)
(setq ktc_string (getstring "\nKích th\U+01B0\U+1EDBc c\U+1ED9t: "))
(setq #KT_list (STR_SPLIT ktc_string "x")
#KT_list (mapcar 'atof #KT_list)
)
(setq check nil)
(if (/= (length #KT_list) 2)
(setq check T)
(if (OR (<= (car #KT_list) 0.0) (<= (cadr #KT_list) 0.0))
(setq check T)
)
)
(if check
(progn (princ "\nVui lòng nh\U+1EADp l\U+1EA1i.") (C:ktcot))
)
(princ)
(princ)
)
;==============================================================
(defun Add_Hatch(poly Htype / mspace)
(vl-load-com)
(setq mspace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-Acad-Object))))
(setq hatch (vla-AddHatch mspace acHatchPatternTypePreDefined Htype :vlax-True))
(vlax-invoke hatch 'AppendOuterLoop (list poly))
(vla-evaluate hatch)
)
;==============================================================
(defun Draw_colunm(Glist / ngang doc ptt1 ptt2 p1 p2 p3 p4 mspace ptlist tmp poly)
(setq ngang (car #KT_list)
doc (cadr #KT_list)
)
(setq mode (car Glist)
Ang (cadr Glist)
pt (caddr Glist)
)
(cond
((= mode 1)
(setq p1 pt
p2 (polar p1 Ang doc)
p3 (polar p2 (+ Ang (* 0.5 pi)) ngang)
p4 (polar p1 (+ Ang (* 0.5 pi)) ngang)
)
)
((= mode 2)
(setq p1 pt
p2 (polar p1 Ang doc)
p3 (polar p2 (- Ang (* 0.5 pi)) ngang)
p4 (polar p1 (- Ang (* 0.5 pi)) ngang)
)
)
((= mode 3)
(setq p1 (polar pt (+ Ang (* 0.5 pi)) (* 0.5 ngang))
p4 (polar pt (- Ang (* 0.5 pi)) (* 0.5 ngang))
p2 (polar p1 Ang doc)
p3 (polar p4 Ang doc)
)
)
((= mode 4)
(setq p1 (polar pt (- Ang pi) (* 0.5 doc))
p4 (polar pt Ang (* 0.5 doc))
p2 (polar p1 (+ Ang (* 0.5 pi)) ngang)
p3 (polar p4 (+ Ang (* 0.5 pi)) ngang)
)
)
((= mode 5)
(setq p1 (polar pt (- Ang pi) (* 0.5 doc))
p4 (polar pt Ang (* 0.5 doc))
p2 (polar p1 (- Ang (* 0.5 pi)) ngang)
p3 (polar p4 (- Ang (* 0.5 pi)) ngang)
)
)
((= mode 6)
(setq p1 pt
p2 (polar p1 (- Ang pi) doc)
p3 (polar p2 (+ Ang (* 0.5 pi)) ngang)
p4 (polar p1 (+ Ang (* 0.5 pi)) ngang)
)
)
((= mode 7)
(setq p1 pt
p2 (polar p1 (- Ang pi) doc)
p3 (polar p2 (- Ang (* 0.5 pi)) ngang)
p4 (polar p1 (- Ang (* 0.5 pi)) ngang)
)
)
((= mode 8)
(setq p1 (polar pt (- Ang (* 0.5 pi)) (* 0.5 ngang))
p4 (polar pt (+ Ang (* 0.5 pi)) (* 0.5 ngang))
p2 (polar p1 (- Ang pi) doc)
p3 (polar p4 (- Ang pi) doc)
)
)
((= mode 9)
(setq ptt1 (polar pt Ang (* 0.5 doc))
p1 (polar ptt1 (+ Ang (* 0.5 pi)) (* 0.5 ngang))
p2 (polar ptt1 (- Ang (* 0.5 pi)) (* 0.5 ngang))
ptt2 (polar pt (- Ang pi) (* 0.5 doc))
p3 (polar ptt2 (- Ang (* 0.5 pi)) (* 0.5 ngang))
p4 (polar ptt2 (+ Ang (* 0.5 pi)) (* 0.5 ngang))
)
)
)
(setq mspace (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(setq ptlist (apply 'append (list p1 p2 p3 p4 p1)))
(if (= (rem (length ptlist) 3) 0)
(progn
(setq tmp (vlax-make-safearray vlax-vbDouble (cons 0 (- (length ptlist) 1))))
(vlax-safearray-fill tmp ptlist)
(setq poly (vla-addPolyline mspace tmp))
(ADD_HATCH poly "Solid")
)
)
)
;==============================================================
(defun Cal_A(P1 P2 / x1 y1 x2 y2)
(setq x1 (car P1)
y1 (cadr P1)
x2 (car P2)
y2 (cadr P2)
)
(if (= (- x2 x1) 0.0)
y1
(/ (- y2 y1) (- x2 x1))
)
)
;==============================================================
(defun Cal_B(P1 P2 / x1 y1 x2 y2)
(setq x1 (car P1)
y1 (cadr P1)
x2 (car P2)
y2 (cadr P2)
)
(if (= (- x2 x1) 0.0)
x1
(/ (- (* x2 y1) (* x1 y2)) (- x2 x1))
)
)
;==============================================================
(defun Sort_Line(Lename_list / temp_list)
(setq temp_list (mapcar '(lambda (x) (list (Cal_B (cdr (assoc 10 (entget x))) (cdr (assoc 11 (entget x)))) x)) Lename_list))
(setq temp_list (vl-sort temp_list '(lambda (e1 e2) (> (car e1) (car e2)))))
(mapcar '(lambda (x) (cadr x)) temp_list)
)
;==============================================================
(defun c:col(/ ssgrid Lename_list si temp_list luoi1 A1 luoi2 A Lename ss1 ss2
min1 max1 min2 max2 pp1 pp2 goc Gp_list l1i l2j mode giao)
(if (not #KT_list) (C:KTCOT))
(setq ssgrid (ssget '((0 . "LINE"))))
(setq Lename_list '()
si 0
)
(while (< si (sslength ssgrid))
(setq Lename_list (append Lename_list (list (ssname ssgrid si))))
(setq si (1+ si))
)
(setq temp_list (mapcar '(lambda (x) (list (Cal_A (cdr (assoc 10 (entget x))) (cdr (assoc 11 (entget x)))) x)) Lename_list))
(setq luoi1 (list (cadr (nth 0 temp_list)))
A1 (car (nth 0 temp_list))
luoi2 '()
si 1
)
(while (< si (length temp_list))
(setq A (car (nth si temp_list))
Lename (cadr (nth si temp_list))
)
(if (eq (rtos (- A A1) 2 2) "0.00")
(setq luoi1 (append luoi1 (list Lename)))
(setq luoi2 (append luoi2 (list Lename)))
)
(setq si (1+ si))
)

(setq luoi1 (Sort_line luoi1)
luoi2 (Sort_line luoi2)
)
(setq ss1 (ssadd) ss1 (mapcar '(lambda (x) (ssadd x ss1)) luoi1))
(setq ss2 (ssadd) ss2 (mapcar '(lambda (x) (ssadd x ss2)) luoi2))
(setq
min1 (car luoi1)
max1 (car (reverse luoi1))
min2 (car luoi2)
max2 (car (reverse luoi2))
pp1 (car (GET-INTESECT min1 min2 nil))
pp2 (car (GET-INTESECT max1 min2 nil))
goc (angle pp1 pp2)
si 0
Gp_list '()
)
(if (> (car (cdr (assoc 10 (entget min2)))) (car (cdr (assoc 10 (entget max2)))))
(setq luoi2 (reverse luoi2)
min2 (car luoi2)
max2 (car (reverse luoi2))
pp1 (car (GET-INTESECT min1 min2 nil))
pp2 (car (GET-INTESECT max1 min2 nil))
goc (angle pp1 pp2)
)
)
(while (< si (length luoi1))
(setq l1i (nth si luoi1) sj 0)
(while (< sj (length luoi2))
(setq l2j (nth sj luoi2))
(if (eq l1i min1)
(if (eq l2j min2)
(setq mode 1)
(if (eq l2j max2)
(setq mode 2)
(setq mode 3)
)
)
(if (eq l1i max1)
(if (eq l2j min2)
(setq mode 6)
(if (eq l2j max2)
(setq mode 7)
(setq mode 8)
)
)
(if (eq l2j min2)
(setq mode 4)
(if (eq l2j max2)
(setq mode 5)
(setq mode 9)
)
)
)
)
(setq giao (car (GET-INTESECT l1i l2j nil)))
(setq Gp_list (append Gp_list (list (list mode goc giao))))
(setq sj (1+ sj))
)
(setq si (1+ si))
)
(setq si 0)
(while (< si (length Gp_list))
(DRAW_COLUNM (nth si Gp_list))
(setq si (1+ si))
)
(princ)
(princ)
)


  • 1

#8 alpha1810

alpha1810

    biết pan

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

Đã gửi 02 May 2013 - 01:33 PM

thehost31. Mình ktra lisp của bạn rồi nhưng ko dùng dc cho lưới cột dc bạn ah. Chỉ dùng dc cho 1 điểm giao nhau hoặc các điểm giao nhau của 1 hàng thẳng đứng thôi. và cột chỉ nằm bên góc trái phía dưới dc ah. bạn ktra lai dùm mình nha.thanks
  • 0

#9 BẠN2000

BẠN2000

    Chưa sử dụng CAD

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

Đã gửi 26 December 2015 - 04:36 PM

bạn có lisp VTB1 với CVAV_1_04 không chia sẻ cho mình với

gmail: duykoi2098@gmail.com


  • 0