Đến nội dung


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

Array đối tượng trong vùng


  • Please log in to reply
55 replies to this topic

#21 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 14 August 2010 - 04:25 PM

Chào tất cả mọi người.
Sau khi trao đổi, vấn đề có vẻ rõ ràng hơn.
Tui xin đưa ra giải pháp khác : tạm gọi là Copy Block trong PLINE kín
B1. Xác định tọa độ của các đỉnh hình chử nhật bao quanh Pline
B2. Trong phạm vi hình chử nhật này, lần luợt duyệt qua các điểm theo qui luật cho trước (sắp xếp theo hình vuông, hình chử nhật hay hình thoi so le nhau ...)
- nếu điểm nằm trong PLine -> copy Block tới điểm đó.

Vấn đề bây giờ là cách xác định một điểm cho trước có nằm trong PLine(curve) hay không ?
Và làm sao thực hiện với thời gian chấp nhận được.

Xin giới thiệu LISP ứng dụng .NET cùng thực hiện : Copy Block trong PLINE kín.
(2 ứng dụng này sắp xếp Block so le nhau)
Mời các bạn chạy thử và góp ý. Xin cảm ơn.

link download file : CopyBLOCK

... Em lâu rồi không động đến VB nên không có bộ cài nó, ...

to thanhduan2407 : nhớ đọc file Readme.
  • 1

#22 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 14 August 2010 - 04:39 PM

Chào bạn thanhduan, anh Duy
Tue_NV viết 1 đoạn code trên thuật toán mà bạn thanhduan đưa ra :


(defun c:aic(/ ms pl minp maxp minpp name kc ssa ans line minp2)
(vl-load-com)
(command "undo" "be")
(setvar "attreq" 0)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ms (vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object))))
(setq pl (vlax-ename->vla-object (car(entsel "\n Chon Polyline kin :"))))
(vla-getboundingbox pl 'minp 'maxp)
(setq minp (safearray-value minp))
(setq maxp (safearray-value maxp))
(setq name (getstring "\n Nhap ten Block / enter de chon doi tuong : ") ssa '())
(if (= name "") (setq name (cdr(assoc 2 (entget (car(entsel "\n Chon Block :")))))))
(setq kc (getdist "\n Khoang cach hang :"))
(setq minpp (mapcar '- minp (list (distance maxp minp) (distance maxp minp) 0)))

(vl-cmdf "insert" name minp 1 1 0.0)
(setq dtd (vlax-ename->vla-object (entlast)))
(setq minp2 (mapcar '+ minp (list (/ kc 2) (/ kc 2) 0.0)))
(vl-cmdf "insert" name minp2 1 1 0.0)
(setq dts (vlax-ename->vla-object (entlast)))
(setq ssa
(append (list dtd)
(vlax-invoke dtd 'ArrayRectangular
(1+ (fix (/ (- (cadr maxp) (cadr minp)) kc)))
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
1 kc kc 0
)
(list dts)
(vlax-invoke dts 'ArrayRectangular
(1+ (fix (/ (- (cadr maxp) (cadr minp)) kc)))
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
1 kc kc 0
)
)
);setq

(initget "N T")
(setq ans (getkword "\n Ban muon xoa cac doi tuong ngoai hay trong Polyline < N / T > :"))
(foreach x ssa
(setq line (vla-addline ms (vlax-3d-point minpp)
(vla-get-insertionpoint x)
)
)
(if (= (strcase ans) "N")
(progn
(if (= (rem (length (vlax-invoke pl 'intersectwith line 0)) 2) 0)
(vla-erase x)
)
)
)
(if (= (strcase ans) "T")
(progn
(if (= (rem (length (vlax-invoke pl 'intersectwith line 0)) 2) 1)
(vla-erase x)
)
)
)

(vla-erase line)
)
(setvar "osmode" 0)
(command "undo" "end")
)

Bạn thanhduan, anhDuy thử nhé
Chúc các bác 1 ngày cuối tuần vui vẻ :(

Thật tuyệt vời. Cảm ơn bác Tue_NV. Cảm ơn tất cả mọi người. Em sẽ nghiên cứu phương thức của bác. Chỗ nào không hiểu em sẽ hỏi bác. Một lần nữa cảm ơn bác.
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#23 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 14 August 2010 - 04:57 PM

Chào tất cả mọi người.
Sau khi trao đổi, vấn đề có vẻ rõ ràng hơn.
Tui xin đưa ra giải pháp khác : tạm gọi là Copy Block trong PLINE kín
B1. Xác định tọa độ của các đỉnh hình chử nhật bao quanh Pline
B2. Trong phạm vi hình chử nhật này, lần luợt duyệt qua các điểm theo qui luật cho trước (sắp xếp theo hình vuông, hình chử nhật hay hình thoi so le nhau ...)
- nếu điểm nằm trong PLine -> copy Block tới điểm đó.

Vấn đề bây giờ là cách xác định một điểm cho trước có nằm trong PLine(curve) hay không ?
Và làm sao thực hiện với thời gian chấp nhận được.

Xin giới thiệu LISP ứng dụng .NET cùng thực hiện : Copy Block trong PLINE kín.
(2 ứng dụng này sắp xếp Block so le nhau)
Mời các bạn chạy thử và góp ý. Xin cảm ơn.

link download file : CopyBLOCK
to thanhduan2407 : nhớ đọc file Readme.

Cảm ơn bác nhiều. Bgiờ em bận quá nên em sẽ thử sau ạ. Cảm ơn bác
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#24 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 14 August 2010 - 06:12 PM

Theo quan điểm và hiểu biết của mình thì mình kg ủng hộ việc tạo cấu trúc tô bằng block. Nó kg tiện bằng Hatch. Mình nói để bạn tham khảo thêm
Việc tạo và trải block sẽ rất khó quản lý và làm nặng bản vẽ
Block sẽ kg tự xén phần giáp biên và như vậy bạn phải "nổ" nó ra để cắt đi làm bv sẽ có thêm nhiều đối tượng vô nghĩa.
Nếu có hai hay nhiều đg bao kề nhau, việc xác định điểm xuất phát kg cẩn thận sẽ làm chúng bị lệch nhau.

Các phần mềm cad nói chung đã tạo cầu trúc tô là giải pháp chuyên nghiệp cho vđ này.
Việc thành lập BĐ và ký hiệu loại đất luôn phải theo qui trình và các cấu trúc tô là có giới hạn (kg nhiều)
Việc tạo các cấu trúc kg quá khó và Cmap đã tạo hết những ký hiệu cần cho ngành BĐ.

*p200a
0,0,0,0,3,10,0
0,0,1.5,5,3,6,-4

*p200b
0,0,0, 4.5,4.5,7,-4
0,0,1.5,5,4.5,4,-3
0,0,3, 5,4.5,2,-2.2

*p201a
90,0,0,0,3,10,0
90,1.5,0,5,3,6,-4

*p201b
90,0,0,4.5,4.5,6,-4
90,1.5,0,5,4.5,4,-3
90,3,0,5,4.5,2.2,-2

*p202, Rung gia = Thuc vat trong dan cu > 20% (208)
0, 0,1.2, 5,5,0,-10
0,.18,1.17, 5,5,0,-10
0,.35,1.08, 5,5,0,-10
0,.49, .95, 5,5,0,-10
0,.57, .79, 5,5,0,-10
0,.6, .6, 5,5,0,-10
0,.57, .41, 5,5,0,-10
0,.49, .25, 5,5,0,-10
0,.35, .12, 5,5,0,-10
0,.18, .03, 5,5,0,-10
0, 0, 0, 5,5,0,-10
0,-.18,1.17, 5,5,0,-10
0,-.35,1.08, 5,5,0,-10
0,-.49, .95, 5,5,0,-10
0,-.57, .79, 5,5,0,-10
0,-.6, .6, 5,5,0,-10
0,-.57, .41, 5,5,0,-10
0,-.49, .25, 5,5,0,-10
0,-.35, .12, 5,5,0,-10
0,-.18, .03, 5,5,0,-10

*p203, Rung thua rai rac = Thuc vat trong dan cu < 20% (p208b)
0, 0,1.2, 5,5,0,-10
0,.18,1.17, 5,5,0,-10
0,.35,1.08, 5,5,0,-10
0,.49, .95, 5,5,0,-10
0,.57, .79, 5,5,0,-10
0,.6, .6, 5,5,0,-10
0,.57, .41, 5,5,0,-10
0,.49, .25, 5,5,0,-10
0,.35, .12, 5,5,0,-10
0,.18, .03, 5,5,0,-10
0, 0, 0, 5,5,0,-10
0,-.18,1.17, 5,5,0,-10
0,-.35,1.08, 5,5,0,-10
0,-.49, .95, 5,5,0,-10
0,-.57, .79, 5,5,0,-10
0,-.6, .6, 5,5,0,-10
0,-.57, .41, 5,5,0,-10
0,-.49, .25, 5,5,0,-10
0,-.35, .12, 5,5,0,-10
0,-.18, .03, 5,5,0,-10
0,0,0,5,5,1,-9

*p202g, Rung gia ua man
0, 0,1.2, 5,5,0,-10
0,.18,1.17, 5,5,0,-10
0,.35,1.08, 5,5,0,-10
0,.49, .95, 5,5,0,-10
0,.57, .79, 5,5,0,-10
0,.6, .6, 5,5,0,-10
0,.57, .41, 5,5,0,-10
0,.49, .25, 5,5,0,-10
0,.35, .12, 5,5,0,-10
0,.18, .03, 5,5,0,-10
0, 0, 0, 5,5,0,-10
0,-.18,1.17, 5,5,0,-10
0,-.35,1.08, 5,5,0,-10
0,-.49, .95, 5,5,0,-10
0,-.57, .79, 5,5,0,-10
0,-.6, .6, 5,5,0,-10
0,-.57, .41, 5,5,0,-10
0,-.49, .25, 5,5,0,-10
0,-.35, .12, 5,5,0,-10
0,-.18, .03, 5,5,0,-10
0,.44,-.27, 5,5,0,-10
0,.42,-.18, 5,5,0,-10
0,.39,-.08, 5,5,0,-10
0,.37,.02, 5,5,0,-10
0,-.44,-.27,5,5,0,-10
0,-.42,-.18,5,5,0,-10
0,-.39,-.08,5,5,0,-10
0,-.37,.02, 5,5,0,-10

*p204,Rung non, rung moi trong X 0.667
0, 0,1.2, 6,6,0,-12
0,.18,1.17, 6,6,0,-12
0,.35,1.08, 6,6,0,-12
0,.49, .95, 6,6,0,-12
0,.57, .79, 6,6,0,-12
0,.6, .6, 6,6,0,-12
0,.57, .41, 6,6,0,-12
0,.49, .25, 6,6,0,-12
0,.35, .12, 6,6,0,-12
0,.18, .03, 6,6,0,-12
0, 0, 0, 6,6,0,-12
0,-.18,1.17, 6,6,0,-12
0,-.35,1.08, 6,6,0,-12
0,-.49, .95, 6,6,0,-12
0,-.57, .79, 6,6,0,-12
0,-.6, .6, 6,6,0,-12
0,-.57, .41, 6,6,0,-12
0,-.49, .25, 6,6,0,-12
0,-.35, .12, 6,6,0,-12
0,-.18, .03, 6,6,0,-12

*p204g, Rung non ua man X 0.667
0, 0,1.2, 6,6,0,-12
0,.18,1.17, 6,6,0,-12
0,.35,1.08, 6,6,0,-12
0,.49, .95, 6,6,0,-12
0,.57, .79, 6,6,0,-12
0,.6, .6, 6,6,0,-12
0,.57, .41, 6,6,0,-12
0,.49, .25, 6,6,0,-12
0,.35, .12, 6,6,0,-12
0,.18, .03, 6,6,0,-12
0, 0, 0, 6,6,0,-12
0,-.18,1.17, 6,6,0,-12
0,-.35,1.08, 6,6,0,-12
0,-.49, .95, 6,6,0,-12
0,-.57, .79, 6,6,0,-12
0,-.6, .6, 6,6,0,-12
0,-.57, .41, 6,6,0,-12
0,-.49, .25, 6,6,0,-12
0,-.35, .12, 6,6,0,-12
0,-.18, .03, 6,6,0,-12
0,.44,-.27, 6,6,0,-12
0,.42,-.18, 6,6,0,-12
0,.39,-.08, 6,6,0,-12
0,.37,.02, 6,6,0,-12
0,-.44,-.27, 6,6,0,-12
0,-.42,-.18, 6,6,0,-12
0,-.39,-.08, 6,6,0,-12
0,-.37,.02, 6,6,0,-12

*p205, Rung cay bui cay rai rac
0,0,.8, 4,4,0,-8
0,.15,.77, 4,4,0,-8
0,.28,.68, 4,4,0,-8
0,.37,.55, 4,4,0,-8
0,.40,.40, 4,4,0,-8
0,.37,.25, 4,4,0,-8
0,.28,.12, 4,4,0,-8
0,.15,.03, 4,4,0,-8
0,0,0 , 4,4,0,-8
0,-.15,.77, 4,4,0,-8
0,-.28,.68, 4,4,0,-8
0,-.37,.55, 4,4,0,-8
0,-.40,.40, 4,4,0,-8
0,-.37,.25, 4,4,0,-8
0,-.28,.12, 4,4,0,-8
0,-.15,.03, 4,4,0,-8
0,-.10,1.67,4,4,0,-8
0, .10,1.67,4,4,0,-8
0,-.20,1.51,4,4,0,-8
0, .20,1.51,4,4,0,-8
0,-.10,1.33,4,4,0,-8
0, .10,1.33,4,4,0,-8
0,-1.06,.03, 4,4,0,-8
0, -.85,.03, 4,4,0,-8
0,-1.16,-.15,4,4,0,-8
0, -.76,-.15,4,4,0,-8
0,-1.06,-.33,4,4,0,-8
0, -.85,-.33,4,4,0,-8
0,1.06,.03, 4,4,0,-8
0, .85,.03, 4,4,0,-8
0,1.16,-.15,4,4,0,-8
0, .76,-.15,4,4,0,-8
0,1.06,-.33,4,4,0,-8
0, .85,-.33,4,4,0,-8
0,-2.04,-.65, 12,4,0, -24
0,-1.94,-.49, 12,4,0, -24
0,-1.74,-.49, 12,4,0, -24
0,-1.64,-.65, 12,4,0, -24
0,-1.74,-.83, 12,4,0, -24
0,-1.94,-.83, 12,4,0, -24
0,4.10,6.70, 12,4,0, -24
0,4.20,6.53, 12,4,0, -24
0,4.10,6.36, 12,4,0, -24
0,3.90,6.36, 12,4,0, -24
0,3.80,6.53, 12,4,0, -24
0,3.90,6.70, 12,4,0, -24
0,9.93,7.51, 12,4,0,-24
0,10.04,7.34,12,4,0,-24
0,9.93,7.16, 12,4,0,-24
0,9.75,7.16, 12,4,0,-24
0,9.65,7.34, 12,4,0,-24
0,9.75,7.51, 12,4,0,-24

*p206, Rung cay, bui cay ua man chu phen
0,0,.8, 4,4,0,-8
0,.15,.77, 4,4,0,-8
0,.28,.68, 4,4,0,-8
0,.37,.55, 4,4,0,-8
0,.40,.40, 4,4,0,-8
0,.37,.25, 4,4,0,-8
0,.28,.12, 4,4,0,-8
0,.15,.03, 4,4,0,-8
0,0,0 , 4,4,0,-8
0,-.15,.77, 4,4,0,-8
0,-.28,.68, 4,4,0,-8
0,-.37,.55, 4,4,0,-8
0,-.40,.40, 4,4,0,-8
0,-.37,.25, 4,4,0,-8
0,-.28,.12, 4,4,0,-8
0,-.15,.03, 4,4,0,-8
0,-1.06,.03, 4,4,0,-8
0, -.85,.03, 4,4,0,-8
0,-1.16,-.15,4,4,0,-8
0, -.76,-.15,4,4,0,-8
0,-1.06,-.33,4,4,0,-8
0, -.85,-.33,4,4,0,-8
0,-2.04,-.65, 4,4,0, -8
0,-1.94,-.49, 4,4,0, -8
0,-1.74,-.49, 4,4,0, -8
0,-1.64,-.65, 4,4,0, -8
0,-1.74,-.83, 4,4,0, -8
0,-1.94,-.83, 4,4,0, -8
0,.51,-.40,4,4,0,-8
0,.61,-.58,4,4,0,-8
0,.51,-.76,4,4,0,-8
0,.30,-.76,4,4,0,-8
0,.21,-.58,4,4,0,-8
0,.30,-.40,4,4,0,-8

*p216, Coi lau say
90,-1.02,.95,5,5,.14,-9.86
90,-.95,.89,5,5,.25,-9.75
90,-.87,.86,5,5,.32,-9.68
90,-.79,.84,5,5,.37,-9.63
90,-.71,.81,5,5,.38,-9.62
90,-.63,.76,5,5,.38,-9.62
90,-.57,.66,5,5,.41,-9.59
90,-.48,.50,5,5,.48,-9.52
90,-.44,0,5,5,.30,-9.70
90,-.40,0,5,5,.88,-9.12
90,-.33,0,5,5,.59,-9.41
90,-.27,0,5,5,.10,-9.90
90,-.15,.78,5,5,.42,-9.58
90,-.10,.40,5,5,.98,-9.02
90,-.07,0,5,5,1.4,-8.6
90,0,0,5,5,1.50,-8.5
90,1.02,.95,5,5,.14,-9.86
90,.95,.89,5,5,.25,-9.75
90,.87,.86,5,5,.32,-9.68
90,.79,.84,5,5,.37,-9.63
90,.71,.81,5,5,.38,-9.62
90,.63,.76,5,5,.38,-9.62
90,.57,.66,5,5,.41,-9.59
90,.48,.50,5,5,.48,-9.52
90,.44,0,5,5,.30,-9.70
90,.40,0,5,5,.88,-9.12
90,.33,0,5,5,.59,-9.41
90,.27,0,5,5,.10,-9.90
90,.15,.78,5,5,.42,-9.58
90,.10,.40,5,5,.98,-9.02
90,.07,0,5,5,1.4,-8.6

*p218a,rung dua co moc thanh rung
0,-.99,2.27,5,5,0,-10
0,-.77,2.26,5,5,0,-10
0,-.56,2.20,5,5,0,-10
0,-.34,2.12,5,5,0,-10
0,-.21,1.95,5,5,0,-10
0,-.10,1.75,5,5,0,-10
0,-.15,1.50,5,5,0,-10
0,-.31,1.46,5,5,0,-10
0,-.47,1.39,5,5,0,-10
0,-.58,1.30,5,5,0,-10
0,-.71,1.19,5,5,0,-10
0,-.80,1.07,5,5,0,-10
0,.09,1.75,5,5,0,-10
0,.16,1.92,5,5,0,-10
0,.28,2.07,5,5,0,-10
0,.42,2.19,5,5,0,-10
0,.56,2.27,5,5,0,-10
0,.75,2.34,5,5,0,-10
0,.17,1.50,5,5,0,-10
0,.27,1.43,5,5,0,-10
0,.39,1.35,5,5,0,-10
0,.50,1.28,5,5,0,-10
0,.59,1.15,5,5,0,-10
0,.66,1.03,5,5,0,-10
90,0,0,5,5,1.4,-8.6

*p218b,rung dua co 0 moc thanh rung
0,-.99,2.27,5,5,0,-10
0,-.77,2.26,5,5,0,-10
0,-.56,2.20,5,5,0,-10
0,-.34,2.12,5,5,0,-10
0,-.21,1.95,5,5,0,-10
0,-.10,1.75,5,5,0,-10
0,-.15,1.50,5,5,0,-10
0,-.31,1.46,5,5,0,-10
0,-.47,1.39,5,5,0,-10
0,-.58,1.30,5,5,0,-10
0,-.71,1.19,5,5,0,-10
0,-.80,1.07,5,5,0,-10
0,.09,1.75,5,5,0,-10
0,.16,1.92,5,5,0,-10
0,.28,2.07,5,5,0,-10
0,.42,2.19,5,5,0,-10
0,.56,2.27,5,5,0,-10
0,.75,2.34,5,5,0,-10
0,.17,1.50,5,5,0,-10
0,.27,1.43,5,5,0,-10
0,.39,1.35,5,5,0,-10
0,.50,1.28,5,5,0,-10
0,.59,1.15,5,5,0,-10
0,.66,1.03,5,5,0,-10
90,0,0,5,5,1.4,-8.6
0,0,0,5,5,.5,-9.5

*p219a, Cay trong than bui moc thanh rung
90,0,0,5,5,1.5,-8.5
45,0,.4,7.07107,7.07107,1,-6.07107
135,0,.75,7.07107,7.07107,1,-6.07107

*p219b, Cay trong than bui 0 moc thanh rung
90,0,0,5,5,1.5,-8.5
45,0,.4,7.07107,7.07107,1,-6.07107
135,0,.75,7.07107,7.07107,1,-6.07107
0,0,0,5,5,.5,-9.5

*p220, Cay trong than leo
0,.31,2.20,5,5,0,-10
0,.20,2.18,5,5,0,-10
0,.08,2.13,5,5,0,-10
0,-.13,2.08,5,5,0,-10
0,-.27,2.03,5,5,0,-10
0,-.42,1.98,5,5,0,-10
0,-.55,1.92,5,5,0,-10
0,-.67,1.84,5,5,0,-10
0,-.71,1.77,5,5,0,-10
0,-.67,1.68,5,5,0,-10
0,-.56,1.61,5,5,0,-10
0,-.44,1.52,5,5,0,-10
0,-.30,1.46,5,5,0,-10
0,-.15,1.39,5,5,0,-10
0,.11,1.29,5,5,0,-10
0,.25,1.23,5,5,0,-10
0,.38,1.16,5,5,0,-10
0,.53,1.09,5,5,0,-10
0,.64,1.01,5,5,0,-10
0,.72,.89,5,5,0,-10
0,.67,.76,5,5,0,-10
0,.55,.67,5,5,0,-10
0,.42,.59,5,5,0,-10
0,.29,.53,5,5,0,-10
0,.15,.48,5,5,0,-10
0,-.14,.38,5,5,0,-10
0,-.28,.34,5,5,0,-10
0,-.42,.29,5,5,0,-10
0,-.55,.24,5,5,0,-10
0,-.72,.20,5,5,0,-10
90,0,0,5,5,2.5,-7.5

*p217a,Cay trong than go moc thanh rung
0, 0,.40 ,5,5,0,-10
0, 0,-.40,5,5,0,-10
0,.15,.37,5,5,0,-10
0,.28,.28,5,5,0,-10
0,.37,.15,5,5,0,-10
0,.40,0 ,5,5,0,-10
0,.37,-.15,5,5,0,-10
0,.28,-.28,5,5,0,-10
0,.15,-.37,5,5,0,-10
0,-.15,.37,5,5,0,-10
0,-.28,.28,5,5,0,-10
0,-.37,.15,5,5,0,-10
0,-.40,0 ,5,5,0,-10
0,-.37,-.15,5,5,0,-10
0,-.28,-.28,5,5,0,-10
0,-.15,-.37,5,5,0,-10
90,0,-2.1, 5,5,1.7,-8.3

*p217b,Cay trong than go 0 moc thanh rung
0,0,.40,5,5,0,-10
0,0,-.40,5,5,0,-10
0,.15,.37,5,5,0,-10
0,.28,.28,5,5,0,-10
0,.37,.15,5,5,0,-10
0,.40,.00,5,5,0,-10
0,.37,-.15,5,5,0,-10
0,.28,-.28,5,5,0,-10
0,.15,-.37,5,5,0,-10
0,-.15,.37,5,5,0,-10
0,-.28,.28,5,5,0,-10
0,-.37,.15,5,5,0,-10
0,-.40,.00,5,5,0,-10
0,-.37,-.15,5,5,0,-10
0,-.28,-.28,5,5,0,-10
0,-.15,-.37,5,5,0,-10
90,0,-2.1, 5,5,1.7,-8.3
0,0,-2.1,5,5,.5,-9.5

*p215, Co Cao
90,1.4,0,5,5,1.5,-8.5
90,0,0,5,5,1.5,-8.5
90,.7,0,5,5,1.5,-8.5

*P214, Co thap
90,0,0,5,5,1.5,-8.5
90,.7,0,5,5,1.5,-8.5

*p222a, LUA CAN
90, 0,0, 5,5, 2,-8
45, 0,0, 7.071067812,7.071067812, 1,-6.071067812
135,0,0, 7.071067812,7.071067812, 1,-6.071067812

*p222b, LUA NUOC
90, 0,0, 5,5, 2.1,-7.9
45, 0,0.0, 7.071067812,7.071067812, 1,-6.071067812
135,0,0.0, 7.071067812,7.071067812, 1,-6.071067812
0, -.75,-0.3, 5,5, 1.4,-8.6

*p32, NGHIA DIA, Trai ky hieu nghia dia
0 ,0,0, 5,5,1.5,-8.5
90, 0.75,0,5,5,1,-9

*p221, Cay trong than co
90,0,0,5,5,2,-8

*p223, Mau
90,2.4,0,5,5,1.5,-8.5
0,0,0,5,5,2.8,-7.2
90,.4,0,5,5,1.5,-8.5

*p224, Rau
45,0,0,7.07107,7.07107,1.7,-5.37107
135,0,0,7.07107,7.07107,1.7,-5.37107

*p225, Cay kieng
45,0,0,7.07107,7.07107,1.7,-5.37107
135,0,0,7.07107,7.07107,1.7,-5.37107
0,-1.25,0,5,5,0,-10
0,1.25,0,5,5,0,-10

*p226, Sen sung
45,.4,.4,7.07107,7.07107,1.4,-5.67107
135,-.4,.4,7.07107,7.07107,1.4,-5.67107
225,-.4,-.4,7.07107,7.07107,1.4,-5.67107
315,.4,-.4,7.07107,7.07107,1.4,-5.67107
  • 0

#25 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 14 August 2010 - 07:07 PM

.....Các phần mềm cad nói chung đã tạo cầu trúc tô là giải pháp chuyên nghiệp cho vđ này.
Việc thành lập BĐ và ký hiệu loại đất luôn phải theo qui trình và các cấu trúc tô là có giới hạn (kg nhiều)
Việc tạo các cấu trúc kg quá khó và Cmap đã tạo hết những ký hiệu cần cho ngành BĐ...........

Cảm ơn bạnTRUNGNGAMY rất nhiều.
Mình có tham quá không nếu sử dụng cả hai ?
Mình sẽ dùng và thử nghiệm cả hai. Cảm ơn bạn nhé
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#26 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 14 August 2010 - 07:18 PM

Chào bạn thanhduan, anh Duy
Tue_NV viết 1 đoạn code trên thuật toán mà bạn thanhduan đưa ra :


(defun c:aic(/ ms pl minp maxp minpp name kc ssa ans line minp2)
(vl-load-com)
(command "undo" "be")
(setvar "attreq" 0)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ms (vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object))))
(setq pl (vlax-ename->vla-object (car(entsel "\n Chon Polyline kin :"))))
(vla-getboundingbox pl 'minp 'maxp)
(setq minp (safearray-value minp))
(setq maxp (safearray-value maxp))
(setq name (getstring "\n Nhap ten Block / enter de chon doi tuong : ") ssa '())
(if (= name "") (setq name (cdr(assoc 2 (entget (car(entsel "\n Chon Block :")))))))
(setq kc (getdist "\n Khoang cach hang :"))
(setq minpp (mapcar '- minp (list (distance maxp minp) (distance maxp minp) 0)))

(vl-cmdf "insert" name minp 1 1 0.0)
(setq dtd (vlax-ename->vla-object (entlast)))
(setq minp2 (mapcar '+ minp (list (/ kc 2) (/ kc 2) 0.0)))
(vl-cmdf "insert" name minp2 1 1 0.0)
(setq dts (vlax-ename->vla-object (entlast)))
(setq ssa
(append (list dtd)
(vlax-invoke dtd 'ArrayRectangular
(1+ (fix (/ (- (cadr maxp) (cadr minp)) kc)))
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
1 kc kc 0
)
(list dts)
(vlax-invoke dts 'ArrayRectangular
(1+ (fix (/ (- (cadr maxp) (cadr minp)) kc)))
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
1 kc kc 0
)
)
);setq
;;;;;;;;; )
;;;;;;;;;;;; )
(initget "N T")
(setq ans (getkword "\n Ban muon xoa cac doi tuong ngoai hay trong Polyline < N / T > :"))
(foreach x ssa
(setq line (vla-addline ms (vlax-3d-point minpp)
(vla-get-insertionpoint x)
)
)
(if (= (strcase ans) "N")
(progn
(if (= (rem (length (vlax-invoke pl 'intersectwith line 0)) 2) 0)
(vla-erase x)
)
)
)
(if (= (strcase ans) "T")
(progn
(if (= (rem (length (vlax-invoke pl 'intersectwith line 0)) 2) 1)
(vla-erase x)
)
)
)

(vla-erase line)
)
(setvar "osmode" 0)
(command "undo" "end")
)

Bạn thanhduan, anhDuy thử nhé
Chúc các bác 1 ngày cuối tuần vui vẻ :(

Bác Tue_NV ơi! Nếu em muốn tiếp tục dựa trên mảng bài toán này mà đi tiếp tục việc nghiên cứu xoá đối tượng trong vùng kín được chọn theo thuộc tính đã được lọc trong fillter (theo layer, theo block, theo màu sắc, kích thước .....)(thao tác "Fi" đã được lọc trước và được ứng dụng "p" trong yêu cầu này).
Thao tác như sau:
- Chọn vùng kín (chọn polyline)
- Chọn đối tượng cần xoá (nhấn "p")
- Chọn xóa đối tượng trong hay ngoài polyline
Em nghĩ là nó đơn giản hơn so với mảng array trong vùng
Bác Tue_NV giúp em chỉnh sửa luôn lisp này bác nhé.
Em cảm ơn bác rất nhiều.
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#27 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 14 August 2010 - 08:57 PM

Bác Tue_NV ơi! Nếu em muốn tiếp tục dựa trên mảng bài toán này mà đi tiếp tục việc nghiên cứu xoá đối tượng trong vùng kín được chọn theo thuộc tính đã được lọc trong fillter (theo layer, theo block, theo màu sắc, kích thước .....)(thao tác "Fi" đã được lọc trước và được ứng dụng "p" trong yêu cầu này).
Thao tác như sau:
- Chọn vùng kín (chọn polyline)
- Chọn đối tượng cần xoá (nhấn "p")
- Chọn xóa đối tượng trong hay ngoài polyline
Em nghĩ là nó đơn giản hơn so với mảng array trong vùng
Bác Tue_NV giúp em chỉnh sửa luôn lisp này bác nhé.
Em cảm ơn bác rất nhiều.

Nếu bạn đã lọc trước đó thì không cần nhấn "p". Lisp sẽ làm chuyện đó cho bạn.
Nhưng có cái này Tue_NV muốn hỏi bạn :

Đối tượng thì có nhiều loại đối tượng vậy bạn?
Bạn có thể cho biết là bạn thao tác với đối tượng nào không?
Hay là với các loại đối tượng?

- Nếu là với các loại đối tượng thì :
các đối tượng giao với đa tuyến kín có bị cắt xén đi không?

-Có lẽ rằng bạn nên tham khảo thêm Lisp xoá các đối tượng trong vùng kín.
Lisp đó rất hay và đáp ứng được yêu cầu của bạn

Theo quan điểm và hiểu biết của mình thì mình kg ủng hộ việc tạo cấu trúc tô bằng block. Nó kg tiện bằng Hatch. Mình nói để bạn tham khảo thêm
Việc tạo và trải block sẽ rất khó quản lý và làm nặng bản vẽ
Block sẽ kg tự xén phần giáp biên và như vậy bạn phải "nổ" nó ra để cắt đi làm bv sẽ có thêm nhiều đối tượng vô nghĩa.
Nếu có hai hay nhiều đg bao kề nhau, việc xác định điểm xuất phát kg cẩn thận sẽ làm chúng bị lệch nhau.

......

Bản thân Tue_NV ủng hộ ý kiến của bạn TrungNgaMY. Sử dụng hay không là quyền của bạn.
  • 1

#28 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 15 August 2010 - 07:42 AM

Nếu bạn đã lọc trước đó thì không cần nhấn "p". Lisp sẽ làm chuyện đó cho bạn.
Nhưng có cái này Tue_NV muốn hỏi bạn :

Đối tượng thì có nhiều loại đối tượng vậy bạn?
Bạn có thể cho biết là bạn thao tác với đối tượng nào không?
Hay là với các loại đối tượng?

- Nếu là với các loại đối tượng thì :
các đối tượng giao với đa tuyến kín có bị cắt xén đi không?

-Có lẽ rằng bạn nên tham khảo thêm Lisp xoá các đối tượng trong vùng kín.
Lisp đó rất hay và đáp ứng được yêu cầu của bạn
Bản thân Tue_NV ủng hộ ý kiến của bạn TrungNgaMY. Sử dụng hay không là quyền của bạn.

Cảm ơn bác Tue_NV nhiều.
Em post bài hơi bị lỗi vì không nói rõ hết mục đích của bài toán và không nói hết cách thức của bài toán mà mình sử dụng.
Thường em chủ yếu là thao tác với các đối tượng dạng điểm (block cũng là 1 đối tượng dạng điểm (điểm chuẩn)...). Em chỉ xét những điểm đó nằm trong, nằm trên hoặc nằm ngoài vùng được chọn. Nhưng sau khi đọc xong bài post của bác thì em lại có 1 ý kiến thêm, đó là thao tác với tất cả các đối tượng nhưng đường polyline sẽ không cắt, không đi qua các đối tượng được chọn. Nếu như đường polyline (vùng kín) cắt qua đối tượng được chọn thì sẽ hiển thị thông báo "Có chọn đối tượng bị cắt ngang qua hay không? "Như vậy vấn sẽ giải quyết được dễ dàng hơn. Mục đích của bài toán em xin được đính chính lại là " Chọn đối tượng trong vùng kín được lọc theo thuộc tính".
Thao tác của em như sau:
- Chọn polyline khép kín (Polyline hở sẽ thông báo "Vùng chưa khép kín" => chọn lại Polyline)
- Chọn đối tượng đã lọc thuộc tính để chọn. Hiển thị thông báo gợi ý đi kèm: "Đối tượng đã được lọc trong filters, nhấn "p" để chọn lại các đối tượng đó " . Cái này có thể là hơi thừa nhưng có ý nghĩa nhắc nhở lọc trước nếu ta quên
- Bạn chọn đối tượng nằm trong, trên hay ngoài vùng chọn => Thực hiện lệnh chọn đối tượng để tuỳ mình xử lý
(Nếu đối tượng được chọn bị cắt ngang qua thì hiển thị thông báo "Có chọn cả những đối tượng bị cắt ngang qua hay không ? )
Đó là cách thức em đưa ra đó bác có thấy hợp lý không? Nếu không hợp lý bác cho em ý kiến bác nhé. Rất mong ý kiến phản hồi từ bác và rất mong được bác ủng hộ để tạo ra lisp như vậy.
Một lần nữa cảm ơn bác
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#29 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 15 August 2010 - 08:08 AM

Chào tất cả mọi người.
Sau khi trao đổi, vấn đề có vẻ rõ ràng hơn.
Tui xin đưa ra giải pháp khác : tạm gọi là Copy Block trong PLINE kín
B1. Xác định tọa độ của các đỉnh hình chử nhật bao quanh Pline
B2. Trong phạm vi hình chử nhật này, lần luợt duyệt qua các điểm theo qui luật cho trước (sắp xếp theo hình vuông, hình chử nhật hay hình thoi so le nhau ...)
- nếu điểm nằm trong PLine -> copy Block tới điểm đó.

Vấn đề bây giờ là cách xác định một điểm cho trước có nằm trong PLine(curve) hay không ?
Và làm sao thực hiện với thời gian chấp nhận được.

Xin giới thiệu LISP ứng dụng .NET cùng thực hiện : Copy Block trong PLINE kín.
(2 ứng dụng này sắp xếp Block so le nhau)
Mời các bạn chạy thử và góp ý. Xin cảm ơn.

link download file : CopyBLOCK
to thanhduan2407 : nhớ đọc file Readme.

Em đã thực hiện cả 2 phần mềm mà bác viết. Rất tuyệt bác à. Tốc độ của .NET nhanh hơn rất nhiều. Cảm ơn bác.
Em vừa post 1 bài trên diễn đàn cũng trong chủ đề này. Rất mong bác tham gia ý kiến. Bài em gửi cho bác Tue_NV.
Các bác thật là rất tuyệt
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#30 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 15 August 2010 - 09:06 AM

Chào tất cả mọi người.
Sau khi trao đổi, vấn đề có vẻ rõ ràng hơn.
Tui xin đưa ra giải pháp khác : tạm gọi là Copy Block trong PLINE kín
B1. Xác định tọa độ của các đỉnh hình chử nhật bao quanh Pline
B2. Trong phạm vi hình chử nhật này, lần luợt duyệt qua các điểm theo qui luật cho trước (sắp xếp theo hình vuông, hình chử nhật hay hình thoi so le nhau ...)
- nếu điểm nằm trong PLine -> copy Block tới điểm đó.

Vấn đề bây giờ là cách xác định một điểm cho trước có nằm trong PLine(curve) hay không ?
Và làm sao thực hiện với thời gian chấp nhận được.

Xin giới thiệu LISP ứng dụng .NET cùng thực hiện : Copy Block trong PLINE kín.
(2 ứng dụng này sắp xếp Block so le nhau)
Mời các bạn chạy thử và góp ý. Xin cảm ơn.

link download file : CopyBLOCK
to thanhduan2407 : nhớ đọc file Readme.

Chào bác Gia_Bach.
Trước khi em ra ngoài có việc em lại mò vào phần của bác viết và thử lại thì rất hay nhưng sau khi thử vài trường hợp thì phần LISP vẫn còn bị lỗi, em đã thử lại rất nhiều lần bằng các hình dạng vùng khác nhau, về đa giác lồi thì chạy rất tốt nhưng về đa giác phức tạp 1 chút là chạy ra array bị sai. Bác có thể chỉnh sửa lại được không ạ. Về .NET thì rất tuyệt, nhanh và chính xác. Sau khi thử nghiệm cả 3 chương trình (2 của bác Gia_Bach và 1 của bác Tue_NV) thì em đưa ra kết quả sau:
http://www.4shared.c...9/ARRAY_1_.html
Em không có ý so sánh để làm phật lòng bác, như bác nói Mời các bạn chạy thử và góp ý. Xin cảm ơn.
Cảm ơn bác rất nhiều. Bác viết phần mềm .NET rất hay, bác có thể cho em mã CODE được không ạ?
Nếu lập trình VBA thì hay biết mấy, bác gửi cho em bác nhé. Cảm ơn bác rất rất nhiều
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#31 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 15 August 2010 - 11:29 AM

Cảm ơn bác Tue_NV nhiều.
Em post bài hơi bị lỗi vì không nói rõ hết mục đích của bài toán và không nói hết cách thức của bài toán mà mình sử dụng.
Thường em chủ yếu là thao tác với các đối tượng dạng điểm (block cũng là 1 đối tượng dạng điểm (điểm chuẩn)...). Em chỉ xét những điểm đó nằm trong, nằm trên hoặc nằm ngoài vùng được chọn. Nhưng sau khi đọc xong bài post của bác thì em lại có 1 ý kiến thêm, đó là thao tác với tất cả các đối tượng nhưng đường polyline sẽ không cắt, không đi qua các đối tượng được chọn. Nếu như đường polyline (vùng kín) cắt qua đối tượng được chọn thì sẽ hiển thị thông báo "Có chọn đối tượng bị cắt ngang qua hay không? "Như vậy vấn sẽ giải quyết được dễ dàng hơn. Mục đích của bài toán em xin được đính chính lại là " Chọn đối tượng trong vùng kín được lọc theo thuộc tính".
Thao tác của em như sau:
1- Chọn polyline khép kín (Polyline hở sẽ thông báo "Vùng chưa khép kín" => chọn lại Polyline)
2- Chọn đối tượng đã lọc thuộc tính để chọn. Hiển thị thông báo gợi ý đi kèm: "Đối tượng đã được lọc trong filters, nhấn "p" để chọn lại các đối tượng đó " . Cái này có thể là hơi thừa nhưng có ý nghĩa nhắc nhở lọc trước nếu ta quên
3- Bạn chọn đối tượng nằm trong, trên hay ngoài vùng chọn => Thực hiện lệnh chọn đối tượng để tuỳ mình xử lý
(Nếu đối tượng được chọn bị cắt ngang qua thì hiển thị thông báo "Có chọn cả những đối tượng bị cắt ngang qua hay không ? )
Đó là cách thức em đưa ra đó bác có thấy hợp lý không? Nếu không hợp lý bác cho em ý kiến bác nhé. Rất mong ý kiến phản hồi từ bác và rất mong được bác ủng hộ để tạo ra lisp như vậy.
Một lần nữa cảm ơn bác

Như vậy thì Lisp chỉ áp dụng với đối tượng dạng điểm như point, Block, Text, Mtext Lisp xử lý nó theo điểm chèn phải không bạn?
Trong 3 thao tác của bạn thì Tue_NV thấy thao tác thứ 2 và thao tác thứ 3 : bạn làm không OK lắm
- Thao tác thứ 2 : Ngay ở dòng select object (khi thực thi Lisp), bạn muốn lọc thì Lisp lọc, bạn muốn chọn thì Lisp chọn, không cần thiết phải làm như ý của bạn vì không hiệu quả khi sử dụng vì như bạn nói : nó hơi thừa
- Thao tác thứ 3 : Bạn chọn đối tượng nằm trong, trên hay ngoài vùng chọn TRen/Ngoai>[/b] => Thực hiện lệnh chọn đối tượng để tuỳ mình xử lý
Đã là chọn Tren rồi thì có cần phải hỏi là "Có chọn cả những đối tượng bị cắt ngang qua hay không ?" Vì đã nằm trên rồi thì đương nhiên Polyline phải cắt qua chứ phải không bạn? Có thể là Tue_NV hiểu chưa được đúng. Bạn nói rõ hơn nhé.

Bổ sung thêm 1 ý nữa là Lisp có thể áp dụng cho Spline kín chứ không riêng gì Polyline
Tue_NV đang bận. Lúc rãnh mới có thể viết Lisp được

@Anh Duy : Tue_NV mới thấy bài của anh hôm qua, sao anh vội del đi thế?
Nếu anh thấy các hàm vl khó hiểu thì Tue_NV viết code này, không có sử dụng hàm vl, hy vọng anh Duy và bạn thanhDuan dễ hiểu hơn :
Đây là code :

(defun c:aic(/ oldos pl name kc minp maxp minpp from cur end ins fl)
(command "undo" "be")
(setvar "attreq" 0)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq pl (car(entsel "\n Pick chon Polyline kin :")))
(setq name (getstring t "\n Nhap ten Block / Enter de chon Block :"))
(if (= name "") (setq name (cdr(assoc 2 (entget (car(entsel "\n Pick chon Block :")))))))
(setq kc (getdist "\n Nhap khoang cach :"))
(setq minp (car (ACET-GEOM-EXTENTS pl)))
(setq maxp (cadr (ACET-GEOM-EXTENTS pl)))
(setq minpp (mapcar '- minp
(list (setq dist (distance maxp minp)) dist 0.0)
)
)
(command "insert" name minp 1 1 0)
(setq from (entlast) ss (ssadd))
(command "array" "L" "" "R"
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
kc kc
)
(setq end (entlast) cur from)
(initget "N T")
(setq ans (getkword "\n Ban muon xoa doi tuong Trong hay Ngoai duong bao < N / T > :"))
(while (or fl (not (eq cur end)))
(setq ins (cdr(assoc 10 (entget cur))))
(command "line" minpp ins "")
(if (= ans "N")
(if (= (rem (length (ACET-GEOM-INTERSECTWITH (entlast) pl 0)) 2) 0)
(entdel cur)
)
(if (= (rem (length (ACET-GEOM-INTERSECTWITH (entlast) pl 0)) 2) 1)
(entdel cur)
)
)
(entdel (entlast))
(setq cur (entnext cur))
(if (eq cur end) (progn (setq fl t) ;(setq cur end))
)
)

(command "undo" "end")
(setvar "osmode" oldos)
)

Trong Code có sử dụng hàm (ACET-GEOM-EXTENTS ent) : hàm trả về điểm min và max của ent trong 1 list
Ví dụ : (ACET-GEOM-EXTENTS (car(entsel)))

Hàm (ACET-GEOM-INTERSECTWITH en1 en2 flag)
Hàm trả về listpoint tọa độ các điểm giao của 2 đối tượng en1 en2.
flag là số interger, cờ quy định các kiểu giao:
- 0: không mở rộng 2 đối tượng en1 en2
- 1: mở rộng đối tượng en1, không mở rộng đối tượng en2.
- 2: không mở rộng đối tượng en1, mở rộng đối tượng en2.
- 3: mở rộng 2 đối tượng en1 en2

Trong code trên thì Tue_NV đã sử dụng kiểu cờ flag=0
Các hàm này nằm trong phụ trợ Express
  • 2

#32 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 15 August 2010 - 12:08 PM

Như vậy thì Lisp chỉ áp dụng với đối tượng dạng điểm như point, Block, Text, Mtext Lisp xử lý nó theo điểm chèn phải không bạn?
Trong 3 thao tác của bạn thì Tue_NV thấy thao tác thứ 2 và thao tác thứ 3 : bạn làm không OK lắm
- Thao tác thứ 2 : Ngay ở dòng select object (khi thực thi Lisp), bạn muốn lọc thì Lisp lọc, bạn muốn chọn thì Lisp chọn, không cần thiết phải làm như ý của bạn vì không hiệu quả khi sử dụng vì như bạn nói : nó hơi thừa
- Thao tác thứ 3 : Bạn chọn đối tượng nằm trong, trên hay ngoài vùng chọn TRen/Ngoai>[/b] => Thực hiện lệnh chọn đối tượng để tuỳ mình xử lý
Đã là chọn Tren rồi thì có cần phải hỏi là "Có chọn cả những đối tượng bị cắt ngang qua hay không ?" Vì đã nằm trên rồi thì đương nhiên Polyline phải cắt qua chứ phải không bạn? Có thể là Tue_NV hiểu chưa được đúng. Bạn nói rõ hơn nhé.

Bổ sung thêm 1 ý nữa là Lisp có thể áp dụng cho Spline kín chứ không riêng gì Polyline
Tue_NV đang bận. Lúc rãnh mới có thể viết Lisp được

@Anh Duy : Tue_NV mới thấy bài của anh hôm qua, sao anh vội del đi thế?
Nếu anh thấy các hàm vl khó hiểu thì Tue_NV viết code này, không có sử dụng hàm vl, hy vọng anh Duy và bạn thanhDuan dễ hiểu hơn :
Đây là code :


(defun c:aic(/ oldos pl name kc minp maxp minpp from cur end ins fl)
(command "undo" "be")
(setvar "attreq" 0)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq pl (car(entsel "\n Pick chon Polyline kin :")))
(setq name (getstring t "\n Nhap ten Block / Enter de chon Block :"))
(if (= name "") (setq name (cdr(assoc 2 (entget (car(entsel "\n Pick chon Block :")))))))
(setq kc (getdist "\n Nhap khoang cach :"))
(setq minp (car (ACET-GEOM-EXTENTS pl)))
(setq maxp (cadr (ACET-GEOM-EXTENTS pl)))
(setq minpp (mapcar '- minp
(list (setq dist (distance maxp minp)) dist 0.0)
)
)
(command "insert" name minp 1 1 0)
(setq from (entlast) ss (ssadd))
(command "array" "L" "" "R"
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
kc kc
)
(setq end (entlast) cur from)
(initget "N T")
(setq ans (getkword "\n Ban muon xoa doi tuong Trong hay Ngoai duong bao < N / T > :"))
(while (or fl (not (eq cur end)))
(setq ins (cdr(assoc 10 (entget cur))))
(command "line" minpp ins "")
(if (= ans "N")
(if (= (rem (length (ACET-GEOM-INTERSECTWITH (entlast) pl 0)) 2) 0)
(entdel cur)
)
(if (= (rem (length (ACET-GEOM-INTERSECTWITH (entlast) pl 0)) 2) 1)
(entdel cur)
)
)
(entdel (entlast))
(setq cur (entnext cur))
(if (eq cur end) (progn (setq fl t) ;(setq cur end))
)
)

(command "undo" "end")
(setvar "osmode" oldos)
)

Trong Code có sử dụng hàm (ACET-GEOM-EXTENTS ent) : hàm trả về điểm min và max của ent trong 1 list
Ví dụ : (ACET-GEOM-EXTENTS (car(entsel)))

Hàm (ACET-GEOM-INTERSECTWITH en1 en2 flag)
Hàm trả về listpoint tọa độ các điểm giao của 2 đối tượng en1 en2.
flag là số interger, cờ quy định các kiểu giao:
- 0: không mở rộng 2 đối tượng en1 en2
- 1: mở rộng đối tượng en1, không mở rộng đối tượng en2.
- 2: không mở rộng đối tượng en1, mở rộng đối tượng en2.
- 3: mở rộng 2 đối tượng en1 en2

Trong code trên thì Tue_NV đã sử dụng kiểu cờ flag=0
Các hàm này nằm trong phụ trợ Express

Cảm ơn bác Tue_NV rất nhiều, mặc dù bác rất bận nhưng vẫn tham gia góp ý kiến.
Đúng là thao tác thứ 3 của em hơi ko OK. Em xin đính chính lại là : Bạn chọn đối tượng nằm trong hay ngoài vùng chọn .
Cảm ơn bác nhiều vì đã thay hàm và giải thích rõ ràng. Lisp của bác chạy rất OK. Mong bác lúc nào rảnh có thể giải đáp được bài toán. Mong tin bác
Em muốn lấy tất cả các đối tượng được chọn, không phải chỉ dạng điểm (trường hợp cắt ngang qua thì xét riêng)
Em luôn lắng nghe và chờ đợi ý kiến phản hồi.
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#33 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 15 August 2010 - 03:20 PM

Như vậy thì Lisp chỉ áp dụng với đối tượng dạng điểm như point, Block, Text, Mtext Lisp xử lý nó theo điểm chèn phải không bạn?
Trong 3 thao tác của bạn thì Tue_NV thấy thao tác thứ 2 và thao tác thứ 3 : bạn làm không OK lắm
- Thao tác thứ 2 : Ngay ở dòng select object (khi thực thi Lisp), bạn muốn lọc thì Lisp lọc, bạn muốn chọn thì Lisp chọn, không cần thiết phải làm như ý của bạn vì không hiệu quả khi sử dụng vì như bạn nói : nó hơi thừa
- Thao tác thứ 3 : Bạn chọn đối tượng nằm trong, trên hay ngoài vùng chọn TRen/Ngoai>[/b] => Thực hiện lệnh chọn đối tượng để tuỳ mình xử lý
Đã là chọn Tren rồi thì có cần phải hỏi là "Có chọn cả những đối tượng bị cắt ngang qua hay không ?" Vì đã nằm trên rồi thì đương nhiên Polyline phải cắt qua chứ phải không bạn? Có thể là Tue_NV hiểu chưa được đúng. Bạn nói rõ hơn nhé.

Bổ sung thêm 1 ý nữa là Lisp có thể áp dụng cho Spline kín chứ không riêng gì Polyline
Tue_NV đang bận. Lúc rãnh mới có thể viết Lisp được

@Anh Duy : Tue_NV mới thấy bài của anh hôm qua, sao anh vội del đi thế?
Nếu anh thấy các hàm vl khó hiểu thì Tue_NV viết code này, không có sử dụng hàm vl, hy vọng anh Duy và bạn thanhDuan dễ hiểu hơn :
Đây là code :


(defun c:aic(/ oldos pl name kc minp maxp minpp from cur end ins fl)
(command "undo" "be")
(setvar "attreq" 0)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq pl (car(entsel "\n Pick chon Polyline kin :")))
(setq name (getstring t "\n Nhap ten Block / Enter de chon Block :"))
(if (= name "") (setq name (cdr(assoc 2 (entget (car(entsel "\n Pick chon Block :")))))))
(setq kc (getdist "\n Nhap khoang cach :"))
(setq minp (car (ACET-GEOM-EXTENTS pl)))
(setq maxp (cadr (ACET-GEOM-EXTENTS pl)))
(setq minpp (mapcar '- minp
(list (setq dist (distance maxp minp)) dist 0.0)
)
)
(command "insert" name minp 1 1 0)
(setq from (entlast) ss (ssadd))
(command "array" "L" "" "R"
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
kc kc
)
(setq end (entlast) cur from)
(initget "N T")
(setq ans (getkword "\n Ban muon xoa doi tuong Trong hay Ngoai duong bao < N / T > :"))
(while (or fl (not (eq cur end)))
(setq ins (cdr(assoc 10 (entget cur))))
(command "line" minpp ins "")
(if (= ans "N")
(if (= (rem (length (ACET-GEOM-INTERSECTWITH (entlast) pl 0)) 2) 0)
(entdel cur)
)
(if (= (rem (length (ACET-GEOM-INTERSECTWITH (entlast) pl 0)) 2) 1)
(entdel cur)
)
)
(entdel (entlast))
(setq cur (entnext cur))
(if (eq cur end) (progn (setq fl t) ;(setq cur end))
)
)

(command "undo" "end")
(setvar "osmode" oldos)
)

Trong Code có sử dụng hàm (ACET-GEOM-EXTENTS ent) : hàm trả về điểm min và max của ent trong 1 list
Ví dụ : (ACET-GEOM-EXTENTS (car(entsel)))

Hàm (ACET-GEOM-INTERSECTWITH en1 en2 flag)
Hàm trả về listpoint tọa độ các điểm giao của 2 đối tượng en1 en2.
flag là số interger, cờ quy định các kiểu giao:
- 0: không mở rộng 2 đối tượng en1 en2
- 1: mở rộng đối tượng en1, không mở rộng đối tượng en2.
- 2: không mở rộng đối tượng en1, mở rộng đối tượng en2.
- 3: mở rộng 2 đối tượng en1 en2

Trong code trên thì Tue_NV đã sử dụng kiểu cờ flag=0
Các hàm này nằm trong phụ trợ Express

Các đối tượng không nằm so le nhau và tốc độ chậm hơn so với lần trước bác Tue_NV à.
Nhưng em dễ hiểu hơn
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#34 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 15 August 2010 - 09:09 PM

Các đối tượng không nằm so le nhau và tốc độ chậm hơn so với lần trước bác Tue_NV à.
Nhưng em dễ hiểu hơn

Tue_NV viết cho các đối tượng không nằm so le nhau là có chủ đích với cốt ý để cho anh Duy và bạn dễ hiểu đấy mà (để dễ thấy và nhận ra). Khi hiểu ra rồi thì cho viết cho trường hợp so le mấy hồi (đơn giản).
Về tốc độ thì các hàm Lisp không nhanh bằng Visual Lisp, vì thế Tue_NV thích sử dụng các hàm Vl hơn.

Tóm lại, Tue_NV viết lại yêu cầu bài toán của bạn, bạn xem có đúng không nhé:

Bài toán : Chọn 1 loạt đối tượng : Đối tượng chọn có thể lọc bằng lệnh filter hay bằng các phương pháp chọn. Muốn chọn kiểu nào thì có ngay kiểu đó. Chương trinhtự động lọc ra đối tượng nằm trong hay trên hay ngoài 1đường bao kín. Đường bao kín là 1 Polyline kín hoặc là 1 Spline kín. Đối tượng nằm trên đường bao (là đối tượng mà đường bao cắt qua)
OK không? :(

Bạn xem bài toán của bạn phát biểu như vầy, đúng không?

Đây là 1 bài toán hay và lời giải cho nó cũng chính là từ thuật toán mà bạn đã đưa ra. Hướng giải quyết là như vậy.
  • 1

#35 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 15 August 2010 - 09:55 PM

Tue_NV viết cho các đối tượng không nằm so le nhau là có chủ đích với cốt ý để cho anh Duy và bạn dễ hiểu đấy mà (để dễ thấy và nhận ra). Khi hiểu ra rồi thì cho viết cho trường hợp so le mấy hồi (đơn giản).
Về tốc độ thì các hàm Lisp không nhanh bằng Visual Lisp, vì thế Tue_NV thích sử dụng các hàm Vl hơn.

Tóm lại, Tue_NV viết lại yêu cầu bài toán của bạn, bạn xem có đúng không nhé:

Bài toán : Chọn 1 loạt đối tượng : Đối tượng chọn có thể lọc bằng lệnh filter hay bằng các phương pháp chọn. Muốn chọn kiểu nào thì có ngay kiểu đó. Chương trinhtự động lọc ra đối tượng nằm trong hay trên hay ngoài 1đường bao kín. Đường bao kín là 1 Polyline kín hoặc là 1 Spline kín. Đối tượng nằm trên đường bao (là đối tượng mà đường bao cắt qua)
OK không? :(

Bạn xem bài toán của bạn phát biểu như vầy, đúng không?

Đây là 1 bài toán hay và lời giải cho nó cũng chính là từ thuật toán mà bạn đã đưa ra. Hướng giải quyết là như vậy.

Vâng. Bác Tue_NV nói ngắn gọn mà đầy đủ, yêu cầu đã được đặt ra đúng như vậy đó bác. Em hiểu Visual Lisp nhanh hơn lisp. Em mong sau này sẽ sử dụng linh hoạt và tạo ra những ứng dụng cần thiết. Cảm ơn bác nhiều. Em đã đăng ký trên diễn đàn lâu rồi nhưng dạo này em mới có thời gian để tìm tòi và học hỏi. Gần như ngày nào em cũng dạo qua diễn đàn để tìm những cái hay và đóng góp ý kiến. Được tham gia và trò chuyện với các bác trên đây em rất vui, cảm ơn tất cả, cảm ơn cadviet.com rất nhiều.
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#36 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 15 August 2010 - 11:30 PM

Gần đây cũng có 1 anh bạn nhờ mình về bài toán này (hatch bằng block) nên cũng có theo dỏi và ý kiến chút chứ thật ra đến nay nhu cầu lisp cho công việc của mình đã dừng lại. Mà làm việc với danh sách thì mình tiêu hoá ko nổi. Miễn cưỡng thì đọc và copy cả 1 đọan của ng khác để làm 1 mục đích nào đó thì đc nhưng mình ko thích cho lắm nên Cái lisp trên của Tuệ thì nếu có nhu cầu mình vẩn chôm đc 1 đoạn. Còn hiểu cho mạch lạc thì chắc phải đọc thêm. Rất nể khả năng học của Tuệ vì hình như xuất phát điểm của mình và Tuệ cùng như nhau nhưng mình dừng lại rồi ko phát triển nửa bị ì rồi. :(
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#37 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 16 August 2010 - 09:30 AM

Bác Tue_NV à.
Thay vì lisp tự chọn lấy một điểm gốc để array ta thay bằng cách kích chọn trực tiếp từ màn hình và em chỉ cần array theo hàng cột thôi chứ không cần theo kiểu so le như ví dụ em đã post từ đầu. Chả là trong cùng một vùng kín nhưng em muốn trải nhiều loại block xen kẽ nhau, nhưng nếu sử dụng được với lisp trên thì nó sẽ trùng đè nhau. Nếu với cách kích chọn từ màn hình thì sẽ dễ dàng hơn khi trải mảng. Với kiểu so le nhau thì em làm 2 lần (hơi nhiều nhưng ổn). Khi chọn đối tượng, chọn vị trí gốc (từ điểm đó mà trải mảng) sau đó sẽ hỏi khoảng cách hàng và khoảng cách cột. Mong bác phản hồi
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#38 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 August 2010 - 10:35 AM

Bác Tue_NV à.
Thay vì lisp tự chọn lấy một điểm gốc để array ta thay bằng cách kích chọn trực tiếp từ màn hình và em chỉ cần array theo hàng cột thôi chứ không cần theo kiểu so le như ví dụ em đã post từ đầu. Chả là trong cùng một vùng kín nhưng em muốn trải nhiều loại block xen kẽ nhau, nhưng nếu sử dụng được với lisp trên thì nó sẽ trùng đè nhau. Nếu với cách kích chọn từ màn hình thì sẽ dễ dàng hơn khi trải mảng. Với kiểu so le nhau thì em làm 2 lần (hơi nhiều nhưng ổn). Khi chọn đối tượng, chọn vị trí gốc (từ điểm đó mà trải mảng) sau đó sẽ hỏi khoảng cách hàng và khoảng cách cột. Mong bác phản hồi

Điểm gốc mà Tue_NV sử dụng để aray chính là điểm min của đường bao. Cứ thế Array theo trục dương OX và trục dương OY.
Nếu bạn chọn điểm gốc để chèn thì không có vấn đề gì cả. Nhưng Lisp sẽ array đối tượng Block theo trục dương OX và trục dương OY tính từ điểm gốc và xử lý. Bạn muốn array theo kiểu nào? Hãy upload file và nói rõ hơn nhé

Tue_NV hỏi thêm là : Bạn trải nhiều Block xen kẽ nhau? Vậy thì nhiều loại Block là tối đa là bao nhiêu vậy bạn? Có nhiều hơn 2 loại Block không? hay là = 2
Bạn nói rõ ràng hơn thì mới viết được
Vậy nhé
  • 0

#39 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 16 August 2010 - 10:54 AM

Điểm gốc mà Tue_NV sử dụng để aray chính là điểm min của đường bao. Cứ thế Array theo trục dương OX và trục dương OY.
Nếu bạn chọn điểm gốc để chèn thì không có vấn đề gì cả. Nhưng Lisp sẽ array đối tượng Block theo trục dương OX và trục dương OY tính từ điểm gốc và xử lý. Bạn muốn array theo kiểu nào? Hãy upload file và nói rõ hơn nhé

Vâng.
Bác xem file này nhé:
http://www.cadviet.c..._vi_tri_dat.dwg
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#40 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 August 2010 - 02:01 PM

Vâng.
Bác xem file này nhé:
http://www.cadviet.c..._vi_tri_dat.dwg

Bạn thử cái này xem :
Lisp AIC
  • 1