Chuyển đến nội dung
Diễn đàn CADViet
phamngoctukts

Ý tưởng xây dựng chương trình

Các bài được khuyến nghị

Mình lập topic này để các bạn có ý tưởng hay nhưng không có thời gian thực hiện (hoặc không có khả năng thực hiện) thì port lên đây. Trong thời gian vừa qua mình cũng xây dựng được một số chương trình phục vụ cho công việc. Đến nay thì ý ttưởng đã cạn nên tham khảo ý kiến của các bạn.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn làm cái này được không: Một máy tính nhỏ gọn trong AutoCAD !

Ngoài cộng số, còn cộng được chiều dài, diện tích của đối tượng chọn

1. Một textbox để gõ công thức số

2. Thao tác chọn:

+ một list để filter layer khi chọn

+ một list filter đối tượng line, arc, pline khi chọn

+ 2 options: lấy tổng chiều dài hoặc tổng diện tích ?

+ 1 textbox: scalefactor, nếu muốn trừ đi thì để giá trị âm (-)

 

Sau khi chọn sẽ đưa giá trị tính được vào công thức

Nhấn cal >>> ra giá trị >>> chọn text, hoặc attribute trên màn hình để update giá trị tính được vào, hoặc tạo text mới !!!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hàm EvaluateExpression để tính biểu thức là string, copy trên internet, có chế biến lại tí :)

Hàm viết bằng VB, VB.NET chắc chỉnh lại chút chắc là OK !

Các hàm số được phép viết trong chuỗi string: sin, cos, min(a,b,c ...), max(x,y,z ...), PI, round, tan, atn, log, abs.

Cảm ơn bạn !

 

Function EvaluateExpression(ByVal Expression As _
   String) As Double

Const PREC_NONE = 11
Const PREC_UNARY = 10   ' Not actually used.
Const PREC_POWER = 9
Const PREC_TIMES = 8
Const PREC_DIV = 7
Const PREC_INT_DIV = 6
Const PREC_MOD = 5
Const PREC_PLUS = 4

Dim expr As String
Dim is_unary As Boolean
Dim next_unary As Boolean
Dim parens As Integer
Dim pos As Integer
Dim expr_len As Integer
Dim ch As String
Dim lexpr As String
Dim rexpr As String
'Dim Value As String
Dim status As Long
Dim best_pos As Integer
Dim best_prec As Integer

   ' Remove all spaces.
   expr = Replace$(Expression, " ", "")
   expr_len = Len(expr)
   If expr_len = 0 Then
       EvaluateExpression = 0
       Exit Function
   End If

   ' If we find + or - now, it is a unary operator.
   is_unary = True

   ' So far we have nothing.
   best_prec = PREC_NONE

   ' Find the operator with the lowest precedence.
   ' Look for places where there are no open
   ' parentheses.
   For pos = 1 To expr_len
       ' Examine the next character.
       ch = Mid$(expr, pos, 1)

       ' Assume we will not find an operator. In
       ' that case, the next operator will not
       ' be unary.
       next_unary = False

       If ch = " " Then
           ' Just skip spaces. We keep them here
           ' to make the error messages easier to
       ElseIf ch = "(" Then
           ' Increase the open parentheses count.
           parens = parens + 1

           ' A + or - after "(" is unary.
           next_unary = True
       ElseIf ch = ")" Then
           ' Decrease the open parentheses count.
           parens = parens - 1

           ' An operator after ")" is not unary.
           next_unary = False

           ' If parens < 0, too many ')'s.
           If parens < 0 Then
               Err.Raise vbObjectError + 1001, _
                   "EvaluateExpression", _
                   "Too many )s in '" & _
                   Expression & "'"
           End If
       ElseIf parens = 0 Then
           ' See if this is an operator.
           If ch = "^" Or ch = "*" Or _
              ch = "/" Or ch = "\" Or _
              ch = "%" Or ch = "+" Or _
              ch = "-" _
           Then
               ' An operator after an operator
               ' is unary.
               next_unary = True

               ' See if this operator has higher
               ' precedence than the current one.
               Select Case ch
                   Case "^"
                       If best_prec >= PREC_POWER Then
                           best_prec = PREC_POWER
                           best_pos = pos
                       End If

                   Case "*", "/"
                       If best_prec >= PREC_TIMES Then
                           best_prec = PREC_TIMES
                           best_pos = pos
                       End If

                   Case "\"
                       If best_prec >= PREC_INT_DIV Then
                           best_prec = PREC_INT_DIV
                           best_pos = pos
                       End If

                   Case "%"
                       If best_prec >= PREC_MOD Then
                           best_prec = PREC_MOD
                           best_pos = pos
                       End If

                   Case "+", "-"
                       ' Ignore unary operators
                       ' for now.
                       If (Not is_unary) And _
                           best_prec >= PREC_PLUS _
                       Then
                           best_prec = PREC_PLUS
                           best_pos = pos
                       End If
               End Select
           End If
       End If
       is_unary = next_unary
   Next pos

   ' If the parentheses count is not zero,
   ' there's a ')' missing.
   If parens <> 0 Then
       Err.Raise vbObjectError + 1002, _
           "EvaluateExpression", "Missing ) in '" & _
           Expression & "'"
   End If

   ' Hopefully we have the operator.
   If best_prec < PREC_NONE Then
       lexpr = Left$(expr, best_pos - 1)
       rexpr = Mid$(expr, best_pos + 1)
       Select Case Mid$(expr, best_pos, 1)
           Case "^"
               EvaluateExpression = _
                   EvaluateExpression(lexpr) ^ _
                   EvaluateExpression(rexpr)
           Case "*"
               EvaluateExpression = _
                   EvaluateExpression(lexpr) * _
                   EvaluateExpression(rexpr)
           Case "/"
               EvaluateExpression = _
                   EvaluateExpression(lexpr) / _
                   EvaluateExpression(rexpr)
           Case "\"
               EvaluateExpression = _
                   EvaluateExpression(lexpr) \ _
                   EvaluateExpression(rexpr)
           Case "%"
               EvaluateExpression = _
                   EvaluateExpression(lexpr) Mod _
                   EvaluateExpression(rexpr)
           Case "+"
               EvaluateExpression = _
                   EvaluateExpression(lexpr) + _
                   EvaluateExpression(rexpr)
           Case "-"
               EvaluateExpression = _
                   EvaluateExpression(lexpr) - _
                   EvaluateExpression(rexpr)
       End Select
       Exit Function
   End If

   ' If we do not yet have an operator, there
   ' are several possibilities:
   '
   ' 1. expr is (expr2) for some expr2.
   ' 2. expr is -expr2 or +expr2 for some expr2.
   ' 3. expr is Fun(expr2) for a function Fun.
   ' 4. expr is a primitive.
   ' 5. It's a literal like "3.14159".

   ' Look for (expr2).
   If Left$(expr, 1) = "(" And Right$(expr, 1) = ")" Then
       ' Remove the parentheses.
       EvaluateExpression = EvaluateExpression( _
           Mid$(expr, 2, expr_len - 2))
       Exit Function
   End If

   ' Look for -expr2.
   If Left$(expr, 1) = "-" Then
       EvaluateExpression = -EvaluateExpression( _
           Mid$(expr, 2))
       Exit Function
   End If

   ' Look for +expr2.
   If Left$(expr, 1) = "+" Then
       EvaluateExpression = EvaluateExpression( _
           Mid$(expr, 2))
       Exit Function
   End If

   Dim arrExpr$(), i%
   Dim expr1st$, expr2nd$, x#
   ' Look for Fun(expr2).
   If expr_len > 5 And Right$(expr, 1) = ")" Then
       ' Find the first (.
       pos = InStr(expr, "(")

       If pos > 0 Then
           ' See what the function is.
           lexpr = LCase$(Left$(expr, pos - 1))
           rexpr = Mid$(expr, pos + 1, expr_len - pos - 1)
           Select Case lexpr
               Case "abs"
                   EvaluateExpression = _
                       Abs(EvaluateExpression(rexpr))
                   Exit Function
               Case "round" '2 arguments expression
                   arrExpr()= Split(rexpr, ",")
                   expr1st = arrExpr(0)
                   On Error Resume Next
                   expr2nd = arrExpr(1)
                   If Err Then
                   EvaluateExpression = _
                       Round(EvaluateExpression(rexpr), 3)
                   Else
                   EvaluateExpression = _
                       Round(EvaluateExpression(expr1st), EvaluateExpression(expr2nd))
                   End If
                   On Error GoTo 0

                   Exit Function
               Case "sin"
                   EvaluateExpression = _
                       Sin(EvaluateExpression(rexpr))
                   Exit Function
               Case "cos"
                   EvaluateExpression = _
                       Cos(EvaluateExpression(rexpr))
                   Exit Function
               Case "tan"
                   EvaluateExpression = _
                       Tan(EvaluateExpression(rexpr))
                   Exit Function
               Case "sqr"
                   EvaluateExpression = _
                       Sqr(EvaluateExpression(rexpr))
                   Exit Function
               Case "log"
                   EvaluateExpression = _
                       Log(EvaluateExpression(rexpr))
                   Exit Function
               Case "atn"
                   EvaluateExpression = _
                       Atn(EvaluateExpression(rexpr))
                   Exit Function
               Case "max" 'multiple arguments expression
                   arrExpr() = Split(rexpr, ",")
                   expr1st = arrExpr(0)
                   EvaluateExpression = EvaluateExpression(expr1st)
                   On Error Resume Next
                   i = 1
                   Do
                   expr1st = arrExpr(i)
                   If Err Then Exit Do
                   x = EvaluateExpression(expr1st)
                   If x > EvaluateExpression Then EvaluateExpression = x
                   i = i + 1
                   Loop
                   On Error GoTo 0
                   Exit Function
               Case "min" 'multiple arguments expression
                   arrExpr() = Split(rexpr, ",")
                   expr1st = arrExpr(0)
                   EvaluateExpression = EvaluateExpression(expr1st)
                   On Error Resume Next
                   i = 1
                   Do
                   expr1st = arrExpr(i)
                   If Err Then Exit Do
                   x = EvaluateExpression(expr1st)
                   If x < EvaluateExpression Then EvaluateExpression = x
                   i = i + 1
                   Loop
                   On Error GoTo 0
                   Exit Function
               'Case "Your function" ...
               ' Add other functions (including
               ' program-defined functions) here.
           End Select
       End If
   End If

   If UCase(expr) = "PI" Then
       EvaluateExpression = 3.14159: Exit Function
   ElseIf IsNumeric(expr) Then
       EvaluateExpression = CDbl(expr)
   Else
       Err.Raise 9, _
           "EvaluateExpression", _
           "Error evaluating '" & Expression & _
           "' as a constant."
   End If
End Function

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn làm cái này được không: Một máy tính nhỏ gọn trong AutoCAD !

Ngoài cộng số, còn cộng được chiều dài, diện tích của đối tượng chọn

1. Một textbox để gõ công thức số

2. Thao tác chọn:

+ một list để filter layer khi chọn

+ một list filter đối tượng line, arc, pline khi chọn

+ 2 options: lấy tổng chiều dài hoặc tổng diện tích ?

+ 1 textbox: scalefactor, nếu muốn trừ đi thì để giá trị âm (-)

 

Sau khi chọn sẽ đưa giá trị tính được vào công thức

Nhấn cal >>> ra giá trị >>> chọn text, hoặc attribute trên màn hình để update giá trị tính được vào, hoặc tạo text mới !!!

Cám ơn bạn đã đóng góp ý tưởng. Mình hoàn thiện nốt cái thép sàn sẽ nghiên cứu ý tưởn của ban. Thanh!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

À, option lấy diện tích, chiều dài, thêm cả đếm luôn số lượng nữa đi. Rồi kết quả đưa vào clipboard để paste vào text công thức. Bạn đã có cái đếm text hay block gì đó, nâng lên thành gì đó như là "AutoCAD Calculator" đi !

PS: Cái thép sàn để sau đi chạy đua vũ trang đến bao giờ :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

......

PS: Cái thép sàn để sau đi chạy đua vũ trang đến bao giờ :D

Thì chạy đến giới hạn hoàn thiện của nó à. :rolleyes:

Để lâu thì 1 là ý tưởng quên mất. 2 là phải dò lại code ... lòi cả con mắt :wacko:

 

Mấy hôm nay toàn viết bài về chuyên đề Thống kê thép sàn không à? Chắc bị "nhập tâm" mất rùi. hùi hùi :lol:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ban đầu, tức là năm ngoái, tớ chỉ thấy trên mạng mấy phần mềm của CIC, DTIP, của anh Nguyễn Lâm bên Ketcau.com, của bạn Hiếu HCAD, cả của CADViet nữa :D, thống kê thép, nên nâng cấp cây nhà lên mạnh hơn, đưa ra, đạt mục đích rồi.

Còn việc kết hợp cả vẽ cấu kiện + cốt thép + thống kê vào 1 chương trình thì là 1 bài toán khác rồi ! Anh em cứ chiến đấu đi coi chừng cuối năm tớ ra cái ngon hơn :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ban đầu, tức là năm ngoái, tớ chỉ thấy trên mạng mấy phần mềm của CIC, DTIP, của anh Nguyễn Lâm bên Ketcau.com, của bạn Hiếu HCAD, cả của CADViet nữa :D, thống kê thép, nên nâng cấp cây nhà lên mạnh hơn, đưa ra, đạt mục đích rồi.

Còn việc kết hợp cả vẽ cấu kiện + cốt thép + thống kê vào 1 chương trình thì là 1 bài toán khác rồi ! Anh em cứ chiến đấu đi coi chừng cuối năm tớ ra cái ngon hơn :D

Ý tưởng của chương trình thống kê thép của CIC, của Nguyễn Lâm hay của chính bạn đều bất cập cả. Vì không thể thống kê cho 1 thanh thép có hình dạng bất kì được? Phải mất công dò, dò trong cái thư viện ra mới được? Nếu trong thư viện không có thì sao bạn? Phải đi tạo, viết ra cái mới à? Nếu như bạn thì có thể viết được, còn User thì không thể. Như vậy theo mình thì chưa có thể gọi là đạt được mục đích được.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn không để ý thôi, User có thể tự tạo block mới bất kỳ và nhanh hơn tạo block với AutoCAD bình thường rất nhiều ! Và block mới cũng tự động update số liệu từ công thức tính !

Quảng cáo tý :D

http://www.youtube.com/watch?v=ASbvUjddyfI

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Sorry! Vì chưa để ý đến tính năng này của bạn. Nhưng vấn đề bất cập về sự không hiệu quả vẫn còn đó.

1./ Là Hơi mất công phải dòm trong thư viện rồi lấy Block ra. Cách hay nhất là tạo 1 Block có hình dáng bất kì 1 cách nhanh nhất. Cách của bạn thì chưa thực nhanh rồi. Lại phải nhập công thức nữa. Thư viện chỉ là để mấy cái hay sử dụng thôi. Để hết trong thư viện thì cái thư viện đồ sộ thật

2./ Tốn bộ nhớ để lưu lại file. Lỡ một mai....

3./ Đến khi folder đầy ắp rồi thì chẳng biết cái nào tạo rồi, cái nào chưa tạo. Gặp cái tạo rồi mà cứ tưởng là chưa tạo . Phải đi tạo lại thì có phải mất thời gian hay không? Mất công phải dòm nữa? <_<

4./ Việc tạo lại Block thông qua nhiều bước hơi rắc rối.

Bên CIC. họ tạo tới 160 loại thép cơ đấy

http://www.cic.com.vn/forums/showthread.php?tid=11&highlight=tKT

Nhiều thật <_<

Mấy lời góp ý

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Quang đi quẩn lại toàn thấy ý tưởng về kết cau không à! Có ai có ý tưởng về kiến trúc không cho xin ít :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Quang đi quẩn lại toàn thấy ý tưởng về kết cau không à! Có ai có ý tưởng về kiến trúc không cho xin ít :D

Hội KTS Việt Nam vừa công bố một loạt hoạt động trong năm 2011, trong đó tiêu biểu là chương trình “Kiến trúc xanh” - thể hiện định hướng mới của kiến trúc Việt Nam trong thời gian tới.

 

Chủ tịch Hội KTS Việt Nam - KTS Nguyễn Tấn Vạn cho biết, theo Quyết định số 2008-QĐ/TTg của Thủ tướng Chính phủ về việc lấy ngày 27/4 hàng năm làm Ngày Kiến trúc Việt Nam, năm nay Hội sẽ tổ chức một loạt hoạt động để thu hút sự quan tâm của xã hội đối với kiến trúc và phát huy mạnh mẽ hơn vai trò, trách nhiệm của giới KTS đối với cộng đồng, như thi sáng tác kiến trúc gắn với các địa danh, địa chỉ cụ thể, mang tính xã hội cao; triển lãm các tác phẩm kiến trúc đoạt giải của Hội; hội thảo khoa học nhằm giải quyết những vấn đề bức xúc từ chính đời sống…

 

Theo KTS Nguyễn Tấn Vạn, cùng với xu thế chung của thế giới về nền kiến trúc gắn với công nghệ hiện đại, tiết kiệm năng lượng và thân thiện với môi trường (còn gọi là kiến trúc xanh), vấn đề kiến trúc xanh ở Việt Nam ngày càng được nhìn nhận quan trọng hơn và đây là định hướng của kiến trúc Việt Nam trong thời gian tới Ngày Kiến trúc Việt Nam năm nay (được tổ chức lần đầu tiên) sẽ gắn với một sự kiện ý nghĩa, đó là Hội sẽ xúc tiến thành lập Hội đồng Kiến trúc xanh. Hội đồng sẽ xây dựng những tiêu chí về kiến trúc xanh, làm căn cứ cho các giải thưởng kiến trúc xanh; tổ chức bình chọn các công trình “xanh” tiêu biểu và thúc đẩy tuyên truyền về hoạt động kiến trúc xanh trong xã hội. Đây chính là những hoạt động để giới KTS hướng theo. “Tại Diễn đàn KTS châu Á lần thứ 16 với chủ đề Đô thị châu Á thế kỷ XXI lần đầu tiên Việt Nam đăng cai tổ chức từ 15 - 20/8/2011 tại Đà Nẵng, vấn đề kiến trúc xanh sẽ được đề cập”, KTS Vạn cho biết như vậy.

 

Nhấn mạnh về vấn đề kiến trúc xanh, KTS Vạn kể về câu chuyện các siêu đô thị (10 triệu dân) đang "chạy" dần từ các nước châu Mỹ về các nước châu Á, nhất là ở Ấn Độ, Nhật, Trung Quốc, Việt Nam khiến những người thờ ơ nhất cũng phải lo lắng. Các siêu đô thị này, theo nhận định của giới KTS, đó là một xu thế thiếu bền vững, tích tụ hàng loạt vấn đề như suy giảm chất lượng môi trường sống, biến đổi khí hậu… Vì vậy, theo KTS Nguyễn Tấn Vạn, Hội KTS sẽ kiến nghị với Đảng, Nhà nước chính thức đưa vấn đề kiến trúc xanh trở thành một định hướng phát triển của kiến trúc Việt Nam trong thời gian tới.

Chúc anh thành công!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Quang đi quẩn lại toàn thấy ý tưởng về kết cau không à! Có ai có ý tưởng về kiến trúc không cho xin ít :D

Bạn làm cái thống kê cửa đi cửa sổ ghế bàn tủ giường v.v đi. Sao bạn nhảy sang làm thép làm gì :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

... 1./ Là Hơi mất công phải dòm trong thư viện rồi lấy Block ra ...

Thì ra ý bác Tuệ không dùng block, vẽ vo hoặc vẽ tự động dựa trên hình của thép! Nếu thế thật thì báo cáo sẽ xấu lắm ! Tự vẽ mà còn chỉnh đi chỉnh lại mới đẹp kia mà !

 

Ý tưởng cho bạn Tú: tạo 1 bảng insert block trong AutoCAD có filter tên block để phù hợp với từng công việc.

Vì dụ: Chương trình TKT sở dĩ phải tạo bảng insert block riêng vì chỉ định insert những block có tên bắt đầu bằng text "TKT" !

Nếu công việc định là insert block bàn ghế giường tủ chẳng hạn, cần có filter là "*Furniture*", hoặc đơn giản hơn, chọn một folder !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn làm cái thống kê cửa đi cửa sổ ghế bàn tủ giường v.v đi. Sao bạn nhảy sang làm thép làm gì :D

Có lẽ phải chăm chút cho phần kiến trúc tí nhể. Nhưng mà các ý tưởng về cái thép sàn nó cứ luổn quẩn trong đầu.

Người nào không biết nhìn mình tưởng bị thần kinh híc .. đó là cái giá phải trả cho niềm đam mê lập trình..

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thì ra ý bác Tuệ không dùng block, vẽ vo hoặc vẽ tự động dựa trên hình của thép! Nếu thế thật thì báo cáo sẽ xấu lắm ! Tự vẽ mà còn chỉnh đi chỉnh lại mới đẹp kia mà !

 

Ý tưởng cho bạn Tú: tạo 1 bảng insert block trong AutoCAD có filter tên block để phù hợp với từng công việc.

Vì dụ: Chương trình TKT sở dĩ phải tạo bảng insert block riêng vì chỉ định insert những block có tên bắt đầu bằng text "TKT" !

Nếu công việc định là insert block bàn ghế giường tủ chẳng hạn, cần có filter là "*Furniture*", hoặc đơn giản hơn, chọn một folder !

Cám ơn ý tưởn của bạn. Mình sẽ nghĩ dần ý tưởng này (ý tưởng rất hay đấy).

1. tạo một số mẫu cửa gồm cả mặt đứng và mặt bằng.

2. Insert cửa vào mặt bằng (có một form nhập thông tin chiều rộng, cao, khuôn...) Cái này dùng setxdata.

3. tự động insert chi tiết cửa mặt đứng và thông kê các loại cửa.

Bạn thấy sao?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có lẽ phải chăm chút cho phần kiến trúc tí nhể. Nhưng mà các ý tưởng về cái thép sàn nó cứ luổn quẩn trong đầu.

Sàn bạn làm không thể bằng tớ dân kết cấu làm đâu. Tớ tự động hóa được từng cái nhỏ là block TKT và Tag thép rồi. Khi nào tớ đưa phần vẽ cấu kiện + tính thép nhanh rồi vẽ thép, hoặc xuất sang SAFE tính rồi nhập kết quả về, thì bạn làm sao theo được ?

 

Kiến trúc nếu còn phải dựng 3D trong AutoCAD thì cũng là phần chưa có nhiều lắm thì phải ! Xuất nhập sang MAX thế nào thì tớ cũng đâu có dám làm tranh đâu dù thi thoảng cũng luẩn quẩn trong đầu :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Kiến trúc nếu còn phải dựng 3D trong AutoCAD thì cũng là phần chưa có nhiều lắm thì phải ! Xuất nhập sang MAX thế nào thì tớ cũng đâu có dám làm tranh đâu dù thi thoảng cũng luẩn quẩn trong đầu :D

Trong 3DMAX có hẳn một trường trình soạn thảo script riêng. Cái này mình đã từng nghiên cứu nhưng không được mọi người hưởng ứng lắm nên lâu dần cũng quên hết rồi. Trước mình đã lập 1 topic để bàn luận về vấn đề này nhưng không có ai tham gia cả.

http://www.cadviet.com/forum/index.php?showtopic=28687

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Trong 3DMAX có hẳn một trường trình soạn thảo script riêng. Cái này mình đã từng nghiên cứu nhưng không được mọi người hưởng ứng lắm nên lâu dần cũng quên hết rồi. Trước mình đã lập 1 topic để bàn luận về vấn đề này nhưng không có ai tham gia cả.

http://www.cadviet.com/forum/index.php?showtopic=28687

 

Bạn đã thử tìm hiểu qua Autodesk Revit Architecture chưa, nó đáp ứng khá tốt trong vấn đề kiến trúc và hình khối không gian mà không cần lập trình nhiều (dùng parametric family) nếu bạn thích tùy biến thêm có thể tham khảo tiếp phần Revit API (viết Add-In cho Revit)

Revit có thể render phối cảnh được mà hình như cũng xuất qua MAX được.

Thân!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình lập topic này để các bạn có ý tưởng hay nhưng không có thời gian thực hiện (hoặc không có khả năng thực hiện) thì port lên đây. Trong thời gian vừa qua mình cũng xây dựng được một số chương trình phục vụ cho công việc. Đến nay thì ý ttưởng đã cạn nên tham khảo ý kiến của các bạn.

Hiện nay có 1 số ứng dụng trợ giúp cho việc cắt thép thanh trong thi công nhưng hình như phải mất phí và cũng ko bít khả năng tối ưu của nó đến mức nào. Xin các bạn đóng góp ý tưởng cho việc tối ưu cắt thép này.

Quan trọng là ý tưởng phải khả thi về thời gian xử lý + cho kết quả ít hao hụt thép nhất.

Nếu ý tưởng của bạn nào đó hay nhưng bạn đó ko bít thể hiện nó bằng ngôn ngữ máy thì mình và các bạn khác sẽ hổ trợ.

Hy vọng chúng ta sẽ cùng tạo ra đc 1 chương trình cho hiệu quả cao nhất.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hiện nay có 1 số ứng dụng trợ giúp cho việc cắt thép thanh trong thi công nhưng hình như phải mất phí và cũng ko bít khả năng tối ưu của nó đến mức nào. Xin các bạn đóng góp ý tưởng cho việc tối ưu cắt thép này.

Quan trọng là ý tưởng phải khả thi về thời gian xử lý + cho kết quả ít hao hụt thép nhất.

Nếu ý tưởng của bạn nào đó hay nhưng bạn đó ko bít thể hiện nó bằng ngôn ngữ máy thì mình và các bạn khác sẽ hổ trợ.

Hy vọng chúng ta sẽ cùng tạo ra đc 1 chương trình cho hiệu quả cao nhất.

 

Bạn có thể nói sơ qua về các vấn đề

1. Số liệu đầu vào gồm những gì

2. Mục đích của việc cắt thép (để làm gì) cắt như thế nào

3. Kết quả sẽ ra sao (tiết kiệm thép hay tiết kiệm công cắt thép)

 

Trước giờ chưa đi ra ngoài công trường bao giờ

Nếu được bạn cho 1 ví dụ cụ thể nhỏ nhỏ.

Anh em cùng nhau làm chung 1 cái để làm quen đi. Ai biết lisp dùng lisp, VBA dùng VBA, .NET dùng .NET mỗi người 1 lệnh thế nào cũng xong thôi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn có thể nói sơ qua về các vấn đề

1. Số liệu đầu vào gồm những gì

2. Mục đích của việc cắt thép (để làm gì) cắt như thế nào

3. Kết quả sẽ ra sao (tiết kiệm thép hay tiết kiệm công cắt thép)

 

Trước giờ chưa đi ra ngoài công trường bao giờ

Nếu được bạn cho 1 ví dụ cụ thể nhỏ nhỏ.

Anh em cùng nhau làm chung 1 cái để làm quen đi. Ai biết lisp dùng lisp, VBA dùng VBA, .NET dùng .NET mỗi người 1 lệnh thế nào cũng xong thôi.

dữ liệu vào gồm 2 cột:chiều dài thanh thép và số lượng của thanh đó

1 cây thép bạn đi mua có chiều dài cố định là 11.7m

Bạn xử lý việc cắt các cây thép 11.7m này ra thành các thanh thép có chiều dài và số lượng như yêu cầu trên.

Tất nhiên sẽ có vô số cách cắt. Vấn đề là tìm ra cách nào để sử dụng ít các cây thép 11.7m nhất, nghĩa là lượng thép dư ra từ việc cắt thép là nhỏ nhất (trong dự toán nhà nước cho phép hao hụt việc này là 5%)

Thử nghỉ có 100 tấn thép bạn ra được phương án có hao hụt 2%, người khác ra hao hụt 12% thì bạn đã tiết kiệm hơn người ta 10 tấn thép (quả là ko ít tiền tí nào)

Vừa qua trang ketcau.com thấy ngay 1 ví dụ cho bạn

m vừa nhận đi cắt sắt cho ngta nh chưa có cách cắt nào cho hợp lí cả, m tai cp manager ma k cai dc, mọi người có phần mềm nào đơn giản không giúp m với! Cho m phương án cắt càng tốt! thanks all!

m cần cắt 108 thanh sắt dài 11.7m ra làm 20 loại sau:

1.L=5070 36thanh

2. 5110 48

3. 4710 30

4. 2650 48

5. 2510 12

6. 2810 12

7. 3110 12

8. 3980 6

9. 4520 6

10. 4760 6

11. 4230 6

12. 2630 36

13. 2340 6

14. 2100 6

15. 1810 6

16. 1560 6

17. 2370 30

18. 2170 12

19. 2120 12

20. 1860 12

HELP ME! THANKS

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

dữ liệu vào gồm 2 cột:chiều dài thanh thép và số lượng của thanh đó

1 cây thép bạn đi mua có chiều dài cố định là 11.7m

Bạn xử lý việc cắt các cây thép 11.7m này ra thành các thanh thép có chiều dài và số lượng như yêu cầu trên.

Tất nhiên sẽ có vô số cách cắt. Vấn đề là tìm ra cách nào để sử dụng ít các cây thép 11.7m nhất, nghĩa là lượng thép dư ra từ việc cắt thép là nhỏ nhất (trong dự toán nhà nước cho phép hao hụt việc này là 5%)

Thử nghỉ có 100 tấn thép bạn ra được phương án có hao hụt 2%, người khác ra hao hụt 12% thì bạn đã tiết kiệm hơn người ta 10 tấn thép (quả là ko ít tiền tí nào)

Vừa qua trang ketcau.com thấy ngay 1 ví dụ cho bạn

Trước kia, khi đi thi công, mình toàn dựa vào kinh nghiệm của mình là chính. Cây thép có chiều dài này thường ghép với cây thép kia để cắt. Ý tưởng đưa ra cho bài toán này cực khó? Làm sao cho máy hiểu là biết ghép cây nào với cây nào để tính???. Trước đây, mình có sử dụng công cụ SOLVER của Excel để giải quyết bài toán tối ưu. Hàm mục tiêu của bài toán tiến tới MIN, MAX, hoặc 1 giá trị nào đó.

Với bài toán này -> Hàm mục tiêu là "đờ sê" thép là nhỏ nhất.

Ý tưởng chưa có, công cụ thì cũng đã có => Bài toán chưa được giải.

Ai có ý tưởng hay xin đóng góp ạ!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

ban đầu ý tưởng của mình là duyệt qua các trường hợp cắt thép. dữ liệu lớn thì máy tính chạy đến cả trăm năm cũng ko ra kết quả nổi. Bổng nhớ lại 1 chuyện mà hồi xưa thầy mình kể:khi em có 1 đống đá đủ kích thước (ý là mình có nhìu công việc có tầm quan trọng khác nhau) em đem các cục đá này bỏ vào 1 cái chai (là khả năng của mình) để bỏ được nhìu khối lượng đá vào chai nhất thì nên chọn cách bỏ vào ntn?Câu trả lời là bỏ cục to trước rồi bỏ cục nhỏ sau. Thế là mình nghỉ ra ý tưởng cho bài toán này: dữ liệu vào xem như là 1 đống đá, mỗi cây thép 11,7m là 1 cái chai.

Thuật toán sẽ là:

1.Xác định sơ bộ số chai= tổng chiều dài/11.7

2.Lấy các thanh thép dài nhất lần lượt bỏ vào các chai.Nếu gặp trường hợp có 1 thanh thép dài quá mà ko thể bỏ vào chai nào thì sẽ tăng số chai lên 1 và làm lại từ đầu bước này

Thuật toán này mình thử chạy với 2000 thanh thép mất thời gian 2 đến 3 giây là thời gian có thể chấp nhận đc.Tuy nhiên mức độ tối ưu tiết kiệm đến đâu thì chưa xác định đc. Mong các bạn đóng góp ý tưởng rồi cùng nhau lập trình so sánh các ý tưởng bằng kết quả cụ thể để tìm ra giải pháp tối ưu hơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×