;;;图块基点修改 ,但图块实际位置保持不变

;;;明经通道 编制 By Gu_xl 2011年7月

(defun c:CBB () (c:BlockBase))

(defun c:BlockBase (/ loop base)

(while (and

(setq en (car (entsel "\n 选择一个图块:" )))

(= "INSERT" (cdr (assoc 0 (entget en))))

)

(setq base (cdr (assoc 10 (entget en))))

(sssetfirst nil (ssadd en))

(setq pt (getpoint base "\n 图块新基点"))

(if pt (gxl-BlockBaseEdit en pt))

;(sssetfirst)

)

)

(defun gxl-BlockBaseEdit (InsertEName      newInsPt1

/         BlockToInsertXform

InsertToBlockXform

BlockToInsertSetup

VectorCrossProduct

3DTransformAB    3DTransformBA

blks        LOOP

sel        BlockName

blkdef        oldInsPt1

oldInsPt2        newInsPt2

ss        idx

XformSpec atts att *ACDOCUMENT*

)

(setq *ACDOCUMENT* (vla-get-ActiveDocument (vlax-get-acad-object)))

;;;子程序

(defun BlockToInsertXform (P1 TransformSpec)

(3dTransformAB

(nth 0 TransformSpec)

(nth 1 TransformSpec)

(nth 2 TransformSpec)

(nth 3 TransformSpec)

(nth 4 TransformSpec)

P1

) ;_ end 3dTransformAB

) ;_ end defun

(defun InsertToBlockXform (P1 TransformSpec)

(3dTransformBA

(nth 0 TransformSpec)

(nth 1 TransformSpec)

(nth 2 TransformSpec)

(nth 3 TransformSpec)

(nth 4 TransformSpec)

P1

) ;_ end 3dTransformBA

) ;_ end defun

(defun BlockToInsertSetup (InsertEname   /   InsertEList

ZAxis    NCSXAxis  InsertAngle

)

(if (= 'str (type InsertEName))

(progn

(setq InsertEName

(vlax-vla-object->ename

(vla-Item blks InsertEName)

) ;_ vlax-vla-object->ename

) ;_ setq

(list '(1 0 0)

'(0 1 0)

'(0 0 1)

(GXL-NUM-AX->LISPVALUE

(vla-get-Origin (vlax-ename->vla-object InsertEName))

) ;_ GXL-NUM-AX->LISPVALUE

'(1 1 1)

) ;_ list

) ;_ progn

(progn

(setq ZAxis   (GXL-NUM-AX->LISPVALUE (vla-get-Normal InsertEname))

InsertAngle (vla-get-Rotation InsertEname)

NCSXAxis   (trans (list (cos InsertAngle) (sin InsertAngle) 0.0)

ZAxis

0

) ;_ end trans

) ;_ end setq

(list

NCSXAxis

(VectorCrossProduct ZAxis NCSXAxis)

ZAxis

(trans

(GXL-NUM-AX->LISPVALUE (vla-get-InsertionPoint InsertEname))

ZAxis

0

) ;_ trans

(list (vla-get-XScaleFactor InsertEname)

(vla-get-YScaleFactor InsertEname)

(vla-get-ZScaleFactor InsertEname)

) ;_ end list

) ;_ end list

) ;_ progn

) ;_ if

) ;_ end defun

(defun VectorCrossProduct (InputVector1 InputVector2)

(list (- (* (cadr InputVector1) (caddr InputVector2))

(* (cadr InputVector2) (caddr InputVector1))

) ;_ end -

(- (* (caddr InputVector1) (car InputVector2))

(* (caddr InputVector2) (car InputVector1))

) ;_ end -

(- (* (car InputVector1) (cadr InputVector2))

(* (car InputVector2) (cadr InputVector1))

) ;_ end -

) ;_ end list

) ;_ end defun

(defun 3DTransformAB (XA YA ZA OA SA P1 /)

(setq P1 (mapcar '* P1 SA))

(mapcar '+

OA

(list (+ (* (car XA) (car P1))

(* (car YA) (cadr P1))

(* (car ZA) (caddr P1))

) ;_ end +

(+ (* (cadr XA) (car P1))

(* (cadr YA) (cadr P1))

(* (cadr ZA) (caddr P1))

) ;_ end +

(+ (* (caddr XA) (car P1))

(* (caddr YA) (cadr P1))

(* (caddr ZA) (caddr P1))

) ;_ end +

) ;_ end list

) ;_ end mapcar

) ;_ end defun

(defun 3DTransformBA (XA YA ZA OA SA P1 /)

(setq P1 (mapcar '- P1 OA))

(mapcar '/

(list (+ (* (car XA) (car P1))

(* (cadr XA) (cadr P1))

(* (caddr XA) (caddr P1))

) ;_ end +

(+ (* (car YA) (car P1))

(* (cadr YA) (cadr P1))

(* (caddr YA) (caddr P1))

) ;_ end +

(+ (* (car ZA) (car P1))

(* (cadr ZA) (cadr P1))

(* (caddr ZA) (caddr P1))

) ;_ end +

) ;_ end list

SA

) ;_ end mapcar

) ;_ end defun

;主程序

(setq blks (vla-get-blocks *ACDOCUMENT*))

(if (= 'str (type InsertEName))

(progn

(setq XformSpec (BlockToInsertSetup InsertEName)

BlockName InsertEName

) ;_ setq

(setq InsertEName (vla-Item blks InsertEName))

(setq

oldInsPt1 (GXL-NUM-AX->LISPVALUE (vla-get-Origin InsertEName))

) ;_ setq

) ;_ progn

(progn

(if (= 'ename (type InsertEName))

(setq InsertEName (vlax-ename->vla-object InsertEName))

)

(setq oldInsPt1 (GXL-NUM-AX->LISPVALUE

(vla-get-InsertionPoint InsertEName)

)

BlockName (vla-get-name InsertEName)

XformSpec (BlockToInsertSetup InsertEName)

) ;_ setq

) ;_ progn

) ;_ if

(setq oldInsPt2 (InsertToBlockXform oldInsPt1 XformSpec)

newInsPt2 (InsertToBlockXform newInsPt1 XformSpec)

) ;_ setq

(setq blkdef (vla-item blks BlockName))

(vlax-for obj blkdef

(vla-move obj

(vlax-3d-point newInsPt2)

(vlax-3d-point oldInsPt2)

) ;_ vla-move

) ;_ vlax-for

;;;修改块定义基点

(vlax-for blk blks

(vlax-for obj blk

(cond ((and (= "AcDbBlockReference" (vla-get-ObjectName obj))

(= (strcase BlockName) (strcase (vla-get-name obj)))

) ;_ and

(setq XformSpec (BlockToInsertSetup obj))

(setq oldInsPt1 (BlockToInsertXform oldInsPt2 XformSpec)

newInsPt1 (BlockToInsertXform newInsPt2 XformSpec)

) ;_ setq

(vla-move obj

(vlax-3d-point oldInsPt1)

(vlax-3d-point newInsPt1)

) ;_ vla-move

(if (setq atts (GXL-NUM-AX->LISPVALUE (vla-GetAttributes obj)))

(foreach att atts

(vla-move att

(vlax-3d-point newInsPt1)

(vlax-3d-point oldInsPt1)

)

)

)

)

((and (= "AcDbMInsertBlock" (vla-get-ObjectName obj))

(= (strcase BlockName) (strcase (vla-get-name obj)))

) ;_ and

(setq XformSpec (BlockToInsertSetup obj))

(setq oldInsPt1 (BlockToInsertXform oldInsPt2 XformSpec)

newInsPt1 (BlockToInsertXform newInsPt2 XformSpec)

) ;_ setq

(vla-move obj

(vlax-3d-point oldInsPt1)

(vlax-3d-point newInsPt1)

) ;_ vla-move

(if (setq atts (GXL-NUM-AX->LISPVALUE (vla-GetAttributes obj)))

(foreach att atts

(vla-move att

(vlax-3d-point newInsPt1)

(vlax-3d-point oldInsPt1)

)

)

)

)

) ;_ cond

) ;_ vlax-for

) ;_ vlax-for

(vla-regen *ACDOCUMENT* acActiveViewport)

)

(defun gxl-Num-AX->LispValue (v)

(cond ((= (type v) 'variant) (gxl-Num-AX->LispValue (vlax-variant-value v)))

((= (type v) 'safearray)

(mapcar 'gxl-Num-AX->LispValue (safearray-value  v))

)

((= (type v) 'list)

(mapcar 'gxl-Num-AX->LispValue v)

)

(T v)

)

)

lisp修改上一个图素_修改图块基点(已解决) - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...相关推荐

  1. lisp调用qleader端点_常用函数.lsp - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    本帖最后由 自贡黄明儒 于 2013-11-11 12:57 编辑 ;;各位,把你们收藏都拿出秀一秀呀,放在箱底会生霉的 ;;我的收集是在caoyin发布的通用函数基础上扩展的----自贡黄明儒 20 ...

  2. 方孔分段的lisp_常用函数.lsp - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    本帖最后由 自贡黄明儒 于 2013-11-11 12:57 编辑 ;;各位,把你们收藏都拿出秀一秀呀,放在箱底会生霉的 ;;我的收集是在caoyin发布的通用函数基础上扩展的----自贡黄明儒 20 ...

  3. 特别行政区界线lisp_CAD 系统变量参数大全 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    本帖最后由 1291500406 于 2019-1-29 20:52 编辑 CAD 系统变量参数大全 一.数学运算功能函数 1.1(十  数值 数值-)返回:累计实数或整数数值 1.2(一  数值 数 ...

  4. lisp绘制法兰,[原创] Lisp 也玩宏录制 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    fsxm发表于2009-5-6 20:13:00再将坐标精度加大一点...搞个entmake版的!平时有可能用的到-- ;此Lisp程序由nonsmall制作的宏记录器自动生成 (defun c:te ...

  5. lisp 发凹圆角_请问:如何将倒圆角的命令修改一下? - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    谢谢大家的帮助! 按xhf大虾的说法,虽然可以不擦除线,但两条直线交点靠近圆角一边的两条小线段也保留了下来:我想可不可能得到这样一个结果:圆角后剩下一条折线和一条倒过圆角的折线(曲线?),而两条线之间 ...

  6. LISP 圆孔标记_做了一个检查图框内字体和标注的插件 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    本帖最后由 WWYYBB1015 于 2019-12-16 21:04 编辑 根据大家的要求,更新一下修改标注文字引线的功能.插件会根据图框比例自动创建一个新的标注样式,例如:名称为机械标注5.找到代 ...

  7. cad偏移后自动变色lisp_高手帮忙修改,批量偏移 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    ;;用LISP实现将PL环向内或向外偏移 ;;http://www.mjtd.com/Develop/ArticleShow.asp?ArticleID=654 (defun C:TEE ( / cu ...

  8. lisp 相贯线展开_一个画两管相接相贯线的程序 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    下面的程序也可以画管子的相贯线,输入的参数D为大管直径,d为小管直径(可以等于D),B为两管的夹角,插入点为小管中心线与大管外壁的交点.该程序在R14上调试通过. (DEFUN C:XGX () (S ...

  9. lisp绘制棱锥_动态绘制示坡线 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

    本帖最后由 20060510412 于 2018-11-4 22:11 编辑 [code="lisp] ;; ;;动态示坡线   by 明经通道  QQ9034598  小蜜蜂  2013- ...

最新文章

  1. goland 调试运行路径
  2. 通过 TaskScheduler 新建windows计划
  3. fio 是测试磁盘性能的最佳工具
  4. SpringCloud教程-分布式配置中心Config (SpringCloud版本Greenwich.SR4)
  5. 2006年上海交通大学计算机研究生机试真题
  6. java查看上下文加载器_线程上下文类加载器
  7. 大数据学习——akka自定义RPC
  8. spring aopalliance 包里都有什么_【九仓樱】翻包記 05 | 是什么让我的便当包里每天都带着小企鹅?!...
  9. java userdao,Java Web 开发基础------DAO
  10. Consecutive Factors (20)
  11. ubuntu服务器上提示 To run a command as administrator (user “root“), use “sudo <command>“. See “ 解决方案
  12. java组合与继承始示例_Java 9功能与示例
  13. pythondocx更新目录_python根目录
  14. 洛谷P2257 YY的GCD(莫比乌斯反演)
  15. linux终端执行二进制文件命令,Linux下查看二进制文件命令
  16. 小米笔记本linux指纹,小米笔记本Air13.3寸指纹版(128GB) u盘装系统win10步骤
  17. 代管挂账业务,没有做代管挂账确认单是否可以暂估入账
  18. el-checkbox-group 的坑
  19. github 下载慢下载失败?不存在的!!!
  20. Docker学习资源汇总

热门文章

  1. 计算机实验基础1,大学计算机基础上机实验1
  2. lotus系统可以再linux下运行吗,IBM Lotus Notes 8.5 在 MAC 和 Linux 系统安装的新特性
  3. openssl漏洞检查修复
  4. C/C++编程学习 - 第1周 ⑦ 头文件、强制类型转换、递归
  5. c语言设计模拟闹钟主函数,基于C5单片机的数字时钟课程设计(C语言,带闹钟)要点.doc...
  6. 记录一次htonl和ntohl的使用方法和差别
  7. Consolas 字体
  8. 我的GH60 - 极客定制GK61XS : eclipse软件开发常用快捷键新增绑定 (亦适用于不使用方向键/HOME/END情况的大牛)
  9. 【Javaweb】静态资源style.css加载不出来
  10. C语言:求e的值。e≈1+1/1!+1/2!+1/3!+......,直到最后一项的值小于10的-6次方为止。