找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1231|回复: 15

[研讨] 制作幻灯片MSLIDE

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-6-16 21:42:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. ;;制作幻灯片MSLIDE
  2. ;;我的对话框一般相当简单,有一次加入幻灯片,结果费了九条牛和两只虎的气力,在大家的帮助下才完成。
  3. ;;用度娘和本论坛搜索,lisp版的管理幻灯片管理当属虾版和晨雨的了,但没有幻灯片的制作。
  4. ;;下面用highflybird大师的选择集最小包围盒,然后用marting的方法缩放窗口,制作幻灯片,初步到达效果,但
  5. ;;还存在如下问题,希望有好心人能解决
  6. ;;1 对话框上image控件的x y之比例,显然同窗口比例不同
  7. ;;2 最小包围盒边界上的东西会丢失
  8. (defun C:sld (/ DH DW H PTS SIZE SS V W)
  9.   (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  10.   (or *DOC* (setq *DOC* (vla-get-activedocument)))
  11.   (if (ssget)
  12.     (progn
  13.       (setq ss (vla-get-ActiveSelectionSet *DOC*))
  14.       (setq pts (SC:SSBox1 ss))
  15.       (setq v (apply 'mapcar (cons '- pts)))
  16.       (setq w 400);(getvar "screensize")一致
  17.       (setq s (/ (cadr v) (car v)))
  18.       (princ"\n 图像框长宽比最好接近")
  19.       (princ s)
  20.       (setq h (* S w))
  21.       (setq SIZE (getvar "SCREENSIZE"))
  22.       (setq dw (- (vla-get-width *DOC*) (car SIZE)))
  23.       (setq dh (- (vla-get-Height *DOC*) (cadr SIZE)))
  24.       (vla-put-width *DOC* (+ dw w))
  25.       (vla-put-height *DOC* (+ dh h))
  26.       (vla-Update *ACAD*)
  27.       ;;pts可能在屏幕之外
  28.       (vla-ZoomAll *ACAD*)
  29.       (getpoint "\n 在屏中点取一下");这里好像有问题,但不知???
  30.       (apply 'vla-zoomwindow
  31.              (cons *ACAD* (mapcar 'vlax-3d-point pts))
  32.       )
  33.       ;;(command "cecolor" "")
  34.       (command "._MSLIDE" "E:\\111.sld")
  35.     )
  36.   )
  37.   (princ)
  38. )

  39. ;;test是测试文件
  40. (defun C:test (/ DCLID FN FNAME RETURN#)
  41.   (setq fname (vl-filename-mktemp nil nil ".dcl"))
  42.   (setq fn (open fname "w"))
  43.   (write-line "ppp : dialog {" fn)
  44.   (write-line "  key = \"Title\";" fn)
  45.   (write-line "  label = \"\";" fn)
  46.   (write-line "  spacer;" fn)
  47.   (write-line "  " fn)
  48.   (write-line "    : image {" fn)
  49.   (write-line "      alignment = centered;" fn)
  50.   (write-line "      key = \"Image\";" fn)
  51.   (write-line "      width = 20;//101" fn)
  52.   (write-line "      height = 20;//43" fn)
  53.   (write-line "      fixed_width = true;" fn)
  54.   (write-line "      fixed_height = true;" fn)
  55.   (write-line "      aspect_ratio = 1;" fn)
  56.   (write-line "      color = -2;" fn)
  57.   (write-line "    }" fn)
  58.   (write-line "  " fn)
  59.   (write-line "  : ok_button {is_cancel = true;}" fn)
  60.   (write-line "}" fn)
  61.   (close fn)

  62.   (setq dclid (load_dialog fname))

  63.   (new_dialog "ppp" dclid)
  64.   (MJ:loadsld "Image" (findfile "111.sld"))
  65.   (action_tile "accept" "(done_dialog 1)")
  66.   (setq return# (start_dialog))

  67.   (unload_dialog dclid)
  68.   (vl-file-delete fname)
  69.   (princ)
  70. )

  71. ;;140 [功能] 加载幻灯片(见183.5)
  72. ;;(MJ:loadsld "Key1" (findfile "HHZQ.sld"))
  73. (defun MJ:loadsld (key sld / x y)
  74.   (setq        x (dimx_tile key)
  75.         y (dimy_tile key)
  76.   )
  77.   (start_image key)
  78.   (fill_image 0 0 x y -2)
  79.   (slide_image 0 0 x y sld)
  80.   (end_image)
  81. )

  82. ;;highflybird选择集包围盒
  83. (defun SC:SSBox1 (ss / ISUCS MAXPT MAXPTS MINPT MINPTS U2W W2U)
  84.   (setq IsUCS (zerop (getvar "WORLDUCS")))                                                  ;nil世界
  85.   (cond (IsUCS (setq w2u (MAT:w2u)) (setq u2w (MAT:u2w))))
  86.   (vlax-for obj        ss
  87.     (and IsUCS (vla-TransformBy obj (vlax-tmatrix w2u)))
  88.     (vla-GetBoundingBox obj 'MinPt 'MaxPt)
  89.     (setq MinPt (vlax-safearray->list MinPt))
  90.     (setq MaxPt (vlax-safearray->list MaxPt))
  91.     (setq MinPts (cons MinPt MinPts))
  92.     (setq MaxPts (cons MaxPt MaxPts))
  93.     (and IsUCS (vla-TransformBy obj (vlax-tmatrix u2w)))
  94.   )
  95.   (list
  96.     (apply 'mapcar (cons 'min minpts))
  97.     (apply 'mapcar (cons 'max MaxPts))
  98.   )
  99. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-16 22:01:57 | 显示全部楼层
比例不同,你可以通过建立对应比例的视窗,在里面ZOOM E后,在适当缩小一点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2017-6-16 22:19:02 | 显示全部楼层

不行呀,比如窗口长高是2:1,image控件x y之比也是2:1,显示出来也是没有填满的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-16 23:10:06 | 显示全部楼层

ZOOM E下,至少有一个方向是填满的吧

点评

是呀,关键是另一方向如何填满?  发表于 2017-6-17 09:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2017-6-17 00:20:39 | 显示全部楼层
谢谢分享。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2017-6-17 12:28:03 | 显示全部楼层

这段文字好像是在说DCL的image长宽的问题,但不明白为什么下面是6和13
; GetPT [Get integer Points] - Utility for vector_line.
; Returns: Positive X and Y integer points to cut and paste into a list for
; vector_line or as X and Y integer points for vector_image.
; Note: This function is used to create vector images. The origin point 0,0 in
; an image tile is in the upper left corner. The height and width in the DCL
; file determine the values of the dimx_tile and dimy_tile in the AutoLISP file.
; The values of the dimx_tile and dimy_tile are one greater than the drawing
; limits of the image tile pixels. To create a 100 x 100 pixel image, draw a
; rectangle from 0,0 to 99,-99. Copy and scale the entities you want to include
; in your image into the limits of the outlined rectangle.
; Based upon a 100 dimx_tile x 100 dimy_tile image tile you may calculate:
;   DCL width  = (+ (* (1- 100)(/ 1 6.0)) 0.09) = 16.59
;   DCL height = (+ (* (1- 100)(/ 1 13.0)) 0.048) =  7.66
; As a guide while picking points, set the snap to 1.
; Below is the dialog width and height values for the following:
;   For a 10 x 10 pixel image:   width = 1.59, height = 0.74
;   For a 25 x 25 pixel image:   width = 4.09, height = 1.89
;   For a 32 x 32 pixel image:   width = 5.26, height = 2.43
;   For a 50 x 50 pixel image:   width = 8.26, height = 3.82
;   For a 100 x 100 pixel image: width = 16.59, height = 7.66
;   For a 200 x 200 pixel image: width = 33.26. height = 15.36
;   For a 400 x 400 pixel image: width = 66.59, height = 30.74
;   For a 500 x 500 pixel image: width = 83.26, height = 38.43
; These values are based an a 1024 x 768 screen area and may vary according
; to individual screen resolutions.

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-6-17 12:56:30 | 显示全部楼层

你另外一个方向也填满,如果你的窗口的比例和 对象包围盒的比例 不 近似的话,那你的图还不变形了啊
黄总,不能做个窗口的比例近似你的 对象长宽比例的吗?

点评

本程序就是保证窗口和包围盒比例一致的。  发表于 2017-6-17 13:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2017-6-17 14:21:14 | 显示全部楼层
晓东的高手哪里去了?忍心看我在这儿瞎忙碌?
我猜想,image上x y 一比一时显示是方的,那么就要使用变量screensize了,如果真是这样,上面问题就完美解决了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-6-17 14:40:06 | 显示全部楼层

黄总,你制作前的对象的样子是什么, 制作后显示到对话框里面的又是什么样子的,能截取两个图贴上来吗?

点评

没什么,只是填不满而已。想求得image的x/Y 和包围盒长高比关系  发表于 2017-6-17 14:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2017-6-17 15:03:52 | 显示全部楼层
现在终于清楚了,上面的程序本来就是很完整的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 55个

财富等级: 招财进宝

发表于 2019-2-19 17:10:31 | 显示全部楼层
123.png
超级难看,就是没找到好的制作软件
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 934个

财富等级: 财运亨通

发表于 2020-6-2 08:46:39 | 显示全部楼层
还有一种思路:根据界面和幻灯片的内容,先确定尺寸,CAD中在对象外画对应尺寸的框,然后把绘图窗口设置为对应的尺寸,再ZOOM,选择对象“框”,最后MSLIDE就可以了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 675个

财富等级: 财运亨通

发表于 2020-8-7 16:12:40 | 显示全部楼层
好方法,非常不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-3-29 16:00 , Processed in 0.630347 second(s), 68 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表