;Shusei Hayashi
;OffshoreCad&Management Inc.
;10F Jaka Bldg., 6780 Ayala Ave.,
;Makati, Philippines
;http://www.offshorecad.com.ph/
;http://www.offshore-management.com.ph/

(defun c:SD_1707 ( / )
	
	(if (= SD:Lang "E")
		(princ "\n Subtract Polylines")
		(princ "\n ポリライン引き算")
	)
	(princ "\n **********************************")
	(setq *error* *myerror*)   
	(SD1028)
	(if (= SD:Lang "E")
		(princ "\n Select Objects subtract from :")
		(princ "\n 引き算をするもとの図形を指示： ")
	)
	(setq ObjSet nil)
	(while (= ObjSet nil)
		(setq ObjSet (ssget '((-4 . "<OR")
								(0 . "LWPOLYLINE")
								(0 . "ELLIPSE")
								(0 . "CIRCLE")
								(0 . "POLYLINE")
								(0 . "LINE")
								(0 . "ARC")
							(-4 . "OR>"))
					)
		)
	)
	
	;選択セットから図形名のリスト作成
	(setq i -1 ObjNameL1 nil)
	(repeat (setq m (sslength ObjSet))
			(setq ObjNameL1 (cons  (ssname ObjSet (setq i (1+ i))) ObjNameL1))
	)
	(if (= SD:Lang "E")
		(princ "\n Select Objects subtract :")
		(princ "\n 引く図形を指示： ")
	)
	(setq ObjSet2 nil)
	(while (= ObjSet2 nil)
		(setq ObjSet2 (ssget '((-4 . "<OR")
								(0 . "LWPOLYLINE")
								(0 . "ELLIPSE")
								(0 . "CIRCLE")
								(0 . "POLYLINE")
								(0 . "LINE")
								(0 . "ARC")
							(-4 . "OR>"))
					)
		)
	)
	;選択セットから図形名のリスト作成
	(setq i -1 ObjNameL2 nil)
	(repeat (setq m (sslength ObjSet2))
			(setq ObjNameL2 (cons  (ssname ObjSet2 (setq i (1+ i))) ObjNameL2))
	)
	
	;region作成
	(setq MadeObjL1 (Procedure_1707 ObjNameL1))
	
	(setq MadeObjL2 (Procedure_1707 ObjNameL2))
	
	(Procedure_1707_2 MadeObjL1 MadeObjL2)	;SUBTRACT
	
	(SD2056)
	(setq *error* nil)
	(princ)
)

;*********;SUBTRACT
(defun Procedure_1707_2( MadeObjL1 MadeObjL2 / )
	(command ".SUBTRACT")
	(mapcar 'command MadeObjL1)
	(command "")
	(mapcar 'command MadeObjL2)
	(command "")

	;分解	
	(setq LastOb (entlast) MadeObjL nil)
	(command ".EXPLODE" LastOb)

	;作成されたObjのリスト
	(while (setq LastOb (entnext LastOb))
		(setq MadeObjL (cons LastOb MadeObjL))
	)
	
	;再びポリライン化
	(command ".PEDIT" "M")
	(mapcar 'command MadeObjL)
	(command "" "Y" "J" "0.000" "")
	
)

;*********;Regionの作成
(defun Procedure_1707( ObjL / )

	(setq LastOb (entlast))
	
	(command ".region")
	(mapcar 'command ObjL)
	(command "")
	
	;作成されたObjのリスト
	(while (setq LastOb (entnext LastOb))
		(setq MadeObjL (cons LastOb MadeObjL))
	)
	MadeObjL
)
;共通コマンド
(defun SD1028 ()
  (setq OldCmdEcho (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (command "undo" "be")
  (setq OldOsmode (getvar "OSMODE"))
  (setq OldLayer (getvar "CLAYER"))
  (setq OldLType (getvar "CeLType"))
  (setq OldCeLWeight (getvar "CeLWeight"))
  (setq OldColor (getvar "CeColor"))
  (setq OldOrtho (getvar "ORTHOMODE"))
  (setq OldDStyle  (getvar "DIMSTYLE"))
  (setq OldExpert (getvar "Expert"))
  (setvar "EXPERT" 0)
  (setq Path_Lang "HKEY_CURRENT_USER\\Software\\SpeedDraftLT")
  (if (vl-registry-read Path_Lang "SD_Language" )
  	(setq SD:Lang (vl-registry-read Path_Lang "SD_Language" ))
  	(progn	(setq SD:Lang "J")
  			(vl-registry-write Path_Lang "SD_Language" "J")
  	)
  )
  (princ)
)
;********************************
(defun SD2056 ()
  (setvar "OSMODE" OldOsmode)
  (command "undo" "end")
  (setvar "CLAYER" OldLayer)
  (setvar "CeLType" OldLType)
  (setvar "CeLWeight" OldCeLWeight)
  (setvar "CeColor" OldColor)
  (setvar "ORTHOMODE" OldOrtho)
  (setvar "Expert" OldExpert)
  (if (and (/= (getvar "DIMSTYLE") OldDStyle)(tblsearch "DIMSTYLE" OldDStyle))
  	(command "-dimstyle" "Restore" OldDStyle)
  )
  (princ "\n (C)OffshoreCad&Management")
  (setvar "CMDECHO" OldCmdEcho)
  (princ)
)
;********************************
(defun *myerror* (msg)
	(setq *error* nil)
	(SD2056)
	(princ "\n Error in SpeedDraftLT")
	(princ)
)
(if (= SD:Lang "E")
	(princ "\n Command Name: SD_1707 Subtract Polylines\n")
	(princ "\n コマンド名：SD_1707 ポリライン引き算\n")
)
(princ)
