亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sgconsts.pas

?? CAD轉換工具 CAD轉換工具 CAD轉換工具 CAD轉換工具
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
  until (K >= ARightPos);
end;

function CompareDXFPointByXCoord(Item1, Item2: Pointer): Integer;
begin
  if(PdxfPoint(Item1)^.X> PdxfPoint(Item2)^.X) then
    Result := +1
  else if(PdxfPoint(Item1)^.X = PdxfPoint(Item2)^.X) then
    Result := 0
  else
    Result := -1;
end;

function CompareDXFPointByYCoord(Item1, Item2: Pointer): Integer;
begin
  if(PdxfPoint(Item1)^.Y> PdxfPoint(Item2)^.Y) then
    Result := +1
  else if(PdxfPoint(Item1)^.Y = PdxfPoint(Item2)^.Y) then
    Result := 0
  else
    Result := -1;
end;

function CompareFPointByXCoord(Item1, Item2: Pointer): Integer;
begin
  if(PFPoint(Item1)^.X> PFPoint(Item2)^.X) then
    Result := +1
  else if(PFPoint(Item1)^.X = PFPoint(Item2)^.X) then
    Result := 0
  else
    Result := -1;
end;

function CompareFPointByYCoord(Item1, Item2: Pointer): Integer;
begin
  if(PFPoint(Item1)^.Y> PFPoint(Item2)^.Y) then
    Result := +1
  else if(PFPoint(Item1)^.Y = PFPoint(Item2)^.Y) then
    Result := 0
  else
    Result := -1;
end;

procedure ClearList(AList: TList);
var
  I: Integer;
begin
  if AList = nil then
    Exit;
  for I := 0 to AList.Count - 1 do
    TObject(AList[I]).Free;
  AList.Clear;
end;

procedure ClearRecordList(AList: TList);
var
  I: Integer;
begin
  if AList = nil then
    Exit;
  for I := 0 to AList.Count - 1 do
    Dispose(AList[I]);
  AList.Clear;
end;

procedure ClearRecordListOfList(AListOfList: TList);
var
  I, K: Integer;
  vList: TList;
begin
  if AListOfList = nil then
    Exit;
  for I := 0 to AListOfList.Count - 1 do
    if AListOfList[I] <> nil then
    begin
      vList := AListOfList[I];
      for K := 0 to TList(vList).Count - 1 do
        if TList(vList).Items[K] <> nil then
          Dispose(TList(vList).Items[K]);
      TList(vList).Free;
    end;
  AListOfList.Clear;
end;

procedure ClearListWithNilCheck(List: TList);
var
  I: Integer;
begin
  if List = nil then
    Exit;
  for I := 0 to List.Count - 1 do
    if List[I] <> nil then
      TObject(List[I]).Free;
  List.Clear;
end;

procedure FreeList(var AList: TList);
begin
  ClearList(AList);
  if AList <> nil then
    AList.Free;
  AList := nil;
end;

procedure FreeRecordList(var AList: TList);
begin
  ClearRecordList(AList);
  if AList <> nil then
    AList.Free;
  AList := nil;
end;

procedure FreeRecordListOfList(var AListOfList: TList);
begin
  if AListOfList = nil then Exit;
  ClearRecordListOfList(AListOfList);
  if AListOfList <> nil then
    AListOfList.Free;
  AListOfList := nil;
end;

function FindAutoCADSHXPaths(APaths: TStringList): Boolean;
const
  ACADRegPath = 'Software\Autodesk\AutoCAD';
var
  S, vRegPath, vDir: string;
  vStrLst: array[0..3] of TStringList;
  I, J, K, vPos: Integer;
  function GetKeyNames(ANameLst: TStrings; const AValName: string;
    var AValue: string): Boolean;
  var
    vReg: TRegistry;
  begin
    Result := False;
    ANameLst.Clear;
    vReg := TRegistry.Create;
    try
      vReg.RootKey := HKEY_CURRENT_USER;
      if vReg.OpenKey(vRegPath,False) then
      begin
        Result := True;
        vReg.GetKeyNames(ANameLst);
        if (AValName <> '') and vReg.ValueExists(AValName) then
          AValue := vReg.ReadString(AValName)
        else
          AValue := '';
      end;
    finally
      vReg.Free;
    end;
  end;
  function IsSHXInFolder(const AFolder: string): Boolean;
  var
    vSr: TSearchRec;
    S: string;
    vLen: Integer;
  begin
    S := AFolder;
    vLen := Length(S);
    if vLen > 0 then
      if S[vLen] <> '\' then S := S + '\';
    Result := FindFirst(S + '*.shx', faAnyFile, vSr) = 0;
    FindClose(vSr);
  end;

begin
  Result := False;
  if not Assigned(APaths) then Exit;
  for I := 0 to 3 do
    vStrLst[I] := TStringList.Create;
  try
    vRegPath := ACADRegPath;
    GetKeyNames(vStrLst[0], '', S);
    for I := 0 to vStrLst[0].Count - 1 do
    begin
      vRegPath := ACADRegPath + '\' + vStrLst[0][I];
      GetKeyNames(vStrLst[1], '', S);
      for J := 0 to vStrLst[1].Count - 1 do
      begin
        vRegPath := vRegPath + '\' + vStrLst[1][J] + '\Profiles';
        GetKeyNames(vStrLst[2], '', S);
        for K := 0 to vStrLst[2].Count - 1 do
        begin
          vRegPath := vRegPath + '\' + vStrLst[2][K] + '\General';
          GetKeyNames(vStrLst[3], 'ACAD', S);
          while S <> '' do
          begin
            vPos := AnsiPos(';', S);
            if vPos = 0 then Break;
            vDir := Copy(S, 1, vPos - 1);
            if IsSHXInFolder(vDir) then APaths.Add(vDir);
            Delete(S, 1, vPos);
          end;
        end;
      end;
    end;
  finally
    for I := 0 to 3 do
      vStrLst[I].Free;
  end;
  Result := APaths.Count > 0;
end;

function Min(const A, B: Double): Double;
begin
  if A < B then
    Result := A
  else
    Result := B;
end;

function Max(const A, B: Double): Double;
begin
  if A > B then
    Result := A
  else
    Result := B;
end;

function GetIntersectingPoint(const Line1, Line2: TsgLine; var IntersectionMode: TIntersectionMode): TFPoint;
var
  K1, K2, B1, B2: Double;
begin
  Result := cnstFPointZero;
  IntersectionMode := imPoint;
  if IsEqual(Line1.Point2.X, Line1.Point1.X) then
  begin
    Result.X := Line1.Point2.X;
    if not IsEqual(Line2.Point2.X, Line2.Point1.X) then
    begin
      K2 := (Line2.Point2.Y - Line2.Point1.Y) / (Line2.Point2.X - Line2.Point1.X);
      B2 := Line2.Point1.Y - Line2.Point1.X * K2;
      Result.Y := B2 + Result.X * K2;
    end
    else
      if IsEqual(Line1.Point1.X, Line2.Point1.X) then
        IntersectionMode := imLine
      else
        IntersectionMode := imNone;
  end
  else
  if IsEqual(Line2.Point2.X, Line2.Point1.X) then
  begin
    Result.X := Line2.Point1.X;
    if not IsEqual(Line1.Point2.X, Line1.Point1.X) then
    begin
      K1 := (Line1.Point2.Y - Line1.Point1.Y) / (Line1.Point2.X - Line1.Point1.X);
      B1 := Line1.Point1.Y - Line1.Point1.X * K1;
      Result.Y := B1 + Result.X * K1
    end
    else
      if IsEqual(Line1.Point1.X, Line2.Point1.X) then
        IntersectionMode := imLine
      else
        IntersectionMode := imNone;
  end
  else
  begin
    K2 := (Line2.Point2.Y - Line2.Point1.Y) / (Line2.Point2.X - Line2.Point1.X);
    K1 := (Line1.Point2.Y - Line1.Point1.Y) / (Line1.Point2.X - Line1.Point1.X);
    B1 := Line1.Point1.Y - Line1.Point1.X * K1;
    B2 := Line2.Point1.Y - Line2.Point1.X * K2;
    if not IsEqual(K1, K2) then
    begin
      Result.X := (B2 - B1) / (K1 - K2);
      Result.Y := K1 * Result.X + B1;
    end
    else
      if IsEqual(B1, B2) then
        IntersectionMode := imLine
      else
        IntersectionMode := imNone;
  end;
end;

function GetIntresectingRectAndLine(const ARect: TFRect; const ALine: TsgLine; var IntersectionMode: TIntersectionMode): TsgLine;
var
  vIntersectPt: array[0..3] of TFPoint;
  vRectLine: TsgLine;
  vRect: TFRect;
  I, J: Integer;
  Temp: TFPoint;
  vIM: TIntersectionMode;
  A: TsgFloat;
begin
  vRect := ARect;
  if ARect.Top < ARect.Bottom then
  begin
    vRect.Top := ARect.Bottom;
    vRect.Bottom := ARect.Top;
  end;
  //Left line
  vRectLine.Point1 := vRect.TopLeft;
  vRectLine.Point2.X := vRect.Left;
  vRectLine.Point2.Y := vRect.Bottom;
  vIntersectPt[0] := GetIntersectingPoint(vRectLine, ALine, vIM);
  if (vIM <> imPoint)or
     (vRectLine.Point1.Y < vIntersectPt[0].Y)or(vIntersectPt[0].Y < vRectLine.Point2.Y) then
    vIntersectPt[0].X := MaxTsgFloat;
  //Bottom line
  vRectLine.Point1 := vRectLine.Point2;
  vRectLine.Point2 := vRect.BottomRight;
  vIntersectPt[1] := GetIntersectingPoint(vRectLine, ALine, vIM);
  if (vIM <> imPoint)or
     (vRectLine.Point1.X > vIntersectPt[1].X)or(vIntersectPt[1].X > vRectLine.Point2.X) then
    vIntersectPt[1].X := MaxTsgFloat;
  //Right line
  vRectLine.Point1 := vRectLine.Point2;
  vRectLine.Point2.X := vRect.Right;
  vRectLine.Point2.Y := vRect.Top;
  vIntersectPt[2] := GetIntersectingPoint(vRectLine, ALine, vIM);
  if (vIM <> imPoint)or
     (vRectLine.Point1.Y > vIntersectPt[2].Y)or(vIntersectPt[2].Y > vRectLine.Point2.Y) then
    vIntersectPt[2].X := MaxTsgFloat;
  //Top line
  vRectLine.Point1 := vRectLine.Point2;
  vRectLine.Point2 := vRect.TopLeft;
  vIntersectPt[3] := GetIntersectingPoint(vRectLine, ALine, vIM);
  if (vIM <> imPoint)or
     (vRectLine.Point1.X < vIntersectPt[3].X)or(vIntersectPt[3].X < vRectLine.Point2.X) then
    vIntersectPt[3].X := MaxTsgFloat;
  for I := 0 to 2 do
    for J := 0 to 2 - I do
      if vIntersectPt[J].X > vIntersectPt[J + 1].X then
      begin
        Temp := vIntersectPt[J];
        vIntersectPt[J] := vIntersectPt[J + 1];
        vIntersectPt[J + 1] := Temp;
      end;
  Result.Point1 := vIntersectPt[0];
  I := 1;
  while (Abs(vIntersectPt[0].X - vIntersectPt[I].X) < FAccuracy)and(Abs(vIntersectPt[0].Y - vIntersectPt[I].Y) < FAccuracy)and(I < 3) do
    Inc(I);
  Result.Point2 := vIntersectPt[I];
  A := MaxTsgFloat;
  if (not CompareMem(@Result.Point1.X, @A, SizeOf(Result.Point1.X)))and(not CompareMem(@Result.Point2.X, @A, SizeOf(Result.Point1.X))) then
    IntersectionMode := imLine
  else
    if (not CompareMem(@Result.Point1.X, @A, SizeOf(Result.Point1.X)))and(CompareMem(@Result.Point1.X, @A, SizeOf(Result.Point1.X))) then
      IntersectionMode := imPoint
    else
      IntersectionMode := imNone;
end;

function MaxTsgFloat: Extended;
begin
  case SizeOf(TsgFloat) of
    4: Result := MaxSingle;
    8: Result := MaxDouble;
    10: Result := MaxExtended;
  else
    Result := MaxSingle;
  end;
end;

function DistanceF(APoint1, APoint2: TFPoint): TsgFloat;
begin
  Result := Sqrt(Sqr(APoint2.X - APoint1.X) + Sqr(APoint2.Y - APoint1.Y) + Sqr(APoint2.Z - APoint1.Z));
end;

function DistanceI(APoint1, APoint2: TPoint): Double;
var
  P1X, P2X, P1Y, P2Y: Double;
begin
  P1X := APoint1.X;
  P2X := APoint2.X;
  P1Y := APoint1.Y;
  P2Y := APoint2.Y;
  Result := Sqrt(Sqr(P2X - P1X) + Sqr(P2Y - P1Y));
end;

procedure SwapInts(var A,B);
asm
	MOV	ECX,[EAX]
	XCHG	ECX,[EDX]
	MOV	[EAX],ECX
end;

function IsEqual(const AVal1, AVal2: TsgFloat): Boolean;
begin
  Result := Abs(AVal1 - AVal2) < fAccuracy;
end;

function IsEqualPoints(const Point1, Point2: TPoint): Boolean;
begin
  Result := (Point1.X = Point2.X) and (Point1.Y = Point2.Y);
end;

function IsEqualFPoints(const Point1, Point2: TFPoint): Boolean;
begin
  Result := (Abs(Point1.X - Point2.X) < fAccuracy) and (Abs(Point1.Y - Point2.Y) < fAccuracy) and
    (Abs(Point1.Z - Point2.Z) < fAccuracy);
end;

function IsEqualF2DPoints(const Point1, Point2: TF2DPoint): Boolean;
begin
  Result := (Abs(Point1.X - Point2.X) < fAccuracy) and (Abs(Point1.Y - Point2.Y) < fAccuracy);
end;

{$IFNDEF SGDEL_6}
function WideUpperCase(const S: WideString): WideString;
var
  Len: Integer;
begin
  Len := Length(S);
  SetString(Result, PWideChar(S), Len);
  if Len > 0 then CharUpperBuffW(Pointer(Result), Len);
end;
{$ENDIF}

initialization
  sgClientRect := Rect(MaxInt, 0, -1, -1);

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频一区二区三区在线观看| 亚洲亚洲人成综合网络| 国产一区二区三区在线观看免费| 日韩欧美一区二区在线视频| 日韩一区精品字幕| 欧美精品一区二区三区视频| 丰满白嫩尤物一区二区| 自拍偷拍亚洲欧美日韩| 欧美视频一区在线观看| 精品一区二区三区免费播放| 国产亚洲一区字幕| 色综合久久综合中文综合网| 天天综合色天天| 2021久久国产精品不只是精品| 高清不卡一区二区在线| 亚洲最新视频在线观看| 欧美日韩国产成人在线91| 精品亚洲成av人在线观看| 中文字幕成人网| 欧美日本一道本在线视频| 国产精品自拍在线| 夜夜嗨av一区二区三区网页| 欧美一区二区在线看| 国产精品一品二品| 亚洲一区二区三区国产| 久久先锋资源网| 91丨九色丨蝌蚪丨老版| 免费高清在线一区| 亚洲丝袜美腿综合| 欧美videossexotv100| 日韩欧美一二三区| 成人少妇影院yyyy| 午夜激情一区二区| 国产精品美女久久久久久久| 欧美另类久久久品| 93久久精品日日躁夜夜躁欧美| 日本中文一区二区三区| 国产精品美女久久久久久久网站| 91精品蜜臀在线一区尤物| 成人av小说网| 激情久久五月天| 亚洲电影一区二区| 国产精品久久久久精k8 | 久久国产精品色婷婷| 亚洲欧美日韩国产中文在线| 久久久国际精品| 欧美一区二区三区男人的天堂| 91伊人久久大香线蕉| 国产精品亚洲一区二区三区妖精| 同产精品九九九| 依依成人综合视频| 亚洲图片你懂的| 国产视频911| 久久中文字幕电影| 日韩欧美国产一区二区在线播放| 色婷婷av一区| 成人不卡免费av| 国产传媒一区在线| 久久不见久久见中文字幕免费| 亚洲国产三级在线| 亚洲一区二区欧美日韩| 国产精品久久久久aaaa樱花 | 国产精品家庭影院| 国产日韩成人精品| 国产香蕉久久精品综合网| 在线综合亚洲欧美在线视频| 欧美日产在线观看| 欧美日本一道本| 国产精品免费看片| 国产日韩欧美a| 久久久国产精品不卡| 精品国产一区二区三区av性色| 91精品国产手机| 欧美一区二区在线免费播放 | 精品国产自在久精品国产| 日韩天堂在线观看| 欧美tk—视频vk| 欧美tickling网站挠脚心| 日韩精品综合一本久道在线视频| 欧美一区二区三区小说| 日韩欧美国产高清| 2019国产精品| 国产精品五月天| 亚洲少妇最新在线视频| 亚洲美女电影在线| 亚洲国产成人精品视频| 亚洲图片有声小说| 蜜桃视频在线观看一区| 久久成人精品无人区| 国产福利一区在线| 菠萝蜜视频在线观看一区| 91黄视频在线| 欧美一区二区三区啪啪| 精品国产免费一区二区三区四区 | 日韩一区二区免费高清| 久久美女高清视频| 亚洲欧美日韩在线播放| 亚洲成av人片一区二区| 色综合激情久久| 欧美日韩国产中文| 日韩精品中午字幕| 亚洲国产精品二十页| 一区二区三区加勒比av| 日韩精品免费视频人成| 国产在线国偷精品免费看| 国产精品综合一区二区| 91久久精品一区二区三| 欧美电视剧在线看免费| 综合欧美一区二区三区| 男男视频亚洲欧美| av成人老司机| 91精品国产高清一区二区三区| 久久久不卡影院| 婷婷成人综合网| 丁香婷婷综合激情五月色| 欧美系列亚洲系列| 久久久精品中文字幕麻豆发布| 亚洲久本草在线中文字幕| 久久精工是国产品牌吗| 99久久99久久免费精品蜜臀| 日韩欧美一级二级三级久久久| 一色屋精品亚洲香蕉网站| 青青草精品视频| 色菇凉天天综合网| 国产亚洲欧美在线| 日韩影院免费视频| 色综合一个色综合亚洲| 国产午夜亚洲精品午夜鲁丝片 | 色婷婷激情综合| 国产欧美一区二区三区在线看蜜臀 | 性做久久久久久| 不卡高清视频专区| 欧美v亚洲v综合ⅴ国产v| 亚洲一区二区偷拍精品| 顶级嫩模精品视频在线看| 日韩精品一区二区在线观看| 亚洲另类在线制服丝袜| 成人免费三级在线| 久久精品欧美一区二区三区麻豆| 天堂va蜜桃一区二区三区| 色综合色综合色综合| 国产精品免费人成网站| 国产精品一区二区无线| 欧美电视剧在线观看完整版| 亚洲成a人片综合在线| 91蜜桃免费观看视频| 中文字幕第一区二区| 色婷婷综合激情| 国产精品美女久久久久av爽李琼 | 国产精品免费免费| 国产精品1区二区.| 欧美成人video| 奇米四色…亚洲| 欧美一区二区久久| 日日夜夜免费精品| 欧美日韩高清在线播放| 亚洲综合久久av| 在线观看免费成人| 夜夜精品浪潮av一区二区三区| 成人高清免费在线播放| 国产精品网站一区| 99久久精品国产毛片| 亚洲天堂中文字幕| 成人精品视频一区| 自拍偷在线精品自拍偷无码专区| 99综合电影在线视频| 中文字幕亚洲电影| 99久久婷婷国产综合精品 | 亚洲宅男天堂在线观看无病毒| 99国产精品国产精品久久| 国产精品国产馆在线真实露脸| 成人黄色777网| 欧美性色综合网| 亚洲成av人片在线观看| 51精品视频一区二区三区| 美国精品在线观看| 久久久久久一二三区| 成人黄色在线视频| 亚洲一区在线播放| 7878成人国产在线观看| 精品一区二区三区免费播放| 日本一区二区三区国色天香| 91原创在线视频| 亚洲电影视频在线| 欧美xxxxxxxxx| 波多野结衣视频一区| 亚洲综合另类小说| 精品理论电影在线| 北岛玲一区二区三区四区| 一区二区三区蜜桃| 欧美一区二区久久久| 国产jizzjizz一区二区| 亚洲欧美激情视频在线观看一区二区三区 | 国产欧美日韩一区二区三区在线观看| 成人动漫视频在线| 日韩黄色片在线观看| 国产欧美视频在线观看| 欧美综合天天夜夜久久| 另类调教123区| 自拍偷自拍亚洲精品播放|