mihaibantas 发表于 2022-7-5 18:28:55

帮助更改lisp提取

大家好,我发现这个论坛的一个lisp老代码,这是非常有用的。。。从选定多段线坐标x、y、z上的特定距离提取lisp,并将其存储在中。txt文件。。。。如果有人能帮我修改lisp代码,请告诉我:我希望距离不是固定的,可以从列或特定文件中导入距离。txt。csv。xls等。。。提前感谢!
 
代码:
(defun c:xdiv(/*error*cCurve curPt dPar dPt enPt fPar fPt maxLen obType oldDis oldOsn posDir rClose sFlag stPt sumDis swMod undoLst vClose whatDo)(vl load com)(defun asmi\u GetActiveSpace(/actDoc)(if(=1(vla get ActiveSpace(setq actDoc)(vla get ActiveDocument(vlax get acad object));end vla get ActiveSpace);结束setq);结束vla get ActiveDocument);end=(vla get ModelSpace actDoc)(vla get PaperSpace actDoc));如果结束);asmi\u GetActiveSpace(defun RestorePointStyle()(if(and xdiv:oldPm xdiv:oldPs)(progn(initget“Yes No”)(setq swMod(getkword“\nRestore point style?:”)(if(null swMod)(setq swMod“No”)(if(=swMod“Yes”)(progn(princ”\n请稍候…)(setvar“PDMODE”xdiv:oldPm)(setvar“PDSIZE”xdiv:oldPs));结束程序);如果结束);结束程序);结束if(princ));恢复点样式结束(defun AddPointOrInsert(模式块比例)(vla AddPoint(asmi\u GetActiveSpace)(vlax-3d-point curPt));AddPointOrInsert(defun AddPointOrInsert(Mode Block Scale/outObj)(setq undoLst(append)(list(setq outObj(vla AddPoint(asmi\u GetActiveSpace)(vlax-3d-point curPt)))的结束;end setq curPt xdiv:curDis);结束列表);结束列表撤消);结束追加);结束setq outObj);AddPointOrInsert结束(defun*error*(msg)(如果cCurve(progn(vla Highlight cCurve:vlax false)(setvar“OSMODE”oldOsn));结束程序);结束if(princ“\n*Cancel*”)(princ));结束*错误*(if(成员(setq xdiv:oldPm(getvar“PDMODE”))'(0 1));结束成员(progn(setq xdiv:oldPs(getvar“PDSIZE”))(initget“Yes No”)(setq swMod(getkword“\n将点样式更改为良好可见?[是/否]:”)(if(null swMod)(setq swMod“Yes”)(if(=swMod“Yes”)(progn(princ“\n请稍候…)(setvar“PDMODE”35)(setvar“PDSIZE”-2));结束程序);如果结束);结束程序);结束if(setq oldOsn(getvar“OSMODE”);结束setq(if(非xdiv:curDis)(setq xdiv:curDis 1.0 xdiv:oldDis 1.0);结束setq);结束if(if(setq cCurve(entsel“\n选择曲线>”);结束setq(progn(setq cCurve(vlax ename->vla object(car cCurve));结束setq(if(member(setq obType(vla get ObjectName cCurve))“(AcDbLine”“AcDbPolyline”“AcDb3dPolyline”“acdbpline”“AcDbArc”“AcDbCircle”“acdbeliple”);结束成员(progn(vla Highlight cCurve:vlax true)(setvar“OSMODE”3071)(setq stPt(vlax curve GetStartPoint cCurve)enPt(vlax curve GetEndPoint cCurve)fPt(getpoint“\n单击曲线>处的起始标记点”);结束setq(如果fPt(setq fPt(trans fPt 1 0)curPt(vla AddPoint(asmi\u GetActiveSpace)(vlax-3d-point fPt));end vla AddPoint undoLst(列表(列表curPt 0.0 0.0));结束列表);结束setq);结束if(if(和fPt(setq fPar(vlax curve GetParamAtPoint cCurve fPt)));结束和(progn(if(and(not(等于fPt stPt 0.0001))(not(等于fPt enPt 0.0001)));结束或(progn(setq dPt(getpoint fPt“\n点击曲线点以指定标记方向>”)(如果dPt(setq dPt(trans dPt 1 0)));结束if(if(和dPt(setq dPar(vlax curve GetParamAtPoint cCurve dPt)));结束和(progn);结束程序(princ“\nEmpty input or point not at curve!”)          ); 如果结束);结束程序);如果结束);end progn(princ“\nEmpty input or point not at curve!”);如果结束);end progn(princ“\nInvalid object type!”);结束if(setq maxLen(-(vlax curve GetDistAtPoint cCurve enPt)(vlax curve GetDistAtPoint cCurve stPt));end-rClose(vlax曲线为闭合曲线);结束setq(if(等于fPt stPt 0.0001)(setq vClose T));结束if(if(或(等于fPt stPt 0.0001)(和dPar(>dPar fPar));结束和);end or(setq posDir T sumDis(vlax curve GetDistAtPoint cCurve fPt));end setq(setq sumDis(-maxLen(-maxLen(vlax curve GetDistAtPoint cCurve fPt)));结束setq);结束if(while(not sFlag)(setq whatDo(getstring(strcat“\n指定距离或[撤消/退出]:”);结束strcat);结束getstring);end setq(cond((or(='REAL(type(distof whatDo))))(=“”whatDo));结束或(如果(=“”whatDo)(setq-xdiv:curDis-xdiv:oldDis)(setq-xdiv:curDis(distof-whatDo)));结束if(setq xdiv:oldDis xdiv:curDis);end setq(cond(posDir(setq sumDis(+sumDis xdiv:curDis)curPt(vlax curve GetPointAtDist cCurve sumDis));end setq(如果curPt(AddPointOrInsert nil nil nil)(princ“\n>>>行结束>行结束>无需撤消
页: [1]
查看完整版本: 帮助更改lisp提取