using  Autodesk. AutoCAD. EditorInput ; 
using  Autodesk. AutoCAD. Geometry ; 
using  System ; 
using  System. Collections. Generic ; 
using  System. Linq ; 
using  System. Text ; 
using  System. Threading. Tasks ; 
namespace  _04用户交互
{ 
    public  static  partial  class  PromptTool 
    { 
        
        
        
        
        
        
        public  static  PromptPointResult  GetPoint2 ( this  Editor  ed,  string ) 
        { 
            
            PromptPointOptions  ppo =  new  PromptPointOptions ( promptStr) ; 
            
            ppo. AllowNone =  true ; 
            return   ed. GetPoint ( ppo) ; 
        } 
        
        
        
        
        
        
        
        
        public  static  PromptPointResult  GetPoint ( this  Editor  ed,  string ,  Point3d  pointBase,  params  string [ ] ) 
        { 
            
            PromptPointOptions  ppo =  new  PromptPointOptions ( promptStr) ; 
            
            ppo. AllowNone =  true ; 
            
            for  ( int =  0 ;  i <  keyWord. Length;  i++ ) 
            { 
                ppo. Keywords. Add ( keyWord[ i] ) ; 
            } 
            
            ppo. AppendKeywordsToMessage =  false ; 
            
            ppo. BasePoint =  pointBase; 
            ppo. UseBasePoint =  true ; 
            ppo. UseDashedLine =  false ; 
            return  ed. GetPoint ( ppo) ; 
        } 
    } 
} 
 [ CommandMethod ( "PromptDemo" ) ] 
 public  void PromptDemo ( ) 
 { 
     Database  db =  HostApplicationServices. WorkingDatabase; 
     Editor  ed =  Application. DocumentManager. MdiActiveDocument. Editor; 
     
     
     
     
     
     
     
     
     
     
     
     Point3d  p1 =  new  Point3d ( 0 ,  0 ,  0 ) ; 
     Point3d  p2 =  new  Point3d ( ) ; 
     PromptPointOptions  ppo =  new  PromptPointOptions ( "请指定第一个点:" ) ; 
     ppo. AllowNone =  true ; 
     PromptPointResult  ppr =  GetPoint ( ppo) ; 
     
     if  ( ppr. Status ==  PromptStatus. Cancel)  return ; 
    
     if  ( ppr. Status ==  PromptStatus. OK)  p1 =  ppr. Value; 
     ppo. Message =  "请指定第二个点" ; 
     ppo. BasePoint =  p1; 
     ppo. UseBasePoint =  true ; 
     ppr =  GetPoint ( ppo) ; 
     if  ( ppr. Status ==  PromptStatus. Cancel)  return ; 
     if  ( ppr. Status ==  PromptStatus. None)  return ; 
     if  ( ppr. Status ==  PromptStatus. OK)  p2 =  ppr. Value; 
     db. AddLineToModelSpace ( p1,  p2) ; 
 } 
 private  PromptPointResult  GetPoint ( PromptPointOptions  ppo) 
 { 
     
     ppo. AllowNone =  true ; 
     Editor  ed =  Application. DocumentManager. MdiActiveDocument. Editor; 
     return  ed. GetPoint ( ppo) ; 
 } 
using  Autodesk. AutoCAD. DatabaseServices ; 
using  Autodesk. AutoCAD. EditorInput ; 
using  Autodesk. AutoCAD. Geometry ; 
using  System ; 
using  System. Collections. Generic ; 
using  System. Linq ; 
using  System. Text ; 
using  System. Threading. Tasks ; 
namespace  _04用户交互
{ 
    public   class  LineJig : EntityJig { 
        private  Point3d  jStartPoint;  
        private  Point3d  jEndPoint;  
        private  string ;  
        private  string [ ] ;  
        
        
        
        
        
        
        public  LineJig ( Point3d  startPoint,  string ,  string [ ] ) 
            :  base ( new  Line ( ) ) 
        { 
            jStartPoint =  startPoint; 
            ( ( Line) Entity) . StartPoint =  jStartPoint; 
            jPromtStr =  promtStr; 
            jKeywords =  keywords; 
        } 
        protected  override  bool Update ( ) 
        { 
            ( ( Line) Entity) . EndPoint =  jEndPoint; 
            return  true ; 
        } 
        protected  override  SamplerStatus  Sampler ( JigPrompts  prompts) 
        { 
            
            JigPromptPointOptions  jppo =  new  JigPromptPointOptions ( jPromtStr) ; 
            
            for  ( int =  0 ;  i <  jKeywords. Length;  i++ ) 
			{ 
                jppo. Keywords. Add ( jKeywords[ i] ) ; 
			} 
            char =  ( char ) 32 ; 
            jppo. Keywords. Add ( space. ToString ( ) ) ; 
            
            jppo. UserInputControls =  UserInputControls. Accept3dCoordinates; 
            
            jppo. AppendKeywordsToMessage =  false ; 
            PromptPointResult  pr =  prompts. AcquirePoint ( jppo) ; 
            jEndPoint =  pr. Value; 
            return  SamplerStatus. NoChange; 
        } 
        
        
        
        
        public  Entity  GetEntity ( ) 
        { 
            return  Entity; 
        } 
    } 
} 
[ CommandMethod ( "FangLine" ) ] 
public  void FangLine ( ) 
{ 
    Database  db =  HostApplicationServices. WorkingDatabase; 
    Editor  ed =  Application. DocumentManager. MdiActiveDocument. Editor; 
    
    List< ObjectId>   lineList =  new  List< ObjectId>  ( ) ; 
    
    Point3d  pointStart =  new  Point3d ( 100 ,  100 ,  0 ) ; 
    Point3d  pointPre =  new  Point3d ( 100 ,  100 ,  0 ) ; 
    PromptPointResult  ppr =  ed. GetPoint2 ( "\n 指定第一个点:" ) ; 
    if  ( ppr. Status ==  PromptStatus. Cancel)  return ; 
    if  ( ppr. Status ==  PromptStatus. None)  pointPre =  pointStart; 
    if  ( ppr. Status ==  PromptStatus. OK)  
    { 
        pointStart =  ppr. Value; 
        pointPre =  pointStart; 
    } 
    
    bool =  true ; 
    while  ( isC) 
    { 
        if  ( lineList. Count >  1 ) 
        { 
             ppr =  ed. GetPoint ( "\n 指定下一点或 [闭合(C)/放弃(U)]:" ,  pointPre,  new  string [ ] {  "C" , "U"  } ) ; 
        } 
        else 
        { 
            ppr =  ed. GetPoint ( "\n 指定下一点或 [放弃(U)]" ,  pointPre,  new  string [ ] {  "U"  } ) ; 
        } 
        
        Point3d  pointNext; 
        if  ( ppr. Status ==  PromptStatus. Cancel)  return ; 
        if  ( ppr. Status ==  PromptStatus. None)  return ; 
        if  ( ppr. Status ==  PromptStatus. OK) 
        { 
            pointNext =  ppr. Value; 
            lineList. Add ( db. AddLineToModelSpace ( pointPre,  pointNext) ) ; 
            pointPre =  pointNext; 
        } 
        if  ( ppr. Status ==  PromptStatus. Keyword) 
        { 
            switch  ( ppr. StringResult) 
            { 
                case  "U" : 
                    if  ( lineList. Count ==  0 ) 
                    { 
                         pointStart =  new  Point3d ( 100 ,  100 ,  0 ) ; 
                         pointPre =  new  Point3d ( 100 ,  100 ,  0 ) ; 
                         ppr =  ed. GetPoint2 ( "\n 指定第一个点:" ) ; 
                         if  ( ppr. Status ==  PromptStatus. Cancel)  return ; 
                         if  ( ppr. Status ==  PromptStatus. None)  pointPre =  pointStart; 
                         if  ( ppr. Status ==  PromptStatus. OK) 
                         { 
                             pointStart =  ppr. Value; 
                             pointPre =  pointStart; 
                         } 
                    } 
                    else  if  ( lineList. Count >  0 ) 
                    { 
                        int =  lineList. Count; 
                        ObjectId  lId =  lineList. ElementAt ( count- 1 ) ; 
                        pointPre =  this . GetLineStartPoint ( lId) ; 
                        lineList. RemoveAt ( count- 1 ) ; 
                        lId. EraseEntity ( ) ; 
                    } 
                    break ; 
                case  "C" : 
                   lineList. Add (  db. AddLineToModelSpace ( pointPre,  pointStart) ) ; 
                   isC =  false ; 
                   break ; 
            } 
        } 
    } 
    
} 
[ CommandMethod ( "FangLine2" ) ] 
public  void FangLine2 ( ) 
{ 
    Database  db =  HostApplicationServices. WorkingDatabase; 
    Editor  ed =  Application. DocumentManager. MdiActiveDocument. Editor; 
    
    List< ObjectId>   lineList =  new  List< ObjectId>  ( ) ; 
    
    Point3d  pointStart =  new  Point3d ( 100 ,  100 ,  0 ) ; 
    Point3d  pointPre =  new  Point3d ( 100 ,  100 ,  0 ) ; 
    PromptPointResult  ppr =  ed. GetPoint2 ( "\n 指定第一个点:" ) ; 
    if  ( ppr. Status ==  PromptStatus. Cancel)  return ; 
    if  ( ppr. Status ==  PromptStatus. None)  pointPre =  pointStart; 
    if  ( ppr. Status ==  PromptStatus. OK) 
    { 
        pointStart =  ppr. Value; 
        pointPre =  pointStart; 
    } 
    LineJig  lineJig; 
    PromptResult  pr; 
    
    bool =  true ; 
    while  ( isC) 
    { 
        if  ( lineList. Count >  1 ) 
        { 
           
            lineJig =  new  LineJig ( pointPre,  "\n 指定下一点或 [闭合(C)/放弃(U)]:" ,  new  string [ ] {  "C" ,  "U"  } ) ; 
            pr =  ed. Drag ( lineJig) ; 
        } 
        else 
        { 
           
            lineJig =  new  LineJig ( pointPre,  "\n 指定下一点或 [放弃(U)]" ,  new  string [ ] {  "U"  } ) ; 
            pr =  ed. Drag ( lineJig) ; 
        } 
        if  ( pr. Status ==  PromptStatus. Cancel)  return ; 
        if  ( pr. Status ==  PromptStatus. None)  return ; 
        if  ( pr. Status ==  PromptStatus. OK) 
        { 
            Line  line =  ( Line) lineJig. GetEntity ( ) ; 
            pointPre =  line. EndPoint; 
            lineList. Add ( db. AddEnityToModelSpace ( line) ) ; 
        } 
        if  ( pr. Status ==  PromptStatus. Keyword) 
        { 
            switch  ( pr. StringResult) 
            { 
                case  "U" : 
                    if  ( lineList. Count ==  0 ) 
                    { 
                        pointStart =  new  Point3d ( 100 ,  100 ,  0 ) ; 
                        pointPre =  new  Point3d ( 100 ,  100 ,  0 ) ; 
                        ppr =  ed. GetPoint2 ( "\n 指定第一个点:" ) ; 
                        if  ( ppr. Status ==  PromptStatus. Cancel)  return ; 
                        if  ( ppr. Status ==  PromptStatus. None)  pointPre =  pointStart; 
                        if  ( ppr. Status ==  PromptStatus. OK) 
                        { 
                            pointStart =  ppr. Value; 
                            pointPre =  pointStart; 
                        } 
                    } 
                    else  if  ( lineList. Count >  0 ) 
                    { 
                        int =  lineList. Count; 
                        ObjectId  lId =  lineList. ElementAt ( count -  1 ) ; 
                        pointPre =  this . GetLineStartPoint ( lId) ; 
                        lineList. RemoveAt ( count -  1 ) ; 
                        lId. EraseEntity ( ) ; 
                    } 
                    break ; 
                case  "C" : 
                    lineList. Add ( db. AddLineToModelSpace ( pointPre,  pointStart) ) ; 
                    isC =  false ; 
                    break ; 
                case   " " : 
                    isC =  false ; 
                    break ; 
            } 
        } 
    } 
} 
 
 
 
 
 
 private  Point3d  GetLineStartPoint ( ObjectId  lineId) 
 { 
     Point3d  startPoint; 
     Database  db =  HostApplicationServices. WorkingDatabase; 
     using  ( Transaction  trans =  db. TransactionManager. StartTransaction ( ) ) 
     { 
         Line  line =  ( Line) lineId. GetObject ( OpenMode. ForRead) ; 
         startPoint =  line. StartPoint; 
     } 
     return  startPoint; 
 } 
using  Autodesk. AutoCAD. DatabaseServices ; 
using  Autodesk. AutoCAD. EditorInput ; 
using  Autodesk. AutoCAD. Geometry ; 
using  System ; 
using  System. Collections. Generic ; 
using  System. Linq ; 
using  System. Text ; 
using  System. Threading. Tasks ; 
using  AcDotNetTool ; 
namespace  _04用户交互
{ 
    public   class  CircleJig : EntityJig { 
        
        private  double ; 
        public  CircleJig ( Point3d  center) 
            :  base ( new  Circle ( ) ) 
        { 
            ( ( Circle) Entity) . Center =  center; 
        } 
        
        protected  override  bool Update ( ) 
        { 
            
            if  ( jRadius >  0 ) 
            { 
                ( ( Circle) Entity) . Radius =  jRadius; 
            } 
            
            return  true ; 
        } 
        
        protected  override  SamplerStatus  Sampler ( JigPrompts  prompts) 
        { 
            
            JigPromptPointOptions  jppo =  new  JigPromptPointOptions ( "\n 请指定园上的一个点" ) ; 
            char =  ( char ) 32 ;  
            jppo. Keywords. Add ( "U" ) ; 
            jppo. Keywords. Add ( space. ToString ( ) ) ; 
            jppo. UserInputControls =  UserInputControls. Accept3dCoordinates; 
            jppo. Cursor =  CursorType. RubberBand; 
            jppo. BasePoint =  ( ( Circle) Entity) . Center; 
            jppo. UseBasePoint =  true ; 
            
            
            PromptPointResult  ppr =   prompts. AcquirePoint ( jppo) ; 
            jRadius =  ppr. Value. GetDistanceBetweenTwoPoint ( ( ( Circle) Entity) . Center) ; 
            return  SamplerStatus. NoChange; 
            
        } 
        public  Entity  GetEntity ( ) 
        { 
            return  Entity; 
        } 
    } 
} 
[ CommandMethod ( "CircleDemo" ) ] 
public  void CircleDemo ( ) 
{ 
    Database  db =  HostApplicationServices. WorkingDatabase; 
    Editor  ed =  Application. DocumentManager. MdiActiveDocument. Editor; 
    Point3d  center =  new  Point3d ( ) ; 
    
    PromptPointResult  ppr =  ed. GetPoint ( "\n 请制定圆心:" ) ; 
    if  ( ppr. Status ==  PromptStatus. OK) 
    { 
        center =  ppr. Value; 
    } 
    #region  
    
    
    
    
    
    
    
    
    
    #endregion  
    CircleJig  jCircle =  new  CircleJig ( center) ; 
    
    
    
    
    
    
    PromptResult  pr =  ed. Drag ( jCircle) ; 
    if  ( pr. Status ==  PromptStatus. OK) 
    { 
        db. AddEnityToModelSpace (  jCircle. GetEntity ( ) ) ; 
    } 
}