2016年4月9日 星期六

玩玩 swift

swift 是開發 iOS 程式重要的語言工具之一, 目前是 open source,

官方網站:  https://swift.org/

首先在 linux 下需架好環境:

參考網址
https://swift.org/getting-started/#installing-swift
https://linuxmint.tumblr.com/post/135280204927/how-to-use-swift-programming-language-in-ubuntu


1.  swift 官方下載: https://swift.org/download/#releases
    https://swift.org/builds/development/ubuntu1510/swift-DEVELOPMENT-SNAPSHOT-2016-01-25-a/swift-DEVELOPMENT-SNAPSHOT-2016-01-25-a-ubuntu15.10.tar.gz.sig
https://swift.org/builds/development/ubuntu1404/swift-DEVELOPMENT-SNAPSHOT-2016-01-25-a/swift-DEVELOPMENT-SNAPSHOT-2016-01-25-a-ubuntu14.04.tar.gz
     p.s. 因 release 版未將 swift-build 放入, 最好下載上述開發版
2. 使用 tar 解出swift 套件:  tar -zxvf  xxxx-xxx.xz
3. 設定好環境變數 PATH 指向swift 編譯程式的 bin 目錄: export PATH= ....:$PATH
4. 安裝開發 swift 所需要的相關套件:   apt-get install clang   libicu-dev
5. 驗證是否安裝成功:  swift -version
6. swift 交談命令程式(REPL), 直接執行 swift 就可看到:  swift
     在 REPL 中鍵入 :q 離開 swift 交談視窗
7. 建立編譯環境
     a. 建立一個目錄當專案:  mkdir Hello
     b. 進入該專案目錄:  cd Hello
     c. 建立 Package.swift 檔案: touch Package.swift
     d. 建立原始碼目錄: mkdir Sources
     e. 建立原始碼主檔: touch Sources/main.swift
     f. 編輯主檔: gedit Source/main.swift
         將程式碼 print("Hello World") 鍵入主檔(main.swift)中
     g. 開始編譯: swift build

         編譯程式將 Source/main.swift 加以編譯程可執行檔,使用 Package.swift 所在的目錄名稱來命名可執行檔, 編譯好的執行檔將會放在 .build/debug 目錄內

     h. 執行編譯過的程式:      .build/debug/Hello

基礎知識:
常數宣告 let  a=...
變數宣告 var a=...

常數型別(TYPE)宣告   let a:TYPE=...
變數型別(TYPE)宣告  var a:TYPE=...
其中 TYPE 可以是: Int, Uint, Float, Double, String
(整數, 浮點數, 更精密浮點數, 字串)

許多型別, 其實swift 會自行推論出正確的型別,
例如 var a=1   ---> a 是整數
         var b="sasds"  --->  b 是字串
         var c=1.23       --->  c 是 Double
...等等, 因此上述的 a,b,c 其實不需宣告型別(TYPE) 也可以


何謂 Tuples: 將各種型別組合成一個集合, 例如 let a=("1",2,3.1415)
其中 a.0 等於字串 "1", a.1  等於整數 2, a.2 等於浮點數 3.1415
將Tuple 值用括號可以分離出各元素:
例如  let a=("1",2,3.1415);  let  (a0,_,a2)=a , 其中 a0="1", 第二個使用底線忽略, a2=3.1415

陣列型別使用相同型別的元素用 [,,] 來構成, 例如 let a=[1,2,3]
字典型別用key:value成對元素陣列所構成 let dic=["a":"dsd","2":"kiki"]; let b=dic["a"];
其中 key 與 value 型別必須分別統一使用相同型別  let dic=[1:"dsd",2:"kiki"]; let b=dic[1];

何謂 optionals (可有可無)變數, 例如宣告 var a:Int? =404, 其中後面 '?' 就已代表 a 宣告成可有可無的整數型別, 可有可無意味著:變數未指定也可, 此例 a=nil, 或已指定完, 此例 a=404
但不指定 optionals 的變數, 則不能付與 nil 值

當一個可有可無變數要強制取用其值時,可以再後面加上驚嘆號 '!',強制取用,但一旦此變數若未指定.則程式可能會當掉
因此可以透過 optional binding 敘述來檢查 , 避免錯誤
if let  constantname = someOptionalvalue {
//   ...
}

錯誤處理程式
func catThrowAnError() throws {
 // ..程式可能會丟出依些錯誤訊息
}


do {
          try catThrowAnError()
       
          // ... No error, continue
     }   catch  Error1.xxx {        
          // ...
     } catch  Error2.xxx {        
          // ...
      }
自訂驗證程序宣告, 當 condition 有錯誤時, 則停止程式, 並丟出錯誤訊息:
   assert(condition,"Error message");

字串可以相加  "Hello" + "World"
餘數  (a%b)
範圍 1...5     指的是 1 到 5
範圍 0..<10 指的是 0 到 9 ( 從0 開始, 小於 10)

the nil coalescing operator ??
let a:Int?=nil      // define an optional Interger constant, assign it to nil
// if a is not nil return a , else return 0
let b= ( a != nil ?  a!: 0 )
// same as expression    a ?? 0
let b=( a ?? 0 )

Type casting: 成型

字串的method
1. characters.count
2. append
3. insert

var a="SDSD"
a.characters.map {$0} // list all the character

單一字元(single character)並不等於單一字元的字串(a string with single character), 在於它是不同型別, 字元用 Character 來宣告, 字串用 String 來宣告, 使用前後雙引號時將自動判斷為字串型別

swift 語言有3種主要的收集型別(collection type): 陣列(Array),  集合(Set), 字典(Dictionary, 這些行別都是 mutable, 可修改的. 但若宣告程常數就不得修改了

在 swift 裡的條列式流程 switch .. case, 在case 執行完後將會自動跳離, 不像 c 語言要加入 bread 來跳開. 但可以用 fallthrough 讓它往下繼續執行, switch 可以用 tuple 當成多變數條件式, 如果無關係的條件, 可以用底線 '_' 讓它忽略該條件

switch (a,b) {
    case (_,0) :
                      ...
    case (0,_) :
                       ...
    default:
                       ...
}

value binding: 數值綁定
在switch-case 的條件式裡可以用 let 語法來綁定數值(value binding)讓他可以在該條件成立下取用,例如:
var a=(2,3)
// ...
 switch  a {
   case (let b,_) :
       print("\(b)")
   case (_,let c) :
       print("\(c)")
   default:
      print("OK")
 }

label: 標籤可以用名稱加帽號 lableName: 加註在程式迴圈上, 之後用 break lableName, 或 continue lableName 來控制程式流程, break lableName 用來結束迴圈內程序而跳到所標註迴圈外再往下執行. 而 continue lableName 除了放棄迴圈程序外, 並重新跳到所標註迴圈開頭地方再執行

guard  指令類似 if 的語法, 但 guide 必須要有 else 指令附加在後面, 而且他通常是用在func裏面,最後要有 return, 它預期條件式是對的,一旦不對才執行後面 else 內的指令,可以減少在對的條件成立時再寫指令
func my(b:Int) ->  {
     guard  b>3 else { print("OK"); return; }  
}
my(4)  // OK
my(3)  //

初始化消滅:當抽象型別像分類(class),結構(struc)及列舉(enum)要實體化成個體時, 他會執行該型別的的初始化程序叫 init(). 只有分類所產生的個體, 當要消滅時才會執行消滅程序叫作 deinit(), 對於儲存式屬性, 可以在型別宣告時就直接給初始值, 也可以透過初始化參數設定該屬性.初始化參數的語法與 func 裏面的參數語法是相同的. 對於常數型態的屬性仍然可以透過上述初始化程序重新設定它, 之後常數就不得再更改了. 對於分類所產生的個體而言, 常數屬性不能被子類別的繼承者所修改









改用 Tor browser 匿名瀏覽, 真正隱私不被追蹤的瀏覽器

只要身處在網際網路的世界, 其實行蹤早已暴露, 只要有心人士要追蹤,其實是逃不掉的,最近看到一個瀏覽器宣稱可以防止這樣的事情,當用的人愈多,其實行蹤愈安全,他的封包是透過
Tor節點來加密保護, 算是相當安全的連線. 可有效防止像 "traffic analysis" 分析軟體解析出瀏覽者的網路使用行為
參考 Tor 的官方文章: https://www.torproject.org/about/overview.html.en
他闡述了 Tor 的運作方式,且它本身是一個 open source, 由一群自願者所開發,值得推荐使用
官方下載區:
https://www.torproject.org/projects/torbrowser.html.en#linux

2016年4月5日 星期二

玩玩 NDK

NDK 是用 c 或 c++ 來寫 android  app.
很容易用來開發手機上使用的執行檔, 像是簡單的 hello world 等.
下載程式:  http://developer.android.com/ndk/downloads/index.html
我目前試用的是 r11c linux x86 64 bit 版 android-ndk-r11c-linux-x86_64.zip
但該網站建議大家還是用 SDK 開發 android app 較適合.

目錄 helloworld 內容共含 3 個檔案
main.cpp          --- 主程式
Android.mk      ---  給 ndk compliler 用的 makefile
Application.mk --- 給 ndk 產生一些平台要用的指示檔


main.cpp 主程式內容:
// begin of main.cpp
#include "iostream"
#include "stdio.h"
using namespace std;
int main(int argc, char **argv)
{
int i;
   cout << "Hello world" <<  endl;
   printf("Hi printf\n");
   for(i=0;i
<argc;i++)   {
       printf("argv[%d]:%s\n",i,argv[i]);
    }
    return 0;
}
// end of main.cpp 

Android.mk 檔案內容:
# begin of Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main.out
LOCAL_C_INCLUDES +=
LOCAL_SRC_FILES := main.cpp
include $(BUILD_EXECUTABLE)
# end of  Android.mk

Application.mk 檔案內容:
#  begin of Application.mk
APP_STL := stlport_static
APP_PLATFORM := android-19
APP_BUILD_SCRIPT := Android.mk
#  end of Application.mk


使用 bash 執行以下 2 行 shell script 來設定好環境變數, 假設 ndk 掛在 /mnt/rw/ndk 上
export PATH=/mnt/rw/ndk/android-ndk-r11c:$PATH
export NDK_PROJECT_PATH=.

cd 到 helloworld 目錄內, 使用 bash 執行以下 shell script 來編譯程式:
ndk-build NDK_APPLICATION_MK=./Application.mk
NDK 會把輸出檔  main.out 放在 libs\armeabi 目錄下, 將他上傳到手機上或模擬器上設成可執行檔, 並開啟 terminal 執行即可.
 
假設手機的 ip address 為 192.168.0.5,且手機要開啟 adbd, listen port 預設為 5555.  底下使用 adb 來連接手機並上傳檔案到手機上讓 shell 去執行:
adb connect 192.168.0.5:5555
adb push libs/armeabi/main.out /data/local
adb shell  chmod 755 /data/local/main.out
adb shell /data/local/main.out 1 2 3

輸出:
Hello World
Hi printf
argv[0]:/data/local/main.out
argv[1]:1
argv[2]:2
argv[3]:3




2016年3月22日 星期二

玩玩 Tasker 的 Action

新建 Task 時有許多內建的動作( Action ) 可供選擇, 按 '+' 就會顯示所有可供增加的動作
1. Alert: 示警有關的動作
    Beep: 發出警告聲音
    Flash: 跳出警告文字
    PopoUp: 跳出警告文字, 並且可設定文字停留的時間
 Vibrate: 設定振動所需要時間

2. App: App 有關的動作
    Launch App: 直接執行 app
    Kill App: 刪除執行中的 app
    Go Home:等同按 Home 鍵

3. Audio: 與音效有關的動作

4. Code: 插入程式碼
    Run Shell: 插入 shell script 語法
    ex.) 透過網路開啟 adbd, 以下語法需要 root 權限. 故手機需要先事先 root
           先暫停 adbd, 再設定好 tcp port 號碼, 再啟動 adbd. 以下為所需要的語法
                 stop adbd
           setprop service.adb.tcp.port 5555
                 start adbd
          之後用其他電腦連上網路鍵入以下命令:
           1. adb connect 此手機的ip位址
    與此手機 adb 連上線 , 
           2. adb shell
    直接進入 root shell 控制手機
    
5. Display:與螢幕有關的動作
 Keyguard: 設定螢幕解鎖開或關
    System Lock: 等同按住 power 鍵關閉螢幕
    Display Brightness: 設螢幕亮度
 Auto Brightness: 設定"螢幕自動亮度的功能"開或關
    Display AutoRotate: 設定"螢幕自動旋轉的功能"開或關

6. File:與檔案有關的動作

7. Image:與影像有關的動作

8. Input: 與輸入有關的動作
 Button: 可設定模擬按鍵(Back, Call, Camera, End Call, Menu, Volumn Down, Volumn Up, Search) 等動作

9. Location: 與定位有關的動作

10.Media: 與照相有關的動作

11.Net: 與網路有關的動作
 Auto-Sync:打開或關閉自動同步功能
 Bluetoolth:打開或關閉藍牙
    Wifi: 打開或關閉無線網路
    Wifi Net:斷開/重新搜尋/重新連接 無線網路
 USB Tether: USB網路基地台分享功能開或關
 WiFi Tether: 無線網路基地台分享功能開或關
 Mobile Data: 行動數據通訊網路開或關(2G/3G/4G)

12 Phone:與電話有關的動作

13. Plugin:如果有安裝插件的話會在此

14. Scene:與場景有關的動作

15.Settings: 跟設定有關的動作
 Airplane Mode:直接跳出"飛行模式"的選單設定
    Battery Info: 直接跳出顯示"電池"目前的狀態

16. System: 跟系統相關的動作
    Reboot:重新開機

17. Task: 跟內建任務有關的動作
    Wait: 等同 sleep 的功能
 Stop: 停止任務的執行
    Goto: 任務轉移

18. Tasker: 跟 Tasker 有關的任務
    Set Widget Icon: 設定由 Tasker 指定的螢幕小工具, 變換其圖示(圖標)
    Set Widget Label:設定由 Tasker 指定的螢幕小工具, 變換其名稱

19. Variables:與變數有關的動作

2015年11月5日 星期四

利用 sketchup 線段分割產生 grid 間距

1. 先選擇一段要分割的線段, 按滑鼠右鍵選 divide 功能, 輸入分割段數.

2. 此線段便會產生 n 等份的 grid ,  但平常無法看到此 grid 點, 故最好標示起點.以利辨識下筆時的相對位置.在此線段內移動滑鼠,便可看到 inference 的點(包含每一線段的中點端點)

3.應用在要畫精的數值時, 可以先刻意畫出一段線當輔助線,將它 10 等份, 因此每一等份便可精確到 1/10 ,以此類推, 如要精確到 1/100, 就將剛剛的 1/10 線段再分段到 1/10, 且最好將起點,事先標示十字點, 從此點開始默數之後要下筆的位置.

4. 如果要更精確顯示,可以透過修改顯示的單位 (windows -> model -> unit ) , 來瞭解目前的線段精確度

2015年11月3日 星期二

學習 google sketchup make

一套很方便容易使用的 3d 建模軟體, 可以到google sketchup 下載
http://www.sketchup.com/download/all
SketchUp Make 2015 個人使用免費, 但並非商業使用
SketchUp Pro 2015 要付費買版權
要熟練使用它先練好基本功,熟背下列快速功能鍵
-----------------------------------------------------------
快速按鍵 功能
===================
MS windows 常用按鍵:
ctrl-a 全選零件(selete all)
ctrl-t 取消全選(skip all)

ctrl-c 複製(copy)
ctrl-v 貼上(paste)
ctrl-x 剪下(cut)

ctrl-n新檔案(new)
ctrl-o 開舊檔案(open)
ctrl-s 儲存檔案 (save)
ctrl-p 列印 (print)

ctrl-z 復原 (undo)
ctrl-y 取消復原 (redo)

繪圖工具指令:
 space bar(空白鍵) 選取物件
 del key(刪除鍵) 刪除物件
a 繪製圓弧(arc)
b 彩繪油漆(boundary paint)
c 繪製圓形(circle)
e 塗抹橡皮擦(erase)
f 偏移複製(offset)
g 轉換成元件(generate component)
l 繪製直線(line)
m 移動零件(move)
p 推/壓平面(push pull)
q 旋轉零件(rotate) 
 r 繪製矩形(rectangle)
s 放大/縮小(scale)
t 捲尺輔助線(tape measure)

視線移動:
h 視線平移(pan view)
o線環繞  
 z 視線縮放(zoom view)

p.s.
1. 移動時, 當焦點鎖住時, 按住滑鼠 shift 鍵可以鎖住該焦點(inference)的參考伸延線, 通常叫它
inference lock, 當按住滑鼠中鍵 + shift , 可將顯顯示模式立刻切到 pan view. 方便將焦點移至到螢幕中央

2. 使用移動工具 ('m') 時, 當選擇零件時, 按住 ctrl, 等同複製該零件, 擺至定點後, 可以使用鍵盤輸入相對距離當參數來改變位置, 若之後又緊接著再加上 '*' 及'數字'鍵 , 等同複製等距離一定數量的零件之功能. linear array copy

3. 使用旋轉工具 ('q') 時, 當選擇零件時, 按住 ctrl, 等同複製該零件, 擺至定點後, 可以使用鍵盤輸入相對角度當參數來改變位置, 若之後又緊接著再加上 '*' 及'數字'鍵 , 等同複製等角度一定數量的零件之功能. polar array copy.

4. 當使用 scale 工具時, 當選擇放大縮小線後, 如果使用鍵盤輸入比率參數, 當參數= -1 時, 就如同 mirror 的功能

5. 使用 protrator (圓規工具)或旋轉工具時('q'), 可以輸入斜率(數字n1:數字n2), 其數值為 n1/n2當參數, 其旋轉的角度 = (180/pi) * tan-1(n1/n2)

6. 當物件(object) 連按 3 次, 將會選擇其內部所有元件, 或是全部的線段

7. 當元件(component) 連按 2 次, 會進入元件編輯模式

8. 當不同 component 合併成令一個 component 時將在其內部會形成層級, 使用 doble click 來進入第 0 層修改不同曾及內的零件, 若再 double click 內部 component 時, 將進入其內部第1層修改元件,若再 double click, 就再深入至元件更內層去編輯. 以此類推.  需注意的是:當元件被指定唯一時, 僅影響該元件所在層級, 並不會遞傳到內部層級. 先剪下(cut)再使用 paste&play 在原處貼上, 可以運用在 component內的不同層級的零件修改.

9. 動態 component 若參數 value 使用 '=數字n' 等字眼時則該變數便被限制成常數, 不可變換

10. 按住 alt 時可以暫時解除 autolock, 再按一次 alt 鍵將會再次鎖住 autolock, 利用此功能, 配合 offset 功能可產生斜角面

11. offset 可以選擇指定某部分邊緣來 offset, 接連使用 double click, 可以去用前一次的 offset 距離當作參數

12. 當使用 pushpull 工具時, 使用 double click 也可以指定使用前一次的距離參數,因此如果使用 double click 兩次, 將會使得該平面拉回到原處.

13. 使用  x-ray mode 來選擇零件, 避免選到不該用的零件

14. 使用 translucent material(半透明) 可以產生 glass 效果,另外,選擇任何材料上色後, 也可透過 edit 方式修改 translucent 來修改其透明度

15. 當 move 移動指令('m')時, 按 'p' 鍵(push pull 功能鍵), 可快速停止,將元件返回到原位

16. 使用 rotate 旋轉矩形('q')工具, 可以繪製焦點線的交界面

17. 定義新層面(layer)時需將零件先變換成群後(group)才能將它放入該新的層面, 否則當零件之間有交叉面時,移動後將會產生問題

18. group 與 component 不同點
component 在模型內(skp 檔案)僅只有一個實體, 而置放在模型所看到的都是一個連結(將它們想像成一個 link , 以寫程式的觀點來看叫作 by reference), 而 group 則是個別獨立的群體.
因此若將 componet copy 出來, 則仍然是參考的連結, 若將他編輯修改, 則同時其它位置點相同 component 也被同時修改,因此修改 component 可以在任何相同的地點修改, 結果相同.
但若將 component 修改成唯一, 則sketchup 會自動在零件庫內生成另一個獨立實體, 此與原先個體並不相同, 如同產生了兩個相似的 components. 但若 此 componet 內部再有其它 component 時, 則形成 nesting (槽狀) 零件. 任何更動(editing)到 component, 也將會影響到其他位置的 component. 但 group 不同, 他是獨立群體. 編輯僅影響到該群體內. 但若 group 內有 component, 其仍會受其 component 的限制, 因 component 實際是一個 link 而已. 此外 group 複製時其產生獨立個體, 因此檔案勢必會加大. 但 component 複製並不會, 頂多增加一個連結資料而已.

19. 交界接面如有兩個面(face), 如不需要應將它刪除, 特別是當兩個 component 面連在一起時. 避免移動時有閃爍的情形

20. inference 推理, 舉一反三, 當抓取零件出來時, 其抓取點會背記憶住. 應用在下次的零件取出時將會被設成預設的抓取點

21. 在move ('m') 及 rotate ('q') 工具底下運作時, 可以按一下 'Ctrl' 按鍵產生複本, 原實體位置不會變動或影響. 直接鍵盤輸入數值當作偏移距離, 緊接著輸入  數量* 或 數量/ (例如 5* 或 5/ )
則會產生等距離數量的複本, 使用 * 時其總共距離等於 n 倍, 使用 / 時, 則將該距離等分 n 段, 每段的距離會被放置一個複本, 因此等同 linear array copy (使用'm'+'ctrl') 及 polar array copy(使用 'q'+'ctrl').

22. 在 scale ('s) 工具底下, 按住'Ctrl' 是將中心點當基準點來使用. 當拉生軸線後輸入 -1, 將會產生鏡射的作用. 要將物體複製並產生鏡射需, 需先利用 move 指令按住 Ctrl 製作一份複本, 再切到 scale 命令拉伸物體輸入 -1, 才能完成複製與鏡射的功能.

23. 使用 x-ray mode 可以將物體產生透視效果, 方便選取或避免誤選物件的動作.

24. 點選一個面: 滑鼠左鍵 1 click
      點選一個面及週邊線: 滑鼠左鍵 double click
      點選依整個零件: 滑鼠左鍵 triple click

25. 使用滑鼠拉選時, 如果侍從右上角往下拉, 其方形選擇區邊線會形成虛線狀, 稱做 across select, 任何經過的零件都會被選到, 一般從左上到右下的是實線, 兩種選擇零件的方式是不同的

26. 使用 follow me tool 時應該事前先選好路徑(也可以點選用面的邊界線當作路徑), 再點選目標面, 讓它自動完成該 revolve(開放路徑時) 或 sweep(封閉路徑時) 的動作

27. 原型的線段可以透過輸入數字s來修改形成 n 邊形, 若一個圓形的邊愈少, 當 extrude 該圓所形成圓柱體時所產生的面便可有效降低. 從而加速電腦運算速度, 例如 5s 則是將圓變成 5 邊形


28. 選擇一條線, 按滑鼠右鍵再選擇 divide, 可以將線分段

參考 youbube 影片: 
--1. https://www.youtube.com/watch?v=Au5VhCoLVE8
-- 2. https://www.youtube.com/watch?v=YKB5sHDdAOs
sketchupbasecamp 所有影片: 
https://www.youtube.com/user/sketchupbasecamp/videos?shelf_id=1&view=0&sort=dd

https://www.youtube.com/watch?v=x0u-6kDbNBg
https://www.youtube.com/watch?v=c0qpmk5gRyc
https://www.youtube.com/watch?v=KL0wYHS1HuQ
https://www.youtube.com/watch?v=cO2KKD5rJTo
https://www.youtube.com/watch?v=NHCEXlEZlo4
https://www.youtube.com/watch?v=EqV2YzaRrXI
https://www.youtube.com/watch?v=9aLVCn5nLZw
https://www.youtube.com/watch?v=nF2U4UzR02s
https://www.youtube.com/watch?v=jAeVp67Wnwc
https://www.youtube.com/watch?v=hnhkei2dSrY
https://www.youtube.com/watch?v=ZB5N5I7moF0
https://www.youtube.com/watch?v=Au5VhCoLVE8
https://www.youtube.com/watch?v=r9_F-bSGrKs
https://www.youtube.com/watch?v=YKB5sHDdAOs
https://www.youtube.com/watch?v=WUJSepWhu_Y
https://www.youtube.com/watch?v=Yvzypn2Lm-E
https://www.youtube.com/watch?v=0NltIqq58hY
https://www.youtube.com/watch?v=MezTkLTp3vA
https://www.youtube.com/watch?v=QmyzPNuckCA
https://www.youtube.com/watch?v=c1D4idcXC2Y
https://www.youtube.com/watch?v=yl6wTSoeVMg
https://www.youtube.com/watch?v=oIqeSh6OiF8


2015年10月13日 星期二

試用3D建模軟體 freecad

A. sketch 繪圖工具列, 需開啟工作檔並選擇 sketch 才可以使用
point: 畫點
line: 畫線
arc: 畫弧線
circle: 畫圓
ellipse: 畫橢圓
polyline: 畫多邊形, (配合'm' 鍵, 轉換不同角度或弧度)
rectangle: 畫四邊形
polygon: 畫等角多邊形(等邊三角形,正方形,正5邊形,正6邊形,正7邊形,正8邊形)
slot: 畫橢圓孔槽
fillet: 兩線之間形成弧線連接
trim: 去除外線
edge link to an external geometry: 定義與外部幾何之連接邊緣線
construct line: 定義輔助線, 將會被隱藏起來

B. 拘束條件與設定工具列, 需選擇物件後(點或線)才可以使用
coincident constrain on the selected item: 將選用的點放到同一位置
fixed a point onto an object: 將點固定在某一物體上(線, 弧線)
vertical constrain: 垂直線拘束
horizontal constrain: 水平線拘束
parallel constrain: 平行線拘束
perpendicular: 垂直線拘束
equility: 相等拘束
symmetry: 對稱拘束
lock: 鎖定拘束
horizontal distance: 設定水平距離
vertical distance:設定垂直距離
distance: 設定兩點距離或線與點之間距離
radius of a circle or an arc: 設定圓或弧的半徑
angle of a line or angle between two lines: 設定線的角度,或兩條線之間的角度
refraction law: 設定折射率 n2/n1

C. 草圖檔案工具列
Create a new sketch: 新增草圖
Edit the selected sketch: 編輯草圖
Close the editing of the sketch: 關閉草圖
View perpendicular to the sketch plane: 垂直平面檢視草圖

D. 平面擠壓(Extrusion)工具列, 需關閉草圖(Sketch Task Close)才可使用.
Map a sketch to a face: 映射平面
Pad a selected sketch: 墊高製造立體物
poket with a selected sketch: 立體挖空面
revolve a selected sketch:環繞製造立體物
groove a selected sketch: 環繞刮除槽, 必須先定義好繪圖平面, 在該平面上繪製刮除面的圖形,
fillet: 圓角
chamfer:斜角
draft
mirror: 鏡射複製
linear pattern: 線性矩陣複製
polar pattern: 環形矩陣複製
multitransform:

E. 視角檢視及測量工具:可自由選擇 6 面視角來檢視繪圖